Skip to content

Commit 3dca63a

Browse files
authored
[symbolizer] Don't threat symbolizer API as optional (#76103)
There is an assumption that we dont need to to mix sanitizer with symbolizer from different LLVM revison. If so we can detect it by `__sanitizer_symbolize_code` and assume that the rest is present.
1 parent acaff70 commit 3dca63a

File tree

1 file changed

+10
-17
lines changed

1 file changed

+10
-17
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -341,15 +341,14 @@ __sanitizer_symbolize_set_inline_frames(bool InlineFrames);
341341
class InternalSymbolizer final : public SymbolizerTool {
342342
public:
343343
static InternalSymbolizer *get(LowLevelAllocator *alloc) {
344-
if (&__sanitizer_symbolize_set_demangle)
345-
CHECK(__sanitizer_symbolize_set_demangle(common_flags()->demangle));
346-
if (&__sanitizer_symbolize_set_inline_frames)
347-
CHECK(__sanitizer_symbolize_set_inline_frames(
348-
common_flags()->symbolize_inline_frames));
349-
// These are essential, we don't have InternalSymbolizer without them.
350-
if (&__sanitizer_symbolize_code && &__sanitizer_symbolize_data)
351-
return new (*alloc) InternalSymbolizer();
352-
return 0;
344+
// These one is the most used one, so we will use it to detect a presence of
345+
// internal symbolizer.
346+
if (&__sanitizer_symbolize_code == nullptr)
347+
return nullptr;
348+
CHECK(__sanitizer_symbolize_set_demangle(common_flags()->demangle));
349+
CHECK(__sanitizer_symbolize_set_inline_frames(
350+
common_flags()->symbolize_inline_frames));
351+
return new (*alloc) InternalSymbolizer();
353352
}
354353

355354
bool SymbolizePC(uptr addr, SymbolizedStack *stack) override {
@@ -371,23 +370,17 @@ class InternalSymbolizer final : public SymbolizerTool {
371370
}
372371

373372
bool SymbolizeFrame(uptr addr, FrameInfo *info) override {
374-
if (&__sanitizer_symbolize_frame == nullptr)
375-
return false;
376373
bool result = __sanitizer_symbolize_frame(info->module, info->module_offset,
377374
buffer_, sizeof(buffer_));
378375
if (result)
379376
ParseSymbolizeFrameOutput(buffer_, &info->locals);
380377
return result;
381378
}
382379

383-
void Flush() override {
384-
if (&__sanitizer_symbolize_flush)
385-
__sanitizer_symbolize_flush();
386-
}
380+
void Flush() override { __sanitizer_symbolize_flush(); }
387381

388382
const char *Demangle(const char *name) override {
389-
if (&__sanitizer_symbolize_demangle &&
390-
__sanitizer_symbolize_demangle(name, buffer_, sizeof(buffer_))) {
383+
if (__sanitizer_symbolize_demangle(name, buffer_, sizeof(buffer_))) {
391384
char *res_buff = nullptr;
392385
ExtractToken(buffer_, "", &res_buff);
393386
return res_buff;

0 commit comments

Comments
 (0)