forked from kraj/meta-clang
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Showing
2 changed files
with
69 additions
and
0 deletions.
There are no files selected for viewing
68 changes: 68 additions & 0 deletions
68
recipes-devtools/clang/clang/0029-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
From c2413de81c383407f6447edd41d9b3539641ff4f Mon Sep 17 00:00:00 2001 | ||
From: Khem Raj <raj.khem@gmail.com> | ||
Date: Wed, 19 May 2021 17:32:13 -0700 | ||
Subject: [PATCH] compiler-rt: Do not use backtrace APIs on non-glibc linux | ||
|
||
musl e.g. does not provide backtrace APIs | ||
|
||
Upstream-Status: Pending | ||
Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
--- | ||
.../lib/gwp_asan/optional/backtrace_linux_libc.cpp | 13 ++++++++++++- | ||
1 file changed, 12 insertions(+), 1 deletion(-) | ||
|
||
diff --git a/compiler-rt/lib/gwp_asan/optional/backtrace_linux_libc.cpp b/compiler-rt/lib/gwp_asan/optional/backtrace_linux_libc.cpp | ||
index ea8e72be287d..0344074dd254 100644 | ||
--- a/compiler-rt/lib/gwp_asan/optional/backtrace_linux_libc.cpp | ||
+++ b/compiler-rt/lib/gwp_asan/optional/backtrace_linux_libc.cpp | ||
@@ -7,7 +7,9 @@ | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include <assert.h> | ||
+#ifdef __GLIBC__ | ||
#include <execinfo.h> | ||
+#endif | ||
#include <stddef.h> | ||
#include <stdint.h> | ||
#include <stdlib.h> | ||
@@ -21,8 +23,11 @@ | ||
namespace { | ||
size_t Backtrace(uintptr_t *TraceBuffer, size_t Size) { | ||
static_assert(sizeof(uintptr_t) == sizeof(void *), "uintptr_t is not void*"); | ||
- | ||
+#ifdef __GLIBC__ | ||
return backtrace(reinterpret_cast<void **>(TraceBuffer), Size); | ||
+#else | ||
+ return -1; | ||
+#endif | ||
} | ||
|
||
// We don't need any custom handling for the Segv backtrace - the libc unwinder | ||
@@ -30,7 +35,11 @@ size_t Backtrace(uintptr_t *TraceBuffer, size_t Size) { | ||
// to avoid the additional frame. | ||
GWP_ASAN_ALWAYS_INLINE size_t SegvBacktrace(uintptr_t *TraceBuffer, size_t Size, | ||
void * /*Context*/) { | ||
+#ifdef __GLIBC__ | ||
return Backtrace(TraceBuffer, Size); | ||
+#else | ||
+ return -1; | ||
+#endif | ||
} | ||
|
||
static void PrintBacktrace(uintptr_t *Trace, size_t TraceLength, | ||
@@ -40,6 +49,7 @@ static void PrintBacktrace(uintptr_t *Trace, size_t TraceLength, | ||
return; | ||
} | ||
|
||
+#ifdef __GLIBC__ | ||
char **BacktraceSymbols = | ||
backtrace_symbols(reinterpret_cast<void **>(Trace), TraceLength); | ||
|
||
@@ -53,6 +63,7 @@ static void PrintBacktrace(uintptr_t *Trace, size_t TraceLength, | ||
Printf("\n"); | ||
if (BacktraceSymbols) | ||
free(BacktraceSymbols); | ||
+#endif | ||
} | ||
} // anonymous namespace | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters