Module Name: src
Committed By: mrg
Date: Fri Aug 4 07:40:05 UTC 2023
Modified Files:
src/external/gpl3/gcc: README.gcc12
src/external/gpl3/gcc/dist/libsanitizer/lsan: lsan_allocator.h
src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common:
sanitizer_linux.cpp sanitizer_unwind_linux_libcdep.cpp
Log Message:
make sanitizers build for some more platforms
m68k (but not m68000), riscv{32,64}, and arm32.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/external/gpl3/gcc/README.gcc12
cvs rdiff -u -r1.7 -r1.8 \
src/external/gpl3/gcc/dist/libsanitizer/lsan/lsan_allocator.h
cvs rdiff -u -r1.4 -r1.5 \
src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux.cpp
cvs rdiff -u -r1.3 -r1.4 \
src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/gpl3/gcc/README.gcc12
diff -u src/external/gpl3/gcc/README.gcc12:1.5 src/external/gpl3/gcc/README.gcc12:1.6
--- src/external/gpl3/gcc/README.gcc12:1.5 Fri Aug 4 03:39:22 2023
+++ src/external/gpl3/gcc/README.gcc12 Fri Aug 4 07:40:04 2023
@@ -1,4 +1,4 @@
-$NetBSD: README.gcc12,v 1.5 2023/08/04 03:39:22 rin Exp $
+$NetBSD: README.gcc12,v 1.6 2023/08/04 07:40:04 mrg Exp $
new stuff:
@@ -31,7 +31,7 @@ switched: has port switched? y (yes), n
architecture tools kernels libgcc native-gcc/sani make release[2] runs atf switched
------------ ----- ------- ------ --------------- ------------ ---- --- --------
-aarch64 y y y y b y y y ?
+aarch64 y y y y n[12] y y y ?
aarch64eb y y y y b y y y ?
alpha y y y y b y y y ?
earmv4 y b ? y ? ? ? ? ?
@@ -42,31 +42,31 @@ earmv5hf y b ? y ? ? ? ? ?
earmv5hfeb y b ? y ? ? ? ? ?
earmv6 y b ? y ? ? ? ? ?
earmv6eb y b ? y ? ? ? ? ?
-earmv6hf y b ? y ? ? ? ? ?
+earmv6hf y b ? y ? y ? ? ?
earmv6hfeb y b ? y ? ? ? ? ?
earmv7 y b y y ? ? ? ? ?
earmv7eb y b ? y ? ? ? ? ?
-earmv7hf y b ? y ? ? ? ? ?
-earmv7hfeb y b ? y ? ? ? ? ?
+earmv7hf y b ? y b y ? ? ?
+earmv7hfeb y b ? y b y ? ? ?
hppa y b y y ? n[5] ? ? ?
i386 y b y y y y ? ? ?
ia64 y b y y y y y[3] n ?
-m68000 y n[9] y y ? bs ? ? ?
-m68k y b y y ? bs ? ? ?
-mipseb y b y y ? bs ? ? ?
-mipsel y b y y ? bs ? ? ?
-mips64eb y b y y ? bs ? ? ?
-mips64el y b y y ? bs ? ? ?
+m68000 y n[9] y y n[11] n ? ? ?
+m68k y b y y b y ? ? ?
+mipseb y b y y b y ? ? ?
+mipsel y b y y b y ? ? ?
+mips64eb y b y y b y ? ? ?
+mips64el y b y y b y ? ? ?
powerpc y ? y y ? n[4] ? ? ?
powerpc64 y ? ? y ? ? ? ? ?
sh3eb y ? y y ? ? ? ? ?
sh3el y ? y y ? ? ? ? ?
-sparc y y y y ? bs y ? ?
+sparc y y y y b y y ? ?
sparc64 y b y y b y ? ? ?
vax y ? y y ? n ? ? ?
-x86_64 y y y y y y y y ?
-riscv32 y y y y ? bs ? ? ?
-riscv64 y y y y ? bs ? ? ?
+x86_64 y y y y y[13] y y y ?
+riscv32 y y y y b y ? ? ?
+riscv64 y y y y b y ? ? ?
------------ ----- ------- ------ --------------- ------------ ---- ---
architecture tools kernels libgcc native-gcc/sani make release runs atf
@@ -88,6 +88,23 @@ architecture tools kernels libgcc native
src/lib/libc/gdtoa/strtod.c:582:17: note: in expansion of macro 'Bcopy'
582 | Bcopy(bd, bd0);
[9]: sun2 fails to load the kernel, probably too big again.
+[10]: libc.so fails to link with weird relocation errors:
+ vax--netbsdelf/bin/ld: warning: dynamic relocation to `?' in readonly section `.eh_frame'
+[11]: sanitizers don't build yet.
+[12]: sanitizers crash early:
+ (gdb) bt
+ #0 0x0000f8ae19f9f424 in __sanitizer::CheckASLR () at /usr/src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux.cpp:2179
+ #1 0x0000f8ae19ee1668 in __asan::AsanInitInternal () at /usr/src/external/gpl3/gcc/dist/libsanitizer/asan/asan_rtl.cpp:445
+ #2 0x0000f8ae19ee1834 in __asan::AsanInitInternal () at /usr/src/external/gpl3/gcc/dist/libsanitizer/asan/asan_rtl.cpp:394
+ #3 0x0000f8ae19f19e40 in __interceptor_pthread_mutex_lock (m=0xf8ae19c102c8 <__gthread_active_mutex.0>)
+[13]: on amd64, with very basic test, lsan, ubsan, and asan work, but tsan crashes at start up:
+ ThreadSanitizer: CHECK failed: tsan_rtl.cpp:149 "((reinterpret_cast<uptr>(this) % 64)) == ((0))" (0x10, 0x0) (tid=21499)
+ ThreadSanitizer:DEADLYSIGNAL
+ ==21499==ERROR: ThreadSanitizer: SEGV on unknown address 0x000000000017 (pc 0x7f7ff4e5e14e bp 0x7f7fffffdbd0 sp 0x7f7fffffdb40 T21499)
+ ==21499==The signal is caused by a READ memory access.
+ ==21499==Hint: address points to the zero page.
+ ThreadSanitizer:DEADLYSIGNAL
+ ThreadSanitizer: nested bug in the same thread, aborting.
CPU vs platform test table (for CPUs with multiple ports). this is "make release" or just kernels.
Index: src/external/gpl3/gcc/dist/libsanitizer/lsan/lsan_allocator.h
diff -u src/external/gpl3/gcc/dist/libsanitizer/lsan/lsan_allocator.h:1.7 src/external/gpl3/gcc/dist/libsanitizer/lsan/lsan_allocator.h:1.8
--- src/external/gpl3/gcc/dist/libsanitizer/lsan/lsan_allocator.h:1.7 Thu Aug 3 01:36:54 2023
+++ src/external/gpl3/gcc/dist/libsanitizer/lsan/lsan_allocator.h Fri Aug 4 07:40:04 2023
@@ -52,7 +52,8 @@ struct ChunkMetadata {
#if defined(__mips64) || defined(__aarch64__) || defined(__i386__) || \
defined(__arm__) || SANITIZER_RISCV64 || defined(__hexagon__) || \
((defined(__hppa__) || defined(__sparc__)) && !defined(_LP64)) || \
- defined(__mips_o32) || defined(__mips_n32)
+ defined(__mips_o32) || defined(__mips_n32) || defined(__m68k__) || \
+ (defined(__riscv__) && !defined(_LP64))
template <typename AddressSpaceViewTy>
struct AP32 {
static const uptr kSpaceBeg = 0;
@@ -68,7 +69,8 @@ template <typename AddressSpaceView>
using PrimaryAllocatorASVT = SizeClassAllocator32<AP32<AddressSpaceView>>;
using PrimaryAllocator = PrimaryAllocatorASVT<LocalAddressSpaceView>;
#elif defined(__x86_64__) || defined(__powerpc64__) || defined(__s390x__) || \
- defined(__alpha__) || defined(__sparc64__) || defined(__ia64__)
+ defined(__alpha__) || defined(__sparc64__) || defined(__ia64__) || \
+ (defined(__riscv__) && !defined(_LP64))
# if SANITIZER_FUCHSIA
const uptr kAllocatorSpace = ~(uptr)0;
const uptr kAllocatorSize = 0x40000000000ULL; // 4T.
Index: src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux.cpp
diff -u src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux.cpp:1.4 src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux.cpp:1.5
--- src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux.cpp:1.4 Thu Aug 3 01:36:54 2023
+++ src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux.cpp Fri Aug 4 07:40:05 2023
@@ -1880,7 +1880,7 @@ SignalContext::WriteFlag SignalContext::
#endif
}
return SignalContext::UNKNOWN;
-#elif defined(__arm__)
+#elif defined(__arm__) && !SANITIZER_NETBSD
static const uptr FSR_WRITE = 1U << 11;
uptr fsr = ucontext->uc_mcontext.error_code;
return fsr & FSR_WRITE ? WRITE : READ;
@@ -1910,6 +1910,8 @@ SignalContext::WriteFlag SignalContext::
#elif defined(__riscv)
#if SANITIZER_FREEBSD
unsigned long pc = ucontext->uc_mcontext.mc_gpregs.gp_sepc;
+#elif SANITIZER_NETBSD
+ uptr pc = ucontext->uc_mcontext.__gregs[_REG_PC];
#else
unsigned long pc = ucontext->uc_mcontext.__gregs[REG_PC];
#endif
Index: src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp
diff -u src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp:1.3 src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp:1.4
--- src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp:1.3 Mon Jul 31 01:44:57 2023
+++ src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp Fri Aug 4 07:40:05 2023
@@ -58,7 +58,7 @@ unwind_backtrace_signal_arch_func unwind
#endif
uptr Unwind_GetIP(struct _Unwind_Context *ctx) {
-#if defined(__arm__) && !SANITIZER_MAC
+#if defined(__arm__) && !SANITIZER_MAC && !SANITIZER_NETBSD
uptr val;
_Unwind_VRS_Result res = _Unwind_VRS_Get(ctx, _UVRSC_CORE,
15 /* r15 = PC */, _UVRSD_UINT32, &val);