Skip to content

Commit 4ee7cf7

Browse files
authored
[sanitizer] Change return type of __sanitizer_symbolize_demangle to bool (#65991)
To match other internal symbolizer functions. This makes harder to distighush small buffer from a different failure, but we has the same problem for the rest of the lib. Still we use 16k buffer so it should be enough most of the time. We can fix all function togerher if future, if needed.
1 parent 8c2bff1 commit 4ee7cf7

File tree

2 files changed

+12
-23
lines changed

2 files changed

+12
-23
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ __sanitizer_symbolize_data(const char *ModuleName, u64 ModuleOffset,
326326
char *Buffer, int MaxLength);
327327
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
328328
__sanitizer_symbolize_flush();
329-
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE int
329+
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE bool
330330
__sanitizer_symbolize_demangle(const char *Name, char *Buffer, int MaxLength);
331331
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE bool
332332
__sanitizer_symbolize_set_demangle(bool Demangle);
@@ -349,15 +349,15 @@ class InternalSymbolizer final : public SymbolizerTool {
349349

350350
bool SymbolizePC(uptr addr, SymbolizedStack *stack) override {
351351
bool result = __sanitizer_symbolize_code(
352-
stack->info.module, stack->info.module_offset, buffer_, kBufferSize);
352+
stack->info.module, stack->info.module_offset, buffer_, sizeof(buffer_));
353353
if (result)
354354
ParseSymbolizePCOutput(buffer_, stack);
355355
return result;
356356
}
357357

358358
bool SymbolizeData(uptr addr, DataInfo *info) override {
359359
bool result = __sanitizer_symbolize_data(info->module, info->module_offset,
360-
buffer_, kBufferSize);
360+
buffer_, sizeof(buffer_));
361361
if (result) {
362362
ParseSymbolizeDataOutput(buffer_, info);
363363
info->start += (addr - info->module_offset); // Add the base address.
@@ -371,28 +371,19 @@ class InternalSymbolizer final : public SymbolizerTool {
371371
}
372372

373373
const char *Demangle(const char *name) override {
374-
if (__sanitizer_symbolize_demangle) {
375-
for (uptr res_length = 1024;
376-
res_length <= InternalSizeClassMap::kMaxSize;) {
377-
char *res_buff = static_cast<char *>(InternalAlloc(res_length));
378-
uptr req_length =
379-
__sanitizer_symbolize_demangle(name, res_buff, res_length);
380-
if (req_length > res_length) {
381-
res_length = req_length + 1;
382-
InternalFree(res_buff);
383-
continue;
384-
}
385-
return res_buff;
386-
}
374+
if (&__sanitizer_symbolize_demangle &&
375+
__sanitizer_symbolize_demangle(name, buffer_, sizeof(buffer_))) {
376+
char *res_buff = nullptr;
377+
ExtractToken(buffer_, "", &res_buff);
378+
return res_buff;
387379
}
388-
return name;
380+
return nullptr;
389381
}
390382

391383
private:
392384
InternalSymbolizer() {}
393385

394-
static const int kBufferSize = 16 * 1024;
395-
char buffer_[kBufferSize];
386+
char buffer_[16 * 1024];
396387
};
397388
# else // SANITIZER_SUPPORTS_WEAK_HOOKS
398389

compiler-rt/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,12 @@ void __sanitizer_symbolize_flush() {
115115
Symbolizer->flush();
116116
}
117117

118-
int __sanitizer_symbolize_demangle(const char *Name, char *Buffer,
118+
bool __sanitizer_symbolize_demangle(const char *Name, char *Buffer,
119119
int MaxLength) {
120120
std::string Result =
121121
llvm::symbolize::LLVMSymbolizer::DemangleName(Name, nullptr);
122122
return __sanitizer::internal_snprintf(Buffer, MaxLength, "%s",
123-
Result.c_str()) < MaxLength
124-
? static_cast<int>(Result.size() + 1)
125-
: 0;
123+
Result.c_str()) < MaxLength;
126124
}
127125

128126
bool __sanitizer_symbolize_set_demangle(bool Value) {

0 commit comments

Comments
 (0)