initial commit
This commit is contained in:
@@ -0,0 +1,315 @@
|
||||
diff -ruN a/Makeconfig b/Makeconfig
|
||||
--- a/Makeconfig 2026-01-23 14:54:00.000000000 -0600
|
||||
+++ b/Makeconfig 2026-03-15 19:54:42.332792487 -0500
|
||||
@@ -714,33 +714,109 @@
|
||||
else
|
||||
libunwind = -lunwind
|
||||
endif
|
||||
-libgcc_eh := -Wl,--as-needed -lgcc_s $(libunwind) -Wl,--no-as-needed
|
||||
+# Preserve the configured target selection when asking the compiler for
|
||||
+# support libraries and CRT objects. For Clang, prefer
|
||||
+# compiler-rt builtins if available because libgcc lookups may resolve to a
|
||||
+# host archive.
|
||||
+cc-runtime-flags := $(filter-out -I%,$(CFLAGS)) $(sysdep-LDFLAGS) $(LDFLAGS)
|
||||
+cc-runtime-target := $(shell $(CC) $(cc-runtime-flags) -print-target-triple 2>/dev/null)
|
||||
+cc-clang-resource-dir := $(shell $(CC) $(cc-runtime-flags) --print-resource-dir 2>/dev/null)
|
||||
+cc-clang-rtlib-flags := $(shell \
|
||||
+ if test "$(have-test-clang)" = yes; then \
|
||||
+ for candidate in i686-linux-gnu i686-unknown-linux-gnu i386-unknown-linux-gnu "$(cc-runtime-target)"; do \
|
||||
+ if test -n "$$candidate"; then \
|
||||
+ rtlib=$$($(CC) $(cc-runtime-flags) --target=$$candidate \
|
||||
+ --rtlib=compiler-rt --print-libgcc-file-name 2>/dev/null); \
|
||||
+ if test "x$$rtlib" != x && test "x$$rtlib" != xlibgcc.a && test -r "$$rtlib"; then \
|
||||
+ printf '%s' "--target=$$candidate --rtlib=compiler-rt"; \
|
||||
+ exit 0; \
|
||||
+ fi; \
|
||||
+ fi; \
|
||||
+ done; \
|
||||
+ fi)
|
||||
+cc-clang-crtbegin := $(shell \
|
||||
+ if test "$(have-test-clang)" = yes; then \
|
||||
+ for path in \
|
||||
+ "$(cc-clang-resource-dir)/lib/i686-linux-gnu/clang_rt.crtbegin-i386.o" \
|
||||
+ "$(cc-clang-resource-dir)/lib/i686-unknown-linux-gnu/clang_rt.crtbegin-i386.o" \
|
||||
+ "$(cc-clang-resource-dir)/lib/i386-unknown-linux-gnu/clang_rt.crtbegin-i386.o" \
|
||||
+ "$(cc-clang-resource-dir)/lib/$(cc-runtime-target)/clang_rt.crtbegin-i386.o" \
|
||||
+ "$(cc-clang-resource-dir)/lib/linux/clang_rt.crtbegin-i386.o"; do \
|
||||
+ if test -r "$$path"; then \
|
||||
+ printf '%s' "$$path"; \
|
||||
+ exit 0; \
|
||||
+ fi; \
|
||||
+ done; \
|
||||
+ fi)
|
||||
+cc-clang-crtend := $(shell \
|
||||
+ if test "$(have-test-clang)" = yes; then \
|
||||
+ for path in \
|
||||
+ "$(cc-clang-resource-dir)/lib/i686-linux-gnu/clang_rt.crtend-i386.o" \
|
||||
+ "$(cc-clang-resource-dir)/lib/i686-unknown-linux-gnu/clang_rt.crtend-i386.o" \
|
||||
+ "$(cc-clang-resource-dir)/lib/i386-unknown-linux-gnu/clang_rt.crtend-i386.o" \
|
||||
+ "$(cc-clang-resource-dir)/lib/$(cc-runtime-target)/clang_rt.crtend-i386.o" \
|
||||
+ "$(cc-clang-resource-dir)/lib/linux/clang_rt.crtend-i386.o"; do \
|
||||
+ if test -r "$$path"; then \
|
||||
+ printf '%s' "$$path"; \
|
||||
+ exit 0; \
|
||||
+ fi; \
|
||||
+ done; \
|
||||
+ fi)
|
||||
+libgcc := $(shell \
|
||||
+ lib=$$($(CC) $(cc-runtime-flags) --print-libgcc-file-name 2>/dev/null); \
|
||||
+ if test "$(have-test-clang)" = yes; then \
|
||||
+ rtlib=$$($(CC) $(cc-runtime-flags) $(cc-clang-rtlib-flags) \
|
||||
+ --print-libgcc-file-name 2>/dev/null); \
|
||||
+ if test "x$$rtlib" != x && test "x$$rtlib" != xlibgcc.a && test -r "$$rtlib"; then \
|
||||
+ lib=$$rtlib; \
|
||||
+ else \
|
||||
+ for path in \
|
||||
+ "$(cc-clang-resource-dir)/lib/i686-linux-gnu/libclang_rt.builtins.a" \
|
||||
+ "$(cc-clang-resource-dir)/lib/i686-unknown-linux-gnu/libclang_rt.builtins.a" \
|
||||
+ "$(cc-clang-resource-dir)/lib/i386-unknown-linux-gnu/libclang_rt.builtins.a" \
|
||||
+ "$(cc-clang-resource-dir)/lib/$(cc-runtime-target)/libclang_rt.builtins.a" \
|
||||
+ "$(cc-clang-resource-dir)/lib/linux/libclang_rt.builtins-i386.a"; do \
|
||||
+ if test -r "$$path"; then \
|
||||
+ lib=$$path; \
|
||||
+ break; \
|
||||
+ fi; \
|
||||
+ done; \
|
||||
+ fi; \
|
||||
+ fi; \
|
||||
+ printf '%s' "$$lib")
|
||||
+# Do not mix Clang's compiler-rt builtins with GCC crtbegin/crtend
|
||||
+# objects. If compiler-rt CRT objects are unavailable, leave these
|
||||
+# empty and let the link proceed without the GCC startup fragments.
|
||||
+cc-clang-use-rt := $(and $(filter yes,$(have-test-clang)),$(cc-clang-rtlib-flags))
|
||||
+libgcc_eh_archive := $(shell $(CC) $(cc-runtime-flags) --print-file-name=libgcc_eh.a)
|
||||
+libgcc_s := $(shell $(CC) $(cc-runtime-flags) --print-file-name=libgcc_s.so$(libgcc_s.so-version))
|
||||
+libgcc_eh := -Wl,--as-needed $(libgcc_s) $(libunwind) -Wl,--no-as-needed
|
||||
gnulib-arch =
|
||||
-gnulib = -lgcc $(gnulib-arch)
|
||||
-gnulib-tests := -lgcc $(libgcc_eh)
|
||||
-gnulib-extralibdir = $(dir $(shell $(CC) -print-file-name=libgcc_s.so$(libgcc_s.so-version)))
|
||||
+gnulib = $(libgcc) $(gnulib-arch)
|
||||
+gnulib-tests := $(libgcc) $(libgcc_eh)
|
||||
+gnulib-extralibdir = $(patsubst ./,,$(dir $(libgcc_s)))
|
||||
static-gnulib-arch =
|
||||
# By default, elf/static-stubs.o, instead of -lgcc_eh, is used to
|
||||
# statically link programs. When --disable-shared is used, we use
|
||||
# -lgcc_eh since elf/static-stubs.o isn't sufficient.
|
||||
ifeq (yes,$(build-shared))
|
||||
-static-gnulib = -lgcc $(static-gnulib-arch)
|
||||
+static-gnulib = $(libgcc) $(static-gnulib-arch)
|
||||
else
|
||||
-static-gnulib = -lgcc -lgcc_eh $(static-gnulib-arch)
|
||||
+static-gnulib = $(libgcc) $(libgcc_eh_archive) $(static-gnulib-arch)
|
||||
endif
|
||||
-static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
|
||||
-libc.so-gnulib := -lgcc
|
||||
+static-gnulib-tests := $(libgcc) $(libgcc_eh_archive) $(libunwind)
|
||||
+libc.so-gnulib := $(libgcc)
|
||||
endif
|
||||
+preinit = $(addprefix $(csu-objpfx),crti.o)
|
||||
+postinit = $(addprefix $(csu-objpfx),crtn.o)
|
||||
-+prector = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtbegin.o`
|
||||
-+postctor = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtend.o`
|
||||
++prector = $(if $(cc-clang-use-rt),$(cc-clang-crtbegin),`$(CC) $(cc-runtime-flags) --print-file-name=crtbegin.o`)
|
||||
++postctor = $(if $(cc-clang-use-rt),$(cc-clang-crtend),`$(CC) $(cc-runtime-flags) --print-file-name=crtend.o`)
|
||||
# Variants of the two previous definitions for linking PIE programs.
|
||||
-+prectorS = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtbeginS.o`
|
||||
-+postctorS = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtendS.o`
|
||||
++prectorS = $(if $(cc-clang-use-rt),$(cc-clang-crtbegin),`$(CC) $(cc-runtime-flags) --print-file-name=crtbeginS.o`)
|
||||
++postctorS = $(if $(cc-clang-use-rt),$(cc-clang-crtend),`$(CC) $(cc-runtime-flags) --print-file-name=crtendS.o`)
|
||||
# Variants of the two previous definitions for statically linking programs.
|
||||
-static-prector = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtbeginT.o`
|
||||
-static-postctor = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtend.o`
|
||||
+static-prector = $(if $(cc-clang-use-rt),$(cc-clang-crtbegin),`$(CC) $(cc-runtime-flags) --print-file-name=crtbeginT.o`)
|
||||
+static-postctor = $(if $(cc-clang-use-rt),$(cc-clang-crtend),`$(CC) $(cc-runtime-flags) --print-file-name=crtend.o`)
|
||||
ifeq (yes,$(enable-static-pie))
|
||||
# Static PIE must use PIE variants.
|
||||
+prectorT = $(if $($(@F)-no-pie),$(static-prector),$(+prectorS))
|
||||
diff -ruN a/Makerules b/Makerules
|
||||
--- a/Makerules 2026-01-23 14:54:00.000000000 -0600
|
||||
+++ b/Makerules 2026-03-15 19:54:16.435354197 -0500
|
||||
@@ -543,7 +543,7 @@
|
||||
$(call after-link,$@)
|
||||
|
||||
define build-shlib-helper
|
||||
-$(LINK.o) -shared -static-libgcc -Wl,-O1 $(sysdep-LDFLAGS) \
|
||||
+$(LINK.o) -shared $(if $(and $(filter yes,$(have-test-clang)),$(cc-clang-rtlib-flags)),-nostartfiles $(cc-clang-rtlib-flags),-static-libgcc) -Wl,-O1 $(sysdep-LDFLAGS) \
|
||||
$(if $($(@F)-no-z-defs)$(no-z-defs),,-Wl,-z,defs) $(rtld-LDFLAGS) \
|
||||
$(if $($(@F)-no-dt-relr),$(no-dt-relr-ldflag),$(dt-relr-ldflag)) \
|
||||
$(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
|
||||
@@ -555,11 +555,13 @@
|
||||
|
||||
define build-shlib
|
||||
$(build-shlib-helper) -o $@ \
|
||||
- $(csu-objpfx)abi-note.o $(build-shlib-objlist)
|
||||
+ $(if $(and $(filter yes,$(have-test-clang)),$(cc-clang-crtbegin)),$(if $(filter c.so,$(@F)),,$(+preinit)) $(+prectorS)) \
|
||||
+ $(csu-objpfx)abi-note.o $(build-shlib-objlist) \
|
||||
+ $(if $(and $(filter yes,$(have-test-clang)),$(cc-clang-crtend)),$(+postctorS) $(if $(filter c.so,$(@F)),,$(+postinit)))
|
||||
endef
|
||||
|
||||
define build-module-helper
|
||||
-$(LINK.o) -shared -static-libgcc $(sysdep-LDFLAGS) $(rtld-LDFLAGS) \
|
||||
+$(LINK.o) -shared $(if $(and $(filter yes,$(have-test-clang)),$(cc-clang-rtlib-flags)),-nostartfiles $(cc-clang-rtlib-flags),-static-libgcc) $(sysdep-LDFLAGS) $(rtld-LDFLAGS) \
|
||||
$(if $($(@F)-no-z-defs)$(no-z-defs),,-Wl,-z,defs) \
|
||||
$(if $($(@F)-no-dt-relr),$(no-dt-relr-ldflag),$(dt-relr-ldflag)) \
|
||||
-B$(csu-objpfx) $(load-map-file) \
|
||||
@@ -574,14 +576,18 @@
|
||||
# not for shared objects
|
||||
define build-module
|
||||
$(build-module-helper) -o $@ \
|
||||
- $(csu-objpfx)abi-note.o $(build-module-objlist) $(link-libc-args)
|
||||
+ $(if $(and $(filter yes,$(have-test-clang)),$(cc-clang-crtbegin)),$(+preinit) $(+prectorS)) \
|
||||
+ $(csu-objpfx)abi-note.o $(build-module-objlist) $(link-libc-args) \
|
||||
+ $(if $(and $(filter yes,$(have-test-clang)),$(cc-clang-crtend)),$(+postctorS) $(+postinit))
|
||||
$(call after-link,$@)
|
||||
endef
|
||||
define build-module-asneeded
|
||||
$(build-module-helper) -o $@ \
|
||||
+ $(if $(and $(filter yes,$(have-test-clang)),$(cc-clang-crtbegin)),$(+preinit) $(+prectorS)) \
|
||||
$(csu-objpfx)abi-note.o \
|
||||
-Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed \
|
||||
- $(link-libc-args)
|
||||
+ $(link-libc-args) \
|
||||
+ $(if $(and $(filter yes,$(have-test-clang)),$(cc-clang-crtend)),$(+postctorS) $(+postinit))
|
||||
$(call after-link,$@)
|
||||
endef
|
||||
|
||||
diff -ruN a/configure b/configure
|
||||
--- a/configure 2026-01-23 14:54:00.000000000 -0600
|
||||
+++ b/configure 2026-03-15 19:54:16.436079577 -0500
|
||||
@@ -9328,18 +9328,28 @@
|
||||
config_vars="$config_vars
|
||||
enable-static-pie = $libc_cv_static_pie"
|
||||
|
||||
-# Check if we can link support functionality against libgcc_s.
|
||||
+# Check if the compiler reports usable support functionality from libgcc_s.
|
||||
# Must not be used for linking installed binaries, to produce the
|
||||
# same binaries for bootstrapped and bootstrapping builds (the latter
|
||||
# with a GCC that does not build libgcc_s).
|
||||
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC can link against -lgcc_s" >&5
|
||||
-printf %s "checking whether $CC can link against -lgcc_s... " >&6; }
|
||||
+#
|
||||
+# The compiler-reported runtime may be an absolute path rather than a bare
|
||||
+# library name, for example when using llvm-libgcc. Include the configured
|
||||
+# target-selection flags so multilib and compiler-rt builds query the
|
||||
+# matching runtime.
|
||||
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC reports a usable libgcc_s" >&5
|
||||
+printf %s "checking whether $CC reports a usable libgcc_s... " >&6; }
|
||||
if test ${libc_cv_have_libgcc_s+y}
|
||||
then :
|
||||
printf %s "(cached) " >&6
|
||||
else case e in #(
|
||||
e) old_LIBS="$LIBS"
|
||||
- LIBS="$LIBS -lgcc_s"
|
||||
+ libc_cv_libgcc_s=`$CC $CFLAGS $LDFLAGS -print-file-name=libgcc_s.so 2>/dev/null`
|
||||
+ if test "x$libc_cv_libgcc_s" = "xlibgcc_s.so"
|
||||
+ then :
|
||||
+ libc_cv_have_libgcc_s=no
|
||||
+ else case e in #(
|
||||
+ e) LIBS="$LIBS $libc_cv_libgcc_s"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
@@ -9360,6 +9370,9 @@
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.beam \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
+ ;;
|
||||
+esac
|
||||
+ fi
|
||||
LIBS="$old_LIBS" ;;
|
||||
esac
|
||||
fi
|
||||
@@ -11002,5 +11015,3 @@
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
|
||||
printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
|
||||
fi
|
||||
-
|
||||
-
|
||||
diff -ruN a/configure.ac b/configure.ac
|
||||
--- a/configure.ac 2026-01-23 14:54:00.000000000 -0600
|
||||
+++ b/configure.ac 2026-03-15 19:54:16.436525491 -0500
|
||||
@@ -2122,15 +2122,24 @@
|
||||
fi
|
||||
LIBC_CONFIG_VAR([enable-static-pie], [$libc_cv_static_pie])
|
||||
|
||||
-# Check if we can link support functionality against libgcc_s.
|
||||
+# Check if the compiler reports usable support functionality from libgcc_s.
|
||||
# Must not be used for linking installed binaries, to produce the
|
||||
# same binaries for bootstrapped and bootstrapping builds (the latter
|
||||
# with a GCC that does not build libgcc_s).
|
||||
-AC_CACHE_CHECK([whether $CC can link against -lgcc_s], libc_cv_have_libgcc_s, [dnl
|
||||
+# The compiler-reported runtime may be an absolute path rather than a bare
|
||||
+# library name, for example when using llvm-libgcc. Include the configured
|
||||
+# target-selection flags so multilib and compiler-rt builds query the
|
||||
+# matching runtime.
|
||||
+AC_CACHE_CHECK([whether $CC reports a usable libgcc_s], libc_cv_have_libgcc_s, [dnl
|
||||
old_LIBS="$LIBS"
|
||||
- LIBS="$LIBS -lgcc_s"
|
||||
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||
- [libc_cv_have_libgcc_s=yes], [libc_cv_have_libgcc_s=no])
|
||||
+ libc_cv_libgcc_s=`$CC $CFLAGS $LDFLAGS -print-file-name=libgcc_s.so 2>/dev/null`
|
||||
+ if test "x$libc_cv_libgcc_s" = "xlibgcc_s.so"; then
|
||||
+ libc_cv_have_libgcc_s=no
|
||||
+ else
|
||||
+ LIBS="$LIBS $libc_cv_libgcc_s"
|
||||
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||
+ [libc_cv_have_libgcc_s=yes], [libc_cv_have_libgcc_s=no])
|
||||
+ fi
|
||||
LIBS="$old_LIBS"])
|
||||
LIBC_CONFIG_VAR([have-libgcc_s], [$libc_cv_have_libgcc_s])
|
||||
|
||||
diff -ruN a/dlfcn/Makefile b/dlfcn/Makefile
|
||||
--- a/dlfcn/Makefile 2026-01-23 14:54:00.000000000 -0600
|
||||
+++ b/dlfcn/Makefile 2026-03-15 19:54:16.436660818 -0500
|
||||
@@ -187,7 +187,7 @@
|
||||
$(objpfx)bug-atexit2.out: $(objpfx)bug-atexit2-lib.so
|
||||
|
||||
ifneq (,$(CXX))
|
||||
-LDLIBS-bug-atexit3-lib.so = -lstdc++ -lgcc_eh
|
||||
+LDLIBS-bug-atexit3-lib.so = -lstdc++ $(libgcc_eh_archive)
|
||||
$(objpfx)bug-atexit3-lib.so: $(libsupport)
|
||||
$(objpfx)bug-atexit3.out: $(objpfx)bug-atexit3-lib.so
|
||||
endif
|
||||
diff -ruN a/elf/Makefile b/elf/Makefile
|
||||
--- a/elf/Makefile 2026-01-23 14:54:00.000000000 -0600
|
||||
+++ b/elf/Makefile 2026-03-15 19:54:16.436784483 -0500
|
||||
@@ -1514,7 +1514,7 @@
|
||||
echo ".globl $$symbol"; \
|
||||
echo "$$symbol:"; \
|
||||
done | $(CC) -o $@T.o $(ASFLAGS) -c -x assembler -
|
||||
- $(reloc-link) -o $@.o $@T.o '-Wl,-(' $^ -lgcc '-Wl,-)' -Wl,-Map,$@T
|
||||
+ $(reloc-link) -o $@.o $@T.o '-Wl,-(' $^ $(libgcc) '-Wl,-)' -Wl,-Map,$@T
|
||||
rm -f %@T.o $@.o
|
||||
mv -f $@T $@
|
||||
|
||||
@@ -1544,7 +1544,7 @@
|
||||
$(MAKE) -f $< -f rtld-Rules
|
||||
|
||||
$(objpfx)librtld.os: $(objpfx)dl-allobjs.os $(objpfx)rtld-libc.a
|
||||
- $(LINK.o) -nostdlib -nostartfiles -r -o $@ '-Wl,-(' $^ -lgcc '-Wl,-)' \
|
||||
+ $(LINK.o) -nostdlib -nostartfiles -r -o $@ '-Wl,-(' $^ $(libgcc) '-Wl,-)' \
|
||||
-Wl,-Map,$@.map
|
||||
|
||||
generated += librtld.map librtld.mk rtld-libc.a librtld.os.map
|
||||
diff -ruN a/support/Makefile b/support/Makefile
|
||||
--- a/support/Makefile 2026-01-23 14:54:00.000000000 -0600
|
||||
+++ b/support/Makefile 2026-03-15 19:54:16.436940579 -0500
|
||||
@@ -284,14 +284,14 @@
|
||||
|
||||
ifeq (,$(CXX))
|
||||
LINKS_DSO_PROGRAM = links-dso-program-c
|
||||
-LDLIBS-links-dso-program-c = -lgcc
|
||||
+LDLIBS-links-dso-program-c = $(libgcc)
|
||||
ifeq ($(have-libgcc_s),yes)
|
||||
CFLAGS-links-dso-program-c.c += -fexceptions
|
||||
-LDLIBS-links-dso-program-c += -lgcc_s $(libunwind)
|
||||
+LDLIBS-links-dso-program-c += $(libgcc_s) $(libunwind)
|
||||
endif
|
||||
else
|
||||
LINKS_DSO_PROGRAM = links-dso-program
|
||||
-LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
|
||||
+LDLIBS-links-dso-program = -lstdc++ $(libgcc) $(libgcc_s) $(libunwind)
|
||||
endif
|
||||
|
||||
ifeq (yes,$(have-selinux))
|
||||
Reference in New Issue
Block a user