summaryrefslogtreecommitdiff
path: root/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
AgeCommit message (Collapse)Author
2017-11-25Plug dlerror() leak for swift_demangleKamil Rytarowski
Summary: InitializeSwiftDemangler() attempts to resolve the swift_demangle symbol. If this is not available, we observe dlerror message leak. Caught on NetBSD/amd64 in TSan. Sponsored by <The NetBSD Foundation> Reviewers: joerg, kubamracek, vitalybuka, dvyukov, eugenis Reviewed By: dvyukov Subscribers: llvm-commits, #sanitizers Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D40382 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@318980 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-04[compiler-rt] Check for empty buffer in Addr2LineProcess::ReadFromSymbolizerAlex Shlyapnikov
This fixes a bug in the ReadFromSymbolizer method of the Addr2LineProcess class; if the input is too large, the returned buffer will be null and will consequently fail the CHECK. The proposed fix is to simply check if the buffer consists of only a null-terminator and return if so (in effect skipping that frame). I tested by running one of the unit tests both before and after my change. Submitted on behalf of david-y-lam. Reviewers: eugenis, alekseyshl, kcc Reviewed By: alekseyshl Differential Revision: https://reviews.llvm.org/D36207 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@310089 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-24Prefer atos to llvm-symbolizer on DarwinGeorge Karpenkov
atos is the default symbolizer on Apple's compiler for quite a few years now. llvm-symbolizer is quite fragile on Darwin: for example, unless a .dSYM file was explicitly generated symbolication would not work. It is also very convenient when the behavior of LLVM open source compiler matches to that of Apple's compiler on Apple's platform. Furthermore, llvm-symbolizer is not installed on Apple's platform by default, which leads to strange behavior during debugging: the test might fail under lit (where it has llvm-symbolizer) but would run properly when launched on the command line (where it does not, and atos would be used). Indeed, there's a downside: atos does not work properly with inlined functions, hence the test change. We do not think that this is a major problem, as users would often compile with -O0 when debugging, and in any case it is preferable to symbolizer not being able to symbolize. Differential Revision: https://reviews.llvm.org/D35745 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@308908 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-22[sanitizer_common] Move filesystem-related code out of sanitizer_common.ccVitaly Buka
Summary: This is a pure refactoring change. It just moves code that is related to filesystem operations from sanitizer_common.{cc,h} to sanitizer_file.{cc,h}. This makes it cleaner to disable the filesystem-related code for a new port that doesn't want it. Submitted on behalf of Roland McGrath. Reviewers: kcc, eugenis, alekseyshl Reviewed By: alekseyshl Subscribers: vitalybuka, llvm-commits, kubamracek, mgorny, phosek Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D35591 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@308819 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-20Revert "[sanitizer_common] Move filesystem-related code out of ↵Vitaly Buka
sanitizer_common.cc" Breaks Windows build. This reverts commit r308640. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@308648 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-20[sanitizer_common] Move filesystem-related code out of sanitizer_common.ccAlex Shlyapnikov
This is a pure refactoring change. It just moves code that is related to filesystem operations from sanitizer_common.{cc,h} to sanitizer_file.{cc,h}. This makes it cleaner to disable the filesystem-related code for a new port that doesn't want it. Commiting for mcgrathr. Reviewers: alekseyshl Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D35591 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@308640 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-20[Sanitizers] Move cached allocator_may_return_null flag to sanitizer_allocatorAlex Shlyapnikov
Summary: Move cached allocator_may_return_null flag to sanitizer_allocator.cc and provide API to consolidate and unify the behavior of all specific allocators. Make all sanitizers using CombinedAllocator to follow AllocatorReturnNullOrDieOnOOM() rules to behave the same way when OOM happens. When OOM happens, turn allocator_out_of_memory flag on regardless of allocator_may_return_null flag value (it used to not to be set when allocator_may_return_null == true). release_to_os_interval_ms and rss_limit_exceeded will likely be moved to sanitizer_allocator.cc too (later). Reviewers: eugenis Subscribers: srhines, kubamracek, llvm-commits Differential Revision: https://reviews.llvm.org/D34310 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@305858 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-02[compiler-rt] Fix incorrect use of snprintfVitaly Buka
Summary: snprintf returns buffer size needed for printing. If buffer was small, calling code receives incorrectly symbolized buffer and fail. Reviewers: eugenis Subscribers: kubamracek, dberris, kcc Differential Revision: https://reviews.llvm.org/D29440 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@293930 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-05[sanitizers] __sanitizer_get_module_and_offset_for_pc interface functionMike Aizatsky
Summary: The function computes full module name and coverts pc into offset. Reviewers: kcc Subscribers: kubabrecka Differential Revision: https://reviews.llvm.org/D26820 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@288711 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-05Remove a couple of memset usages from TSan, introduced in r288624.Daniel Jasper
TSan runtime shouldn't contain memset, so internal_memset is used instead and syntax that emits memset is avoided. This doesn't fail in-tree due to TSan being build with -03, but it fails when TSan is built with -O0, and is (I think) a true positive. Patch by Sam McCall, review: https://reviews.llvm.org/D27407 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@288672 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-04[sanitizer] Make atos stdin a non-tty pipe to make sure it's not stuck ↵Kuba Mracek
waiting for user input On macOS, we often symbolicate using atos (when llvm-symbolizer is not found). The current way we invoke atos involves creating a pseudo-terminal to make sure atos doesn't buffer its output. This however also makes atos think that it's stdin is interactive and in some error situations it will ask the user to enter some input instead of just printing out an error message. For example, when Developer Mode isn't enabled on a machine, atos cannot examine processes, and it will ask the user to enter an administrator's password, which will make the sanitized process get stuck. This patch only connects the pseudo-terminal to the stdout of atos, and uses a regular pipe as its stdin. Differential Revision: https://reviews.llvm.org/D27239 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@288624 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-29Don't use internal symbolizer if we are in process of reporting Out-of-Memory.Vitaly Buka
Reviewed by eugenis offline, as reviews.llvm.org is down. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@282805 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-12[sanitizer] Allow nullptr in Swift demanglerKuba Brecka
The introduction of the Swift demangler now causes an assertion failure when we try to demangle nullptr, but we used to allow that (and return nullptr back). This situation is rare, but it can still happen. Let's allow nullptr. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@269302 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-12[sanitizer] Fix a crash when demangling Swift symbols, take 2Kuba Brecka
To invoke the Swift demangler, we use dlsym to locate swift_demangle. However, dlsym malloc's storage and stores it in thread-local storage. Since allocations from the symbolizer are done with the system allocator (at least in TSan, interceptors are skipped when inside the symbolizer), we will crash when we try to deallocate later using the sanitizer allocator again. To fix this, let's just not call dlsym from the demangler, and call it during initialization. The dlsym function calls malloc, so it needs to be only used after our allocator is initialized. Adding a Symbolizer::LateInitialize call that is only invoked after all other initializations. Differential Revision: http://reviews.llvm.org/D20015 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@269291 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-06Revert r268716. This has caused test failures in MSan on Linux.Kuba Brecka
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@268723 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-06[sanitizer] Fix a crash when demangling Swift symbolsKuba Brecka
To invoke the Swift demangler, we use dlsym to locate swift_demangle. However, dlsym malloc's storage and stores it in thread-local storage. Since allocations from the symbolizer are done with the system allocator (at least in TSan, interceptors are skipped when inside the symbolizer), we will crash when we try to deallocate later using the sanitizer allocator again. To fix this, let's just not call dlsym from the demangler, and call it during initialization. Differential Revision: http://reviews.llvm.org/D19974 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@268716 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-16[sanitizers] Fixup r266494; make it build on Linux.Anna Zaks
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@266497 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-15[sanitizers] Teach the internal demangler about Swift namesAnna Zaks
Add support for Swift names when symbolicating sanitizer traces. This is now relevant since TSan and ASan support have been added to Swift on OS X. Differential Revision: http://reviews.llvm.org/D19135 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@266494 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-11[sanitizer] Restore stderr when using forkpty() to spawn external symbolizerKuba Brecka
In `AtosSymbolizer`, we're using `forkpty()` to create a new pseudo-terminal to communicate with the `atos` tool (we need that to avoid output buffering in interactive mode). This however redirects both stdout and stderr into a single stream, so when we read the output, we can't distinguish between errors and standard replies. Let's save&restore stderr to avoid that. Differential Revision: http://reviews.llvm.org/D15073 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@265923 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-26[sanitizers] extracted process management functionsMike Aizatsky
Differential Revision: http://reviews.llvm.org/D16546 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@258849 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-25Revert "[sanitizers] extracted process management functions"Mike Aizatsky
This reverts commit e5b34d5a2bf4c882bc647dd26a8cea2adc76f63c. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@258713 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-25[sanitizers] extracted process management functionsMike Aizatsky
Differential Revision: http://reviews.llvm.org/D16542 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@258710 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-25sanitizer_common: remove noisy warning about symbolizer not found.Ivan Krasin
Summary: In r251553, I added a warning that proved to be super noisy, especially in case of MSan. Removing it for now, and I will probably add some additional diagnostics for symbolizer, when I better understand how to make it properly. Reviewers: eugenis Differential Revision: http://reviews.llvm.org/D14998 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@254102 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-20[sanitizer] Implement internal_fork and internal_forkpty for OS XKuba Brecka
On Linux, we have internal_fork that forks without invoking user's pthread_atfork handlers, which is important for spawning external symbolizers. Let's implement this for OS X as well (using __fork). This patch also adds internal_forkpty which re-implements forkpty and uses __fork in it as well. Differential Revision: http://reviews.llvm.org/D14869 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@253666 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-14Reverting r253080 ([tsan] Don't demangle names not starting with "_Z").Kuba Brecka
This caused bot failures on ARM, e.g. http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15-full/builds/9068 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@253129 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-13[tsan] Don't demangle names not starting with "_Z"Kuba Brecka
I noticed that when a symbol is named just "x", it gets demangled to "long long". On POSIX, AFAIK, mangled names always start with "_Z", so lets just require that. Differential Revision: http://reviews.llvm.org/D14637 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@253080 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-28sanitizer_common: be more verbose, when symbolizer is not found.Ivan Krasin
Summary: I have othen been stuck when I got an ASAN report, but no symbols are resolved. The reasons might be different, and it always requires a bit of detective work to track down. These more verbose error messages will help the users like me. Reviewers: samsonov Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D14135 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@251553 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-14Support inline functions symbolization in Addr2Line symbolizer.Alexey Samsonov
Patch by Maxim Ostapenko! Summary: Right now, Addr2Line symbolizer in asan_symbolize.py doesn't support inline functions symbolization. This might be a useful feature for using ASan on embedded systems. Test results: $ cat test.c static inline void FooBarBaz() { __sanitizer_print_stack_trace(); } int main() { FooBarBaz(); return 0; } $ clang test.c -fsanitize=address -g -O2 -o test.x && ./test.x &> /tmp/test.log $ ./projects/compiler-rt/lib/asan/scripts/asan_symbolize.py -l /tmp/test.log #0 0x42095e in __sanitizer_print_stack_trace _asan_rtl_ #1 0x4cec07 in FooBarBaz /home/max/build/llvm/asan/test.c:4 #2 0x4cec07 in main /home/max/build/llvm/asan/test.c:8 #3 0x7f89f0891ec4 in __libc_start_main /build/buildd/eglibc-2.19/csu/libc-start.c:287 Reviewers: glider, samsonov Subscribers: jevinskie, llvm-commits, ygribov Differential Revision: http://reviews.llvm.org/D12153 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@247642 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11Include sanitizer_posix.h to try to fix the mac buildReid Kleckner
Linux must pick it up transitively. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@244645 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11[Windows] Use llvm-symbolizer before using dbghelpReid Kleckner
Summary: llvm-symbolizer understands both PDBs and DWARF, so it's a better bet if it's available. It prints out the function parameter types and column numbers, so I needed to churn the expected test output a bit. This makes most of the llvm-symbolizer subprocessing code target-independent. Pipes on all platforms use fd_t, and we can use the portable ReadFromFile / WriteToFile wrappers in symbolizer_sanitizer.cc. Only the pipe creation and process spawning is Windows-specific. Please check that the libcdep layering is still correct. I don't know how to reproduce the build configuration that relies on that. Reviewers: samsonov Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D11791 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@244616 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-23[Sanitizers] Pass the correct arch to the symbolizer for x86_64hFrederic Riss
I have no idea how to directly test that as it depends on a particular (micro-)architecure of the host processor. Combined with llvm's r240339 this should fix issues people might have be seeing intermitently on Darwin haswell machines (the symbolizer would use the wrong slice of the binary, thus potentially resolving to the wrong symbol). git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@240379 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-04[ASan] Make binary name reader cross-platform.Yury Gribov
Differential Revision: http://reviews.llvm.org/D10213 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@239020 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-21[sanitizer] Plug a memory leak in symbolization code.Sergey Matveev
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@235411 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-11[Sanitizer] Merge POSIXSymbolizer and WinSymbolizerKuba Brecka
The two subclasses of Symbolizer now only define two virtual functions, PlatformDemangle and PlatformPrepareForSandboxing. Let's make these non-virtual and directly defined by individual platforms. Reviewed at http://reviews.llvm.org/D8912 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@234690 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-11Use 'override/final' instead of 'virtual' for overridden methodsAlexander Kornienko
The patch is generated using clang-tidy misc-use-override check. This command was used: tools/clang/tools/extra/clang-tidy/tool/run-clang-tidy.py \ -checks='-*,misc-use-override' -header-filter='llvm|clang' -j=32 -fix \ -format git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@234680 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-09[Sanitizer] Get rid of PlatformGetListOfModulesKuba Brecka
Moving the implementation of several functions from sanitizer_symbolizer.cc into sanitizer_symbolizer_libcdep.cc. Reviewed at http://reviews.llvm.org/D8858 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@234472 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-06[ASan] Unify handling of loaded modules between POSIX and WindowsTimur Iskhodzhanov
Reviewed at http://reviews.llvm.org/D8805 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@234150 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-26[Sanitizer] Plug a leak in POSIXSymbolizer::FindModuleForAddressTimur Iskhodzhanov
It was happening when we looked up a PC for a module that was dlopen'ed/dlclose'd after the last time we fetched the list of modules Reviewed at http://reviews.llvm.org/D8618 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@233257 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-22Demangling for DlAddrSymbolizerKuba Brecka
On OS X, dladdr() provides mangled names only, so we need need to demangle in DlAddrSymbolizer::SymbolizePC. Reviewed at http://reviews.llvm.org/D8291 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@232910 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-22Add AtosSymbolizer and DlAddrSymbolizer as fallbacks for OS XKuba Brecka
This patch changes the symbolizer chain on OS X (which currently only uses 1 symbolizer at most) to use this behavior: * By default, use LLVMSymbolizer -> DlAddrSymbolizer. * If the llvm-symbolizer binary is not found, use AtosSymbolizer -> DlAddrSymbolizer. * If the user specifies ASAN_SYMBOLIZER_PATH=.../atos, then use AtosSymbolizer -> DlAddrSymbolizer. * If neither llvm-symbolizer or atos is found, or external symbolication is disabled with ASAN_SYMBOLIZER_PATH="", use DlAddrSymbolizer. Reviewed at http://reviews.llvm.org/D8285 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@232908 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-09Symbolizer refactoring: Merge common parts of POSIXSymbolizer and WinSymbolizerKuba Brecka
Reviewed at http://reviews.llvm.org/D8105 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@231680 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-05Print out which symbolizer are we using when verbosity >= 2Kuba Brecka
Reviewed at http://reviews.llvm.org/D8087 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@231428 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-05Symbolizer refactoring: Link symbolizer tools into a fallback chainKuba Brecka
Reviewed at http://reviews.llvm.org/D8049 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@231361 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-03Symbolizer refactoring: Unify access to symbolizer tools from POSIXSymbolizerKuba Brecka
Reviewed at http://reviews.llvm.org/D8029 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@231162 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-03Symbolizer refactoring: Turn FillAddressAndModuleInfo into FillModuleInfoKuba Brecka
Reviewed at http://reviews.llvm.org/D8020 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@231061 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-02Symbolizer refactoring: Make LibbacktraceSymbolizer adopt the SymbolizerTool ↵Kuba Brecka
interface Reviewed at http://reviews.llvm.org/D7971 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@231032 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-02Symbolizer refactoring: ExtractToken and friendsKuba Brecka
Reviewed at http://reviews.llvm.org/D7867 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@231027 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-02Symbolizer refactoring: Move internals to separate filesKuba Brecka
Reviewed at http://reviews.llvm.org/D7972 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@231014 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-28Symbolizer refactoring: SymbolizerTool and better interfaceKuba Brecka
Reviewed at: http://reviews.llvm.org/D7936 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@230842 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-27[compiler-rt] Symbolizer refactoring: Abstract SymbolizerProcess betterKuba Brecka
Reviewed at http://reviews.llvm.org/D7889 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@230749 91177308-0d34-0410-b5e6-96231b3b80d8