diff options
-rw-r--r-- | lib/asan/asan_mapping.h | 24 | ||||
-rw-r--r-- | lib/asan/asan_report.cc | 7 | ||||
-rw-r--r-- | lib/asan/asan_rtl.cc | 2 |
3 files changed, 19 insertions, 14 deletions
diff --git a/lib/asan/asan_mapping.h b/lib/asan/asan_mapping.h index acbed4692..d858e5e37 100644 --- a/lib/asan/asan_mapping.h +++ b/lib/asan/asan_mapping.h @@ -57,32 +57,36 @@ // || `[0x0aaa8000, 0x0bffcfff]` || LowShadow || // || `[0x00000000, 0x0aaa7fff]` || LowMem || +static const u64 kDefaultShadowScale = 3; +static const u64 kDefaultShadowOffset32 = 1ULL << 29; +static const u64 kDefaultShadowOffset64 = 1ULL << 44; +static const u64 kDefaultShort64bitShadowOffset = 0x7FFF8000; // < 2G. +static const u64 kPPC64_ShadowOffset64 = 1ULL << 41; +static const u64 kMIPS32_ShadowOffset32 = 0x0aaa8000; + #if ASAN_FLEXIBLE_MAPPING_AND_OFFSET == 1 extern SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_scale; extern SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_offset; # define SHADOW_SCALE (__asan_mapping_scale) # define SHADOW_OFFSET (__asan_mapping_offset) #else +# define SHADOW_SCALE kDefaultShadowScale # if SANITIZER_ANDROID -# define SHADOW_SCALE (3) # define SHADOW_OFFSET (0) # else -# define SHADOW_SCALE (3) # if SANITIZER_WORDSIZE == 32 # if defined(__mips__) -# define SHADOW_OFFSET 0x0aaa8000 +# define SHADOW_OFFSET kMIPS32_ShadowOffset32 # else -# define SHADOW_OFFSET (1 << 29) +# define SHADOW_OFFSET kDefaultShadowOffset32 # endif # else # if defined(__powerpc64__) -# define SHADOW_OFFSET (1ULL << 41) +# define SHADOW_OFFSET kPPC64_ShadowOffset64 +# elif SANITIZER_MAC +# define SHADOW_OFFSET kDefaultShadowOffset64 # else -# if SANITIZER_MAC -# define SHADOW_OFFSET (1ULL << 44) -# else -# define SHADOW_OFFSET 0x7fff8000ULL -# endif +# define SHADOW_OFFSET kDefaultShort64bitShadowOffset # endif # endif # endif diff --git a/lib/asan/asan_report.cc b/lib/asan/asan_report.cc index 0706e61f2..55a9a4ef5 100644 --- a/lib/asan/asan_report.cc +++ b/lib/asan/asan_report.cc @@ -180,8 +180,9 @@ static bool IsASCII(unsigned char c) { static const char *MaybeDemangleGlobalName(const char *name) { // We can spoil names of globals with C linkage, so use an heuristic // approach to check if the name should be demangled. - return (name[0] == '_' && name[1] == 'Z') ? getSymbolizer()->Demangle(name) - : name; + return (name[0] == '_' && name[1] == 'Z' && &getSymbolizer) + ? getSymbolizer()->Demangle(name) + : name; } // Check if the global is a zero-terminated ASCII string. If so, print it. @@ -543,7 +544,7 @@ class ScopedInErrorReport { static void ReportSummary(const char *error_type, StackTrace *stack) { if (!stack->size) return; - if (getSymbolizer()->IsAvailable()) { + if (&getSymbolizer && getSymbolizer()->IsAvailable()) { AddressInfo ai; // Currently, we include the first stack frame into the report summary. // Maybe sometimes we need to choose another frame (e.g. skip memcpy/etc). diff --git a/lib/asan/asan_rtl.cc b/lib/asan/asan_rtl.cc index a77f9de6b..7094ddc4e 100644 --- a/lib/asan/asan_rtl.cc +++ b/lib/asan/asan_rtl.cc @@ -533,7 +533,7 @@ void __asan_init() { InitializeAllocator(); // Start symbolizer process if necessary. - if (common_flags()->symbolize) { + if (common_flags()->symbolize && &getSymbolizer) { getSymbolizer() ->InitializeExternal(common_flags()->external_symbolizer_path); } |