diff options
author | Khem Raj <raj.khem@gmail.com> | 2021-05-19 17:38:45 -0700 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2021-06-08 11:37:54 -0700 |
commit | 0f3c6b54bf61ec9aabcb2e6ef52ee78e795194c5 (patch) | |
tree | 0e7e1103b717fd35256e3d2468fee351509253d8 /recipes-devtools | |
parent | d692c0338fe60cdbb3025dcedbb05ca466335650 (diff) | |
download | meta-clang-0f3c6b54bf61ec9aabcb2e6ef52ee78e795194c5.tar.gz |
compiler-rt: Fix sanitizer build on musl/x86_64
backtrace APIs are glibc specific so do not use them
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'recipes-devtools')
-rw-r--r-- | recipes-devtools/clang/clang/0029-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch | 68 | ||||
-rw-r--r-- | recipes-devtools/clang/common.inc | 1 |
2 files changed, 69 insertions, 0 deletions
diff --git a/recipes-devtools/clang/clang/0029-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch b/recipes-devtools/clang/clang/0029-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch new file mode 100644 index 0000000..372ac73 --- /dev/null +++ b/recipes-devtools/clang/clang/0029-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch | |||
@@ -0,0 +1,68 @@ | |||
1 | From c2413de81c383407f6447edd41d9b3539641ff4f Mon Sep 17 00:00:00 2001 | ||
2 | From: Khem Raj <raj.khem@gmail.com> | ||
3 | Date: Wed, 19 May 2021 17:32:13 -0700 | ||
4 | Subject: [PATCH] compiler-rt: Do not use backtrace APIs on non-glibc linux | ||
5 | |||
6 | musl e.g. does not provide backtrace APIs | ||
7 | |||
8 | Upstream-Status: Pending | ||
9 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
10 | --- | ||
11 | .../lib/gwp_asan/optional/backtrace_linux_libc.cpp | 13 ++++++++++++- | ||
12 | 1 file changed, 12 insertions(+), 1 deletion(-) | ||
13 | |||
14 | diff --git a/compiler-rt/lib/gwp_asan/optional/backtrace_linux_libc.cpp b/compiler-rt/lib/gwp_asan/optional/backtrace_linux_libc.cpp | ||
15 | index ea8e72be287d..0344074dd254 100644 | ||
16 | --- a/compiler-rt/lib/gwp_asan/optional/backtrace_linux_libc.cpp | ||
17 | +++ b/compiler-rt/lib/gwp_asan/optional/backtrace_linux_libc.cpp | ||
18 | @@ -7,7 +7,9 @@ | ||
19 | //===----------------------------------------------------------------------===// | ||
20 | |||
21 | #include <assert.h> | ||
22 | +#ifdef __GLIBC__ | ||
23 | #include <execinfo.h> | ||
24 | +#endif | ||
25 | #include <stddef.h> | ||
26 | #include <stdint.h> | ||
27 | #include <stdlib.h> | ||
28 | @@ -21,8 +23,11 @@ | ||
29 | namespace { | ||
30 | size_t Backtrace(uintptr_t *TraceBuffer, size_t Size) { | ||
31 | static_assert(sizeof(uintptr_t) == sizeof(void *), "uintptr_t is not void*"); | ||
32 | - | ||
33 | +#ifdef __GLIBC__ | ||
34 | return backtrace(reinterpret_cast<void **>(TraceBuffer), Size); | ||
35 | +#else | ||
36 | + return -1; | ||
37 | +#endif | ||
38 | } | ||
39 | |||
40 | // We don't need any custom handling for the Segv backtrace - the libc unwinder | ||
41 | @@ -30,7 +35,11 @@ size_t Backtrace(uintptr_t *TraceBuffer, size_t Size) { | ||
42 | // to avoid the additional frame. | ||
43 | GWP_ASAN_ALWAYS_INLINE size_t SegvBacktrace(uintptr_t *TraceBuffer, size_t Size, | ||
44 | void * /*Context*/) { | ||
45 | +#ifdef __GLIBC__ | ||
46 | return Backtrace(TraceBuffer, Size); | ||
47 | +#else | ||
48 | + return -1; | ||
49 | +#endif | ||
50 | } | ||
51 | |||
52 | static void PrintBacktrace(uintptr_t *Trace, size_t TraceLength, | ||
53 | @@ -40,6 +49,7 @@ static void PrintBacktrace(uintptr_t *Trace, size_t TraceLength, | ||
54 | return; | ||
55 | } | ||
56 | |||
57 | +#ifdef __GLIBC__ | ||
58 | char **BacktraceSymbols = | ||
59 | backtrace_symbols(reinterpret_cast<void **>(Trace), TraceLength); | ||
60 | |||
61 | @@ -53,6 +63,7 @@ static void PrintBacktrace(uintptr_t *Trace, size_t TraceLength, | ||
62 | Printf("\n"); | ||
63 | if (BacktraceSymbols) | ||
64 | free(BacktraceSymbols); | ||
65 | +#endif | ||
66 | } | ||
67 | } // anonymous namespace | ||
68 | |||
diff --git a/recipes-devtools/clang/common.inc b/recipes-devtools/clang/common.inc index 6e578d5..8e4ee8d 100644 --- a/recipes-devtools/clang/common.inc +++ b/recipes-devtools/clang/common.inc | |||
@@ -37,6 +37,7 @@ SRC_URI = "\ | |||
37 | file://0026-llvm-Insert-anchor-for-adding-OE-distro-vendor-names.patch \ | 37 | file://0026-llvm-Insert-anchor-for-adding-OE-distro-vendor-names.patch \ |
38 | file://0027-compiler-rt-Use-mcr-based-barrier-on-armv6.patch \ | 38 | file://0027-compiler-rt-Use-mcr-based-barrier-on-armv6.patch \ |
39 | file://0028-clang-Switch-defaults-to-dwarf-5-debug-info-on-Linux.patch \ | 39 | file://0028-clang-Switch-defaults-to-dwarf-5-debug-info-on-Linux.patch \ |
40 | file://0029-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch \ | ||
40 | " | 41 | " |
41 | # Fallback to no-PIE if not set | 42 | # Fallback to no-PIE if not set |
42 | GCCPIE ??= "" | 43 | GCCPIE ??= "" |