[compiler-rt] 06430ac - Revert "[sanitizers] include build ids in stacks on linux."
Florian Mayer via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 10 11:52:42 PST 2021
Author: Florian Mayer
Date: 2021-12-10T11:52:26-08:00
New Revision: 06430acc00054f6d2385b631d405226c6deeb6ea
URL: https://github.com/llvm/llvm-project/commit/06430acc00054f6d2385b631d405226c6deeb6ea
DIFF: https://github.com/llvm/llvm-project/commit/06430acc00054f6d2385b631d405226c6deeb6ea.diff
LOG: Revert "[sanitizers] include build ids in stacks on linux."
This reverts commit 2a31b240df1ce1724960fd7cf98f673064b44206.
Added:
Modified:
compiler-rt/lib/sanitizer_common/sanitizer_common.cpp
compiler-rt/lib/sanitizer_common/sanitizer_common.h
compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp
compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp
compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp
compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h
compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp
compiler-rt/lib/sanitizer_common/tests/sanitizer_stacktrace_printer_test.cpp
Removed:
compiler-rt/test/hwasan/TestCases/build-ids.c
################################################################################
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<AddressRange> 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<const ElfW(Nhdr) *>(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<const char *>(nhdr) + sizeof(*nhdr);
- if (internal_memcmp(name, "GNU", 3) == 0) {
- const char *value = reinterpret_cast<const char *>(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("(<unknown module>)");
}
@@ -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 <stdlib.h>
-
-#include <sanitizer/hwasan_interface.h>
-
-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;
-}
More information about the llvm-commits
mailing list