Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

symbolize_unittest: make it a bit more portable #985

Merged
merged 1 commit into from
Dec 20, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions src/symbolize_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,7 @@ static const char *TrySymbolize(void *pc) {
# endif // __i386__
# else
# endif // __GNUC__ >= 4
# if defined(__i386__) || defined(__x86_64__)
# define TEST_X86_32_AND_64 1
# endif // defined(__i386__) || defined(__x86_64__)
# define TEST_WITH_LABEL_ADDRESSES
#endif

// Make them C linkage to avoid mangled names.
Expand Down Expand Up @@ -334,23 +332,25 @@ TEST(Symbolize, SymbolizeWithDemanglingStackConsumption) {
extern "C" {
inline void* always_inline inline_func() {
void *pc = nullptr;
#ifdef TEST_X86_32_AND_64
__asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc));
#ifdef TEST_WITH_LABEL_ADDRESSES
pc = &&curr_pc;
curr_pc:
#endif
return pc;
}

void* ATTRIBUTE_NOINLINE non_inline_func();
void* ATTRIBUTE_NOINLINE non_inline_func() {
void *pc = nullptr;
#ifdef TEST_X86_32_AND_64
__asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc));
#ifdef TEST_WITH_LABEL_ADDRESSES
pc = &&curr_pc;
curr_pc:
#endif
return pc;
}

static void ATTRIBUTE_NOINLINE TestWithPCInsideNonInlineFunction() {
#if defined(TEST_X86_32_AND_64) && defined(HAVE_ATTRIBUTE_NOINLINE)
#if defined(TEST_WITH_LABEL_ADDRESSES) && defined(HAVE_ATTRIBUTE_NOINLINE)
void *pc = non_inline_func();
const char *symbol = TrySymbolize(pc);

Expand All @@ -363,7 +363,7 @@ static void ATTRIBUTE_NOINLINE TestWithPCInsideNonInlineFunction() {
}

static void ATTRIBUTE_NOINLINE TestWithPCInsideInlineFunction() {
#if defined(TEST_X86_32_AND_64) && defined(HAVE_ALWAYS_INLINE)
#if defined(TEST_WITH_LABEL_ADDRESSES) && defined(HAVE_ALWAYS_INLINE)
void *pc = inline_func(); // Must be inlined.
const char *symbol = TrySymbolize(pc);

Expand Down