http://code.google.com/p/google-glog/issues/detail?id=130 make the code work with all gcc targets --- a/src/symbolize_unittest.cc +++ b/src/symbolize_unittest.cc @@ -60,9 +60,7 @@ using namespace GOOGLE_NAMESPACE; # 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 // A wrapper function for Symbolize() to make the unit test simple. @@ -289,22 +287,24 @@ TEST(Symbolize, SymbolizeWithDemanglingStackConsumption) { extern "C" { inline void* always_inline inline_func() { register void *pc = NULL; -#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() { register void *pc = NULL; -#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 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); CHECK(symbol != NULL); @@ -314,7 +314,7 @@ void ATTRIBUTE_NOINLINE TestWithPCInsideNonInlineFunction() { } 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); CHECK(symbol != NULL);