27 Commits

Author SHA1 Message Date
Enna1
abe102b872
[Sanitizer][NFC] Replaces a few InternalScopedString::AppendF with InternalScopedString::Append (#80574) 2024-02-06 09:18:06 +08:00
Andres Villegas
8b3944ca19
[sanitizer_symbolizer] Add initial symbolizer markup support for linux.
This is part of a stack of PRs to add support for symbolizer
markup in linux.

You can check the symbolizer markup specification at:
https://llvm.org/docs/SymbolizerMarkupFormat.html

Reviewers: vitalybuka, PiJoules

Reviewed By: vitalybuka

Pull Request: https://github.com/llvm/llvm-project/pull/73193
2023-11-27 17:36:09 -08:00
Andres Villegas
cc2128714e
[sanitizer_symbolizer] Add MarkupStackTracePrinter (#73032)
Adds a new Implementation of StackTracePrinter that only
emits symbolizer markup. Currently this change only
affects Fuchsia OS. Should be NFC.
2023-11-21 13:49:11 -08:00
Andres Villegas
23c84fb362
[NFC sanitizer_symbolizer] Make some functions non virtual in StackTracePrinter. (#73029)
Make some methods of StackTracPrinter that will have a common
implementation, non virtual.
2023-11-21 13:23:43 -08:00
Andres Villegas
f8ae2e4277
Reland: [sanitizer_symbolizer] Add StackTracePrinter virtual class (#66689)
Introduce a new virtual class StackTracePrinter and an implementation
FormattedStackTracePrinter in preparation of enabling symbolizer markup
for linux.
This change allows us to implement other behaviour under the same api
for StackTracePrinter, for example, MarkupStackTracePrinter.

Reason for revert: A missing header file for the
sanitizer_symbolizer_markup.cpp files.
This was not caught in local builds or pre-merge checks given that to
trigger the error, the code
has to be compiled for Fuchsia.
For this reland I've build for the fuchsia targets as well as linux.
2023-09-21 11:28:20 -07:00
Vitaly Buka
4a3748769a [NFC][sanitizer] Replace a few AppendF with Append 2023-09-15 23:03:19 -07:00
Vitaly Buka
5b7dfa968f
[NFC][sanitizer] Rename InternalScopedString::append to AppendF (#66558)
Prepare to introduce trivial InternalScopedString::Append(const char*).
2023-09-15 17:06:20 -07:00
Andrés Villegas
80e810f5a7 Revert "[NFC][sanitizer_symbolizer]Add StackTracePrinter class (#66530)"
Reason: Not including appropiated headers for
sanitizer_symbolizer_markup.cpp which only runs
in fuchsia.

This reverts commit d4152c5cbfd923d117b2bf24b5b173766e3be0e1.
2023-09-15 22:16:26 +00:00
Andres Villegas
d4152c5cbf
[NFC][sanitizer_symbolizer]Add StackTracePrinter class (#66530)
Introduce a new virtual class StackTracePrinter and an implementation
FormattedStackTracePrinter in preparation of enabling symbolizer markup
for linux. 
This change allows us to implement other behaviour under the same api
for StackTracePrinter, for example, MarkupStackTracePrinter.
2023-09-15 13:52:09 -07:00
Marco Elver
37445e96d8 [compiler-rt] Allow 3 simultaneous interceptors on Linux
Rework Linux (and *BSD) interceptors to allow for up to 3 (2 for *BSD)
simultaneous interceptors. See code comments for details.

The main motivation is to support new sampling sanitizers (in the spirit
of GWP-ASan), that have to intercept few functions. Unfortunately, the
reality is that there are user interceptors that exist in the wild.

To support foreign user interceptors, foreign dynamic analysis
interceptors, and compiler-rt interceptors all at the same time,
including any combination of them, this change enables up to 3
interceptors on Linux (2 on *BSD).

v2:
* Revert to to the simpler "weak wrapper -(alias)-> __interceptor"
  scheme on architectures that cannot implement a trampoline efficiently
  due to complexities of resolving a preemptible symbol (PowerPC64
  ELFv2 global entry, and i386 PIC).
* Avoid duplicate intercepted functions in gen_dynamic_list.py, due to
  matching __interceptor_X and ___interceptor_X.
* Fix s390 __tls_get_offset.

Reviewed By: dvyukov, MaskRay, vitalybuka

Differential Revision: https://reviews.llvm.org/D151085
2023-06-09 11:30:41 +02:00
usama hameed
5a9498124d
[Sanitizers] Remove BuildId from sanitizers stacktrace on Darwin
On Darwin, we do not want to show the BuildId appended at the end of stack
frames in Sanitizers. The BuildId/UUID can be seen by using the
print_module_map=1 sanitizer option.

Differential Revision: https://reviews.llvm.org/D150298

rdar://108324403
2023-06-07 11:17:25 -07:00
Marco Elver
33388d8c0b Revert "[compiler-rt] Allow 3 simultaneous interceptors on Linux"
This reverts commit 57882fe76e1826593cd0e53f73484b184c5007c4.
This reverts commit 74b0ac571b5facee3c8038d21ed71d7a29ee1098.

Breaks various build bots.
2023-06-07 10:16:24 +02:00
Marco Elver
74b0ac571b [compiler-rt] Allow 3 simultaneous interceptors on Linux
Rework Linux (and *BSD) interceptors to allow for up to 3 (2 for *BSD)
simultaneous interceptors. See code comments for details.

The main motivation is to support new sampling sanitizers (in the spirit
of GWP-ASan), that have to intercept few functions. Unfortunately, the
reality is that there are user interceptors that exist in the wild.

To support foreign user interceptors, foreign dynamic analysis
interceptors, and compiler-rt interceptors all at the same time,
including any combination of them, this change enables up to 3
interceptors on Linux (2 on *BSD).

Reviewed By: dvyukov, MaskRay, vitalybuka

Differential Revision: https://reviews.llvm.org/D151085
2023-06-07 09:06:31 +02:00
Florian Mayer
cb49160765 Revert "[Sanitizers] Remove BuildId from sanitizers stacktrace on
Breaks tests.

This reverts commit fdb1a891b64c27522a2386a8025f8ad5c7e02bfb.
2023-06-06 17:25:55 -07:00
usama hameed
fdb1a891b6
[Sanitizers] Remove BuildId from sanitizers stacktrace on Darwin
On Darwin, we do not want to show the BuildId appended at the end of stack
frames in Sanitizers. The BuildId/UUID can be seen by using the
print_module_map=1 sanitizer option.

Differential Revision: https://reviews.llvm.org/D150298

rdar://108324403
2023-06-06 16:37:39 -07:00
Marco Elver
4c46c7cef3 [sanitizer_common] Fix StripFunctionName() on Windows
Also implement StripFunctionName() on Windows to properly strip
interceptor prefixes.

Reported-by: https://lab.llvm.org/buildbot#builders/127/builds/48810
2023-05-25 13:19:07 +02:00
Marco Elver
215a742b88 [sanitizer_common] Check 'demangle' flag in StripFunctionName and DemangleFunctionName
To allow getting the original stack trace.

Reviewed By: dvyukov

Differential Revision: https://reviews.llvm.org/D151411
2023-05-25 12:01:11 +02:00
Marco Elver
5732cdc1be [msan] Strip __interceptor_ from reports
Showing __interceptor_ as part of the function name in reports does not
make sense and is distracting.

Strip the interceptor function name before printing.

Reviewed By: dvyukov, vitalybuka

Differential Revision: https://reviews.llvm.org/D151343
2023-05-25 12:01:11 +02:00
Marco Elver
01cea39f8e [sanitizer_common] Support stripping interceptor prefixes in RenderFrame()
Rather than having every tool pass the right interceptor prefix, just
move this logic into RenderFrame().

Note that currently there are a few cases where due to aliasing the
intercepted function -> interceptor, the unwinder sees the intercepted
function - however this is never guaranteed. In a later change this
becomes more apparent, and other non-tsan sanitizer tests would fail as
well. By making the default RenderFrame() strip interceptor prefixes, we
don't rely on the linker aliasing preferences.

Reviewed By: dvyukov, vitalybuka, MaskRay

Differential Revision: https://reviews.llvm.org/D151319
2023-05-25 12:01:10 +02:00
Florian Mayer
edd2b99a57 [sanitizers] include build ids in stacks on linux.
Reviewed By: eugenis

Differential Revision: https://reviews.llvm.org/D114294
2021-12-10 14:24:03 -08:00
Florian Mayer
06430acc00 Revert "[sanitizers] include build ids in stacks on linux."
This reverts commit 2a31b240df1ce1724960fd7cf98f673064b44206.
2021-12-10 11:52:26 -08:00
Florian Mayer
2a31b240df [sanitizers] include build ids in stacks on linux.
Reviewed By: eugenis

Differential Revision: https://reviews.llvm.org/D114294
2021-12-10 11:30:34 -08:00
Martin Liska
13a442ca49 Enable -Wformat-pedantic and fix fallout.
Differential Revision: https://reviews.llvm.org/D113172
2021-11-05 13:12:35 +01:00
Dmitry Vyukov
4a91bbcc93 sanitizer_common: fix format strings
Fix existing -Wformat warnings.

Depends on D107979.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D107980
2021-08-13 13:44:41 +02:00
Vitaly Buka
20e78eb304 [sanitizer][NFC] Fix few cpplint warnings 2020-10-13 20:39:37 -07:00
Teresa Johnson
4d5b1de40e [sanitizer] Skip stack symbolization when not required for print format
Adds a check to avoid symbolization when printing stack traces if the
stack_trace_format flag does not need it. While there is a symbolize
flag that can be turned off to skip some of the symbolization,
SymbolizePC() still unconditionally looks up the module name and offset.
Avoid invoking SymbolizePC() at all if not needed.

This is an efficiency improvement when dumping all stack traces as part
of the memory profiler in D87120, for large stripped apps where we want
to symbolize as a post pass.

Differential Revision: https://reviews.llvm.org/D88361
2020-10-07 15:38:52 -07:00
Nico Weber
65492d959b compiler-rt: Rename .cc file in lib/sanitizer_common to .cpp
See https://reviews.llvm.org/D58620 for discussion, and for the commands
I ran. In addition I also ran

  for f in $(svn diff | diffstat | grep .cc | cut -f 2 -d ' '); do rg $f . ; done

and manually updated (many) references to renamed files found by that.

llvm-svn: 367463
2019-07-31 18:51:27 +00:00