diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp index e9379b7bdc962..5fae8e33b9058 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp @@ -138,17 +138,9 @@ void LoadedModule::set(const char *module_name, uptr base_address, set(module_name, base_address); arch_ = arch; internal_memcpy(uuid_, uuid, sizeof(uuid_)); - uuid_size_ = kModuleUUIDSize; instrumented_ = instrumented; } -void LoadedModule::setUuid(const char *uuid, uptr size) { - if (size > kModuleUUIDSize) - size = kModuleUUIDSize; - internal_memcpy(uuid_, uuid, size); - uuid_size_ = size; -} - void LoadedModule::clear() { InternalFree(full_name_); base_address_ = 0; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.h b/compiler-rt/lib/sanitizer_common/sanitizer_common.h index 9ddb099a8dbc6..7269744937171 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.h @@ -770,7 +770,7 @@ inline const char *ModuleArchToString(ModuleArch arch) { return ""; } -const uptr kModuleUUIDSize = 32; +const uptr kModuleUUIDSize = 16; const uptr kMaxSegName = 16; // Represents a binary loaded into virtual memory (e.g. this can be an @@ -782,7 +782,6 @@ class LoadedModule { base_address_(0), max_executable_address_(0), arch_(kModuleArchUnknown), - uuid_size_(0), instrumented_(false) { internal_memset(uuid_, 0, kModuleUUIDSize); ranges_.clear(); @@ -790,7 +789,6 @@ class LoadedModule { void set(const char *module_name, uptr base_address); void set(const char *module_name, uptr base_address, ModuleArch arch, u8 uuid[kModuleUUIDSize], bool instrumented); - void setUuid(const char *uuid, uptr size); void clear(); void addAddressRange(uptr beg, uptr end, bool executable, bool writable, const char *name = nullptr); @@ -801,7 +799,6 @@ class LoadedModule { uptr max_executable_address() const { return max_executable_address_; } ModuleArch arch() const { return arch_; } const u8 *uuid() const { return uuid_; } - uptr uuid_size() const { return uuid_size_; } bool instrumented() const { return instrumented_; } struct AddressRange { @@ -830,7 +827,6 @@ class LoadedModule { uptr base_address_; uptr max_executable_address_; ModuleArch arch_; - uptr uuid_size_; u8 uuid_[kModuleUUIDSize]; bool instrumented_; IntrusiveList ranges_; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp index 3c15c35cf4887..7ce9e25da342d 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp @@ -603,32 +603,6 @@ static int AddModuleSegments(const char *module_name, dl_phdr_info *info, bool writable = phdr->p_flags & PF_W; cur_module.addAddressRange(cur_beg, cur_end, executable, writable); - } else if (phdr->p_type == PT_NOTE) { - uptr off = 0; - while (off < phdr->p_memsz - sizeof(ElfW(Nhdr))) { - auto *nhdr = reinterpret_cast(info->dlpi_addr + - phdr->p_vaddr + off); - constexpr auto kGnuNamesz = 4; // "GNU" with NUL-byte. - static_assert(kGnuNamesz % 4 == 0, "kGnuNameSize is aligned to 4."); - if (nhdr->n_type == NT_GNU_BUILD_ID && nhdr->n_namesz == kGnuNamesz) { - if (off + sizeof(ElfW(Nhdr)) + nhdr->n_namesz + nhdr->n_descsz > - phdr->p_memsz) { - // Something is very wrong, bail out instead of reading potentially - // arbitrary memory. - break; - } - const char *name = - reinterpret_cast(nhdr) + sizeof(*nhdr); - if (internal_memcmp(name, "GNU", 3) == 0) { - const char *value = reinterpret_cast(nhdr) + - sizeof(*nhdr) + kGnuNamesz; - cur_module.setUuid(value, nhdr->n_descsz); - break; - } - } - off += sizeof(*nhdr) + RoundUpTo(nhdr->n_namesz, 4) + - RoundUpTo(nhdr->n_descsz, 4); - } } } modules->push_back(cur_module); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp index 2d0eccc1602ab..c6356dae23c13 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp @@ -104,19 +104,6 @@ static const char *DemangleFunctionName(const char *function) { return function; } -static void MaybeBuildIdToBuffer(const AddressInfo &info, bool PrefixSpace, - InternalScopedString *buffer) { - if (info.uuid_size) { - if (PrefixSpace) - buffer->append(" "); - buffer->append("(BuildId: "); - for (uptr i = 0; i < info.uuid_size; ++i) { - buffer->append("%02x", info.uuid[i]); - } - buffer->append(")"); - } -} - static const char kDefaultFormat[] = " #%n %p %F %L"; void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, @@ -153,9 +140,6 @@ void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, case 'o': buffer->append("0x%zx", info->module_offset); break; - case 'b': - MaybeBuildIdToBuffer(*info, /*PrefixSpace=*/false, buffer); - break; case 'f': buffer->append("%s", DemangleFunctionName(StripFunctionName( info->function, strip_func_prefix))); @@ -197,8 +181,6 @@ void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, } else if (info->module) { RenderModuleLocation(buffer, info->module, info->module_offset, info->module_arch, strip_path_prefix); - - MaybeBuildIdToBuffer(*info, /*PrefixSpace=*/true, buffer); } else { buffer->append("()"); } @@ -211,7 +193,6 @@ void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, // Always strip the module name for %M. RenderModuleLocation(buffer, StripModuleName(info->module), info->module_offset, info->module_arch, ""); - MaybeBuildIdToBuffer(*info, /*PrefixSpace=*/true, buffer); } else { buffer->append("(%p)", (void *)address); } diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp index 663b45396244d..0c4b84c767aa1 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp @@ -11,11 +11,10 @@ //===----------------------------------------------------------------------===// #include "sanitizer_allocator_internal.h" -#include "sanitizer_common.h" +#include "sanitizer_platform.h" #include "sanitizer_internal_defs.h" #include "sanitizer_libc.h" #include "sanitizer_placement_new.h" -#include "sanitizer_platform.h" #include "sanitizer_symbolizer_internal.h" namespace __sanitizer { @@ -31,7 +30,6 @@ void AddressInfo::Clear() { InternalFree(file); internal_memset(this, 0, sizeof(AddressInfo)); function_offset = kUnknown; - uuid_size = 0; } void AddressInfo::FillModuleInfo(const char *mod_name, uptr mod_offset, @@ -39,16 +37,6 @@ void AddressInfo::FillModuleInfo(const char *mod_name, uptr mod_offset, module = internal_strdup(mod_name); module_offset = mod_offset; module_arch = mod_arch; - uuid_size = 0; -} - -void AddressInfo::FillModuleInfo(const LoadedModule &mod) { - module = internal_strdup(mod.full_name()); - module_offset = address - mod.base_address(); - module_arch = mod.arch(); - if (mod.uuid_size()) - internal_memcpy(uuid, mod.uuid(), mod.uuid_size()); - uuid_size = mod.uuid_size(); } SymbolizedStack::SymbolizedStack() : next(nullptr), info() {} diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h index f5ed470b198be..42bd157fa6279 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h @@ -32,8 +32,6 @@ struct AddressInfo { char *module; uptr module_offset; ModuleArch module_arch; - u8 uuid[kModuleUUIDSize]; - uptr uuid_size; static const uptr kUnknown = ~(uptr)0; char *function; @@ -47,8 +45,6 @@ struct AddressInfo { // Deletes all strings and resets all fields. void Clear(); void FillModuleInfo(const char *mod_name, uptr mod_offset, ModuleArch arch); - void FillModuleInfo(const LoadedModule &mod); - uptr module_base() const { return address - module_offset; } }; // Linked list of symbolized frames (each frame is described by AddressInfo). diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp index 03f5cfbb7eac9..3fc994fd3deb2 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp @@ -84,12 +84,15 @@ const char *ExtractTokenUpToDelimiter(const char *str, const char *delimiter, SymbolizedStack *Symbolizer::SymbolizePC(uptr addr) { Lock l(&mu_); + const char *module_name = nullptr; + uptr module_offset; + ModuleArch arch; SymbolizedStack *res = SymbolizedStack::New(addr); - auto *mod = FindModuleForAddress(addr); - if (!mod) + if (!FindModuleNameAndOffsetForAddress(addr, &module_name, &module_offset, + &arch)) return res; // Always fill data about module name and offset. - res->info.FillModuleInfo(*mod); + res->info.FillModuleInfo(module_name, module_offset, arch); for (auto &tool : tools_) { SymbolizerScope sym_scope(this); if (tool.SymbolizePC(addr, res)) { diff --git a/compiler-rt/lib/sanitizer_common/tests/sanitizer_stacktrace_printer_test.cpp b/compiler-rt/lib/sanitizer_common/tests/sanitizer_stacktrace_printer_test.cpp index ce75f8372a190..4b379ba3d5925 100644 --- a/compiler-rt/lib/sanitizer_common/tests/sanitizer_stacktrace_printer_test.cpp +++ b/compiler-rt/lib/sanitizer_common/tests/sanitizer_stacktrace_printer_test.cpp @@ -112,28 +112,6 @@ TEST(SanitizerStacktracePrinter, RenderFrame) { EXPECT_STREQ("(/path/to/module+0x200)", str.data()); str.clear(); - RenderFrame(&str, "%b", frame_no, info.address, &info, false); - EXPECT_STREQ("", str.data()); - str.clear(); - - info.uuid_size = 2; - info.uuid[0] = 0x55; - info.uuid[1] = 0x66; - - RenderFrame(&str, "%M", frame_no, info.address, &info, false); - EXPECT_NE(nullptr, internal_strstr(str.data(), "(module+0x")); - EXPECT_NE(nullptr, internal_strstr(str.data(), "200")); - EXPECT_NE(nullptr, internal_strstr(str.data(), "BuildId: 5566")); - str.clear(); - - RenderFrame(&str, "%L", frame_no, info.address, &info, false); - EXPECT_STREQ("(/path/to/module+0x200) (BuildId: 5566)", str.data()); - str.clear(); - - RenderFrame(&str, "%b", frame_no, info.address, &info, false); - EXPECT_STREQ("(BuildId: 5566)", str.data()); - str.clear(); - info.function = internal_strdup("my_function"); RenderFrame(&str, "%F", frame_no, info.address, &info, false); EXPECT_STREQ("in my_function", str.data()); diff --git a/compiler-rt/test/hwasan/TestCases/build-ids.c b/compiler-rt/test/hwasan/TestCases/build-ids.c deleted file mode 100644 index 48030435188df..0000000000000 --- a/compiler-rt/test/hwasan/TestCases/build-ids.c +++ /dev/null @@ -1,17 +0,0 @@ -// RUN: %clang_hwasan -Wl,--build-id=0xaba493998257fbdd %s -o %t -// RUN: %env_hwasan_opts=symbolize=0 not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK,NOSYM -// RUN: not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK,SYM - -#include - -#include - -int main(int argc, char **argv) { - __hwasan_enable_allocator_tagging(); - char *buf = (char *)malloc(1); - buf[32] = 'x'; - // CHECK: ERROR: HWAddressSanitizer: tag-mismatch - // NOSYM: #0 0x{{.*}} {{.*}}build-ids.c{{.*}} (BuildId: aba493998257fbdd) - // SYM: #0 0x{{.*}} in main {{.*}}build-ids.c:[[@LINE-3]]:{{[0-9]+}} - return 0; -}