diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2014-11-04 19:34:29 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2014-11-04 19:34:29 +0000 |
commit | 398c7e4f2ccbc25ed4bd567cb07da65e0238bc01 (patch) | |
tree | 56ef145f0875ab11ffc42bc677b1025d5b9a881c /lib | |
parent | 85652664f7498c83aa0718728ad64a9304e7e869 (diff) |
[Sanitizer] Get rid of unnecessary allocations in StripModuleName. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@221287 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sanitizer_common/sanitizer_common.cc | 19 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_common.h | 5 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_coverage_libcdep.cc | 3 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc | 3 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_report.cc | 10 |
5 files changed, 15 insertions, 25 deletions
diff --git a/lib/sanitizer_common/sanitizer_common.cc b/lib/sanitizer_common/sanitizer_common.cc index cf7d314b4..1749fc15d 100644 --- a/lib/sanitizer_common/sanitizer_common.cc +++ b/lib/sanitizer_common/sanitizer_common.cc @@ -155,6 +155,14 @@ const char *StripPathPrefix(const char *filepath, return pos; } +const char *StripModuleName(const char *module) { + if (module == 0) + return 0; + if (const char *slash_pos = internal_strrchr(module, '/')) + return slash_pos + 1; + return module; +} + void PrintSourceLocation(InternalScopedString *buffer, const char *file, int line, int column) { CHECK(file); @@ -217,17 +225,6 @@ bool LoadedModule::containsAddress(uptr address) const { return false; } -char *StripModuleName(const char *module) { - if (module == 0) - return 0; - const char *short_module_name = internal_strrchr(module, '/'); - if (short_module_name) - short_module_name += 1; - else - short_module_name = module; - return internal_strdup(short_module_name); -} - static atomic_uintptr_t g_total_mmaped; void IncreaseTotalMmap(uptr size) { diff --git a/lib/sanitizer_common/sanitizer_common.h b/lib/sanitizer_common/sanitizer_common.h index cf41b5a9a..6144cb473 100644 --- a/lib/sanitizer_common/sanitizer_common.h +++ b/lib/sanitizer_common/sanitizer_common.h @@ -172,6 +172,8 @@ bool IsAccessibleMemoryRange(uptr beg, uptr size); // Error report formatting. const char *StripPathPrefix(const char *filepath, const char *strip_file_prefix); +// Strip the directories from the module name. +const char *StripModuleName(const char *module); void PrintSourceLocation(InternalScopedString *buffer, const char *file, int line, int column); void PrintModuleAndOffset(InternalScopedString *buffer, @@ -209,9 +211,6 @@ void SleepForMillis(int millis); u64 NanoTime(); int Atexit(void (*function)(void)); void SortArray(uptr *array, uptr size); -// Strip the directories from the module name, return a new string allocated -// with internal_strdup. -char *StripModuleName(const char *module); // Exit void NORETURN Abort(); diff --git a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc b/lib/sanitizer_common/sanitizer_coverage_libcdep.cc index 44010e60e..28f446ae3 100644 --- a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc +++ b/lib/sanitizer_common/sanitizer_coverage_libcdep.cc @@ -387,7 +387,7 @@ static void CovDump() { CHECK_LE(diff, 0xffffffffU); offsets.push_back(static_cast<u32>(diff)); } - char *module_name = StripModuleName(module.data()); + const char *module_name = StripModuleName(module.data()); if (cov_sandboxed) { if (cov_fd >= 0) { CovWritePacked(internal_getpid(), module_name, offsets.data(), @@ -407,7 +407,6 @@ static void CovDump() { vb - old_vb); } } - InternalFree(module_name); } } if (cov_fd >= 0) diff --git a/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc b/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc index e4ee87516..dddf2f0d5 100644 --- a/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc +++ b/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc @@ -80,7 +80,7 @@ void CovUpdateMapping(uptr caller_pc) { text.append("%d\n", sizeof(uptr) * 8); for (int i = 0; i < n_modules; ++i) { - char *module_name = StripModuleName(modules[i].full_name()); + const char *module_name = StripModuleName(modules[i].full_name()); for (unsigned j = 0; j < modules[i].n_ranges(); ++j) { if (modules[i].address_range_executable(j)) { uptr start = modules[i].address_range_start(j); @@ -91,7 +91,6 @@ void CovUpdateMapping(uptr caller_pc) { cached_mapping.SetModuleRange(start, end); } } - InternalFree(module_name); } int err; diff --git a/lib/tsan/rtl/tsan_report.cc b/lib/tsan/rtl/tsan_report.cc index d0cb0c30e..e2dbf345a 100644 --- a/lib/tsan/rtl/tsan_report.cc +++ b/lib/tsan/rtl/tsan_report.cc @@ -115,9 +115,7 @@ void PrintStack(const ReportStack *ent) { if (ent->col) Printf(":%d", ent->col); if (ent->module && ent->offset) { - char *stripped_module = StripModuleName(ent->module); - Printf(" (%s+%p)\n", stripped_module, (void*)ent->offset); - InternalFree(stripped_module); + Printf(" (%s+%p)\n", StripModuleName(ent->module), (void*)ent->offset); } else { Printf(" (%p)\n", (void*)ent->pc); } @@ -162,10 +160,8 @@ static void PrintLocation(const ReportLocation *loc) { bool print_stack = false; Printf("%s", d.Location()); if (loc->type == ReportLocationGlobal) { - char *stripped_module = StripModuleName(loc->module); - Printf(" Location is global '%s' of size %zu at %p (%s+%p)\n\n", - loc->name, loc->size, loc->addr, stripped_module, loc->offset); - InternalFree(stripped_module); + Printf(" Location is global '%s' of size %zu at %p (%s+%p)\n\n", loc->name, + loc->size, loc->addr, StripModuleName(loc->module), loc->offset); } else if (loc->type == ReportLocationHeap) { char thrbuf[kThreadBufSize]; Printf(" Location is heap block of size %zu at %p allocated by %s:\n", |