diff options
author | Fumitoshi Ukai <fumitoshi.ukai@gmail.com> | 2017-05-10 12:51:39 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-10 12:51:39 +0900 |
commit | 70f0f558131a7bc8f115562fc2a4f956292205a6 (patch) | |
tree | 4e7a89f532565ad944a69ce7c9306c6a08c1b79d | |
parent | f012836db187d5897d4adaaf621b4d53ae4865da (diff) | |
parent | a6266db97a552dd9a5df91a10b14a637a8cbfc2f (diff) | |
download | glog-70f0f558131a7bc8f115562fc2a4f956292205a6.tar.gz glog-70f0f558131a7bc8f115562fc2a4f956292205a6.tar.bz2 glog-70f0f558131a7bc8f115562fc2a4f956292205a6.zip |
Merge pull request #186 from shinh/backport
Backport internal changes
-rw-r--r-- | src/logging_unittest.cc | 2 | ||||
-rw-r--r-- | src/stacktrace_x86-inl.h | 15 | ||||
-rw-r--r-- | src/symbolize_unittest.cc | 19 | ||||
-rw-r--r-- | src/utilities.cc | 8 | ||||
-rw-r--r-- | src/utilities.h | 4 |
5 files changed, 40 insertions, 8 deletions
diff --git a/src/logging_unittest.cc b/src/logging_unittest.cc index b886222..97cbeaa 100644 --- a/src/logging_unittest.cc +++ b/src/logging_unittest.cc @@ -282,7 +282,7 @@ void TestLogging(bool check_counts) { } static void NoAllocNewHook() { - CHECK(false) << "unexpected new"; + LOG(FATAL) << "unexpected new"; } struct NewHook { diff --git a/src/stacktrace_x86-inl.h b/src/stacktrace_x86-inl.h index cfd31f7..3b8d5a8 100644 --- a/src/stacktrace_x86-inl.h +++ b/src/stacktrace_x86-inl.h @@ -93,16 +93,23 @@ static void **NextStackFrame(void **old_sp) { // If you change this function, also change GetStackFrames below. int GetStackTrace(void** result, int max_depth, int skip_count) { void **sp; -#ifdef __i386__ + +#ifdef __GNUC__ +#if __GNUC__ * 100 + __GNUC_MINOR__ >= 402 +#define USE_BUILTIN_FRAME_ADDRESS +#endif +#endif + +#ifdef USE_BUILTIN_FRAME_ADDRESS + sp = reinterpret_cast<void**>(__builtin_frame_address(0)); +#elif defined(__i386__) // Stack frame format: // sp[0] pointer to previous frame // sp[1] caller address // sp[2] first argument // ... sp = (void **)&result - 2; -#endif - -#ifdef __x86_64__ +#elif defined(__x86_64__) // __builtin_frame_address(0) can return the wrong address on gcc-4.1.0-k8 unsigned long rbp; // Move the value of the register %rbp into the local variable rbp. diff --git a/src/symbolize_unittest.cc b/src/symbolize_unittest.cc index 05cb8a1..bdd2f03 100644 --- a/src/symbolize_unittest.cc +++ b/src/symbolize_unittest.cc @@ -99,7 +99,13 @@ TEST(Symbolize, Symbolize) { // Compilers should give us pointers to them. EXPECT_STREQ("nonstatic_func", TrySymbolize((void *)(&nonstatic_func))); - EXPECT_STREQ("static_func", TrySymbolize((void *)(&static_func))); + + // The name of an internal linkage symbol is not specified; allow either a + // mangled or an unmangled name here. + const char *static_func_symbol = TrySymbolize((void *)(&static_func)); + CHECK(NULL != static_func_symbol); + EXPECT_TRUE(strcmp("static_func", static_func_symbol) == 0 || + strcmp("static_func()", static_func_symbol) == 0); EXPECT_TRUE(NULL == TrySymbolize(NULL)); } @@ -254,8 +260,13 @@ static const char *SymbolizeStackConsumption(void *pc, int *stack_consumed) { return g_symbolize_result; } +#ifdef __ppc64__ +// Symbolize stack consumption should be within 4kB. +const int kStackConsumptionUpperLimit = 4096; +#else // Symbolize stack consumption should be within 2kB. const int kStackConsumptionUpperLimit = 2048; +#endif TEST(Symbolize, SymbolizeStackConsumption) { int stack_consumed; @@ -267,9 +278,13 @@ TEST(Symbolize, SymbolizeStackConsumption) { EXPECT_GT(stack_consumed, 0); EXPECT_LT(stack_consumed, kStackConsumptionUpperLimit); + // The name of an internal linkage symbol is not specified; allow either a + // mangled or an unmangled name here. symbol = SymbolizeStackConsumption((void *)(&static_func), &stack_consumed); - EXPECT_STREQ("static_func", symbol); + CHECK(NULL != symbol); + EXPECT_TRUE(strcmp("static_func", symbol) == 0 || + strcmp("static_func()", symbol) == 0); EXPECT_GT(stack_consumed, 0); EXPECT_LT(stack_consumed, kStackConsumptionUpperLimit); } diff --git a/src/utilities.cc b/src/utilities.cc index 5c88e58..0d686eb 100644 --- a/src/utilities.cc +++ b/src/utilities.cc @@ -349,4 +349,12 @@ _END_GOOGLE_NAMESPACE_ // Make an implementation of stacktrace compiled. #ifdef STACKTRACE_H # include STACKTRACE_H +# if 0 +// For include scanners which can't handle macro expansions. +# include "stacktrace_libunwind-inl.h" +# include "stacktrace_x86-inl.h" +# include "stacktrace_x86_64-inl.h" +# include "stacktrace_powerpc-inl.h" +# include "stacktrace_generic-inl.h" +# endif #endif diff --git a/src/utilities.h b/src/utilities.h index 5f79968..101ca64 100644 --- a/src/utilities.h +++ b/src/utilities.h @@ -39,7 +39,9 @@ #elif defined(__CYGWIN__) || defined(__CYGWIN32__) # define OS_CYGWIN #elif defined(linux) || defined(__linux) || defined(__linux__) -# define OS_LINUX +# ifndef OS_LINUX +# define OS_LINUX +# endif #elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) # define OS_MACOSX #elif defined(__FreeBSD__) |