glibc: dont link libgcc_eh.a pre 2.17, and backport at_random auxval patch (#40013)
This resolves an interesting circular dependency between gcc and glibc: 1. glibc < 2.17 depends on libgcc.a and libgcc_eh.a 2. libgcc_eh.a is only built when gcc is configured with --enable-shared 3. but building shared libraries requires crt*.o and libc.so Backport AT_RANDOM auxval changes to avoid dealing with wrong inline assembly (fallback code fails on ubuntu 23.04)
This commit is contained in:
parent
fba47e87d7
commit
78132f2d6b
194
var/spack/repos/builtin/packages/glibc/95f5a9a-2.11.patch
Normal file
194
var/spack/repos/builtin/packages/glibc/95f5a9a-2.11.patch
Normal file
@ -0,0 +1,194 @@
|
||||
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||
|
||||
diff --git a/Makeconfig b/Makeconfig
|
||||
index 47638b13c6..6384e22a72 100644
|
||||
--- a/Makeconfig
|
||||
+++ b/Makeconfig
|
||||
@@ -423,7 +423,7 @@ endif
|
||||
|
||||
# Command for linking programs with the C library.
|
||||
ifndef +link
|
||||
-+link = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||
++link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
|
||||
$(addprefix $(csu-objpfx),$(start-installed-name)) \
|
||||
@@ -432,7 +432,10 @@ ifndef +link
|
||||
$(start-installed-name))\
|
||||
$(+preinit) $(link-extra-libs) \
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
- $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
|
||||
+ $(link-extra-libs)
|
||||
++link-after-libc = $(+postctor) $(+postinit)
|
||||
++link = $(+link-before-libc) $(link-libc) $(+link-after-libc)
|
||||
++link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc)
|
||||
endif
|
||||
# Command for linking PIE programs with the C library.
|
||||
ifndef +link-pie
|
||||
@@ -449,7 +452,7 @@ ifndef +link-pie
|
||||
endif
|
||||
# Command for statically linking programs with the C library.
|
||||
ifndef +link-static
|
||||
-+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||
++link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
$(addprefix $(csu-objpfx),$(static-start-installed-name)) \
|
||||
$(+preinit) $(+prector) \
|
||||
@@ -457,7 +460,12 @@ ifndef +link-static
|
||||
$(start-installed-name))\
|
||||
$(+preinit) $(link-extra-libs-static) \
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
- $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit)
|
||||
+ $(link-extra-libs-static) $(link-libc-static)
|
||||
++link-static-after-libc = $(+postctor) $(+postinit)
|
||||
++link-static = $(+link-static-before-libc) $(link-libc-static) \
|
||||
+ $(+link-static-after-libc)
|
||||
++link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \
|
||||
+ $(+link-static-after-libc)
|
||||
endif
|
||||
# Command for statically linking bounded-pointer programs with the C library.
|
||||
ifndef +link-bounded
|
||||
@@ -482,9 +490,11 @@ ifeq ($(elf),yes)
|
||||
# We need the versioned name of libc.so in the deps of $(others) et al
|
||||
# so that the symlink to libc.so is created before anything tries to
|
||||
# run the linked programs.
|
||||
-link-libc = -Wl,-rpath-link=$(rpath-link) \
|
||||
+link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \
|
||||
$(common-objpfx)libc.so$(libc.so-version) \
|
||||
- $(common-objpfx)$(patsubst %,$(libtype.oS),c) $(gnulib)
|
||||
+ $(common-objpfx)$(patsubst %,$(libtype.oS),c)
|
||||
+link-libc = $(link-libc-before-gnulib) $(gnulib)
|
||||
+link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests)
|
||||
# This is how to find at build-time things that will be installed there.
|
||||
rpath-dirs = math elf dlfcn nss nis rt resolv crypt
|
||||
endif
|
||||
@@ -495,6 +505,7 @@ else
|
||||
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
||||
resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
|
||||
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
|
||||
+link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -523,6 +534,7 @@ endif
|
||||
# The static libraries.
|
||||
ifeq (yes,$(build-static))
|
||||
link-libc-static = $(common-objpfx)libc.a $(static-gnulib) $(common-objpfx)libc.a
|
||||
+link-libc-static-tests = $(common-objpfx)libc.a $(static-gnulib-tests) $(common-objpfx)libc.a
|
||||
else
|
||||
ifeq (yes,$(build-shared))
|
||||
# We can try to link the programs with lib*_pic.a...
|
||||
@@ -542,8 +554,12 @@ ifneq ($(have-as-needed),yes)
|
||||
else
|
||||
libgcc_eh := -Wl,--as-needed -lgcc_s$(libgcc_s_suffix) $(libunwind) -Wl,--no-as-needed
|
||||
endif
|
||||
-gnulib := -lgcc $(libgcc_eh)
|
||||
-static-gnulib := -lgcc -lgcc_eh $(libunwind)
|
||||
+gnulib-arch =
|
||||
+gnulib = -lgcc $(gnulib-arch)
|
||||
+gnulib-tests := -lgcc $(libgcc_eh)
|
||||
+static-gnulib-arch =
|
||||
+static-gnulib = -lgcc $(static-gnulib-arch)
|
||||
+static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
|
||||
libc.so-gnulib := -lgcc
|
||||
endif
|
||||
ifeq ($(elf),yes)
|
||||
diff --git a/Rules b/Rules
|
||||
index 5ace24cee0..45eb7541dc 100644
|
||||
--- a/Rules
|
||||
+++ b/Rules
|
||||
@@ -104,29 +104,52 @@ xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-bp.out)
|
||||
endif
|
||||
|
||||
ifeq ($(build-programs),yes)
|
||||
-binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
||||
-binaries-static = $(others-static) $(tests-static) $(xtests-static)
|
||||
+binaries-all-notests = $(others) $(sysdep-others)
|
||||
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all = $(binaries-all-notests) $(binaries-all-tests)
|
||||
+binaries-static-notests = $(others-static)
|
||||
+binaries-static-tests = $(tests-static) $(xtests-static)
|
||||
+binaries-static = $(binaries-static-notests) $(binaries-static-tests)
|
||||
else
|
||||
-binaries-all = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all-notests =
|
||||
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all = $(binaries-all-tests)
|
||||
+binaries-static-notests =
|
||||
+binaries-static-tests =
|
||||
binaries-static =
|
||||
endif
|
||||
|
||||
-binaries-shared = $(filter-out $(binaries-static), $(binaries-all))
|
||||
+binaries-shared-tests = $(filter-out $(binaries-static), $(binaries-all-tests))
|
||||
+binaries-shared-notests = $(filter-out $(binaries-static), $(binaries-all-notests))
|
||||
|
||||
-ifneq "$(strip $(binaries-shared))" ""
|
||||
-$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
||||
+ifneq "$(strip $(binaries-shared-notests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
$(+link)
|
||||
endif
|
||||
|
||||
-ifneq "$(strip $(binaries-static))" ""
|
||||
-$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
||||
+ifneq "$(strip $(binaries-shared-tests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
|
||||
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
+ $(+link-tests)
|
||||
+endif
|
||||
+
|
||||
+ifneq "$(strip $(binaries-static-notests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
||||
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
$(+link-static)
|
||||
endif
|
||||
|
||||
+ifneq "$(strip $(binaries-static-tests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
|
||||
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
|
||||
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
+ $(+link-static-tests)
|
||||
+endif
|
||||
+
|
||||
ifeq ($(build-bounded),yes)
|
||||
binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs))
|
||||
$(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index 34609a0f85..84709920e8 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -150,6 +150,8 @@ others = sprof sln
|
||||
install-bin = sprof
|
||||
others-static = sln
|
||||
install-rootsbin = sln
|
||||
+sln-modules := static-stubs
|
||||
+extra-objs += $(sln-modules:=.o)
|
||||
|
||||
ifeq (yes,$(use-ldconfig))
|
||||
ifeq (yes,$(build-shared))
|
||||
@@ -157,7 +159,7 @@ others-static += ldconfig
|
||||
others += ldconfig
|
||||
install-rootsbin += ldconfig
|
||||
|
||||
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
|
||||
+ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs
|
||||
extra-objs += $(ldconfig-modules:=.o)
|
||||
|
||||
# To find xmalloc.c and xstrdup.c
|
||||
@@ -448,6 +450,8 @@ $(objpfx)ldd: ldd.bash.in $(common-objpfx)soversions.mk \
|
||||
|
||||
$(objpfx)sprof: $(libdl)
|
||||
|
||||
+$(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)
|
||||
+
|
||||
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
|
||||
SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
|
||||
CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
|
195
var/spack/repos/builtin/packages/glibc/95f5a9a-2.13.patch
Normal file
195
var/spack/repos/builtin/packages/glibc/95f5a9a-2.13.patch
Normal file
@ -0,0 +1,195 @@
|
||||
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||
|
||||
diff --git a/Makeconfig b/Makeconfig
|
||||
index e5cbf646fa..870a4bec4f 100644
|
||||
--- a/Makeconfig
|
||||
+++ b/Makeconfig
|
||||
@@ -431,7 +431,7 @@ endif
|
||||
|
||||
# Command for linking programs with the C library.
|
||||
ifndef +link
|
||||
-+link = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||
++link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
|
||||
$(addprefix $(csu-objpfx),$(start-installed-name)) \
|
||||
@@ -440,7 +440,10 @@ ifndef +link
|
||||
$(start-installed-name))\
|
||||
$(+preinit) $(link-extra-libs) \
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
- $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
|
||||
+ $(link-extra-libs)
|
||||
++link-after-libc = $(+postctor) $(+postinit)
|
||||
++link = $(+link-before-libc) $(link-libc) $(+link-after-libc)
|
||||
++link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc)
|
||||
endif
|
||||
# Command for linking PIE programs with the C library.
|
||||
ifndef +link-pie
|
||||
@@ -457,7 +460,7 @@ ifndef +link-pie
|
||||
endif
|
||||
# Command for statically linking programs with the C library.
|
||||
ifndef +link-static
|
||||
-+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||
++link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
$(addprefix $(csu-objpfx),$(static-start-installed-name)) \
|
||||
$(+preinit) $(+prector) \
|
||||
@@ -465,7 +468,12 @@ ifndef +link-static
|
||||
$(start-installed-name))\
|
||||
$(+preinit) $(link-extra-libs-static) \
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
- $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit)
|
||||
+ $(link-extra-libs-static) $(link-libc-static)
|
||||
++link-static-after-libc = $(+postctor) $(+postinit)
|
||||
++link-static = $(+link-static-before-libc) $(link-libc-static) \
|
||||
+ $(+link-static-after-libc)
|
||||
++link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \
|
||||
+ $(+link-static-after-libc)
|
||||
endif
|
||||
# Command for statically linking bounded-pointer programs with the C library.
|
||||
ifndef +link-bounded
|
||||
@@ -490,10 +498,12 @@ ifeq ($(elf),yes)
|
||||
# We need the versioned name of libc.so in the deps of $(others) et al
|
||||
# so that the symlink to libc.so is created before anything tries to
|
||||
# run the linked programs.
|
||||
-link-libc = -Wl,-rpath-link=$(rpath-link) \
|
||||
+link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \
|
||||
$(common-objpfx)libc.so$(libc.so-version) \
|
||||
$(common-objpfx)$(patsubst %,$(libtype.oS),c) \
|
||||
- $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed) $(gnulib)
|
||||
+ $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed)
|
||||
+link-libc = $(link-libc-before-gnulib) $(gnulib)
|
||||
+link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests)
|
||||
# This is how to find at build-time things that will be installed there.
|
||||
rpath-dirs = math elf dlfcn nss nis rt resolv crypt
|
||||
endif
|
||||
@@ -504,6 +514,7 @@ else
|
||||
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
||||
resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
|
||||
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
|
||||
+link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -532,6 +543,7 @@ endif
|
||||
# The static libraries.
|
||||
ifeq (yes,$(build-static))
|
||||
link-libc-static = $(common-objpfx)libc.a $(static-gnulib) $(common-objpfx)libc.a
|
||||
+link-libc-static-tests = $(common-objpfx)libc.a $(static-gnulib-tests) $(common-objpfx)libc.a
|
||||
else
|
||||
ifeq (yes,$(build-shared))
|
||||
# We can try to link the programs with lib*_pic.a...
|
||||
@@ -551,8 +563,12 @@ ifneq ($(have-as-needed),yes)
|
||||
else
|
||||
libgcc_eh := -Wl,--as-needed -lgcc_s$(libgcc_s_suffix) $(libunwind) -Wl,--no-as-needed
|
||||
endif
|
||||
-gnulib := -lgcc $(libgcc_eh)
|
||||
-static-gnulib := -lgcc -lgcc_eh $(libunwind)
|
||||
+gnulib-arch =
|
||||
+gnulib = -lgcc $(gnulib-arch)
|
||||
+gnulib-tests := -lgcc $(libgcc_eh)
|
||||
+static-gnulib-arch =
|
||||
+static-gnulib = -lgcc $(static-gnulib-arch)
|
||||
+static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
|
||||
libc.so-gnulib := -lgcc
|
||||
endif
|
||||
ifeq ($(elf),yes)
|
||||
diff --git a/Rules b/Rules
|
||||
index 5ace24cee0..45eb7541dc 100644
|
||||
--- a/Rules
|
||||
+++ b/Rules
|
||||
@@ -104,29 +104,52 @@ xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-bp.out)
|
||||
endif
|
||||
|
||||
ifeq ($(build-programs),yes)
|
||||
-binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
||||
-binaries-static = $(others-static) $(tests-static) $(xtests-static)
|
||||
+binaries-all-notests = $(others) $(sysdep-others)
|
||||
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all = $(binaries-all-notests) $(binaries-all-tests)
|
||||
+binaries-static-notests = $(others-static)
|
||||
+binaries-static-tests = $(tests-static) $(xtests-static)
|
||||
+binaries-static = $(binaries-static-notests) $(binaries-static-tests)
|
||||
else
|
||||
-binaries-all = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all-notests =
|
||||
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all = $(binaries-all-tests)
|
||||
+binaries-static-notests =
|
||||
+binaries-static-tests =
|
||||
binaries-static =
|
||||
endif
|
||||
|
||||
-binaries-shared = $(filter-out $(binaries-static), $(binaries-all))
|
||||
+binaries-shared-tests = $(filter-out $(binaries-static), $(binaries-all-tests))
|
||||
+binaries-shared-notests = $(filter-out $(binaries-static), $(binaries-all-notests))
|
||||
|
||||
-ifneq "$(strip $(binaries-shared))" ""
|
||||
-$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
||||
+ifneq "$(strip $(binaries-shared-notests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
$(+link)
|
||||
endif
|
||||
|
||||
-ifneq "$(strip $(binaries-static))" ""
|
||||
-$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
||||
+ifneq "$(strip $(binaries-shared-tests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
|
||||
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
+ $(+link-tests)
|
||||
+endif
|
||||
+
|
||||
+ifneq "$(strip $(binaries-static-notests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
||||
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
$(+link-static)
|
||||
endif
|
||||
|
||||
+ifneq "$(strip $(binaries-static-tests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
|
||||
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
|
||||
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
+ $(+link-static-tests)
|
||||
+endif
|
||||
+
|
||||
ifeq ($(build-bounded),yes)
|
||||
binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs))
|
||||
$(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index 2d2d568013..fe1924ebd4 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -150,6 +150,8 @@ others = sprof sln
|
||||
install-bin = sprof
|
||||
others-static = sln
|
||||
install-rootsbin = sln
|
||||
+sln-modules := static-stubs
|
||||
+extra-objs += $(sln-modules:=.o)
|
||||
|
||||
ifeq (yes,$(use-ldconfig))
|
||||
ifeq (yes,$(build-shared))
|
||||
@@ -157,7 +159,7 @@ others-static += ldconfig
|
||||
others += ldconfig
|
||||
install-rootsbin += ldconfig
|
||||
|
||||
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
|
||||
+ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs
|
||||
extra-objs += $(ldconfig-modules:=.o)
|
||||
|
||||
# To find xmalloc.c and xstrdup.c
|
||||
@@ -458,6 +460,8 @@ $(objpfx)ldd: ldd.bash.in $(common-objpfx)soversions.mk \
|
||||
|
||||
$(objpfx)sprof: $(libdl)
|
||||
|
||||
+$(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)
|
||||
+
|
||||
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
|
||||
SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
|
||||
CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
|
211
var/spack/repos/builtin/packages/glibc/95f5a9a-2.15.patch
Normal file
211
var/spack/repos/builtin/packages/glibc/95f5a9a-2.15.patch
Normal file
@ -0,0 +1,211 @@
|
||||
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||
|
||||
diff --git a/Makeconfig b/Makeconfig
|
||||
index 8195245052..b23cee8723 100644
|
||||
--- a/Makeconfig
|
||||
+++ b/Makeconfig
|
||||
@@ -447,7 +447,7 @@ endif
|
||||
|
||||
# Command for linking programs with the C library.
|
||||
ifndef +link
|
||||
-+link = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||
++link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
|
||||
$(addprefix $(csu-objpfx),$(start-installed-name)) \
|
||||
@@ -456,7 +456,10 @@ ifndef +link
|
||||
$(start-installed-name))\
|
||||
$(+preinit) $(link-extra-libs) \
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
- $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
|
||||
+ $(link-extra-libs)
|
||||
++link-after-libc = $(+postctor) $(+postinit)
|
||||
++link = $(+link-before-libc) $(link-libc) $(+link-after-libc)
|
||||
++link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc)
|
||||
endif
|
||||
# Command for linking PIE programs with the C library.
|
||||
ifndef +link-pie
|
||||
@@ -473,7 +476,7 @@ ifndef +link-pie
|
||||
endif
|
||||
# Command for statically linking programs with the C library.
|
||||
ifndef +link-static
|
||||
-+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||
++link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
$(addprefix $(csu-objpfx),$(static-start-installed-name)) \
|
||||
$(+preinit) $(+prector) \
|
||||
@@ -481,7 +484,12 @@ ifndef +link-static
|
||||
$(start-installed-name))\
|
||||
$(+preinit) $(link-extra-libs-static) \
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
- $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit)
|
||||
+ $(link-extra-libs-static) $(link-libc-static)
|
||||
++link-static-after-libc = $(+postctor) $(+postinit)
|
||||
++link-static = $(+link-static-before-libc) $(link-libc-static) \
|
||||
+ $(+link-static-after-libc)
|
||||
++link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \
|
||||
+ $(+link-static-after-libc)
|
||||
endif
|
||||
# Command for statically linking bounded-pointer programs with the C library.
|
||||
ifndef +link-bounded
|
||||
@@ -506,10 +514,12 @@ ifeq ($(elf),yes)
|
||||
# We need the versioned name of libc.so in the deps of $(others) et al
|
||||
# so that the symlink to libc.so is created before anything tries to
|
||||
# run the linked programs.
|
||||
-link-libc = -Wl,-rpath-link=$(rpath-link) \
|
||||
+link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \
|
||||
$(common-objpfx)libc.so$(libc.so-version) \
|
||||
$(common-objpfx)$(patsubst %,$(libtype.oS),c) \
|
||||
- $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed) $(gnulib)
|
||||
+ $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed)
|
||||
+link-libc = $(link-libc-before-gnulib) $(gnulib)
|
||||
+link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests)
|
||||
# This is how to find at build-time things that will be installed there.
|
||||
rpath-dirs = math elf dlfcn nss nis rt resolv crypt
|
||||
endif
|
||||
@@ -520,6 +530,7 @@ else
|
||||
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
||||
resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
|
||||
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
|
||||
+link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -548,6 +559,7 @@ endif
|
||||
# The static libraries.
|
||||
ifeq (yes,$(build-static))
|
||||
link-libc-static = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib) -Wl,--end-group
|
||||
+link-libc-static-tests = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib-tests) -Wl,--end-group
|
||||
else
|
||||
ifeq (yes,$(build-shared))
|
||||
# We can try to link the programs with lib*_pic.a...
|
||||
@@ -567,8 +579,12 @@ ifneq ($(have-as-needed),yes)
|
||||
else
|
||||
libgcc_eh := -Wl,--as-needed -lgcc_s$(libgcc_s_suffix) $(libunwind) -Wl,--no-as-needed
|
||||
endif
|
||||
-gnulib := -lgcc $(libgcc_eh)
|
||||
-static-gnulib := -lgcc -lgcc_eh $(libunwind)
|
||||
+gnulib-arch =
|
||||
+gnulib = -lgcc $(gnulib-arch)
|
||||
+gnulib-tests := -lgcc $(libgcc_eh)
|
||||
+static-gnulib-arch =
|
||||
+static-gnulib = -lgcc $(static-gnulib-arch)
|
||||
+static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
|
||||
libc.so-gnulib := -lgcc
|
||||
endif
|
||||
ifeq ($(elf),yes)
|
||||
diff --git a/Rules b/Rules
|
||||
index 00f03df6da..4a31d2905c 100644
|
||||
--- a/Rules
|
||||
+++ b/Rules
|
||||
@@ -104,29 +104,46 @@ xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-bp.out)
|
||||
endif
|
||||
|
||||
ifeq ($(build-programs),yes)
|
||||
-binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
||||
-binaries-static = $(others-static) $(tests-static) $(xtests-static)
|
||||
+binaries-all-notests = $(others) $(sysdep-others)
|
||||
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all = $(binaries-all-notests) $(binaries-all-tests)
|
||||
+binaries-static-notests = $(others-static)
|
||||
+binaries-static-tests = $(tests-static) $(xtests-static)
|
||||
+binaries-static = $(binaries-static-notests) $(binaries-static-tests)
|
||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
binaries-pie = $(others-pie) $(tests-pie) $(xtests-pie)
|
||||
else
|
||||
binaries-pie =
|
||||
endif
|
||||
else
|
||||
-binaries-all = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all-notests =
|
||||
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all = $(binaries-all-tests)
|
||||
+binaries-static-notests =
|
||||
+binaries-static-tests =
|
||||
binaries-static =
|
||||
binaries-pie =
|
||||
endif
|
||||
|
||||
-binaries-shared = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||
- $(binaries-all))
|
||||
+binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||
+ $(binaries-all-tests))
|
||||
+binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||
+ $(binaries-all-notests))
|
||||
|
||||
-ifneq "$(strip $(binaries-shared))" ""
|
||||
-$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
||||
+ifneq "$(strip $(binaries-shared-notests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
$(+link)
|
||||
endif
|
||||
|
||||
+ifneq "$(strip $(binaries-shared-tests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
|
||||
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
+ $(+link-tests)
|
||||
+endif
|
||||
+
|
||||
ifneq "$(strip $(binaries-pie))" ""
|
||||
$(addprefix $(objpfx),$(binaries-pie)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
@@ -134,13 +151,20 @@ $(addprefix $(objpfx),$(binaries-pie)): %: %.o \
|
||||
$(+link-pie)
|
||||
endif
|
||||
|
||||
-ifneq "$(strip $(binaries-static))" ""
|
||||
-$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
||||
+ifneq "$(strip $(binaries-static-notests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
||||
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
$(+link-static)
|
||||
endif
|
||||
|
||||
+ifneq "$(strip $(binaries-static-tests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
|
||||
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
|
||||
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
+ $(+link-static-tests)
|
||||
+endif
|
||||
+
|
||||
ifeq ($(build-bounded),yes)
|
||||
binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs))
|
||||
$(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index f20f52dee1..64555b9243 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -156,6 +156,8 @@ others = sprof sln pldd
|
||||
install-bin = sprof pldd
|
||||
others-static = sln
|
||||
install-rootsbin = sln
|
||||
+sln-modules := static-stubs
|
||||
+extra-objs += $(sln-modules:=.o)
|
||||
|
||||
ifeq (yes,$(use-ldconfig))
|
||||
ifeq (yes,$(build-shared))
|
||||
@@ -163,7 +165,7 @@ others-static += ldconfig
|
||||
others += ldconfig
|
||||
install-rootsbin += ldconfig
|
||||
|
||||
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
|
||||
+ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs
|
||||
extra-objs += $(ldconfig-modules:=.o)
|
||||
|
||||
pldd-modules := xmalloc
|
||||
@@ -495,6 +497,8 @@ $(objpfx)ldd: ldd.bash.in $(common-objpfx)soversions.mk \
|
||||
|
||||
$(objpfx)sprof: $(libdl)
|
||||
|
||||
+$(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)
|
||||
+
|
||||
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
|
||||
|
||||
$(objpfx)pldd: $(pldd-modules:%=$(objpfx)%.o)
|
214
var/spack/repos/builtin/packages/glibc/95f5a9a-2.16.patch
Normal file
214
var/spack/repos/builtin/packages/glibc/95f5a9a-2.16.patch
Normal file
@ -0,0 +1,214 @@
|
||||
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||
|
||||
diff --git a/Makeconfig b/Makeconfig
|
||||
index 417fa508a6..c860e68cdd 100644
|
||||
--- a/Makeconfig
|
||||
+++ b/Makeconfig
|
||||
@@ -415,9 +415,9 @@ LDFLAGS.so += $(hashstyle-LDFLAGS)
|
||||
LDFLAGS-rtld += $(hashstyle-LDFLAGS)
|
||||
endif
|
||||
|
||||
-# Command for linking programs with the C library.
|
||||
+# Commands for linking programs with the C library.
|
||||
ifndef +link
|
||||
-+link = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||
++link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
|
||||
$(addprefix $(csu-objpfx),$(start-installed-name)) \
|
||||
@@ -426,7 +426,10 @@ ifndef +link
|
||||
$(start-installed-name))\
|
||||
$(+preinit) $(link-extra-libs) \
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
- $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
|
||||
+ $(link-extra-libs)
|
||||
++link-after-libc = $(+postctor) $(+postinit)
|
||||
++link = $(+link-before-libc) $(link-libc) $(+link-after-libc)
|
||||
++link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc)
|
||||
endif
|
||||
# Command for linking PIE programs with the C library.
|
||||
ifndef +link-pie
|
||||
@@ -443,7 +446,7 @@ ifndef +link-pie
|
||||
endif
|
||||
# Command for statically linking programs with the C library.
|
||||
ifndef +link-static
|
||||
-+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||
++link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
$(addprefix $(csu-objpfx),$(static-start-installed-name)) \
|
||||
$(+preinit) $(+prector) \
|
||||
@@ -451,7 +454,12 @@ ifndef +link-static
|
||||
$(start-installed-name))\
|
||||
$(+preinit) $(link-extra-libs-static) \
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
- $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit)
|
||||
+ $(link-extra-libs-static) $(link-libc-static)
|
||||
++link-static-after-libc = $(+postctor) $(+postinit)
|
||||
++link-static = $(+link-static-before-libc) $(link-libc-static) \
|
||||
+ $(+link-static-after-libc)
|
||||
++link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \
|
||||
+ $(+link-static-after-libc)
|
||||
endif
|
||||
# Command for statically linking bounded-pointer programs with the C library.
|
||||
ifndef +link-bounded
|
||||
@@ -475,10 +483,12 @@ ifeq (yes,$(build-shared))
|
||||
# We need the versioned name of libc.so in the deps of $(others) et al
|
||||
# so that the symlink to libc.so is created before anything tries to
|
||||
# run the linked programs.
|
||||
-link-libc = -Wl,-rpath-link=$(rpath-link) \
|
||||
+link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \
|
||||
$(common-objpfx)libc.so$(libc.so-version) \
|
||||
$(common-objpfx)$(patsubst %,$(libtype.oS),c) \
|
||||
- $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed) $(gnulib)
|
||||
+ $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed)
|
||||
+link-libc = $(link-libc-before-gnulib) $(gnulib)
|
||||
+link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests)
|
||||
# This is how to find at build-time things that will be installed there.
|
||||
rpath-dirs = math elf dlfcn nss nis rt resolv crypt
|
||||
rpath-link = \
|
||||
@@ -488,6 +498,7 @@ else
|
||||
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
||||
resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
|
||||
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
|
||||
+link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -513,6 +524,7 @@ endif
|
||||
|
||||
# The static libraries.
|
||||
link-libc-static = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib) -Wl,--end-group
|
||||
+link-libc-static-tests = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib-tests) -Wl,--end-group
|
||||
link-libc-bounded = $(common-objpfx)libc_b.a $(gnulib) $(common-objpfx)libc_b.a
|
||||
|
||||
ifndef gnulib
|
||||
@@ -522,8 +534,12 @@ else
|
||||
libunwind = -lunwind
|
||||
endif
|
||||
libgcc_eh := -Wl,--as-needed -lgcc_s $(libunwind) -Wl,--no-as-needed
|
||||
-gnulib := -lgcc $(libgcc_eh)
|
||||
-static-gnulib := -lgcc -lgcc_eh $(libunwind)
|
||||
+gnulib-arch =
|
||||
+gnulib = -lgcc $(gnulib-arch)
|
||||
+gnulib-tests := -lgcc $(libgcc_eh)
|
||||
+static-gnulib-arch =
|
||||
+static-gnulib = -lgcc $(static-gnulib-arch)
|
||||
+static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
|
||||
libc.so-gnulib := -lgcc
|
||||
endif
|
||||
+preinit = $(addprefix $(csu-objpfx),crti.o)
|
||||
diff --git a/Rules b/Rules
|
||||
index 3c61a2933b..be3a738574 100644
|
||||
--- a/Rules
|
||||
+++ b/Rules
|
||||
@@ -103,29 +103,46 @@ xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-bp.out)
|
||||
endif
|
||||
|
||||
ifeq ($(build-programs),yes)
|
||||
-binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
||||
-binaries-static = $(others-static) $(tests-static) $(xtests-static)
|
||||
+binaries-all-notests = $(others) $(sysdep-others)
|
||||
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all = $(binaries-all-notests) $(binaries-all-tests)
|
||||
+binaries-static-notests = $(others-static)
|
||||
+binaries-static-tests = $(tests-static) $(xtests-static)
|
||||
+binaries-static = $(binaries-static-notests) $(binaries-static-tests)
|
||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
binaries-pie = $(others-pie) $(tests-pie) $(xtests-pie)
|
||||
else
|
||||
binaries-pie =
|
||||
endif
|
||||
else
|
||||
-binaries-all = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all-notests =
|
||||
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||
+binaries-all = $(binaries-all-tests)
|
||||
+binaries-static-notests =
|
||||
+binaries-static-tests =
|
||||
binaries-static =
|
||||
binaries-pie =
|
||||
endif
|
||||
|
||||
-binaries-shared = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||
- $(binaries-all))
|
||||
+binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||
+ $(binaries-all-tests))
|
||||
+binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||
+ $(binaries-all-notests))
|
||||
|
||||
-ifneq "$(strip $(binaries-shared))" ""
|
||||
-$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
||||
+ifneq "$(strip $(binaries-shared-notests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
$(+link)
|
||||
endif
|
||||
|
||||
+ifneq "$(strip $(binaries-shared-tests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
|
||||
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
+ $(+link-tests)
|
||||
+endif
|
||||
+
|
||||
ifneq "$(strip $(binaries-pie))" ""
|
||||
$(addprefix $(objpfx),$(binaries-pie)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||
@@ -133,13 +150,20 @@ $(addprefix $(objpfx),$(binaries-pie)): %: %.o \
|
||||
$(+link-pie)
|
||||
endif
|
||||
|
||||
-ifneq "$(strip $(binaries-static))" ""
|
||||
-$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
||||
+ifneq "$(strip $(binaries-static-notests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \
|
||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
||||
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
$(+link-static)
|
||||
endif
|
||||
|
||||
+ifneq "$(strip $(binaries-static-tests))" ""
|
||||
+$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
|
||||
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
|
||||
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
+ $(+link-static-tests)
|
||||
+endif
|
||||
+
|
||||
ifeq ($(build-bounded),yes)
|
||||
binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs))
|
||||
$(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index 0c26ce545a..90541991d2 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -71,6 +71,8 @@ others = sprof sln pldd
|
||||
install-bin = sprof pldd
|
||||
others-static = sln
|
||||
install-rootsbin = sln
|
||||
+sln-modules := static-stubs
|
||||
+extra-objs += $(sln-modules:=.o)
|
||||
|
||||
ifeq (yes,$(use-ldconfig))
|
||||
ifeq (yes,$(build-shared))
|
||||
@@ -78,7 +80,7 @@ others-static += ldconfig
|
||||
others += ldconfig
|
||||
install-rootsbin += ldconfig
|
||||
|
||||
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
|
||||
+ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs
|
||||
extra-objs += $(ldconfig-modules:=.o)
|
||||
endif
|
||||
endif
|
||||
@@ -411,6 +413,8 @@ $(objpfx)ldd: ldd.bash.in $(common-objpfx)soversions.mk \
|
||||
|
||||
$(objpfx)sprof: $(libdl)
|
||||
|
||||
+$(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)
|
||||
+
|
||||
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
|
||||
|
||||
$(objpfx)pldd: $(pldd-modules:%=$(objpfx)%.o)
|
57
var/spack/repos/builtin/packages/glibc/95f5a9a-stub.patch
Normal file
57
var/spack/repos/builtin/packages/glibc/95f5a9a-stub.patch
Normal file
@ -0,0 +1,57 @@
|
||||
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||
|
||||
diff --git a/elf/static-stubs.c b/elf/static-stubs.c
|
||||
new file mode 100644
|
||||
index 0000000000..6c5eebc3fb
|
||||
--- /dev/null
|
||||
+++ b/elf/static-stubs.c
|
||||
@@ -0,0 +1,46 @@
|
||||
+/* Stub implementations of functions to link into statically linked
|
||||
+ programs without needing libgcc_eh.
|
||||
+ Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+/* Avoid backtrace (and so _Unwind_Backtrace) dependencies from
|
||||
+ sysdeps/unix/sysv/linux/libc_fatal.c. */
|
||||
+#include <sysdeps/posix/libc_fatal.c>
|
||||
+
|
||||
+#include <stdlib.h>
|
||||
+#include <unwind.h>
|
||||
+
|
||||
+/* These programs do not use thread cancellation, so _Unwind_Resume
|
||||
+ and the personality routine are never actually called. */
|
||||
+
|
||||
+void
|
||||
+_Unwind_Resume (struct _Unwind_Exception *exc __attribute__ ((unused)))
|
||||
+{
|
||||
+ abort ();
|
||||
+}
|
||||
+
|
||||
+_Unwind_Reason_Code
|
||||
+__gcc_personality_v0 (int version __attribute__ ((unused)),
|
||||
+ _Unwind_Action actions __attribute__ ((unused)),
|
||||
+ _Unwind_Exception_Class exception_class
|
||||
+ __attribute__ ((unused)),
|
||||
+ struct _Unwind_Exception *ue_header
|
||||
+ __attribute__ ((unused)),
|
||||
+ struct _Unwind_Context *context __attribute__ ((unused)))
|
||||
+{
|
||||
+ abort ();
|
||||
+}
|
176
var/spack/repos/builtin/packages/glibc/965cb60-2.5.patch
Normal file
176
var/spack/repos/builtin/packages/glibc/965cb60-2.5.patch
Normal file
@ -0,0 +1,176 @@
|
||||
diff --git a/csu/libc-start.c b/csu/libc-start.c
|
||||
index 194db6b1ec..f85ec9604e 100644
|
||||
--- a/csu/libc-start.c
|
||||
+++ b/csu/libc-start.c
|
||||
@@ -151,8 +151,8 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
|
||||
|
||||
# ifndef SHARED
|
||||
/* Set up the stack checker's canary. */
|
||||
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||
-# ifdef THREAD_SET_STACK_GUARD
|
||||
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||
+# ifdef THREAD_SET_STACK_GUARD
|
||||
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||
# else
|
||||
__stack_chk_guard = stack_chk_guard;
|
||||
diff --git a/elf/dl-support.c b/elf/dl-support.c
|
||||
index 4b7be6bc27..f62867abf1 100644
|
||||
--- a/elf/dl-support.c
|
||||
+++ b/elf/dl-support.c
|
||||
@@ -84,6 +84,9 @@ struct r_scope_elem _dl_initial_searchlist;
|
||||
int _dl_starting_up = 1;
|
||||
#endif
|
||||
|
||||
+/* Random data provided by the kernel. */
|
||||
+void *_dl_random;
|
||||
+
|
||||
/* Get architecture specific initializer. */
|
||||
#include <dl-procinfo.c>
|
||||
|
||||
@@ -218,6 +221,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
|
||||
__libc_enable_secure = av->a_un.a_val;
|
||||
__libc_enable_secure_decided = 1;
|
||||
break;
|
||||
+ case AT_RANDOM:
|
||||
+ _dl_random = (void *) av->a_un.a_val;
|
||||
+ break;
|
||||
}
|
||||
if (seen == 0xf)
|
||||
{
|
||||
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
|
||||
index 68e08f480a..133ba0d29f 100644
|
||||
--- a/elf/dl-sysdep.c
|
||||
+++ b/elf/dl-sysdep.c
|
||||
@@ -62,6 +62,7 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
|
||||
void *__libc_stack_end attribute_relro = NULL;
|
||||
rtld_hidden_data_def(__libc_stack_end)
|
||||
static ElfW(auxv_t) *_dl_auxv attribute_relro;
|
||||
+void *_dl_random attribute_relro = NULL;
|
||||
|
||||
#ifndef DL_FIND_ARG_COMPONENTS
|
||||
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
|
||||
@@ -173,6 +174,9 @@ _dl_sysdep_start (void **start_argptr,
|
||||
GLRO(dl_sysinfo_dso) = (void *) av->a_un.a_val;
|
||||
break;
|
||||
#endif
|
||||
+ case AT_RANDOM:
|
||||
+ _dl_random = (void *) av->a_un.a_val;
|
||||
+ break;
|
||||
#ifdef DL_PLATFORM_AUXV
|
||||
DL_PLATFORM_AUXV
|
||||
#endif
|
||||
@@ -293,6 +297,7 @@ _dl_show_auxv (void)
|
||||
[AT_SECURE - 2] = { "AT_SECURE: ", dec },
|
||||
[AT_SYSINFO - 2] = { "AT_SYSINFO: 0x", hex },
|
||||
[AT_SYSINFO_EHDR - 2] = { "AT_SYSINFO_EHDR: 0x", hex },
|
||||
+ [AT_RANDOM - 2] = { "AT_RANDOM: 0x", hex },
|
||||
};
|
||||
unsigned int idx = (unsigned int) (av->a_type - 2);
|
||||
|
||||
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||
index a357a46987..a02a319677 100644
|
||||
--- a/elf/rtld.c
|
||||
+++ b/elf/rtld.c
|
||||
@@ -1837,7 +1837,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
|
||||
#endif
|
||||
|
||||
/* Set up the stack checker's canary. */
|
||||
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||
#ifdef THREAD_SET_STACK_GUARD
|
||||
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||
#else
|
||||
diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h
|
||||
index 60b84a900d..02ec28d424 100644
|
||||
--- a/sysdeps/generic/dl-osinfo.h
|
||||
+++ b/sysdeps/generic/dl-osinfo.h
|
||||
@@ -1,12 +1,29 @@
|
||||
#include <stdint.h>
|
||||
|
||||
static inline uintptr_t __attribute__ ((always_inline))
|
||||
-_dl_setup_stack_chk_guard (void)
|
||||
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||
{
|
||||
- uintptr_t ret = 0;
|
||||
- unsigned char *p = (unsigned char *) &ret;
|
||||
- p[sizeof (ret) - 1] = 255;
|
||||
- p[sizeof (ret) - 2] = '\n';
|
||||
- p[0] = 0;
|
||||
+ uintptr_t ret;
|
||||
+ if (dl_random == NULL)
|
||||
+ {
|
||||
+ ret = 0;
|
||||
+ unsigned char *p = (unsigned char *) &ret;
|
||||
+ p[sizeof (ret) - 1] = 255;
|
||||
+ p[sizeof (ret) - 2] = '\n';
|
||||
+ p[0] = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ memcmp (&ret, dl_random, sizeof (ret));
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static inline uintptr_t __attribute__ ((always_inline))
|
||||
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||
+{
|
||||
+ uintptr_t ret;
|
||||
+ if (dl_random == NULL)
|
||||
+ ret = stack_chk_guard;
|
||||
+ else
|
||||
+ memcmp (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||
return ret;
|
||||
}
|
||||
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
|
||||
index eee6141c6a..54789c0639 100644
|
||||
--- a/sysdeps/generic/ldsodefs.h
|
||||
+++ b/sysdeps/generic/ldsodefs.h
|
||||
@@ -740,6 +740,9 @@ weak_extern (_dl_starting_up)
|
||||
extern int _dl_starting_up_internal attribute_hidden;
|
||||
#endif
|
||||
|
||||
+/* Random data provided by the kernel. */
|
||||
+extern void *_dl_random attribute_hidden;
|
||||
+
|
||||
/* OS-dependent function to open the zero-fill device. */
|
||||
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
index 0738501a56..d796651ff4 100644
|
||||
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
@@ -159,22 +159,20 @@ _dl_discover_osversion (void)
|
||||
} while (0)
|
||||
|
||||
static inline uintptr_t __attribute__ ((always_inline))
|
||||
-_dl_setup_stack_chk_guard (void)
|
||||
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||
{
|
||||
uintptr_t ret;
|
||||
-#ifdef ENABLE_STACKGUARD_RANDOMIZE
|
||||
- int fd = __open ("/dev/urandom", O_RDONLY);
|
||||
- if (fd >= 0)
|
||||
- {
|
||||
- ssize_t reslen = __read (fd, &ret, sizeof (ret));
|
||||
- __close (fd);
|
||||
- if (reslen == (ssize_t) sizeof (ret))
|
||||
- return ret;
|
||||
- }
|
||||
-#endif
|
||||
- ret = 0;
|
||||
- unsigned char *p = (unsigned char *) &ret;
|
||||
- p[sizeof (ret) - 1] = 255;
|
||||
- p[sizeof (ret) - 2] = '\n';
|
||||
+ /* We need in the moment only 8 bytes on 32-bit platforms and 16
|
||||
+ bytes on 64-bit platforms. Therefore we can use the data
|
||||
+ directly and not use the kernel-provided data to seed a PRNG. */
|
||||
+ memcpy (&ret, dl_random, sizeof (ret));
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static inline uintptr_t __attribute__ ((always_inline))
|
||||
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||
+{
|
||||
+ uintptr_t ret;
|
||||
+ memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||
return ret;
|
||||
}
|
176
var/spack/repos/builtin/packages/glibc/965cb60-2.6.patch
Normal file
176
var/spack/repos/builtin/packages/glibc/965cb60-2.6.patch
Normal file
@ -0,0 +1,176 @@
|
||||
diff --git a/csu/libc-start.c b/csu/libc-start.c
|
||||
index 0ed993651e..a8b1be8c7d 100644
|
||||
--- a/csu/libc-start.c
|
||||
+++ b/csu/libc-start.c
|
||||
@@ -142,8 +142,8 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
|
||||
|
||||
# ifndef SHARED
|
||||
/* Set up the stack checker's canary. */
|
||||
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||
-# ifdef THREAD_SET_STACK_GUARD
|
||||
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||
+# ifdef THREAD_SET_STACK_GUARD
|
||||
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||
# else
|
||||
__stack_chk_guard = stack_chk_guard;
|
||||
diff --git a/elf/dl-support.c b/elf/dl-support.c
|
||||
index 2c11ac6881..321ed07a18 100644
|
||||
--- a/elf/dl-support.c
|
||||
+++ b/elf/dl-support.c
|
||||
@@ -84,6 +84,9 @@ struct r_scope_elem _dl_initial_searchlist;
|
||||
int _dl_starting_up = 1;
|
||||
#endif
|
||||
|
||||
+/* Random data provided by the kernel. */
|
||||
+void *_dl_random;
|
||||
+
|
||||
/* Get architecture specific initializer. */
|
||||
#include <dl-procinfo.c>
|
||||
|
||||
@@ -216,6 +219,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
|
||||
__libc_enable_secure = av->a_un.a_val;
|
||||
__libc_enable_secure_decided = 1;
|
||||
break;
|
||||
+ case AT_RANDOM:
|
||||
+ _dl_random = (void *) av->a_un.a_val;
|
||||
+ break;
|
||||
# ifdef DL_PLATFORM_AUXV
|
||||
DL_PLATFORM_AUXV
|
||||
# endif
|
||||
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
|
||||
index 85e331a90f..6ce20b5150 100644
|
||||
--- a/elf/dl-sysdep.c
|
||||
+++ b/elf/dl-sysdep.c
|
||||
@@ -62,6 +62,7 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
|
||||
void *__libc_stack_end attribute_relro = NULL;
|
||||
rtld_hidden_data_def(__libc_stack_end)
|
||||
static ElfW(auxv_t) *_dl_auxv attribute_relro;
|
||||
+void *_dl_random attribute_relro = NULL;
|
||||
|
||||
#ifndef DL_FIND_ARG_COMPONENTS
|
||||
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
|
||||
@@ -173,6 +174,9 @@ _dl_sysdep_start (void **start_argptr,
|
||||
GLRO(dl_sysinfo_dso) = (void *) av->a_un.a_val;
|
||||
break;
|
||||
#endif
|
||||
+ case AT_RANDOM:
|
||||
+ _dl_random = (void *) av->a_un.a_val;
|
||||
+ break;
|
||||
#ifdef DL_PLATFORM_AUXV
|
||||
DL_PLATFORM_AUXV
|
||||
#endif
|
||||
@@ -293,6 +297,7 @@ _dl_show_auxv (void)
|
||||
[AT_SECURE - 2] = { "AT_SECURE: ", dec },
|
||||
[AT_SYSINFO - 2] = { "AT_SYSINFO: 0x", hex },
|
||||
[AT_SYSINFO_EHDR - 2] = { "AT_SYSINFO_EHDR: 0x", hex },
|
||||
+ [AT_RANDOM - 2] = { "AT_RANDOM: 0x", hex },
|
||||
};
|
||||
unsigned int idx = (unsigned int) (av->a_type - 2);
|
||||
|
||||
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||
index 7612a69324..e77ac43713 100644
|
||||
--- a/elf/rtld.c
|
||||
+++ b/elf/rtld.c
|
||||
@@ -1816,7 +1816,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
|
||||
tcbp = init_tls ();
|
||||
|
||||
/* Set up the stack checker's canary. */
|
||||
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||
#ifdef THREAD_SET_STACK_GUARD
|
||||
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||
#else
|
||||
diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h
|
||||
index 60b84a900d..02ec28d424 100644
|
||||
--- a/sysdeps/generic/dl-osinfo.h
|
||||
+++ b/sysdeps/generic/dl-osinfo.h
|
||||
@@ -1,12 +1,29 @@
|
||||
#include <stdint.h>
|
||||
|
||||
static inline uintptr_t __attribute__ ((always_inline))
|
||||
-_dl_setup_stack_chk_guard (void)
|
||||
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||
{
|
||||
- uintptr_t ret = 0;
|
||||
- unsigned char *p = (unsigned char *) &ret;
|
||||
- p[sizeof (ret) - 1] = 255;
|
||||
- p[sizeof (ret) - 2] = '\n';
|
||||
- p[0] = 0;
|
||||
+ uintptr_t ret;
|
||||
+ if (dl_random == NULL)
|
||||
+ {
|
||||
+ ret = 0;
|
||||
+ unsigned char *p = (unsigned char *) &ret;
|
||||
+ p[sizeof (ret) - 1] = 255;
|
||||
+ p[sizeof (ret) - 2] = '\n';
|
||||
+ p[0] = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ memcmp (&ret, dl_random, sizeof (ret));
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static inline uintptr_t __attribute__ ((always_inline))
|
||||
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||
+{
|
||||
+ uintptr_t ret;
|
||||
+ if (dl_random == NULL)
|
||||
+ ret = stack_chk_guard;
|
||||
+ else
|
||||
+ memcmp (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||
return ret;
|
||||
}
|
||||
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
|
||||
index aefd105f0a..929b91b56c 100644
|
||||
--- a/sysdeps/generic/ldsodefs.h
|
||||
+++ b/sysdeps/generic/ldsodefs.h
|
||||
@@ -726,6 +726,9 @@ weak_extern (_dl_starting_up)
|
||||
extern int _dl_starting_up_internal attribute_hidden;
|
||||
#endif
|
||||
|
||||
+/* Random data provided by the kernel. */
|
||||
+extern void *_dl_random attribute_hidden;
|
||||
+
|
||||
/* OS-dependent function to open the zero-fill device. */
|
||||
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
index 0738501a56..d796651ff4 100644
|
||||
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
@@ -159,22 +159,20 @@ _dl_discover_osversion (void)
|
||||
} while (0)
|
||||
|
||||
static inline uintptr_t __attribute__ ((always_inline))
|
||||
-_dl_setup_stack_chk_guard (void)
|
||||
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||
{
|
||||
uintptr_t ret;
|
||||
-#ifdef ENABLE_STACKGUARD_RANDOMIZE
|
||||
- int fd = __open ("/dev/urandom", O_RDONLY);
|
||||
- if (fd >= 0)
|
||||
- {
|
||||
- ssize_t reslen = __read (fd, &ret, sizeof (ret));
|
||||
- __close (fd);
|
||||
- if (reslen == (ssize_t) sizeof (ret))
|
||||
- return ret;
|
||||
- }
|
||||
-#endif
|
||||
- ret = 0;
|
||||
- unsigned char *p = (unsigned char *) &ret;
|
||||
- p[sizeof (ret) - 1] = 255;
|
||||
- p[sizeof (ret) - 2] = '\n';
|
||||
+ /* We need in the moment only 8 bytes on 32-bit platforms and 16
|
||||
+ bytes on 64-bit platforms. Therefore we can use the data
|
||||
+ directly and not use the kernel-provided data to seed a PRNG. */
|
||||
+ memcpy (&ret, dl_random, sizeof (ret));
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static inline uintptr_t __attribute__ ((always_inline))
|
||||
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||
+{
|
||||
+ uintptr_t ret;
|
||||
+ memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||
return ret;
|
||||
}
|
174
var/spack/repos/builtin/packages/glibc/965cb60-2.7.patch
Normal file
174
var/spack/repos/builtin/packages/glibc/965cb60-2.7.patch
Normal file
@ -0,0 +1,174 @@
|
||||
diff --git a/csu/libc-start.c b/csu/libc-start.c
|
||||
index a14ed71616..8b3f436f46 100644
|
||||
--- a/csu/libc-start.c
|
||||
+++ b/csu/libc-start.c
|
||||
@@ -140,7 +140,7 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
|
||||
__pthread_initialize_minimal ();
|
||||
|
||||
/* Set up the stack checker's canary. */
|
||||
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||
# ifdef THREAD_SET_STACK_GUARD
|
||||
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||
# else
|
||||
diff --git a/elf/dl-support.c b/elf/dl-support.c
|
||||
index 2c11ac6881..321ed07a18 100644
|
||||
--- a/elf/dl-support.c
|
||||
+++ b/elf/dl-support.c
|
||||
@@ -84,6 +84,9 @@ struct r_scope_elem _dl_initial_searchlist;
|
||||
int _dl_starting_up = 1;
|
||||
#endif
|
||||
|
||||
+/* Random data provided by the kernel. */
|
||||
+void *_dl_random;
|
||||
+
|
||||
/* Get architecture specific initializer. */
|
||||
#include <dl-procinfo.c>
|
||||
|
||||
@@ -216,6 +219,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
|
||||
__libc_enable_secure = av->a_un.a_val;
|
||||
__libc_enable_secure_decided = 1;
|
||||
break;
|
||||
+ case AT_RANDOM:
|
||||
+ _dl_random = (void *) av->a_un.a_val;
|
||||
+ break;
|
||||
# ifdef DL_PLATFORM_AUXV
|
||||
DL_PLATFORM_AUXV
|
||||
# endif
|
||||
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
|
||||
index 85e331a90f..6ce20b5150 100644
|
||||
--- a/elf/dl-sysdep.c
|
||||
+++ b/elf/dl-sysdep.c
|
||||
@@ -62,6 +62,7 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
|
||||
void *__libc_stack_end attribute_relro = NULL;
|
||||
rtld_hidden_data_def(__libc_stack_end)
|
||||
static ElfW(auxv_t) *_dl_auxv attribute_relro;
|
||||
+void *_dl_random attribute_relro = NULL;
|
||||
|
||||
#ifndef DL_FIND_ARG_COMPONENTS
|
||||
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
|
||||
@@ -173,6 +174,9 @@ _dl_sysdep_start (void **start_argptr,
|
||||
GLRO(dl_sysinfo_dso) = (void *) av->a_un.a_val;
|
||||
break;
|
||||
#endif
|
||||
+ case AT_RANDOM:
|
||||
+ _dl_random = (void *) av->a_un.a_val;
|
||||
+ break;
|
||||
#ifdef DL_PLATFORM_AUXV
|
||||
DL_PLATFORM_AUXV
|
||||
#endif
|
||||
@@ -293,6 +297,7 @@ _dl_show_auxv (void)
|
||||
[AT_SECURE - 2] = { "AT_SECURE: ", dec },
|
||||
[AT_SYSINFO - 2] = { "AT_SYSINFO: 0x", hex },
|
||||
[AT_SYSINFO_EHDR - 2] = { "AT_SYSINFO_EHDR: 0x", hex },
|
||||
+ [AT_RANDOM - 2] = { "AT_RANDOM: 0x", hex },
|
||||
};
|
||||
unsigned int idx = (unsigned int) (av->a_type - 2);
|
||||
|
||||
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||
index 7612a69324..e77ac43713 100644
|
||||
--- a/elf/rtld.c
|
||||
+++ b/elf/rtld.c
|
||||
@@ -1816,7 +1816,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
|
||||
tcbp = init_tls ();
|
||||
|
||||
/* Set up the stack checker's canary. */
|
||||
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||
#ifdef THREAD_SET_STACK_GUARD
|
||||
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||
#else
|
||||
diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h
|
||||
index 60b84a900d..02ec28d424 100644
|
||||
--- a/sysdeps/generic/dl-osinfo.h
|
||||
+++ b/sysdeps/generic/dl-osinfo.h
|
||||
@@ -1,12 +1,29 @@
|
||||
#include <stdint.h>
|
||||
|
||||
static inline uintptr_t __attribute__ ((always_inline))
|
||||
-_dl_setup_stack_chk_guard (void)
|
||||
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||
{
|
||||
- uintptr_t ret = 0;
|
||||
- unsigned char *p = (unsigned char *) &ret;
|
||||
- p[sizeof (ret) - 1] = 255;
|
||||
- p[sizeof (ret) - 2] = '\n';
|
||||
- p[0] = 0;
|
||||
+ uintptr_t ret;
|
||||
+ if (dl_random == NULL)
|
||||
+ {
|
||||
+ ret = 0;
|
||||
+ unsigned char *p = (unsigned char *) &ret;
|
||||
+ p[sizeof (ret) - 1] = 255;
|
||||
+ p[sizeof (ret) - 2] = '\n';
|
||||
+ p[0] = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ memcmp (&ret, dl_random, sizeof (ret));
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static inline uintptr_t __attribute__ ((always_inline))
|
||||
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||
+{
|
||||
+ uintptr_t ret;
|
||||
+ if (dl_random == NULL)
|
||||
+ ret = stack_chk_guard;
|
||||
+ else
|
||||
+ memcmp (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||
return ret;
|
||||
}
|
||||
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
|
||||
index 958a099b82..c4d2874085 100644
|
||||
--- a/sysdeps/generic/ldsodefs.h
|
||||
+++ b/sysdeps/generic/ldsodefs.h
|
||||
@@ -726,6 +726,9 @@ weak_extern (_dl_starting_up)
|
||||
extern int _dl_starting_up_internal attribute_hidden;
|
||||
#endif
|
||||
|
||||
+/* Random data provided by the kernel. */
|
||||
+extern void *_dl_random attribute_hidden;
|
||||
+
|
||||
/* OS-dependent function to open the zero-fill device. */
|
||||
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
index 082790f63b..d90f228942 100644
|
||||
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
@@ -154,22 +154,20 @@ _dl_discover_osversion (void)
|
||||
} while (0)
|
||||
|
||||
static inline uintptr_t __attribute__ ((always_inline))
|
||||
-_dl_setup_stack_chk_guard (void)
|
||||
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||
{
|
||||
uintptr_t ret;
|
||||
-#ifdef ENABLE_STACKGUARD_RANDOMIZE
|
||||
- int fd = __open ("/dev/urandom", O_RDONLY);
|
||||
- if (fd >= 0)
|
||||
- {
|
||||
- ssize_t reslen = __read (fd, &ret, sizeof (ret));
|
||||
- __close (fd);
|
||||
- if (reslen == (ssize_t) sizeof (ret))
|
||||
- return ret;
|
||||
- }
|
||||
-#endif
|
||||
- ret = 0;
|
||||
- unsigned char *p = (unsigned char *) &ret;
|
||||
- p[sizeof (ret) - 1] = 255;
|
||||
- p[sizeof (ret) - 2] = '\n';
|
||||
+ /* We need in the moment only 8 bytes on 32-bit platforms and 16
|
||||
+ bytes on 64-bit platforms. Therefore we can use the data
|
||||
+ directly and not use the kernel-provided data to seed a PRNG. */
|
||||
+ memcpy (&ret, dl_random, sizeof (ret));
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static inline uintptr_t __attribute__ ((always_inline))
|
||||
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||
+{
|
||||
+ uintptr_t ret;
|
||||
+ memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||
return ret;
|
||||
}
|
205
var/spack/repos/builtin/packages/glibc/965cb60.patch
Normal file
205
var/spack/repos/builtin/packages/glibc/965cb60.patch
Normal file
@ -0,0 +1,205 @@
|
||||
From 965cb60a21674edb8e20b1a2a41297bcd4622361 Mon Sep 17 00:00:00 2001
|
||||
From: Ulrich Drepper <drepper@redhat.com>
|
||||
Date: Sun, 11 Jan 2009 04:44:06 +0000
|
||||
Subject: [PATCH] * sysdeps/generic/dl-osinfo.h (_dl_setup_stack_chk_guard)
|
||||
|
||||
diff --git a/elf/dl-support.c b/elf/dl-support.c
|
||||
index 6bd573ec57..7b3ccf3d4d 100644
|
||||
--- a/elf/dl-support.c
|
||||
+++ b/elf/dl-support.c
|
||||
@@ -84,6 +84,9 @@ struct r_scope_elem _dl_initial_searchlist;
|
||||
int _dl_starting_up = 1;
|
||||
#endif
|
||||
|
||||
+/* Random data provided by the kernel. */
|
||||
+void *_dl_random;
|
||||
+
|
||||
/* Get architecture specific initializer. */
|
||||
#include <dl-procinfo.c>
|
||||
|
||||
@@ -216,6 +219,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
|
||||
__libc_enable_secure = av->a_un.a_val;
|
||||
__libc_enable_secure_decided = 1;
|
||||
break;
|
||||
+ case AT_RANDOM:
|
||||
+ _dl_random = (void *) av->a_un.a_val;
|
||||
+ break;
|
||||
# ifdef DL_PLATFORM_AUXV
|
||||
DL_PLATFORM_AUXV
|
||||
# endif
|
||||
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
|
||||
index e6f4272a63..29ae895473 100644
|
||||
--- a/elf/dl-sysdep.c
|
||||
+++ b/elf/dl-sysdep.c
|
||||
@@ -62,6 +62,7 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
|
||||
void *__libc_stack_end attribute_relro = NULL;
|
||||
rtld_hidden_data_def(__libc_stack_end)
|
||||
static ElfW(auxv_t) *_dl_auxv attribute_relro;
|
||||
+void *_dl_random attribute_relro = NULL;
|
||||
|
||||
#ifndef DL_FIND_ARG_COMPONENTS
|
||||
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
|
||||
@@ -173,6 +174,9 @@ _dl_sysdep_start (void **start_argptr,
|
||||
GLRO(dl_sysinfo_dso) = (void *) av->a_un.a_val;
|
||||
break;
|
||||
#endif
|
||||
+ case AT_RANDOM:
|
||||
+ _dl_random = (void *) av->a_un.a_val;
|
||||
+ break;
|
||||
#ifdef DL_PLATFORM_AUXV
|
||||
DL_PLATFORM_AUXV
|
||||
#endif
|
||||
@@ -294,6 +298,7 @@ _dl_show_auxv (void)
|
||||
[AT_SECURE - 2] = { "AT_SECURE: ", dec },
|
||||
[AT_SYSINFO - 2] = { "AT_SYSINFO: 0x", hex },
|
||||
[AT_SYSINFO_EHDR - 2] = { "AT_SYSINFO_EHDR: 0x", hex },
|
||||
+ [AT_RANDOM - 2] = { "AT_RANDOM: 0x", hex },
|
||||
};
|
||||
unsigned int idx = (unsigned int) (av->a_type - 2);
|
||||
|
||||
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||
index 46bece7fa3..60d414d637 100644
|
||||
--- a/elf/rtld.c
|
||||
+++ b/elf/rtld.c
|
||||
@@ -841,7 +841,7 @@ static void
|
||||
security_init (void)
|
||||
{
|
||||
/* Set up the stack checker's canary. */
|
||||
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||
#ifdef THREAD_SET_STACK_GUARD
|
||||
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||
#else
|
||||
@@ -851,18 +851,18 @@ security_init (void)
|
||||
/* Set up the pointer guard as well, if necessary. */
|
||||
if (GLRO(dl_pointer_guard))
|
||||
{
|
||||
- // XXX If it is cheap, we should use a separate value.
|
||||
- uintptr_t pointer_chk_guard = stack_chk_guard;
|
||||
-#ifndef HP_TIMING_NONAVAIL
|
||||
- hp_timing_t now;
|
||||
- HP_TIMING_NOW (now);
|
||||
- pointer_chk_guard ^= now;
|
||||
-#endif
|
||||
+ uintptr_t pointer_chk_guard = _dl_setup_pointer_guard (_dl_random,
|
||||
+ stack_chk_guard);
|
||||
#ifdef THREAD_SET_POINTER_GUARD
|
||||
THREAD_SET_POINTER_GUARD (pointer_chk_guard);
|
||||
#endif
|
||||
__pointer_chk_guard_local = pointer_chk_guard;
|
||||
}
|
||||
+
|
||||
+ /* We do not need the _dl_random value anymore. The less
|
||||
+ information we leave behind, the better, so clear the
|
||||
+ variable. */
|
||||
+ _dl_random = NULL;
|
||||
}
|
||||
|
||||
|
||||
diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h
|
||||
index 60b84a900d..02ec28d424 100644
|
||||
--- a/sysdeps/generic/dl-osinfo.h
|
||||
+++ b/sysdeps/generic/dl-osinfo.h
|
||||
@@ -1,12 +1,29 @@
|
||||
#include <stdint.h>
|
||||
|
||||
static inline uintptr_t __attribute__ ((always_inline))
|
||||
-_dl_setup_stack_chk_guard (void)
|
||||
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||
{
|
||||
- uintptr_t ret = 0;
|
||||
- unsigned char *p = (unsigned char *) &ret;
|
||||
- p[sizeof (ret) - 1] = 255;
|
||||
- p[sizeof (ret) - 2] = '\n';
|
||||
- p[0] = 0;
|
||||
+ uintptr_t ret;
|
||||
+ if (dl_random == NULL)
|
||||
+ {
|
||||
+ ret = 0;
|
||||
+ unsigned char *p = (unsigned char *) &ret;
|
||||
+ p[sizeof (ret) - 1] = 255;
|
||||
+ p[sizeof (ret) - 2] = '\n';
|
||||
+ p[0] = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ memcmp (&ret, dl_random, sizeof (ret));
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static inline uintptr_t __attribute__ ((always_inline))
|
||||
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||
+{
|
||||
+ uintptr_t ret;
|
||||
+ if (dl_random == NULL)
|
||||
+ ret = stack_chk_guard;
|
||||
+ else
|
||||
+ memcmp (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||
return ret;
|
||||
}
|
||||
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
|
||||
index 4d857404a3..f5606f373f 100644
|
||||
--- a/sysdeps/generic/ldsodefs.h
|
||||
+++ b/sysdeps/generic/ldsodefs.h
|
||||
@@ -731,6 +731,9 @@ weak_extern (_dl_starting_up)
|
||||
extern int _dl_starting_up_internal attribute_hidden;
|
||||
#endif
|
||||
|
||||
+/* Random data provided by the kernel. */
|
||||
+extern void *_dl_random attribute_hidden;
|
||||
+
|
||||
/* OS-dependent function to open the zero-fill device. */
|
||||
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
index 5271d4e4de..ee8eaf20e4 100644
|
||||
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||
@@ -60,22 +60,20 @@ dl_fatal (const char *str)
|
||||
} while (0)
|
||||
|
||||
static inline uintptr_t __attribute__ ((always_inline))
|
||||
-_dl_setup_stack_chk_guard (void)
|
||||
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||
{
|
||||
uintptr_t ret;
|
||||
-#ifdef ENABLE_STACKGUARD_RANDOMIZE
|
||||
- int fd = __open ("/dev/urandom", O_RDONLY);
|
||||
- if (fd >= 0)
|
||||
- {
|
||||
- ssize_t reslen = __read (fd, &ret, sizeof (ret));
|
||||
- __close (fd);
|
||||
- if (reslen == (ssize_t) sizeof (ret))
|
||||
- return ret;
|
||||
- }
|
||||
-#endif
|
||||
- ret = 0;
|
||||
- unsigned char *p = (unsigned char *) &ret;
|
||||
- p[sizeof (ret) - 1] = 255;
|
||||
- p[sizeof (ret) - 2] = '\n';
|
||||
+ /* We need in the moment only 8 bytes on 32-bit platforms and 16
|
||||
+ bytes on 64-bit platforms. Therefore we can use the data
|
||||
+ directly and not use the kernel-provided data to seed a PRNG. */
|
||||
+ memcpy (&ret, dl_random, sizeof (ret));
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static inline uintptr_t __attribute__ ((always_inline))
|
||||
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||
+{
|
||||
+ uintptr_t ret;
|
||||
+ memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||
return ret;
|
||||
}
|
||||
diff --git a/csu/libc-start.c b/csu/libc-start.c
|
||||
index a14ed71616a..80b672f88d8 100644
|
||||
--- a/csu/libc-start.c
|
||||
+++ b/csu/libc-start.c
|
||||
@@ -140,7 +140,7 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
|
||||
__pthread_initialize_minimal ();
|
||||
|
||||
/* Set up the stack checker's canary. */
|
||||
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||
# ifdef THREAD_SET_STACK_GUARD
|
||||
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||
# else
|
@ -57,11 +57,6 @@ class Glibc(AutotoolsPackage, GNUMirrorPackage):
|
||||
version("2.6.1", sha256="6be7639ccad715d25eef560ce9d1637ef206fb9a162714f6ab8167fc0d971cae")
|
||||
version("2.5", sha256="16d3ac4e86eed75d85d80f1f214a6bd58d27f13590966b5ad0cc181df85a3493")
|
||||
|
||||
# Spack commit 29aa7117f42f758bc537e03e4bedf66ced0accfa has older versions
|
||||
# of glibc, but they are removed, because glibc < 2.17 links against
|
||||
# libgcc_s and libgcc_eh, see glibc commit "Avoid use of libgcc_s and
|
||||
# libgcc_eh when building glibc." 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7
|
||||
|
||||
# Fix for newer GCC, related to -fno-common
|
||||
patch("locs.patch", when="@2.23:2.25")
|
||||
patch("locs-2.22.patch", when="@:2.22")
|
||||
@ -75,6 +70,13 @@ class Glibc(AutotoolsPackage, GNUMirrorPackage):
|
||||
# rpc/types.h include issue, should be from local version, not system.
|
||||
patch("fb21f89.patch", when="@:2.16")
|
||||
|
||||
# Avoid linking libgcc_eh
|
||||
patch("95f5a9a-stub.patch", when="@:2.16")
|
||||
patch("95f5a9a-2.16.patch", when="@2.16")
|
||||
patch("95f5a9a-2.15.patch", when="@2.14:2.15")
|
||||
patch("95f5a9a-2.13.patch", when="@2.12:2.13")
|
||||
patch("95f5a9a-2.11.patch", when="@:2.11")
|
||||
|
||||
# Use init_array (modified commit 4a531bb to unconditionally define
|
||||
# NO_CTORS_DTORS_SECTIONS)
|
||||
patch("4a531bb.patch", when="@:2.12")
|
||||
@ -85,6 +87,14 @@ class Glibc(AutotoolsPackage, GNUMirrorPackage):
|
||||
# linker flag output regex
|
||||
patch("7c8a673.patch", when="@:2.9")
|
||||
|
||||
# Use AT_RANDOM provided by the kernel instead of /dev/urandom;
|
||||
# recent gcc + binutils have issues with the inline assembly in
|
||||
# the fallback code, so better to use the kernel-provided value.
|
||||
patch("965cb60.patch", when="@2.8:2.9")
|
||||
patch("965cb60-2.7.patch", when="@2.7")
|
||||
patch("965cb60-2.6.patch", when="@2.6")
|
||||
patch("965cb60-2.5.patch", when="@2.5")
|
||||
|
||||
# include_next <limits.h> not working
|
||||
patch("67fbfa5.patch", when="@:2.7")
|
||||
|
||||
@ -95,6 +105,12 @@ def setup_build_environment(self, env):
|
||||
# for some reason CPPFLAGS -U_FORTIFY_SOURCE is not enough, it has to be CFLAGS
|
||||
env.append_flags("CPPFLAGS", "-U_FORTIFY_SOURCE")
|
||||
env.append_flags("CFLAGS", "-O2 -g -fno-stack-protector -U_FORTIFY_SOURCE")
|
||||
if self.spec.satisfies("@:2.9"):
|
||||
# missing defines in elf.h after 965cb60.patch
|
||||
env.append_flags("CFLAGS", "-DAT_BASE_PLATFORM=24 -DAT_RANDOM=25")
|
||||
if self.spec.satisfies("@:2.6"):
|
||||
# change of defaults in gcc 10
|
||||
env.append_flags("CFLAGS", "-fcommon")
|
||||
if self.spec.satisfies("@2.5"):
|
||||
env.append_flags("CFLAGS", "-fgnu89-inline")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user