mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-04-20 01:26:38 +02:00
47 lines
1.7 KiB
Diff
47 lines
1.7 KiB
Diff
more ppc64le sanitizer fixes
|
|
From 01de315ff348fec5b7c17a6ae94ce517d23a2f0c Mon Sep 17 00:00:00 2001
|
|
From: Daniel Kolesa <daniel@octaforge.org>
|
|
Date: Sat, 5 Nov 2022 23:39:29 +0100
|
|
Subject: [PATCH] rudimentary lsan musl fixes on some archs (ppc64le)
|
|
|
|
---
|
|
.../sanitizer_common/sanitizer_linux_libcdep.cpp | 11 +++++++++++
|
|
1 file changed, 11 insertions(+)
|
|
|
|
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp
|
|
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp
|
|
@@ -28,6 +28,14 @@
|
|
# include "sanitizer_procmaps.h"
|
|
# include "sanitizer_solaris.h"
|
|
|
|
+#if defined(__powerpc__)
|
|
+#define DTP_OFFSET 0x8000
|
|
+#elif SANITIZER_RISCV64
|
|
+#define DTP_OFFSET 0x800
|
|
+#else
|
|
+#define DTP_OFFSET 0
|
|
+#endif
|
|
+
|
|
# if SANITIZER_NETBSD
|
|
# define _RTLD_SOURCE // for __lwp_gettcb_fast() / __lwp_getprivate_fast()
|
|
# endif
|
|
@@ -467,6 +475,7 @@ static int CollectStaticTlsBlocks(struct dl_phdr_info *info, size_t size,
|
|
begin = (uptr)__tls_get_addr(mod_and_off);
|
|
# endif
|
|
}
|
|
+ begin -= DTP_OFFSET;
|
|
for (unsigned i = 0; i != info->dlpi_phnum; ++i)
|
|
if (info->dlpi_phdr[i].p_type == PT_TLS) {
|
|
static_cast<InternalMmapVector<TlsBlock> *>(data)->push_back(
|
|
@@ -624,9 +633,11 @@ static void GetTls(uptr *addr, uptr *size) {
|
|
else if (SANITIZER_FREEBSD)
|
|
*size += 128; // RTLD_STATIC_TLS_EXTRA
|
|
# if defined(__mips__) || defined(__powerpc64__) || SANITIZER_RISCV64
|
|
+#if SANITIZER_GLIBC
|
|
const uptr pre_tcb_size = TlsPreTcbSize();
|
|
*addr -= pre_tcb_size;
|
|
*size += pre_tcb_size;
|
|
+#endif
|
|
# else
|
|
// arm and aarch64 reserve two words at TP, so this underestimates the range.
|
|
// However, this is sufficient for the purpose of finding the pointers to
|