fix: disable BFD thread-local storage on x86_64-montauk hosts

Every libbfd-based native tool (objdump, as, ld, ar, nm, ...) page
faulted at startup: binutils 2.43 keeps BFD's error state in
_Thread_local variables, and MontaukOS has no TLS runtime (no FS-base
setup, no PT_TLS handling), so the %fs:0 access in bfd_init trapped at
address 0. elfedit survived only because it does not link libbfd.

Patch bfd/sysdep.h to define the TLS storage macro to empty under
__montauk__ (binutils has no fallback of its own; ac_cv_tls=none does
not even compile). Single-threaded tools lose nothing.

Confirmed on the OS: objdump -S disassembles hello.elf in the
terminal. Real TLS support (FS base + PT_TLS in the ELF loader) stays
on the roadmap for the GCC/libstdc++ milestone.

Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
2026-07-14 21:31:26 +02:00
co-authored by Claude Fable 5
parent b0ac3132c5
commit 1f271b3ba8
@@ -45,3 +45,21 @@
x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia* | x86_64-*-genode*) x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia* | x86_64-*-genode*)
targ_emul=elf_x86_64 targ_emul=elf_x86_64
targ_extra_emuls="elf_i386 elf_iamcu elf32_x86_64" targ_extra_emuls="elf_i386 elf_iamcu elf32_x86_64"
--- a/bfd/sysdep.h
+++ b/bfd/sysdep.h
@@ -27,6 +27,15 @@
#endif
#include "config.h"
+
+/* MontaukOS provides no runtime TLS yet (no FS-base setup, no PT_TLS
+ handling in the ELF loader), so a _Thread_local access traps at
+ %fs:0. Degrade BFD's thread-local error state to plain globals;
+ the native tools are single-threaded. */
+#ifdef __montauk__
+#undef TLS
+#define TLS
+#endif
#include <stdio.h>
#ifdef HAVE_SYS_TYPES_H