forked from rpms/glibc
Import glibc-2.34-20.fc35 from f35
* Wed Jan 19 2022 Florian Weimer <fweimer@redhat.com> - 2.34-20 - More reliable CPU compatibility diagnostics (#2040657) Resolves: #2040657
This commit is contained in:
parent
c77b926c9d
commit
bdebdc5e8b
547
glibc-rh2040657-1.patch
Normal file
547
glibc-rh2040657-1.patch
Normal file
@ -0,0 +1,547 @@
|
|||||||
|
commit 28713c06129f8f64f88c423266e6ff2880216509
|
||||||
|
Author: H.J. Lu <hjl.tools@gmail.com>
|
||||||
|
Date: Mon Dec 13 09:43:52 2021 -0800
|
||||||
|
|
||||||
|
elf: Sort tests and modules-names
|
||||||
|
|
||||||
|
Sort tests and modules-names to reduce future conflicts.
|
||||||
|
|
||||||
|
Conflicts:
|
||||||
|
elf/Makefile
|
||||||
|
(Usual backport differences. Recreated tests and module-names
|
||||||
|
from scratch. Note that the upstream sort order is difficult
|
||||||
|
to fathom.)
|
||||||
|
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index 535ba4260fb98e64..33df5b4714176adc 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -193,40 +193,134 @@ static-dlopen-environment = \
|
||||||
|
tst-tls9-static-ENV = $(static-dlopen-environment)
|
||||||
|
tst-single_threaded-static-dlopen-ENV = $(static-dlopen-environment)
|
||||||
|
|
||||||
|
-tests += restest1 preloadtest loadfail multiload origtest resolvfail \
|
||||||
|
- constload1 order noload filter \
|
||||||
|
- reldep reldep2 reldep3 reldep4 nodelete nodelete2 \
|
||||||
|
- nodlopen nodlopen2 lateglobal initfirst global \
|
||||||
|
- restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \
|
||||||
|
- tst-tls4 tst-tls5 \
|
||||||
|
- tst-tls10 tst-tls11 tst-tls12 tst-tls13 tst-tls14 tst-tls15 \
|
||||||
|
- tst-tls16 tst-tls17 tst-tls18 tst-tls19 tst-tls-dlinfo \
|
||||||
|
- tst-align tst-align2 \
|
||||||
|
- tst-dlmodcount tst-dlopenrpath tst-deep1 \
|
||||||
|
- tst-dlmopen1 tst-dlmopen3 \
|
||||||
|
- unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \
|
||||||
|
- tst-audit1 tst-audit2 tst-audit8 tst-audit9 \
|
||||||
|
- tst-addr1 tst-thrlock \
|
||||||
|
- tst-unique1 tst-unique2 $(if $(CXX),tst-unique3 tst-unique4 \
|
||||||
|
- tst-nodelete tst-dlopen-nodelete-reloc) \
|
||||||
|
- tst-initorder tst-initorder2 tst-relsort1 tst-null-argv \
|
||||||
|
- tst-tlsalign tst-tlsalign-extern tst-nodelete-opened \
|
||||||
|
- tst-nodelete2 tst-audit11 tst-audit12 tst-dlsym-error tst-noload \
|
||||||
|
- tst-latepthread tst-tls-manydynamic tst-nodelete-dlclose \
|
||||||
|
- tst-debug1 tst-main1 tst-absolute-sym tst-absolute-zero tst-big-note \
|
||||||
|
- tst-unwind-ctor tst-unwind-main tst-audit13 \
|
||||||
|
- tst-sonamemove-link tst-sonamemove-dlopen tst-dlopen-tlsmodid \
|
||||||
|
- tst-dlopen-self tst-auditmany tst-initfinilazyfail tst-dlopenfail \
|
||||||
|
- tst-dlopenfail-2 \
|
||||||
|
- tst-filterobj tst-filterobj-dlopen tst-auxobj tst-auxobj-dlopen \
|
||||||
|
- tst-audit14 tst-audit15 tst-audit16 tst-audit17 \
|
||||||
|
- tst-single_threaded tst-single_threaded-pthread \
|
||||||
|
- tst-tls-ie tst-tls-ie-dlmopen argv0test \
|
||||||
|
- tst-glibc-hwcaps tst-glibc-hwcaps-prepend tst-glibc-hwcaps-mask \
|
||||||
|
- tst-tls20 tst-tls21 tst-dlmopen-dlerror tst-dlmopen-gethostbyname \
|
||||||
|
- tst-dl-is_dso tst-ro-dynamic \
|
||||||
|
- tst-rtld-run-static \
|
||||||
|
+tests += \
|
||||||
|
+ argv0test \
|
||||||
|
+ constload1 \
|
||||||
|
+ dblload \
|
||||||
|
+ dblunload \
|
||||||
|
+ filter \
|
||||||
|
+ global \
|
||||||
|
+ initfirst \
|
||||||
|
+ lateglobal \
|
||||||
|
+ loadfail \
|
||||||
|
+ multiload \
|
||||||
|
+ next \
|
||||||
|
+ nodelete \
|
||||||
|
+ nodelete2 \
|
||||||
|
+ nodlopen \
|
||||||
|
+ nodlopen2 \
|
||||||
|
+ noload \
|
||||||
|
+ order \
|
||||||
|
+ order2 \
|
||||||
|
+ origtest \
|
||||||
|
+ preloadtest \
|
||||||
|
+ reldep \
|
||||||
|
+ reldep2 \
|
||||||
|
+ reldep3 \
|
||||||
|
+ reldep4 \
|
||||||
|
+ reldep5 \
|
||||||
|
+ reldep6 \
|
||||||
|
+ reldep7 \
|
||||||
|
+ reldep8 \
|
||||||
|
+ resolvfail \
|
||||||
|
+ restest1 \
|
||||||
|
+ restest2 \
|
||||||
|
+ tst-absolute-sym \
|
||||||
|
+ tst-absolute-zero \
|
||||||
|
+ tst-addr1 \
|
||||||
|
+ tst-align \
|
||||||
|
+ tst-align2 \
|
||||||
|
+ tst-audit1 \
|
||||||
|
+ tst-audit2 \
|
||||||
|
+ tst-audit8 \
|
||||||
|
+ tst-audit9 \
|
||||||
|
+ tst-audit11 \
|
||||||
|
+ tst-audit12 \
|
||||||
|
+ tst-audit13 \
|
||||||
|
+ tst-audit14 \
|
||||||
|
+ tst-audit15 \
|
||||||
|
+ tst-audit16 \
|
||||||
|
+ tst-audit17 \
|
||||||
|
+ tst-auditmany \
|
||||||
|
+ tst-auxobj \
|
||||||
|
+ tst-auxobj-dlopen \
|
||||||
|
+ tst-big-note \
|
||||||
|
+ tst-debug1 \
|
||||||
|
+ tst-deep1 \
|
||||||
|
+ tst-dl-is_dso \
|
||||||
|
+ tst-dlmodcount \
|
||||||
|
+ tst-dlmopen1 \
|
||||||
|
+ tst-dlmopen3 \
|
||||||
|
+ tst-dlmopen-dlerror \
|
||||||
|
+ tst-dlmopen-gethostbyname \
|
||||||
|
+ tst-dlopenfail \
|
||||||
|
+ tst-dlopenfail-2 \
|
||||||
|
+ tst-dlopenrpath \
|
||||||
|
+ tst-dlopen-self \
|
||||||
|
+ tst-dlopen-tlsmodid \
|
||||||
|
+ tst-dlsym-error \
|
||||||
|
+ tst-filterobj \
|
||||||
|
+ tst-filterobj-dlopen \
|
||||||
|
+ tst-glibc-hwcaps \
|
||||||
|
+ tst-glibc-hwcaps-mask \
|
||||||
|
+ tst-glibc-hwcaps-prepend \
|
||||||
|
+ tst-global1 \
|
||||||
|
+ tst-initfinilazyfail \
|
||||||
|
+ tst-initorder \
|
||||||
|
+ tst-initorder2 \
|
||||||
|
+ tst-latepthread \
|
||||||
|
+ tst-main1 \
|
||||||
|
+ tst-nodelete2 \
|
||||||
|
+ tst-nodelete-dlclose \
|
||||||
|
+ tst-nodelete-opened \
|
||||||
|
+ tst-noload \
|
||||||
|
+ tst-null-argv \
|
||||||
|
+ tst-relsort1 \
|
||||||
|
+ tst-ro-dynamic \
|
||||||
|
+ tst-rtld-run-static \
|
||||||
|
+ tst-single_threaded \
|
||||||
|
+ tst-single_threaded-pthread \
|
||||||
|
+ tst-sonamemove-dlopen \
|
||||||
|
+ tst-sonamemove-link \
|
||||||
|
+ tst-thrlock \
|
||||||
|
+ tst-tls10 \
|
||||||
|
+ tst-tls11 \
|
||||||
|
+ tst-tls12 \
|
||||||
|
+ tst-tls13 \
|
||||||
|
+ tst-tls14 \
|
||||||
|
+ tst-tls15 \
|
||||||
|
+ tst-tls16 \
|
||||||
|
+ tst-tls17 \
|
||||||
|
+ tst-tls18 \
|
||||||
|
+ tst-tls19 \
|
||||||
|
+ tst-tls20 \
|
||||||
|
+ tst-tls21 \
|
||||||
|
+ tst-tls4 \
|
||||||
|
+ tst-tls5 \
|
||||||
|
+ tst-tlsalign \
|
||||||
|
+ tst-tlsalign-extern \
|
||||||
|
+ tst-tls-dlinfo \
|
||||||
|
+ tst-tls-ie \
|
||||||
|
+ tst-tls-ie-dlmopen \
|
||||||
|
+ tst-tls-manydynamic \
|
||||||
|
+ tst-unique1 \
|
||||||
|
+ tst-unique2 \
|
||||||
|
+ tst-unwind-ctor \
|
||||||
|
+ tst-unwind-main \
|
||||||
|
+ unload3 \
|
||||||
|
+ unload4 \
|
||||||
|
+ unload5 \
|
||||||
|
+ unload6 \
|
||||||
|
+ unload7 \
|
||||||
|
+ unload8 \
|
||||||
|
# reldep9
|
||||||
|
+tests-cxx = \
|
||||||
|
+ tst-dlopen-nodelete-reloc \
|
||||||
|
+ tst-nodelete \
|
||||||
|
+ tst-unique3 \
|
||||||
|
+ tst-unique4 \
|
||||||
|
+
|
||||||
|
+tests += $(if $(CXX),$(tests-cxx))
|
||||||
|
tests-internal += loadtest unload unload2 circleload1 \
|
||||||
|
neededtest neededtest2 neededtest3 neededtest4 \
|
||||||
|
tst-tls3 tst-tls6 tst-tls7 tst-tls8 tst-dlmopen2 \
|
||||||
|
@@ -264,101 +358,265 @@ tst-tls-many-dynamic-modules-dep-bad = \
|
||||||
|
extra-test-objs += $(tlsmod17a-modules:=.os) $(tlsmod18a-modules:=.os) \
|
||||||
|
tst-tlsalign-vars.o
|
||||||
|
test-extras += tst-tlsmod17a tst-tlsmod18a tst-tlsalign-vars
|
||||||
|
-modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
|
||||||
|
- testobj1_1 failobj constload2 constload3 unloadmod \
|
||||||
|
- dep1 dep2 dep3 dep4 vismod1 vismod2 vismod3 \
|
||||||
|
- nodelmod1 nodelmod2 nodelmod3 nodelmod4 \
|
||||||
|
- nodel2mod1 nodel2mod2 nodel2mod3 \
|
||||||
|
- nodlopenmod nodlopenmod2 filtmod1 filtmod2 \
|
||||||
|
- reldepmod1 reldepmod2 reldepmod3 reldepmod4 nextmod1 nextmod2 \
|
||||||
|
- reldep4mod1 reldep4mod2 reldep4mod3 reldep4mod4 \
|
||||||
|
- neededobj1 neededobj2 neededobj3 neededobj4 \
|
||||||
|
- neededobj5 neededobj6 firstobj globalmod1 \
|
||||||
|
- unload2mod unload2dep ltglobmod1 ltglobmod2 pathoptobj \
|
||||||
|
- dblloadmod1 dblloadmod2 dblloadmod3 reldepmod5 reldepmod6 \
|
||||||
|
- reldep6mod0 reldep6mod1 reldep6mod2 reldep6mod3 reldep6mod4 \
|
||||||
|
- reldep7mod1 reldep7mod2 \
|
||||||
|
- tst-tlsmod1 tst-tlsmod2 tst-tlsmod3 tst-tlsmod4 \
|
||||||
|
- tst-tlsmod5 tst-tlsmod6 tst-tlsmod7 tst-tlsmod8 \
|
||||||
|
- tst-tlsmod9 tst-tlsmod10 tst-tlsmod11 tst-tlsmod12 \
|
||||||
|
- tst-tlsmod13 tst-tlsmod13a tst-tlsmod14a tst-tlsmod14b \
|
||||||
|
- tst-tlsmod15a tst-tlsmod15b tst-tlsmod16a tst-tlsmod16b \
|
||||||
|
- $(tlsmod17a-modules) tst-tlsmod17b $(tlsmod18a-modules) \
|
||||||
|
- tst-tls19mod1 tst-tls19mod2 tst-tls19mod3 \
|
||||||
|
- circlemod1 circlemod1a circlemod2 circlemod2a \
|
||||||
|
- circlemod3 circlemod3a \
|
||||||
|
- reldep8mod1 reldep8mod2 reldep8mod3 \
|
||||||
|
- reldep9mod1 reldep9mod2 reldep9mod3 \
|
||||||
|
- tst-alignmod tst-alignmod2 \
|
||||||
|
- $(modules-execstack-$(have-z-execstack)) \
|
||||||
|
- tst-dlopenrpathmod tst-deep1mod1 tst-deep1mod2 tst-deep1mod3 \
|
||||||
|
- tst-dlmopen1mod tst-auditmod1 \
|
||||||
|
- unload3mod1 unload3mod2 unload3mod3 unload3mod4 \
|
||||||
|
- unload4mod1 unload4mod2 unload4mod3 unload4mod4 \
|
||||||
|
- unload6mod1 unload6mod2 unload6mod3 \
|
||||||
|
- unload7mod1 unload7mod2 \
|
||||||
|
- unload8mod1 unload8mod1x unload8mod2 unload8mod3 \
|
||||||
|
- order2mod1 order2mod2 order2mod3 order2mod4 \
|
||||||
|
- tst-unique1mod1 tst-unique1mod2 \
|
||||||
|
- tst-unique2mod1 tst-unique2mod2 \
|
||||||
|
- tst-auditmod9a tst-auditmod9b \
|
||||||
|
- $(if $(CXX),tst-unique3lib tst-unique3lib2 tst-unique4lib \
|
||||||
|
- tst-nodelete-uniquemod tst-nodelete-rtldmod \
|
||||||
|
- tst-nodelete-zmod \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod1 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod2 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod3 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod4 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod5 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod6 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod7 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod8 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod9 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod10 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod11 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod12 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod13 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod14 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod15 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod16 \
|
||||||
|
- tst-dlopen-nodelete-reloc-mod17) \
|
||||||
|
- tst-initordera1 tst-initorderb1 \
|
||||||
|
- tst-initordera2 tst-initorderb2 \
|
||||||
|
- tst-initordera3 tst-initordera4 \
|
||||||
|
- tst-initorder2a tst-initorder2b tst-initorder2c \
|
||||||
|
- tst-initorder2d \
|
||||||
|
- tst-relsort1mod1 tst-relsort1mod2 tst-array2dep \
|
||||||
|
- tst-array5dep tst-null-argv-lib \
|
||||||
|
- tst-tlsalign-lib tst-nodelete-opened-lib tst-nodelete2mod \
|
||||||
|
- tst-audit11mod1 tst-audit11mod2 tst-auditmod11 \
|
||||||
|
- tst-audit12mod1 tst-audit12mod2 tst-audit12mod3 tst-auditmod12 \
|
||||||
|
- tst-latepthreadmod $(tst-tls-many-dynamic-modules) \
|
||||||
|
- $(tst-tls-many-dynamic-modules-dep) \
|
||||||
|
- $(tst-tls-many-dynamic-modules-dep-bad) \
|
||||||
|
- tst-nodelete-dlclose-dso tst-nodelete-dlclose-plugin \
|
||||||
|
- tst-main1mod tst-absolute-sym-lib \
|
||||||
|
- tst-absolute-zero-lib tst-big-note-lib tst-unwind-ctor-lib \
|
||||||
|
- tst-audit13mod1 tst-sonamemove-linkmod1 \
|
||||||
|
- tst-sonamemove-runmod1 tst-sonamemove-runmod2 \
|
||||||
|
- tst-auditmanymod1 tst-auditmanymod2 tst-auditmanymod3 \
|
||||||
|
- tst-auditmanymod4 tst-auditmanymod5 tst-auditmanymod6 \
|
||||||
|
- tst-auditmanymod7 tst-auditmanymod8 tst-auditmanymod9 \
|
||||||
|
- tst-initlazyfailmod tst-finilazyfailmod \
|
||||||
|
- tst-dlopenfailmod1 tst-dlopenfaillinkmod tst-dlopenfailmod2 \
|
||||||
|
- tst-dlopenfailmod3 tst-dlopenfailnodelmod tst-ldconfig-ld-mod \
|
||||||
|
- tst-filterobj-flt tst-filterobj-aux tst-filterobj-filtee \
|
||||||
|
- tst-auditlogmod-1 tst-auditlogmod-2 tst-auditlogmod-3 \
|
||||||
|
- tst-single_threaded-mod1 tst-single_threaded-mod2 \
|
||||||
|
- tst-single_threaded-mod3 tst-single_threaded-mod4 \
|
||||||
|
- tst-tls-ie-mod0 tst-tls-ie-mod1 tst-tls-ie-mod2 \
|
||||||
|
- tst-tls-ie-mod3 tst-tls-ie-mod4 tst-tls-ie-mod5 \
|
||||||
|
- tst-tls-ie-mod6 libmarkermod1-1 libmarkermod1-2 libmarkermod1-3 \
|
||||||
|
- libmarkermod2-1 libmarkermod2-2 \
|
||||||
|
- libmarkermod3-1 libmarkermod3-2 libmarkermod3-3 \
|
||||||
|
- libmarkermod4-1 libmarkermod4-2 libmarkermod4-3 libmarkermod4-4 \
|
||||||
|
- tst-tls20mod-bad tst-tls21mod tst-dlmopen-dlerror-mod \
|
||||||
|
- tst-auxvalmod \
|
||||||
|
- tst-dlmopen-gethostbyname-mod tst-ro-dynamic-mod \
|
||||||
|
+modules-names = \
|
||||||
|
+ circlemod1 \
|
||||||
|
+ circlemod1a \
|
||||||
|
+ circlemod2 \
|
||||||
|
+ circlemod2a \
|
||||||
|
+ circlemod3 \
|
||||||
|
+ circlemod3a \
|
||||||
|
+ constload2 \
|
||||||
|
+ constload3 \
|
||||||
|
+ dblloadmod1 \
|
||||||
|
+ dblloadmod2 \
|
||||||
|
+ dblloadmod3 \
|
||||||
|
+ dep1 \
|
||||||
|
+ dep2 \
|
||||||
|
+ dep3 \
|
||||||
|
+ dep4 \
|
||||||
|
+ failobj \
|
||||||
|
+ filtmod1 \
|
||||||
|
+ filtmod2 \
|
||||||
|
+ firstobj \
|
||||||
|
+ globalmod1 \
|
||||||
|
+ libmarkermod1-1 \
|
||||||
|
+ libmarkermod1-2 \
|
||||||
|
+ libmarkermod1-3 \
|
||||||
|
+ libmarkermod2-1 \
|
||||||
|
+ libmarkermod2-2 \
|
||||||
|
+ libmarkermod3-1 \
|
||||||
|
+ libmarkermod3-2 \
|
||||||
|
+ libmarkermod3-3 \
|
||||||
|
+ libmarkermod4-1 \
|
||||||
|
+ libmarkermod4-2 \
|
||||||
|
+ libmarkermod4-3 \
|
||||||
|
+ libmarkermod4-4 \
|
||||||
|
+ ltglobmod1 \
|
||||||
|
+ ltglobmod2 \
|
||||||
|
+ neededobj1 \
|
||||||
|
+ neededobj2 \
|
||||||
|
+ neededobj3 \
|
||||||
|
+ neededobj4 \
|
||||||
|
+ neededobj5 \
|
||||||
|
+ neededobj6 \
|
||||||
|
+ nextmod1 \
|
||||||
|
+ nextmod2 \
|
||||||
|
+ nodel2mod1 \
|
||||||
|
+ nodel2mod2 \
|
||||||
|
+ nodel2mod3 \
|
||||||
|
+ nodelmod1 \
|
||||||
|
+ nodelmod2 \
|
||||||
|
+ nodelmod3 \
|
||||||
|
+ nodelmod4 \
|
||||||
|
+ nodlopenmod \
|
||||||
|
+ nodlopenmod2 \
|
||||||
|
+ order2mod1 \
|
||||||
|
+ order2mod2 \
|
||||||
|
+ order2mod3 \
|
||||||
|
+ order2mod4 \
|
||||||
|
+ pathoptobj \
|
||||||
|
+ reldep4mod1 \
|
||||||
|
+ reldep4mod2 \
|
||||||
|
+ reldep4mod3 \
|
||||||
|
+ reldep4mod4 \
|
||||||
|
+ reldep6mod0 \
|
||||||
|
+ reldep6mod1 \
|
||||||
|
+ reldep6mod2 \
|
||||||
|
+ reldep6mod3 \
|
||||||
|
+ reldep6mod4 \
|
||||||
|
+ reldep7mod1 \
|
||||||
|
+ reldep7mod2 \
|
||||||
|
+ reldep8mod1 \
|
||||||
|
+ reldep8mod2 \
|
||||||
|
+ reldep8mod3 \
|
||||||
|
+ reldep9mod1 \
|
||||||
|
+ reldep9mod2 \
|
||||||
|
+ reldep9mod3 \
|
||||||
|
+ reldepmod1 \
|
||||||
|
+ reldepmod2 \
|
||||||
|
+ reldepmod3 \
|
||||||
|
+ reldepmod4 \
|
||||||
|
+ reldepmod5 \
|
||||||
|
+ reldepmod6 \
|
||||||
|
+ testobj1 \
|
||||||
|
+ testobj1_1 \
|
||||||
|
+ testobj2 \
|
||||||
|
+ testobj3 \
|
||||||
|
+ testobj4 \
|
||||||
|
+ testobj5 \
|
||||||
|
+ testobj6 \
|
||||||
|
+ tst-absolute-sym-lib \
|
||||||
|
+ tst-absolute-zero-lib \
|
||||||
|
+ tst-alignmod \
|
||||||
|
+ tst-alignmod2 \
|
||||||
|
+ tst-array2dep \
|
||||||
|
+ tst-array5dep \
|
||||||
|
+ tst-audit11mod1 \
|
||||||
|
+ tst-audit11mod2 \
|
||||||
|
+ tst-audit12mod1 \
|
||||||
|
+ tst-audit12mod2 \
|
||||||
|
+ tst-audit12mod3 \
|
||||||
|
+ tst-audit13mod1 \
|
||||||
|
+ tst-auditlogmod-1 \
|
||||||
|
+ tst-auditlogmod-2 \
|
||||||
|
+ tst-auditlogmod-3 \
|
||||||
|
+ tst-auditmanymod1 \
|
||||||
|
+ tst-auditmanymod2 \
|
||||||
|
+ tst-auditmanymod3 \
|
||||||
|
+ tst-auditmanymod4 \
|
||||||
|
+ tst-auditmanymod5 \
|
||||||
|
+ tst-auditmanymod6 \
|
||||||
|
+ tst-auditmanymod7 \
|
||||||
|
+ tst-auditmanymod8 \
|
||||||
|
+ tst-auditmanymod9 \
|
||||||
|
+ tst-auditmod1 \
|
||||||
|
+ tst-auditmod9a \
|
||||||
|
+ tst-auditmod9b \
|
||||||
|
+ tst-auditmod11 \
|
||||||
|
+ tst-auditmod12 \
|
||||||
|
+ tst-auxvalmod \
|
||||||
|
+ tst-big-note-lib \
|
||||||
|
+ tst-deep1mod1 \
|
||||||
|
+ tst-deep1mod2 \
|
||||||
|
+ tst-deep1mod3 \
|
||||||
|
+ tst-dlmopen1mod \
|
||||||
|
+ tst-dlmopen-dlerror-mod \
|
||||||
|
+ tst-dlmopen-gethostbyname-mod \
|
||||||
|
+ tst-dlopenfaillinkmod \
|
||||||
|
+ tst-dlopenfailmod1 \
|
||||||
|
+ tst-dlopenfailmod2 \
|
||||||
|
+ tst-dlopenfailmod3 \
|
||||||
|
+ tst-dlopenfailnodelmod \
|
||||||
|
+ tst-dlopenrpathmod \
|
||||||
|
+ tst-filterobj-aux \
|
||||||
|
+ tst-filterobj-filtee \
|
||||||
|
+ tst-filterobj-flt \
|
||||||
|
+ tst-finilazyfailmod \
|
||||||
|
+ tst-initlazyfailmod \
|
||||||
|
+ tst-initorder2a \
|
||||||
|
+ tst-initorder2b \
|
||||||
|
+ tst-initorder2c \
|
||||||
|
+ tst-initorder2d \
|
||||||
|
+ tst-initordera1 \
|
||||||
|
+ tst-initordera2 \
|
||||||
|
+ tst-initordera3 \
|
||||||
|
+ tst-initordera4 \
|
||||||
|
+ tst-initorderb1 \
|
||||||
|
+ tst-initorderb2 \
|
||||||
|
+ tst-latepthreadmod \
|
||||||
|
+ tst-ldconfig-ld-mod \
|
||||||
|
+ tst-main1mod \
|
||||||
|
+ tst-nodelete2mod \
|
||||||
|
+ tst-nodelete-dlclose-dso \
|
||||||
|
+ tst-nodelete-dlclose-plugin \
|
||||||
|
+ tst-nodelete-opened-lib \
|
||||||
|
+ tst-null-argv-lib \
|
||||||
|
+ tst-relsort1mod1 \
|
||||||
|
+ tst-relsort1mod2 \
|
||||||
|
+ tst-ro-dynamic-mod \
|
||||||
|
+ tst-single_threaded-mod1 \
|
||||||
|
+ tst-single_threaded-mod2 \
|
||||||
|
+ tst-single_threaded-mod3 \
|
||||||
|
+ tst-single_threaded-mod4 \
|
||||||
|
+ tst-sonamemove-linkmod1 \
|
||||||
|
+ tst-sonamemove-runmod1 \
|
||||||
|
+ tst-sonamemove-runmod2 \
|
||||||
|
+ tst-tls19mod1 \
|
||||||
|
+ tst-tls19mod2 \
|
||||||
|
+ tst-tls19mod3 \
|
||||||
|
+ tst-tls20mod-bad \
|
||||||
|
+ tst-tls21mod \
|
||||||
|
+ tst-tlsalign-lib \
|
||||||
|
+ tst-tls-ie-mod0 \
|
||||||
|
+ tst-tls-ie-mod1 \
|
||||||
|
+ tst-tls-ie-mod2 \
|
||||||
|
+ tst-tls-ie-mod3 \
|
||||||
|
+ tst-tls-ie-mod4 \
|
||||||
|
+ tst-tls-ie-mod5 \
|
||||||
|
+ tst-tls-ie-mod6 \
|
||||||
|
+ tst-tlsmod1 \
|
||||||
|
+ tst-tlsmod10 \
|
||||||
|
+ tst-tlsmod11 \
|
||||||
|
+ tst-tlsmod12 \
|
||||||
|
+ tst-tlsmod13 \
|
||||||
|
+ tst-tlsmod13a \
|
||||||
|
+ tst-tlsmod14a \
|
||||||
|
+ tst-tlsmod14b \
|
||||||
|
+ tst-tlsmod15a \
|
||||||
|
+ tst-tlsmod15b \
|
||||||
|
+ tst-tlsmod16a \
|
||||||
|
+ tst-tlsmod16b \
|
||||||
|
+ tst-tlsmod17b \
|
||||||
|
+ tst-tlsmod2 \
|
||||||
|
+ tst-tlsmod3 \
|
||||||
|
+ tst-tlsmod4 \
|
||||||
|
+ tst-tlsmod5 \
|
||||||
|
+ tst-tlsmod6 \
|
||||||
|
+ tst-tlsmod7 \
|
||||||
|
+ tst-tlsmod8 \
|
||||||
|
+ tst-tlsmod9 \
|
||||||
|
+ tst-unique1mod1 \
|
||||||
|
+ tst-unique1mod2 \
|
||||||
|
+ tst-unique2mod1 \
|
||||||
|
+ tst-unique2mod2 \
|
||||||
|
+ tst-unwind-ctor-lib \
|
||||||
|
+ unload2dep \
|
||||||
|
+ unload2mod \
|
||||||
|
+ unload3mod1 \
|
||||||
|
+ unload3mod2 \
|
||||||
|
+ unload3mod3 \
|
||||||
|
+ unload3mod4 \
|
||||||
|
+ unload4mod1 \
|
||||||
|
+ unload4mod2 \
|
||||||
|
+ unload4mod3 \
|
||||||
|
+ unload4mod4 \
|
||||||
|
+ unload6mod1 \
|
||||||
|
+ unload6mod2 \
|
||||||
|
+ unload6mod3 \
|
||||||
|
+ unload7mod1 \
|
||||||
|
+ unload7mod2 \
|
||||||
|
+ unload8mod1 \
|
||||||
|
+ unload8mod1x \
|
||||||
|
+ unload8mod2 \
|
||||||
|
+ unload8mod3 \
|
||||||
|
+ unloadmod \
|
||||||
|
+ vismod1 \
|
||||||
|
+ vismod2 \
|
||||||
|
+ vismod3 \
|
||||||
|
+
|
||||||
|
+modules-names-cxx = \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod1 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod10 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod11 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod12 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod13 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod14 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod15 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod16 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod17 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod2 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod3 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod4 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod5 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod6 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod7 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod8 \
|
||||||
|
+ tst-dlopen-nodelete-reloc-mod9 \
|
||||||
|
+ tst-nodelete-rtldmod \
|
||||||
|
+ tst-nodelete-uniquemod \
|
||||||
|
+ tst-nodelete-zmod \
|
||||||
|
+ tst-unique3lib \
|
||||||
|
+ tst-unique3lib2 \
|
||||||
|
+ tst-unique4lib \
|
||||||
|
+
|
||||||
|
+modules-names += \
|
||||||
|
+ $(if $(CXX),$(modules-names-cxx)) \
|
||||||
|
+ $(modules-execstack-$(have-z-execstack)) \
|
||||||
|
+ $(tst-tls-many-dynamic-modules) \
|
||||||
|
+ $(tst-tls-many-dynamic-modules-dep) \
|
||||||
|
+ $(tst-tls-many-dynamic-modules-dep-bad) \
|
||||||
|
+ $(tlsmod17a-modules) \
|
||||||
|
+ $(tlsmod18a-modules) \
|
||||||
|
|
||||||
|
# Most modules build with _ISOMAC defined, but those filtered out
|
||||||
|
# depend on internal headers.
|
73
glibc-rh2040657-10.patch
Normal file
73
glibc-rh2040657-10.patch
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
commit 990c953bce06d77360d2e933faa9a008e2c55405
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Fri Jan 14 20:16:05 2022 +0100
|
||||||
|
|
||||||
|
x86: Add x86-64-vN check to early startup
|
||||||
|
|
||||||
|
This ISA level covers the glibc build itself. <dl-hwcap-check.h>
|
||||||
|
cannot be used because this check (by design) happens before
|
||||||
|
DL_PLATFORM_INIT and the x86 CPU flags initialization.
|
||||||
|
|
||||||
|
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
|
||||||
|
|
||||||
|
diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile
|
||||||
|
index 5ee06f94735e5189..36ca1a7126047b86 100644
|
||||||
|
--- a/sysdeps/x86/Makefile
|
||||||
|
+++ b/sysdeps/x86/Makefile
|
||||||
|
@@ -7,6 +7,7 @@ sysdep_routines += get-cpuid-feature-leaf
|
||||||
|
sysdep-dl-routines += dl-get-cpu-features
|
||||||
|
sysdep_headers += sys/platform/x86.h bits/platform/x86.h
|
||||||
|
|
||||||
|
+CFLAGS-dl-get-cpu-features.os += $(rtld-early-cflags)
|
||||||
|
CFLAGS-get-cpuid-feature-leaf.o += $(no-stack-protector)
|
||||||
|
|
||||||
|
tests += tst-get-cpu-features tst-get-cpu-features-static \
|
||||||
|
diff --git a/sysdeps/x86/dl-get-cpu-features.c b/sysdeps/x86/dl-get-cpu-features.c
|
||||||
|
index 839803c746f408ed..6ccde4404b13a725 100644
|
||||||
|
--- a/sysdeps/x86/dl-get-cpu-features.c
|
||||||
|
+++ b/sysdeps/x86/dl-get-cpu-features.c
|
||||||
|
@@ -20,6 +20,7 @@
|
||||||
|
|
||||||
|
#ifdef SHARED
|
||||||
|
# include <cpu-features.c>
|
||||||
|
+# include <gcc-macros.h>
|
||||||
|
|
||||||
|
/* NB: Normally, DL_PLATFORM_INIT calls init_cpu_features to initialize
|
||||||
|
CPU features in dynamic executable. But when loading ld.so inside of
|
||||||
|
@@ -36,7 +37,35 @@ _dl_x86_init_cpu_features (void)
|
||||||
|
{
|
||||||
|
struct cpu_features *cpu_features = __get_cpu_features ();
|
||||||
|
if (cpu_features->basic.kind == arch_kind_unknown)
|
||||||
|
- init_cpu_features (cpu_features);
|
||||||
|
+ {
|
||||||
|
+ init_cpu_features (cpu_features);
|
||||||
|
+
|
||||||
|
+# if IS_IN (rtld)
|
||||||
|
+ /* See isa-level.c. */
|
||||||
|
+# if defined GCCMACRO__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 \
|
||||||
|
+ && defined HAVE_X86_LAHF_SAHF && defined GCCMACRO__POPCNT__ \
|
||||||
|
+ && defined GCCMACRO__SSE3__ && defined GCCMACRO__SSSE3__ \
|
||||||
|
+ && defined GCCMACRO__SSE4_1__ && defined GCCMACRO__SSE4_2__
|
||||||
|
+ if (!(cpu_features->isa_1 & GNU_PROPERTY_X86_ISA_1_V2))
|
||||||
|
+ _dl_fatal_printf ("\
|
||||||
|
+Fatal glibc error: CPU does not support x86-64-v%d\n", 2);
|
||||||
|
+# if defined GCCMACRO__AVX__ && defined GCCMACRO__AVX2__ \
|
||||||
|
+ && defined GCCMACRO__F16C__ && defined GCCMACRO__FMA__ \
|
||||||
|
+ && defined GCCMACRO__LZCNT__ && defined HAVE_X86_MOVBE
|
||||||
|
+ if (!(cpu_features->isa_1 & GNU_PROPERTY_X86_ISA_1_V3))
|
||||||
|
+ _dl_fatal_printf ("\
|
||||||
|
+Fatal glibc error: CPU does not support x86-64-v%d\n", 3);
|
||||||
|
+# if defined GCCMACRO__AVX512F__ && defined GCCMACRO__AVX512BW__ \
|
||||||
|
+ && defined GCCMACRO__AVX512CD__ && defined GCCMACRO__AVX512DQ__ \
|
||||||
|
+ && defined GCCMACRO__AVX512VL__
|
||||||
|
+ if (!(cpu_features->isa_1 & GNU_PROPERTY_X86_ISA_1_V4))
|
||||||
|
+ _dl_fatal_printf ("\
|
||||||
|
+Fatal glibc error: CPU does not support x86-64-v%d\n", 4);
|
||||||
|
+# endif /* ISA level 4 */
|
||||||
|
+# endif /* ISA level 3 */
|
||||||
|
+# endif /* ISA level 2 */
|
||||||
|
+# endif /* IS_IN (rtld) */
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
__ifunc (__x86_cpu_features, __x86_cpu_features, NULL, void,
|
37
glibc-rh2040657-11.patch
Normal file
37
glibc-rh2040657-11.patch
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
commit f01d482f0355a7029d0715ace0ccf3323e7e94bc
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Fri Jan 14 20:16:05 2022 +0100
|
||||||
|
|
||||||
|
s390x: Use <gcc-macros.h> in early HWCAP check
|
||||||
|
|
||||||
|
This is required so that the checks still work if $(early-cflags)
|
||||||
|
selects a different ISA level.
|
||||||
|
|
||||||
|
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
|
||||||
|
Tested-by: Carlos O'Donell <carlos@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/sysdeps/s390/s390-64/dl-hwcap-check.h b/sysdeps/s390/s390-64/dl-hwcap-check.h
|
||||||
|
index 87e18be6bd0c512b..27f7e245b1d1a9e9 100644
|
||||||
|
--- a/sysdeps/s390/s390-64/dl-hwcap-check.h
|
||||||
|
+++ b/sysdeps/s390/s390-64/dl-hwcap-check.h
|
||||||
|
@@ -19,17 +19,18 @@
|
||||||
|
#ifndef _DL_HWCAP_CHECK_H
|
||||||
|
#define _DL_HWCAP_CHECK_H
|
||||||
|
|
||||||
|
+#include <gcc-macros.h>
|
||||||
|
#include <ldsodefs.h>
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
dl_hwcap_check (void)
|
||||||
|
{
|
||||||
|
#if defined __ARCH__
|
||||||
|
-# if __ARCH__ >= 13
|
||||||
|
+# if GCCMACRO__ARCH__ >= 13
|
||||||
|
if (!(GLRO(dl_hwcap) & HWCAP_S390_VXRS_EXT2))
|
||||||
|
_dl_fatal_printf ("\
|
||||||
|
Fatal glibc error: CPU lacks VXRS_EXT2 support (z15 or later required)\n");
|
||||||
|
-# elif __ARCH__ >= 12
|
||||||
|
+# elif GCCMACRO__ARCH__ >= 12
|
||||||
|
if (!(GLRO(dl_hwcap) & HWCAP_S390_VXE))
|
||||||
|
_dl_fatal_printf ("\
|
||||||
|
Fatal glibc error: CPU lacks VXE support (z14 or later required)\n");
|
158
glibc-rh2040657-12.patch
Normal file
158
glibc-rh2040657-12.patch
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
commit c90363403b57b3b7919061851cb3e6d9c85e784a
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Tue Jan 18 13:53:11 2022 +0100
|
||||||
|
|
||||||
|
elf: Move _dl_setup_hash to its own file
|
||||||
|
|
||||||
|
And compile it with the early CFLAGS. _dl_setup_hash is called
|
||||||
|
very early for the ld.so link map, so it should be compiled
|
||||||
|
differently.
|
||||||
|
|
||||||
|
Reviewed-by: Stefan Liebler <stli@linux.ibm.com>
|
||||||
|
Tested-by: Stefan Liebler <stli@linux.ibm.com>
|
||||||
|
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index 778e393395fc5248..948296dc2437e9a1 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -69,6 +69,7 @@ dl-routines = \
|
||||||
|
dl-reloc \
|
||||||
|
dl-runtime \
|
||||||
|
dl-scope \
|
||||||
|
+ dl-setup_hash \
|
||||||
|
dl-sort-maps \
|
||||||
|
dl-thread_gscope_wait \
|
||||||
|
dl-tls \
|
||||||
|
@@ -154,6 +155,7 @@ CFLAGS-.os += $(call elide-stack-protector,.os,$(all-rtld-routines))
|
||||||
|
|
||||||
|
# Add the requested compiler flags to the early startup code.
|
||||||
|
CFLAGS-dl-printf.os += $(rtld-early-cflags)
|
||||||
|
+CFLAGS-dl-setup_hash.os += $(rtld-early-cflags)
|
||||||
|
CFLAGS-dl-sysdep.os += $(rtld-early-cflags)
|
||||||
|
CFLAGS-dl-tunables.os += $(rtld-early-cflags)
|
||||||
|
CFLAGS-dl-write.os += $(rtld-early-cflags)
|
||||||
|
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
|
||||||
|
index eea217eb2833164c..3391a990c8d288e5 100644
|
||||||
|
--- a/elf/dl-lookup.c
|
||||||
|
+++ b/elf/dl-lookup.c
|
||||||
|
@@ -948,51 +948,6 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-/* Cache the location of MAP's hash table. */
|
||||||
|
-
|
||||||
|
-void
|
||||||
|
-_dl_setup_hash (struct link_map *map)
|
||||||
|
-{
|
||||||
|
- Elf_Symndx *hash;
|
||||||
|
-
|
||||||
|
- if (__glibc_likely (map->l_info[ELF_MACHINE_GNU_HASH_ADDRIDX] != NULL))
|
||||||
|
- {
|
||||||
|
- Elf32_Word *hash32
|
||||||
|
- = (void *) D_PTR (map, l_info[ELF_MACHINE_GNU_HASH_ADDRIDX]);
|
||||||
|
- map->l_nbuckets = *hash32++;
|
||||||
|
- Elf32_Word symbias = *hash32++;
|
||||||
|
- Elf32_Word bitmask_nwords = *hash32++;
|
||||||
|
- /* Must be a power of two. */
|
||||||
|
- assert ((bitmask_nwords & (bitmask_nwords - 1)) == 0);
|
||||||
|
- map->l_gnu_bitmask_idxbits = bitmask_nwords - 1;
|
||||||
|
- map->l_gnu_shift = *hash32++;
|
||||||
|
-
|
||||||
|
- map->l_gnu_bitmask = (ElfW(Addr) *) hash32;
|
||||||
|
- hash32 += __ELF_NATIVE_CLASS / 32 * bitmask_nwords;
|
||||||
|
-
|
||||||
|
- map->l_gnu_buckets = hash32;
|
||||||
|
- hash32 += map->l_nbuckets;
|
||||||
|
- map->l_gnu_chain_zero = hash32 - symbias;
|
||||||
|
-
|
||||||
|
- /* Initialize MIPS xhash translation table. */
|
||||||
|
- ELF_MACHINE_XHASH_SETUP (hash32, symbias, map);
|
||||||
|
-
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (!map->l_info[DT_HASH])
|
||||||
|
- return;
|
||||||
|
- hash = (void *) D_PTR (map, l_info[DT_HASH]);
|
||||||
|
-
|
||||||
|
- map->l_nbuckets = *hash++;
|
||||||
|
- /* Skip nchain. */
|
||||||
|
- hash++;
|
||||||
|
- map->l_buckets = hash;
|
||||||
|
- hash += map->l_nbuckets;
|
||||||
|
- map->l_chain = hash;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
static void
|
||||||
|
_dl_debug_bindings (const char *undef_name, struct link_map *undef_map,
|
||||||
|
const ElfW(Sym) **ref, struct sym_val *value,
|
||||||
|
diff --git a/elf/dl-setup_hash.c b/elf/dl-setup_hash.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..6dd57c5c94e541c2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/elf/dl-setup_hash.c
|
||||||
|
@@ -0,0 +1,63 @@
|
||||||
|
+/* Cache the location of a link map hash table.
|
||||||
|
+ Copyright (C) 1995-2022 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
|
||||||
|
+ <https://www.gnu.org/licenses/>. */
|
||||||
|
+
|
||||||
|
+#include <assert.h>
|
||||||
|
+#include <link.h>
|
||||||
|
+#include <ldsodefs.h>
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+_dl_setup_hash (struct link_map *map)
|
||||||
|
+{
|
||||||
|
+ Elf_Symndx *hash;
|
||||||
|
+
|
||||||
|
+ if (__glibc_likely (map->l_info[ELF_MACHINE_GNU_HASH_ADDRIDX] != NULL))
|
||||||
|
+ {
|
||||||
|
+ Elf32_Word *hash32
|
||||||
|
+ = (void *) D_PTR (map, l_info[ELF_MACHINE_GNU_HASH_ADDRIDX]);
|
||||||
|
+ map->l_nbuckets = *hash32++;
|
||||||
|
+ Elf32_Word symbias = *hash32++;
|
||||||
|
+ Elf32_Word bitmask_nwords = *hash32++;
|
||||||
|
+ /* Must be a power of two. */
|
||||||
|
+ assert ((bitmask_nwords & (bitmask_nwords - 1)) == 0);
|
||||||
|
+ map->l_gnu_bitmask_idxbits = bitmask_nwords - 1;
|
||||||
|
+ map->l_gnu_shift = *hash32++;
|
||||||
|
+
|
||||||
|
+ map->l_gnu_bitmask = (ElfW(Addr) *) hash32;
|
||||||
|
+ hash32 += __ELF_NATIVE_CLASS / 32 * bitmask_nwords;
|
||||||
|
+
|
||||||
|
+ map->l_gnu_buckets = hash32;
|
||||||
|
+ hash32 += map->l_nbuckets;
|
||||||
|
+ map->l_gnu_chain_zero = hash32 - symbias;
|
||||||
|
+
|
||||||
|
+ /* Initialize MIPS xhash translation table. */
|
||||||
|
+ ELF_MACHINE_XHASH_SETUP (hash32, symbias, map);
|
||||||
|
+
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!map->l_info[DT_HASH])
|
||||||
|
+ return;
|
||||||
|
+ hash = (void *) D_PTR (map, l_info[DT_HASH]);
|
||||||
|
+
|
||||||
|
+ map->l_nbuckets = *hash++;
|
||||||
|
+ /* Skip nchain. */
|
||||||
|
+ hash++;
|
||||||
|
+ map->l_buckets = hash;
|
||||||
|
+ hash += map->l_nbuckets;
|
||||||
|
+ map->l_chain = hash;
|
||||||
|
+}
|
42
glibc-rh2040657-2.patch
Normal file
42
glibc-rh2040657-2.patch
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
commit f4f70c2895e3d325188a42c10eb7bb4335be6773
|
||||||
|
Author: H.J. Lu <hjl.tools@gmail.com>
|
||||||
|
Date: Tue Jan 4 06:58:34 2022 -0800
|
||||||
|
|
||||||
|
elf: Add a comment after trailing backslashes
|
||||||
|
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index 0cfcf0a61a442c9f..5b9c36bc6f0a3ee5 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -319,6 +319,7 @@ tests-cxx = \
|
||||||
|
tst-nodelete \
|
||||||
|
tst-unique3 \
|
||||||
|
tst-unique4 \
|
||||||
|
+# tests-cxx
|
||||||
|
|
||||||
|
tests += $(if $(CXX),$(tests-cxx))
|
||||||
|
tests-internal += loadtest unload unload2 circleload1 \
|
||||||
|
@@ -583,6 +584,7 @@ modules-names = \
|
||||||
|
vismod1 \
|
||||||
|
vismod2 \
|
||||||
|
vismod3 \
|
||||||
|
+# modules-names
|
||||||
|
|
||||||
|
modules-names-cxx = \
|
||||||
|
tst-dlopen-nodelete-reloc-mod1 \
|
||||||
|
@@ -608,6 +610,7 @@ modules-names-cxx = \
|
||||||
|
tst-unique3lib \
|
||||||
|
tst-unique3lib2 \
|
||||||
|
tst-unique4lib \
|
||||||
|
+# modules-names-cxx
|
||||||
|
|
||||||
|
modules-names += \
|
||||||
|
$(if $(CXX),$(modules-names-cxx)) \
|
||||||
|
@@ -617,6 +620,7 @@ modules-names += \
|
||||||
|
$(tst-tls-many-dynamic-modules-dep-bad) \
|
||||||
|
$(tlsmod17a-modules) \
|
||||||
|
$(tlsmod18a-modules) \
|
||||||
|
+# modules-names
|
||||||
|
|
||||||
|
# Most modules build with _ISOMAC defined, but those filtered out
|
||||||
|
# depend on internal headers.
|
171
glibc-rh2040657-3.patch
Normal file
171
glibc-rh2040657-3.patch
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
commit 0835c0f0bad351117154b815f34f8af19ea7e325
|
||||||
|
Author: Matt Whitlock <sourceware@mattwhitlock.name>
|
||||||
|
Date: Wed Jun 16 23:40:47 2021 -0400
|
||||||
|
|
||||||
|
x86: fix Autoconf caching of instruction support checks [BZ #27991]
|
||||||
|
|
||||||
|
The Autoconf documentation for the AC_CACHE_CHECK macro states:
|
||||||
|
|
||||||
|
The commands-to-set-it must have no side effects except for setting
|
||||||
|
the variable cache-id, see below.
|
||||||
|
|
||||||
|
However, the tests for support of -msahf and -mmovbe were embedded in
|
||||||
|
the commands-to-set-it for lib_cv_include_x86_isa_level. This had the
|
||||||
|
consequence that libc_cv_have_x86_lahf_sahf and libc_cv_have_x86_movbe
|
||||||
|
were not defined whenever lib_cv_include_x86_isa_level was read from
|
||||||
|
cache. These variables' being undefined meant that their unquoted use
|
||||||
|
in later test expressions led to the 'test' built-in's misparsing its
|
||||||
|
arguments and emitting errors like "test: =: unexpected operator" or
|
||||||
|
"test: =: unary operator expected", depending on the particular shell.
|
||||||
|
|
||||||
|
This commit refactors the tests for LAHF/SAHF and MOVBE instruction
|
||||||
|
support into their own AC_CACHE_CHECK macro invocations to obey the
|
||||||
|
rule that the commands-to-set-it must have no side effects other than
|
||||||
|
setting the variable named by cache-id.
|
||||||
|
|
||||||
|
Signed-off-by: Matt Whitlock <sourceware@mattwhitlock.name>
|
||||||
|
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||||
|
|
||||||
|
diff --git a/sysdeps/x86/configure b/sysdeps/x86/configure
|
||||||
|
index ead1295c38cf5f4e..62676bb686850938 100644
|
||||||
|
--- a/sysdeps/x86/configure
|
||||||
|
+++ b/sysdeps/x86/configure
|
||||||
|
@@ -126,8 +126,6 @@ cat > conftest2.S <<EOF
|
||||||
|
4:
|
||||||
|
EOF
|
||||||
|
libc_cv_include_x86_isa_level=no
|
||||||
|
-libc_cv_have_x86_lahf_sahf=no
|
||||||
|
-libc_cv_have_x86_movbe=no
|
||||||
|
if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest conftest1.S conftest2.S'
|
||||||
|
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
@@ -137,9 +135,22 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest c
|
||||||
|
count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l`
|
||||||
|
if test "$count" = 1; then
|
||||||
|
libc_cv_include_x86_isa_level=yes
|
||||||
|
- cat > conftest.c <<EOF
|
||||||
|
-EOF
|
||||||
|
- if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - conftest.c'
|
||||||
|
+ fi
|
||||||
|
+fi
|
||||||
|
+rm -f conftest*
|
||||||
|
+fi
|
||||||
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_include_x86_isa_level" >&5
|
||||||
|
+$as_echo "$libc_cv_include_x86_isa_level" >&6; }
|
||||||
|
+if test $libc_cv_include_x86_isa_level = yes; then
|
||||||
|
+ $as_echo "#define INCLUDE_X86_ISA_LEVEL 1" >>confdefs.h
|
||||||
|
+
|
||||||
|
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LAHF/SAHF instruction support" >&5
|
||||||
|
+$as_echo_n "checking for LAHF/SAHF instruction support... " >&6; }
|
||||||
|
+if ${libc_cv_have_x86_lahf_sahf+:} false; then :
|
||||||
|
+ $as_echo_n "(cached) " >&6
|
||||||
|
+else
|
||||||
|
+ libc_cv_have_x86_lahf_sahf=no
|
||||||
|
+ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null'
|
||||||
|
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
@@ -147,7 +158,20 @@ EOF
|
||||||
|
test $ac_status = 0; }; } | grep -q "\-msahf"; then
|
||||||
|
libc_cv_have_x86_lahf_sahf=yes
|
||||||
|
fi
|
||||||
|
- if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - conftest.c'
|
||||||
|
+fi
|
||||||
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_have_x86_lahf_sahf" >&5
|
||||||
|
+$as_echo "$libc_cv_have_x86_lahf_sahf" >&6; }
|
||||||
|
+ if test $libc_cv_have_x86_lahf_sahf = yes; then
|
||||||
|
+ $as_echo "#define HAVE_X86_LAHF_SAHF 1" >>confdefs.h
|
||||||
|
+
|
||||||
|
+ fi
|
||||||
|
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MOVBE instruction support" >&5
|
||||||
|
+$as_echo_n "checking for MOVBE instruction support... " >&6; }
|
||||||
|
+if ${libc_cv_have_x86_movbe+:} false; then :
|
||||||
|
+ $as_echo_n "(cached) " >&6
|
||||||
|
+else
|
||||||
|
+ libc_cv_have_x86_movbe=no
|
||||||
|
+ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null'
|
||||||
|
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
@@ -155,23 +179,13 @@ EOF
|
||||||
|
test $ac_status = 0; }; } | grep -q "\-mmovbe"; then
|
||||||
|
libc_cv_have_x86_movbe=yes
|
||||||
|
fi
|
||||||
|
- fi
|
||||||
|
-fi
|
||||||
|
-rm -f conftest*
|
||||||
|
-fi
|
||||||
|
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_include_x86_isa_level" >&5
|
||||||
|
-$as_echo "$libc_cv_include_x86_isa_level" >&6; }
|
||||||
|
-if test $libc_cv_include_x86_isa_level = yes; then
|
||||||
|
- $as_echo "#define INCLUDE_X86_ISA_LEVEL 1" >>confdefs.h
|
||||||
|
-
|
||||||
|
fi
|
||||||
|
-if test $libc_cv_have_x86_lahf_sahf = yes; then
|
||||||
|
- $as_echo "#define HAVE_X86_LAHF_SAHF 1" >>confdefs.h
|
||||||
|
-
|
||||||
|
-fi
|
||||||
|
-if test $libc_cv_have_x86_movbe = yes; then
|
||||||
|
- $as_echo "#define HAVE_X86_MOVBE 1" >>confdefs.h
|
||||||
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_have_x86_movbe" >&5
|
||||||
|
+$as_echo "$libc_cv_have_x86_movbe" >&6; }
|
||||||
|
+ if test $libc_cv_have_x86_movbe = yes; then
|
||||||
|
+ $as_echo "#define HAVE_X86_MOVBE 1" >>confdefs.h
|
||||||
|
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
config_vars="$config_vars
|
||||||
|
enable-x86-isa-level = $libc_cv_include_x86_isa_level"
|
||||||
|
diff --git a/sysdeps/x86/configure.ac b/sysdeps/x86/configure.ac
|
||||||
|
index bca97fdc2f1ac1a7..04a12ab68048cd66 100644
|
||||||
|
--- a/sysdeps/x86/configure.ac
|
||||||
|
+++ b/sysdeps/x86/configure.ac
|
||||||
|
@@ -98,30 +98,32 @@ cat > conftest2.S <<EOF
|
||||||
|
4:
|
||||||
|
EOF
|
||||||
|
libc_cv_include_x86_isa_level=no
|
||||||
|
-libc_cv_have_x86_lahf_sahf=no
|
||||||
|
-libc_cv_have_x86_movbe=no
|
||||||
|
if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest conftest1.S conftest2.S); then
|
||||||
|
count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l`
|
||||||
|
if test "$count" = 1; then
|
||||||
|
libc_cv_include_x86_isa_level=yes
|
||||||
|
- cat > conftest.c <<EOF
|
||||||
|
-EOF
|
||||||
|
- if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - conftest.c) | grep -q "\-msahf"; then
|
||||||
|
- libc_cv_have_x86_lahf_sahf=yes
|
||||||
|
- fi
|
||||||
|
- if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - conftest.c) | grep -q "\-mmovbe"; then
|
||||||
|
- libc_cv_have_x86_movbe=yes
|
||||||
|
- fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
rm -f conftest*])
|
||||||
|
if test $libc_cv_include_x86_isa_level = yes; then
|
||||||
|
AC_DEFINE(INCLUDE_X86_ISA_LEVEL)
|
||||||
|
-fi
|
||||||
|
-if test $libc_cv_have_x86_lahf_sahf = yes; then
|
||||||
|
- AC_DEFINE(HAVE_X86_LAHF_SAHF)
|
||||||
|
-fi
|
||||||
|
-if test $libc_cv_have_x86_movbe = yes; then
|
||||||
|
- AC_DEFINE(HAVE_X86_MOVBE)
|
||||||
|
+ AC_CACHE_CHECK([for LAHF/SAHF instruction support],
|
||||||
|
+ libc_cv_have_x86_lahf_sahf, [dnl
|
||||||
|
+ libc_cv_have_x86_lahf_sahf=no
|
||||||
|
+ if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null) | grep -q "\-msahf"; then
|
||||||
|
+ libc_cv_have_x86_lahf_sahf=yes
|
||||||
|
+ fi])
|
||||||
|
+ if test $libc_cv_have_x86_lahf_sahf = yes; then
|
||||||
|
+ AC_DEFINE(HAVE_X86_LAHF_SAHF)
|
||||||
|
+ fi
|
||||||
|
+ AC_CACHE_CHECK([for MOVBE instruction support],
|
||||||
|
+ libc_cv_have_x86_movbe, [dnl
|
||||||
|
+ libc_cv_have_x86_movbe=no
|
||||||
|
+ if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null) | grep -q "\-mmovbe"; then
|
||||||
|
+ libc_cv_have_x86_movbe=yes
|
||||||
|
+ fi])
|
||||||
|
+ if test $libc_cv_have_x86_movbe = yes; then
|
||||||
|
+ AC_DEFINE(HAVE_X86_MOVBE)
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
LIBC_CONFIG_VAR([enable-x86-isa-level], [$libc_cv_include_x86_isa_level])
|
58
glibc-rh2040657-4.patch
Normal file
58
glibc-rh2040657-4.patch
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
commit 5732a881aad24fac876f5505a212395048a7a483
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Fri Jan 14 16:09:20 2022 +0100
|
||||||
|
|
||||||
|
x86: HAVE_X86_LAHF_SAHF, HAVE_X86_MOVBE and -march=x86-64-vN (bug 28782)
|
||||||
|
|
||||||
|
HAVE_X86_LAHF_SAHF is implied by x86-64-v2, and HAVE_X86_MOVBE by
|
||||||
|
x86-64-v3.
|
||||||
|
|
||||||
|
The individual flag does not appear in -fverbose-asm flag output
|
||||||
|
even if the ISA level implies it.
|
||||||
|
|
||||||
|
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
|
||||||
|
|
||||||
|
diff --git a/sysdeps/x86/configure b/sysdeps/x86/configure
|
||||||
|
index 62676bb686850938..7bdbfdc6dc2ad38f 100644
|
||||||
|
--- a/sysdeps/x86/configure
|
||||||
|
+++ b/sysdeps/x86/configure
|
||||||
|
@@ -155,7 +155,7 @@ else
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||||
|
- test $ac_status = 0; }; } | grep -q "\-msahf"; then
|
||||||
|
+ test $ac_status = 0; }; } | grep -qE '(-msahf\b|-march=x86-64-v)'; then
|
||||||
|
libc_cv_have_x86_lahf_sahf=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
@@ -176,7 +176,7 @@ else
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||||
|
- test $ac_status = 0; }; } | grep -q "\-mmovbe"; then
|
||||||
|
+ test $ac_status = 0; }; } | grep -qE '(-mmovbe\b|-march=x86-64-v([3-9]|[1-9][0-9]))'; then
|
||||||
|
libc_cv_have_x86_movbe=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
diff --git a/sysdeps/x86/configure.ac b/sysdeps/x86/configure.ac
|
||||||
|
index 04a12ab68048cd66..10d5c2e0e555fc79 100644
|
||||||
|
--- a/sysdeps/x86/configure.ac
|
||||||
|
+++ b/sysdeps/x86/configure.ac
|
||||||
|
@@ -110,7 +110,7 @@ if test $libc_cv_include_x86_isa_level = yes; then
|
||||||
|
AC_CACHE_CHECK([for LAHF/SAHF instruction support],
|
||||||
|
libc_cv_have_x86_lahf_sahf, [dnl
|
||||||
|
libc_cv_have_x86_lahf_sahf=no
|
||||||
|
- if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null) | grep -q "\-msahf"; then
|
||||||
|
+ if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null) | grep -qE '(-msahf\b|-march=x86-64-v)'; then
|
||||||
|
libc_cv_have_x86_lahf_sahf=yes
|
||||||
|
fi])
|
||||||
|
if test $libc_cv_have_x86_lahf_sahf = yes; then
|
||||||
|
@@ -119,7 +119,7 @@ if test $libc_cv_include_x86_isa_level = yes; then
|
||||||
|
AC_CACHE_CHECK([for MOVBE instruction support],
|
||||||
|
libc_cv_have_x86_movbe, [dnl
|
||||||
|
libc_cv_have_x86_movbe=no
|
||||||
|
- if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null) | grep -q "\-mmovbe"; then
|
||||||
|
+ if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null) | grep -qE '(-mmovbe\b|-march=x86-64-v(@<:@3-9@:>@|@<:@1-9@:>@@<:@0-9@:>@))'; then
|
||||||
|
libc_cv_have_x86_movbe=yes
|
||||||
|
fi])
|
||||||
|
if test $libc_cv_have_x86_movbe = yes; then
|
32
glibc-rh2040657-5.patch
Normal file
32
glibc-rh2040657-5.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
commit ef7c6d42fe163a5e49a478c43e655ce4633fa5ba
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Fri Jan 14 16:09:20 2022 +0100
|
||||||
|
|
||||||
|
Generate gcc-macros.h
|
||||||
|
|
||||||
|
The file can be used to check the effect of the default compiler
|
||||||
|
flags on code generation even in areas of the build that uses
|
||||||
|
non-default compiler flags.
|
||||||
|
|
||||||
|
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
|
||||||
|
|
||||||
|
diff --git a/Makeconfig b/Makeconfig
|
||||||
|
index 8bc5540292c7b6fa..99898a632a64be91 100644
|
||||||
|
--- a/Makeconfig
|
||||||
|
+++ b/Makeconfig
|
||||||
|
@@ -1202,6 +1202,15 @@ $(common-objpfx)dl-tunable-list.stmp: \
|
||||||
|
touch $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
+# Dump the GCC macros used by the default compiler flags to a header
|
||||||
|
+# file, so that they can be inspected when using different compiler
|
||||||
|
+# flags. Add the GCCMACRO prefix to make these macro names unique.
|
||||||
|
+$(common-objpfx)gcc-macros.h.in: $(common-objpfx)config.status
|
||||||
|
+ $(CC) $(CFLAGS) $(CPPFLAGS) -E -dM -x c -o $@ /dev/null
|
||||||
|
+$(common-objpfx)gcc-macros.h: $(common-objpfx)gcc-macros.h.in
|
||||||
|
+ sed 's/^#define /#define GCCMACRO/' < $< > $@
|
||||||
|
+before-compile += $(common-objpfx)gcc-macros.h
|
||||||
|
+
|
||||||
|
# Generate version maps, but wait until sysdep-subdirs is known
|
||||||
|
ifeq ($(sysd-sorted-done),t)
|
||||||
|
ifeq ($(build-shared),yes)
|
549
glibc-rh2040657-6.patch
Normal file
549
glibc-rh2040657-6.patch
Normal file
@ -0,0 +1,549 @@
|
|||||||
|
commit 7de01e60c200c431d3469deb784da8fd4508fc15
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Fri Jan 14 20:16:05 2022 +0100
|
||||||
|
|
||||||
|
elf/Makefile: Reflow and sort most variable assignments
|
||||||
|
|
||||||
|
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
|
||||||
|
|
||||||
|
Conflicts:
|
||||||
|
elf/Makefile
|
||||||
|
(Usual backporting differences. LLD support is missing
|
||||||
|
downstream.)
|
||||||
|
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index 5b9c36bc6f0a3ee5..124905f96c88ab53 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -21,21 +21,62 @@ subdir := elf
|
||||||
|
|
||||||
|
include ../Makeconfig
|
||||||
|
|
||||||
|
-headers = elf.h bits/elfclass.h link.h bits/link.h
|
||||||
|
-routines = $(all-dl-routines) dl-support dl-iteratephdr \
|
||||||
|
- dl-addr dl-addr-obj enbl-secure dl-profstub \
|
||||||
|
- dl-origin dl-libc dl-sym dl-sysdep dl-error \
|
||||||
|
- dl-reloc-static-pie libc_early_init rtld_static_init
|
||||||
|
+headers = \
|
||||||
|
+ bits/elfclass.h \
|
||||||
|
+ bits/link.h \
|
||||||
|
+ elf.h \
|
||||||
|
+ link.h \
|
||||||
|
+ # headers
|
||||||
|
+
|
||||||
|
+routines = \
|
||||||
|
+ $(all-dl-routines) \
|
||||||
|
+ dl-addr \
|
||||||
|
+ dl-addr-obj \
|
||||||
|
+ dl-error \
|
||||||
|
+ dl-iteratephdr \
|
||||||
|
+ dl-libc \
|
||||||
|
+ dl-origin \
|
||||||
|
+ dl-profstub \
|
||||||
|
+ dl-reloc-static-pie \
|
||||||
|
+ dl-support \
|
||||||
|
+ dl-sym \
|
||||||
|
+ dl-sysdep \
|
||||||
|
+ enbl-secure \
|
||||||
|
+ libc_early_init \
|
||||||
|
+ rtld_static_init \
|
||||||
|
+ # routines
|
||||||
|
|
||||||
|
# The core dynamic linking functions are in libc for the static and
|
||||||
|
# profiled libraries.
|
||||||
|
-dl-routines = $(addprefix dl-,load lookup object reloc deps \
|
||||||
|
- runtime init fini debug misc \
|
||||||
|
- version profile tls origin scope \
|
||||||
|
- execstack open close trampoline \
|
||||||
|
- exception sort-maps lookup-direct \
|
||||||
|
- call-libc-early-init write \
|
||||||
|
- thread_gscope_wait tls_init_tp)
|
||||||
|
+dl-routines = \
|
||||||
|
+ dl-call-libc-early-init \
|
||||||
|
+ dl-close \
|
||||||
|
+ dl-debug \
|
||||||
|
+ dl-deps \
|
||||||
|
+ dl-exception \
|
||||||
|
+ dl-execstack \
|
||||||
|
+ dl-fini \
|
||||||
|
+ dl-init \
|
||||||
|
+ dl-load \
|
||||||
|
+ dl-lookup \
|
||||||
|
+ dl-lookup-direct \
|
||||||
|
+ dl-misc \
|
||||||
|
+ dl-object \
|
||||||
|
+ dl-open \
|
||||||
|
+ dl-origin \
|
||||||
|
+ dl-profile \
|
||||||
|
+ dl-reloc \
|
||||||
|
+ dl-runtime \
|
||||||
|
+ dl-scope \
|
||||||
|
+ dl-sort-maps \
|
||||||
|
+ dl-thread_gscope_wait \
|
||||||
|
+ dl-tls \
|
||||||
|
+ dl-tls_init_tp \
|
||||||
|
+ dl-trampoline \
|
||||||
|
+ dl-version \
|
||||||
|
+ dl-write \
|
||||||
|
+ # dl-routines
|
||||||
|
+
|
||||||
|
ifeq (yes,$(use-ldconfig))
|
||||||
|
dl-routines += dl-cache
|
||||||
|
endif
|
||||||
|
@@ -58,16 +99,38 @@ endif
|
||||||
|
|
||||||
|
all-dl-routines = $(dl-routines) $(sysdep-dl-routines)
|
||||||
|
# But they are absent from the shared libc, because that code is in ld.so.
|
||||||
|
-elide-routines.os = $(all-dl-routines) dl-support enbl-secure dl-origin \
|
||||||
|
- dl-sysdep dl-exception dl-reloc-static-pie \
|
||||||
|
- thread_gscope_wait rtld_static_init
|
||||||
|
+elide-routines.os = \
|
||||||
|
+ $(all-dl-routines) \
|
||||||
|
+ dl-exception \
|
||||||
|
+ dl-origin \
|
||||||
|
+ dl-reloc-static-pie \
|
||||||
|
+ dl-support \
|
||||||
|
+ dl-sysdep \
|
||||||
|
+ enbl-secure \
|
||||||
|
+ rtld_static_init \
|
||||||
|
+ thread_gscope_wait \
|
||||||
|
+ # elide-routines.os
|
||||||
|
|
||||||
|
# ld.so uses those routines, plus some special stuff for being the program
|
||||||
|
# interpreter and operating independent of libc.
|
||||||
|
-rtld-routines = rtld $(all-dl-routines) dl-sysdep dl-environ dl-minimal \
|
||||||
|
- dl-error-minimal dl-conflict dl-hwcaps dl-hwcaps_split dl-hwcaps-subdirs \
|
||||||
|
- dl-usage dl-diagnostics dl-diagnostics-kernel dl-diagnostics-cpu \
|
||||||
|
- dl-mutex
|
||||||
|
+rtld-routines = \
|
||||||
|
+ $(all-dl-routines) \
|
||||||
|
+ dl-conflict \
|
||||||
|
+ dl-diagnostics \
|
||||||
|
+ dl-diagnostics-cpu \
|
||||||
|
+ dl-diagnostics-kernel \
|
||||||
|
+ dl-environ \
|
||||||
|
+ dl-error-minimal \
|
||||||
|
+ dl-hwcaps \
|
||||||
|
+ dl-hwcaps-subdirs \
|
||||||
|
+ dl-hwcaps_split \
|
||||||
|
+ dl-minimal \
|
||||||
|
+ dl-mutex \
|
||||||
|
+ dl-sysdep \
|
||||||
|
+ dl-usage \
|
||||||
|
+ rtld \
|
||||||
|
+ # rtld-routines
|
||||||
|
+
|
||||||
|
all-rtld-routines = $(rtld-routines) $(sysdep-rtld-routines)
|
||||||
|
|
||||||
|
CFLAGS-dl-runtime.c += -fexceptions -fasynchronous-unwind-tables
|
||||||
|
@@ -102,8 +165,16 @@ ld-map = $(common-objpfx)ld.map
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
-extra-objs = $(all-rtld-routines:%=%.os) sofini.os interp.os
|
||||||
|
-generated += librtld.os dl-allobjs.os ld.so ldd
|
||||||
|
+extra-objs = \
|
||||||
|
+ $(all-rtld-routines:%=%.os) \
|
||||||
|
+ sofini.os \
|
||||||
|
+ interp.os \
|
||||||
|
+ # extra-objs
|
||||||
|
+generated += \
|
||||||
|
+ dl-allobjs.os \
|
||||||
|
+ ld.so ldd \
|
||||||
|
+ librtld.os \
|
||||||
|
+ # generated
|
||||||
|
install-others = $(inst_rtlddir)/$(rtld-installed-name) $(inst_bindir)/ld.so
|
||||||
|
install-bin-script = ldd
|
||||||
|
endif
|
||||||
|
@@ -121,8 +192,15 @@ others-static += ldconfig
|
||||||
|
others += ldconfig
|
||||||
|
install-rootsbin += ldconfig
|
||||||
|
|
||||||
|
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs \
|
||||||
|
- stringtable
|
||||||
|
+ldconfig-modules := \
|
||||||
|
+ cache \
|
||||||
|
+ chroot_canon \
|
||||||
|
+ readlib \
|
||||||
|
+ static-stubs \
|
||||||
|
+ stringtable \
|
||||||
|
+ xmalloc \
|
||||||
|
+ xstrdup \
|
||||||
|
+ # ldconfig-modules
|
||||||
|
extra-objs += $(ldconfig-modules:=.o)
|
||||||
|
others-extras = $(ldconfig-modules)
|
||||||
|
endif
|
||||||
|
@@ -156,23 +234,36 @@ $(inst_auditdir)/sotruss-lib.so: $(objpfx)sotruss-lib.so $(+force)
|
||||||
|
$(do-install-program)
|
||||||
|
endif
|
||||||
|
|
||||||
|
-tests-static-normal := tst-array1-static tst-array5-static \
|
||||||
|
- tst-dl-iter-static \
|
||||||
|
- tst-tlsalign-static tst-tlsalign-extern-static \
|
||||||
|
- tst-linkall-static tst-env-setuid tst-env-setuid-tunables \
|
||||||
|
- tst-single_threaded-static tst-single_threaded-pthread-static \
|
||||||
|
- tst-dst-static tst-getauxval-static
|
||||||
|
-
|
||||||
|
-tests-static-internal := tst-tls1-static tst-tls2-static \
|
||||||
|
- tst-ptrguard1-static tst-stackguard1-static \
|
||||||
|
- tst-tls1-static-non-pie
|
||||||
|
+tests-static-normal := \
|
||||||
|
+ tst-array1-static \
|
||||||
|
+ tst-array5-static \
|
||||||
|
+ tst-dl-iter-static \
|
||||||
|
+ tst-dst-static \
|
||||||
|
+ tst-env-setuid \
|
||||||
|
+ tst-env-setuid-tunables \
|
||||||
|
+ tst-getauxval-static \
|
||||||
|
+ tst-linkall-static \
|
||||||
|
+ tst-single_threaded-pthread-static \
|
||||||
|
+ tst-single_threaded-static \
|
||||||
|
+ tst-tlsalign-extern-static \
|
||||||
|
+ tst-tlsalign-static \
|
||||||
|
+ # tests-static-normal
|
||||||
|
+
|
||||||
|
+tests-static-internal := \
|
||||||
|
+ tst-ptrguard1-static \
|
||||||
|
+ tst-stackguard1-static \
|
||||||
|
+ tst-tls1-static \
|
||||||
|
+ tst-tls2-static \
|
||||||
|
+ tst-tls1-static-non-pie \
|
||||||
|
+ # tests-static-internal
|
||||||
|
|
||||||
|
CRT-tst-tls1-static-non-pie := $(csu-objpfx)crt1.o
|
||||||
|
tst-tls1-static-non-pie-no-pie = yes
|
||||||
|
|
||||||
|
tests-container := \
|
||||||
|
- tst-ldconfig-bad-aux-cache \
|
||||||
|
- tst-ldconfig-ld_so_conf-update
|
||||||
|
+ tst-ldconfig-bad-aux-cache \
|
||||||
|
+ tst-ldconfig-ld_so_conf-update \
|
||||||
|
+ # tests-container
|
||||||
|
|
||||||
|
ifeq (no,$(build-hardcoded-path-in-tests))
|
||||||
|
# This is an ld.so.cache test, and RPATH/RUNPATH in the executable
|
||||||
|
@@ -180,14 +271,32 @@ ifeq (no,$(build-hardcoded-path-in-tests))
|
||||||
|
tests-container += tst-glibc-hwcaps-prepend-cache
|
||||||
|
endif
|
||||||
|
|
||||||
|
-tests := tst-tls9 tst-leaks1 \
|
||||||
|
- tst-array1 tst-array2 tst-array3 tst-array4 tst-array5 \
|
||||||
|
- tst-auxv tst-stringtable
|
||||||
|
-tests-internal := tst-tls1 tst-tls2 $(tests-static-internal)
|
||||||
|
+tests := \
|
||||||
|
+ tst-array1 \
|
||||||
|
+ tst-array2 \
|
||||||
|
+ tst-array3 \
|
||||||
|
+ tst-array4 \
|
||||||
|
+ tst-array5 \
|
||||||
|
+ tst-auxv \
|
||||||
|
+ tst-leaks1 \
|
||||||
|
+ tst-stringtable \
|
||||||
|
+ tst-tls9 \
|
||||||
|
+ # tests
|
||||||
|
+
|
||||||
|
+tests-internal := \
|
||||||
|
+ $(tests-static-internal) \
|
||||||
|
+ tst-tls1 \
|
||||||
|
+ tst-tls2 \
|
||||||
|
+ # tests-internal
|
||||||
|
+
|
||||||
|
tests-static := $(tests-static-normal) $(tests-static-internal)
|
||||||
|
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
-tests-static += tst-tls9-static tst-single_threaded-static-dlopen
|
||||||
|
+tests-static += \
|
||||||
|
+ tst-single_threaded-static-dlopen \
|
||||||
|
+ tst-tls9-static \
|
||||||
|
+ # tests-static
|
||||||
|
+
|
||||||
|
static-dlopen-environment = \
|
||||||
|
LD_LIBRARY_PATH=$(ld-library-path):$(common-objpfx)dlfcn
|
||||||
|
tst-tls9-static-ENV = $(static-dlopen-environment)
|
||||||
|
@@ -313,33 +422,69 @@ tests += \
|
||||||
|
unload6 \
|
||||||
|
unload7 \
|
||||||
|
unload8 \
|
||||||
|
-# reldep9
|
||||||
|
+ # tests
|
||||||
|
tests-cxx = \
|
||||||
|
tst-dlopen-nodelete-reloc \
|
||||||
|
tst-nodelete \
|
||||||
|
tst-unique3 \
|
||||||
|
tst-unique4 \
|
||||||
|
-# tests-cxx
|
||||||
|
+ # tests-cxx
|
||||||
|
|
||||||
|
tests += $(if $(CXX),$(tests-cxx))
|
||||||
|
-tests-internal += loadtest unload unload2 circleload1 \
|
||||||
|
- neededtest neededtest2 neededtest3 neededtest4 \
|
||||||
|
- tst-tls3 tst-tls6 tst-tls7 tst-tls8 tst-dlmopen2 \
|
||||||
|
- tst-ptrguard1 tst-stackguard1 \
|
||||||
|
- tst-create_format1 tst-tls-surplus tst-dl-hwcaps_split
|
||||||
|
-tests-container += tst-pldd tst-dlopen-tlsmodid-container \
|
||||||
|
- tst-dlopen-self-container tst-preload-pthread-libc
|
||||||
|
-test-srcs = tst-pathopt
|
||||||
|
+
|
||||||
|
+tests-internal += \
|
||||||
|
+ circleload1 \
|
||||||
|
+ loadtest \
|
||||||
|
+ neededtest \
|
||||||
|
+ neededtest2 \
|
||||||
|
+ neededtest3 \
|
||||||
|
+ neededtest4 \
|
||||||
|
+ tst-create_format1 \
|
||||||
|
+ tst-dl-hwcaps_split \
|
||||||
|
+ tst-dlmopen2 \
|
||||||
|
+ tst-ptrguard1 \
|
||||||
|
+ tst-stackguard1 \
|
||||||
|
+ tst-tls-surplus \
|
||||||
|
+ tst-tls3 \
|
||||||
|
+ tst-tls6 \
|
||||||
|
+ tst-tls7 \
|
||||||
|
+ tst-tls8 \
|
||||||
|
+ unload \
|
||||||
|
+ unload2 \
|
||||||
|
+ # tests-internal
|
||||||
|
+
|
||||||
|
+tests-container += \
|
||||||
|
+ tst-dlopen-self-container \
|
||||||
|
+ tst-dlopen-tlsmodid-container \
|
||||||
|
+ tst-pldd \
|
||||||
|
+ tst-preload-pthread-libc \
|
||||||
|
+ # tests-container
|
||||||
|
+
|
||||||
|
+test-srcs = \
|
||||||
|
+ tst-pathopt \
|
||||||
|
+ # tests-srcs
|
||||||
|
+
|
||||||
|
+ifeq (yes,$(have-fpie))
|
||||||
|
+tests-pie += tst-align3
|
||||||
|
+endif
|
||||||
|
selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null)
|
||||||
|
+
|
||||||
|
ifneq ($(selinux-enabled),1)
|
||||||
|
-tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
|
||||||
|
+tests-execstack-yes = \
|
||||||
|
+ tst-execstack \
|
||||||
|
+ tst-execstack-needed \
|
||||||
|
+ tst-execstack-prog \
|
||||||
|
+ # tests-execstack-yes
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
tests += $(tests-execstack-$(have-z-execstack))
|
||||||
|
ifeq ($(run-built-tests),yes)
|
||||||
|
-tests-special += $(objpfx)tst-leaks1-mem.out \
|
||||||
|
- $(objpfx)noload-mem.out \
|
||||||
|
- $(objpfx)tst-ldconfig-X.out $(objpfx)tst-rtld-help.out
|
||||||
|
+tests-special += \
|
||||||
|
+ $(objpfx)noload-mem.out \
|
||||||
|
+ $(objpfx)tst-ldconfig-X.out \
|
||||||
|
+ $(objpfx)tst-leaks1-mem.out \
|
||||||
|
+ $(objpfx)tst-rtld-help.out \
|
||||||
|
+ # tests-special
|
||||||
|
endif
|
||||||
|
tlsmod17a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
||||||
|
tlsmod18a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
||||||
|
@@ -356,9 +501,16 @@ tst-tls-many-dynamic-modules-dep = \
|
||||||
|
tst-tls-many-dynamic-modules-dep-bad-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
||||||
|
tst-tls-many-dynamic-modules-dep-bad = \
|
||||||
|
$(foreach n,$(tst-tls-many-dynamic-modules-dep-bad-suffixes),tst-tls-manydynamic$(n)mod-dep-bad)
|
||||||
|
-extra-test-objs += $(tlsmod17a-modules:=.os) $(tlsmod18a-modules:=.os) \
|
||||||
|
- tst-tlsalign-vars.o
|
||||||
|
-test-extras += tst-tlsmod17a tst-tlsmod18a tst-tlsalign-vars
|
||||||
|
+extra-test-objs += \
|
||||||
|
+ $(tlsmod17a-modules:=.os) \
|
||||||
|
+ $(tlsmod18a-modules:=.os) \
|
||||||
|
+ tst-tlsalign-vars.o \
|
||||||
|
+ # extra-test-objs
|
||||||
|
+test-extras += \
|
||||||
|
+ tst-tlsalign-vars \
|
||||||
|
+ tst-tlsmod17a \
|
||||||
|
+ tst-tlsmod18a \
|
||||||
|
+ # test-extras
|
||||||
|
modules-names = \
|
||||||
|
circlemod1 \
|
||||||
|
circlemod1a \
|
||||||
|
@@ -610,17 +762,17 @@ modules-names-cxx = \
|
||||||
|
tst-unique3lib \
|
||||||
|
tst-unique3lib2 \
|
||||||
|
tst-unique4lib \
|
||||||
|
-# modules-names-cxx
|
||||||
|
+ # modules-names-cxx
|
||||||
|
|
||||||
|
modules-names += \
|
||||||
|
$(if $(CXX),$(modules-names-cxx)) \
|
||||||
|
$(modules-execstack-$(have-z-execstack)) \
|
||||||
|
+ $(tlsmod17a-modules) \
|
||||||
|
+ $(tlsmod18a-modules) \
|
||||||
|
$(tst-tls-many-dynamic-modules) \
|
||||||
|
$(tst-tls-many-dynamic-modules-dep) \
|
||||||
|
$(tst-tls-many-dynamic-modules-dep-bad) \
|
||||||
|
- $(tlsmod17a-modules) \
|
||||||
|
- $(tlsmod18a-modules) \
|
||||||
|
-# modules-names
|
||||||
|
+ # modules-names
|
||||||
|
|
||||||
|
# Most modules build with _ISOMAC defined, but those filtered out
|
||||||
|
# depend on internal headers.
|
||||||
|
@@ -669,35 +821,70 @@ modules-names-nobuild := filtmod1 tst-big-note-lib tst-ro-dynamic-mod
|
||||||
|
tests += $(tests-static)
|
||||||
|
|
||||||
|
ifeq (yes,$(have-ifunc))
|
||||||
|
-tests-ifuncstatic := ifuncmain1static ifuncmain1picstatic \
|
||||||
|
- ifuncmain2static ifuncmain2picstatic \
|
||||||
|
- ifuncmain4static ifuncmain4picstatic \
|
||||||
|
- ifuncmain5static ifuncmain5picstatic \
|
||||||
|
- ifuncmain7static ifuncmain7picstatic
|
||||||
|
+tests-ifuncstatic := \
|
||||||
|
+ ifuncmain1static \
|
||||||
|
+ ifuncmain1picstatic \
|
||||||
|
+ ifuncmain2static \
|
||||||
|
+ ifuncmain2picstatic \
|
||||||
|
+ ifuncmain4static \
|
||||||
|
+ ifuncmain4picstatic \
|
||||||
|
+ ifuncmain5static \
|
||||||
|
+ ifuncmain5picstatic \
|
||||||
|
+ ifuncmain7static \
|
||||||
|
+ ifuncmain7picstatic \
|
||||||
|
+ # tests-ifuncstatic
|
||||||
|
ifeq (yes,$(have-gcc-ifunc))
|
||||||
|
tests-ifuncstatic += ifuncmain9static ifuncmain9picstatic
|
||||||
|
endif
|
||||||
|
tests-static += $(tests-ifuncstatic)
|
||||||
|
tests-internal += $(tests-ifuncstatic)
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
-tests += tst-ifunc-fault-lazy tst-ifunc-fault-bindnow
|
||||||
|
+tests += \
|
||||||
|
+ tst-ifunc-fault-bindnow \
|
||||||
|
+ tst-ifunc-fault-lazy \
|
||||||
|
+ # tests
|
||||||
|
# Note: sysdeps/x86_64/ifuncmain8.c uses ifuncmain8.
|
||||||
|
tests-internal += \
|
||||||
|
- ifuncmain1 ifuncmain1pic ifuncmain1vis ifuncmain1vispic \
|
||||||
|
- ifuncmain1staticpic \
|
||||||
|
- ifuncmain2 ifuncmain2pic ifuncmain3 ifuncmain4 \
|
||||||
|
- ifuncmain5 ifuncmain5pic ifuncmain5staticpic \
|
||||||
|
- ifuncmain7 ifuncmain7pic
|
||||||
|
+ ifuncmain1 \
|
||||||
|
+ ifuncmain1pic \
|
||||||
|
+ ifuncmain1staticpic \
|
||||||
|
+ ifuncmain1vis \
|
||||||
|
+ ifuncmain1vispic \
|
||||||
|
+ ifuncmain2 \
|
||||||
|
+ ifuncmain2pic \
|
||||||
|
+ ifuncmain3 \
|
||||||
|
+ ifuncmain4 \
|
||||||
|
+ ifuncmain5 \
|
||||||
|
+ ifuncmain5pic \
|
||||||
|
+ ifuncmain5staticpic \
|
||||||
|
+ ifuncmain7 \
|
||||||
|
+ ifuncmain7pic \
|
||||||
|
+ # tests-internal
|
||||||
|
ifeq (yes,$(have-gcc-ifunc))
|
||||||
|
-tests-internal += ifuncmain9 ifuncmain9pic
|
||||||
|
+tests-internal += \
|
||||||
|
+ ifuncmain9 \
|
||||||
|
+ ifuncmain9pic \
|
||||||
|
+ # tests-internal
|
||||||
|
endif
|
||||||
|
-ifunc-test-modules = ifuncdep1 ifuncdep1pic ifuncdep2 ifuncdep2pic \
|
||||||
|
- ifuncdep5 ifuncdep5pic
|
||||||
|
+ifunc-test-modules = \
|
||||||
|
+ ifuncdep1 \
|
||||||
|
+ ifuncdep1pic \
|
||||||
|
+ ifuncdep2 \
|
||||||
|
+ ifuncdep2pic \
|
||||||
|
+ ifuncdep5 \
|
||||||
|
+ ifuncdep5pic \
|
||||||
|
+ # ifunc-test-modules
|
||||||
|
extra-test-objs += $(ifunc-test-modules:=.o)
|
||||||
|
test-internal-extras += $(ifunc-test-modules)
|
||||||
|
ifeq (yes,$(have-fpie))
|
||||||
|
-ifunc-pie-tests = ifuncmain1pie ifuncmain1vispie ifuncmain1staticpie \
|
||||||
|
- ifuncmain5pie ifuncmain6pie ifuncmain7pie
|
||||||
|
+ifunc-pie-tests = \
|
||||||
|
+ ifuncmain1pie \
|
||||||
|
+ ifuncmain1staticpie \
|
||||||
|
+ ifuncmain1vispie \
|
||||||
|
+ ifuncmain5pie \
|
||||||
|
+ ifuncmain6pie \
|
||||||
|
+ ifuncmain7pie \
|
||||||
|
+ # ifunc-pie-tests
|
||||||
|
ifeq (yes,$(have-gcc-ifunc))
|
||||||
|
ifunc-pie-tests += ifuncmain9pie
|
||||||
|
endif
|
||||||
|
@@ -707,30 +894,50 @@ endif
|
||||||
|
tests-internal += $(ifunc-pie-tests)
|
||||||
|
tests-pie += $(ifunc-pie-tests)
|
||||||
|
endif
|
||||||
|
-modules-names += ifuncmod1 ifuncmod3 ifuncmod5 ifuncmod6
|
||||||
|
+modules-names += \
|
||||||
|
+ ifuncmod1 \
|
||||||
|
+ ifuncmod3 \
|
||||||
|
+ ifuncmod5 \
|
||||||
|
+ ifuncmod6 \
|
||||||
|
+ # module-names
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
ifeq ($(run-built-tests),yes)
|
||||||
|
-tests-special += $(objpfx)tst-pathopt.out $(objpfx)tst-rtld-load-self.out \
|
||||||
|
- $(objpfx)tst-rtld-preload.out $(objpfx)argv0test.out \
|
||||||
|
- $(objpfx)tst-rtld-help.out
|
||||||
|
+tests-special += \
|
||||||
|
+ $(objpfx)argv0test.out \
|
||||||
|
+ $(objpfx)tst-pathopt.out \
|
||||||
|
+ $(objpfx)tst-rtld-help.out \
|
||||||
|
+ $(objpfx)tst-rtld-load-self.out \
|
||||||
|
+ $(objpfx)tst-rtld-preload.out \
|
||||||
|
+ # tests-special
|
||||||
|
endif
|
||||||
|
-tests-special += $(objpfx)check-textrel.out $(objpfx)check-execstack.out \
|
||||||
|
- $(objpfx)check-wx-segment.out \
|
||||||
|
- $(objpfx)check-localplt.out $(objpfx)check-initfini.out
|
||||||
|
+tests-special += \
|
||||||
|
+ $(objpfx)check-execstack.out \
|
||||||
|
+ $(objpfx)check-initfini.out \
|
||||||
|
+ $(objpfx)check-localplt.out \
|
||||||
|
+ $(objpfx)check-textrel.out \
|
||||||
|
+ $(objpfx)check-wx-segment.out \
|
||||||
|
+ # tests-special
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(run-built-tests),yes)
|
||||||
|
-tests-special += $(objpfx)order-cmp.out $(objpfx)tst-array1-cmp.out \
|
||||||
|
- $(objpfx)tst-array1-static-cmp.out \
|
||||||
|
- $(objpfx)tst-array2-cmp.out $(objpfx)tst-array3-cmp.out \
|
||||||
|
- $(objpfx)tst-array4-cmp.out $(objpfx)tst-array5-cmp.out \
|
||||||
|
- $(objpfx)tst-array5-static-cmp.out $(objpfx)order2-cmp.out \
|
||||||
|
- $(objpfx)tst-initorder-cmp.out \
|
||||||
|
- $(objpfx)tst-initorder2-cmp.out $(objpfx)tst-unused-dep.out \
|
||||||
|
- $(objpfx)tst-unused-dep-cmp.out
|
||||||
|
+tests-special += \
|
||||||
|
+ $(objpfx)order-cmp.out \
|
||||||
|
+ $(objpfx)order2-cmp.out \
|
||||||
|
+ $(objpfx)tst-array1-cmp.out \
|
||||||
|
+ $(objpfx)tst-array1-static-cmp.out \
|
||||||
|
+ $(objpfx)tst-array2-cmp.out \
|
||||||
|
+ $(objpfx)tst-array3-cmp.out \
|
||||||
|
+ $(objpfx)tst-array4-cmp.out \
|
||||||
|
+ $(objpfx)tst-array5-cmp.out \
|
||||||
|
+ $(objpfx)tst-array5-static-cmp.out \
|
||||||
|
+ $(objpfx)tst-initorder-cmp.out \
|
||||||
|
+ $(objpfx)tst-initorder2-cmp.out \
|
||||||
|
+ $(objpfx)tst-unused-dep-cmp.out \
|
||||||
|
+ $(objpfx)tst-unused-dep.out \
|
||||||
|
+ # tests-special
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef avoid-generated
|
||||||
|
@@ -835,6 +1042,7 @@ rtld-stubbed-symbols = \
|
||||||
|
free \
|
||||||
|
malloc \
|
||||||
|
realloc \
|
||||||
|
+ # rtld-stubbed-symbols
|
||||||
|
|
||||||
|
ifeq ($(have-ssp),yes)
|
||||||
|
# rtld is not built with the stack protector, so these references will
|
633
glibc-rh2040657-7.patch
Normal file
633
glibc-rh2040657-7.patch
Normal file
@ -0,0 +1,633 @@
|
|||||||
|
commit b693d75f0c611bce9b0ad984bad306121d42c535
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Fri Jan 14 20:16:05 2022 +0100
|
||||||
|
|
||||||
|
elf: Split dl-printf.c from dl-misc.c
|
||||||
|
|
||||||
|
This allows to use different compiler flags for the diagnostics
|
||||||
|
code.
|
||||||
|
|
||||||
|
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
|
||||||
|
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index 124905f96c88ab53..52aafc89cec835ab 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -64,6 +64,7 @@ dl-routines = \
|
||||||
|
dl-object \
|
||||||
|
dl-open \
|
||||||
|
dl-origin \
|
||||||
|
+ dl-printf \
|
||||||
|
dl-profile \
|
||||||
|
dl-reloc \
|
||||||
|
dl-runtime \
|
||||||
|
diff --git a/elf/dl-misc.c b/elf/dl-misc.c
|
||||||
|
index b256d792c6198683..f17140b129343f7b 100644
|
||||||
|
--- a/elf/dl-misc.c
|
||||||
|
+++ b/elf/dl-misc.c
|
||||||
|
@@ -16,24 +16,16 @@
|
||||||
|
License along with the GNU C Library; if not, see
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
-#include <assert.h>
|
||||||
|
+#include <_itoa.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <ldsodefs.h>
|
||||||
|
-#include <limits.h>
|
||||||
|
#include <link.h>
|
||||||
|
-#include <stdarg.h>
|
||||||
|
-#include <stdlib.h>
|
||||||
|
-#include <string.h>
|
||||||
|
-#include <unistd.h>
|
||||||
|
+#include <not-cancel.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
-#include <sys/param.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
-#include <sys/uio.h>
|
||||||
|
-#include <sysdep.h>
|
||||||
|
-#include <_itoa.h>
|
||||||
|
-#include <dl-writev.h>
|
||||||
|
-#include <not-cancel.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
|
||||||
|
/* Read the whole contents of FILE into new mmap'd space with given
|
||||||
|
protections. *SIZEP gets the size of the file. On error MAP_FAILED
|
||||||
|
@@ -70,270 +62,6 @@ _dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
-
|
||||||
|
-/* Bare-bones printf implementation. This function only knows about
|
||||||
|
- the formats and flags needed and can handle only up to 64 stripes in
|
||||||
|
- the output. */
|
||||||
|
-static void
|
||||||
|
-_dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
|
||||||
|
-{
|
||||||
|
-# define NIOVMAX 64
|
||||||
|
- struct iovec iov[NIOVMAX];
|
||||||
|
- int niov = 0;
|
||||||
|
- pid_t pid = 0;
|
||||||
|
- char pidbuf[12];
|
||||||
|
-
|
||||||
|
- while (*fmt != '\0')
|
||||||
|
- {
|
||||||
|
- const char *startp = fmt;
|
||||||
|
-
|
||||||
|
- if (tag_p > 0)
|
||||||
|
- {
|
||||||
|
- /* Generate the tag line once. It consists of the PID and a
|
||||||
|
- colon followed by a tab. */
|
||||||
|
- if (pid == 0)
|
||||||
|
- {
|
||||||
|
- char *p;
|
||||||
|
- pid = __getpid ();
|
||||||
|
- assert (pid >= 0 && sizeof (pid_t) <= 4);
|
||||||
|
- p = _itoa (pid, &pidbuf[10], 10, 0);
|
||||||
|
- while (p > pidbuf)
|
||||||
|
- *--p = ' ';
|
||||||
|
- pidbuf[10] = ':';
|
||||||
|
- pidbuf[11] = '\t';
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* Append to the output. */
|
||||||
|
- assert (niov < NIOVMAX);
|
||||||
|
- iov[niov].iov_len = 12;
|
||||||
|
- iov[niov++].iov_base = pidbuf;
|
||||||
|
-
|
||||||
|
- /* No more tags until we see the next newline. */
|
||||||
|
- tag_p = -1;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* Skip everything except % and \n (if tags are needed). */
|
||||||
|
- while (*fmt != '\0' && *fmt != '%' && (! tag_p || *fmt != '\n'))
|
||||||
|
- ++fmt;
|
||||||
|
-
|
||||||
|
- /* Append constant string. */
|
||||||
|
- assert (niov < NIOVMAX);
|
||||||
|
- if ((iov[niov].iov_len = fmt - startp) != 0)
|
||||||
|
- iov[niov++].iov_base = (char *) startp;
|
||||||
|
-
|
||||||
|
- if (*fmt == '%')
|
||||||
|
- {
|
||||||
|
- /* It is a format specifier. */
|
||||||
|
- char fill = ' ';
|
||||||
|
- int width = -1;
|
||||||
|
- int prec = -1;
|
||||||
|
-#if LONG_MAX != INT_MAX
|
||||||
|
- int long_mod = 0;
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
- /* Recognize zero-digit fill flag. */
|
||||||
|
- if (*++fmt == '0')
|
||||||
|
- {
|
||||||
|
- fill = '0';
|
||||||
|
- ++fmt;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* See whether with comes from a parameter. Note that no other
|
||||||
|
- way to specify the width is implemented. */
|
||||||
|
- if (*fmt == '*')
|
||||||
|
- {
|
||||||
|
- width = va_arg (arg, int);
|
||||||
|
- ++fmt;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* Handle precision. */
|
||||||
|
- if (*fmt == '.' && fmt[1] == '*')
|
||||||
|
- {
|
||||||
|
- prec = va_arg (arg, int);
|
||||||
|
- fmt += 2;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* Recognize the l modifier. It is only important on some
|
||||||
|
- platforms where long and int have a different size. We
|
||||||
|
- can use the same code for size_t. */
|
||||||
|
- if (*fmt == 'l' || *fmt == 'Z')
|
||||||
|
- {
|
||||||
|
-#if LONG_MAX != INT_MAX
|
||||||
|
- long_mod = 1;
|
||||||
|
-#endif
|
||||||
|
- ++fmt;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- switch (*fmt)
|
||||||
|
- {
|
||||||
|
- /* Integer formatting. */
|
||||||
|
- case 'd':
|
||||||
|
- case 'u':
|
||||||
|
- case 'x':
|
||||||
|
- {
|
||||||
|
- /* We have to make a difference if long and int have a
|
||||||
|
- different size. */
|
||||||
|
-#if LONG_MAX != INT_MAX
|
||||||
|
- unsigned long int num = (long_mod
|
||||||
|
- ? va_arg (arg, unsigned long int)
|
||||||
|
- : va_arg (arg, unsigned int));
|
||||||
|
-#else
|
||||||
|
- unsigned long int num = va_arg (arg, unsigned int);
|
||||||
|
-#endif
|
||||||
|
- bool negative = false;
|
||||||
|
- if (*fmt == 'd')
|
||||||
|
- {
|
||||||
|
-#if LONG_MAX != INT_MAX
|
||||||
|
- if (long_mod)
|
||||||
|
- {
|
||||||
|
- if ((long int) num < 0)
|
||||||
|
- negative = true;
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
- {
|
||||||
|
- if ((int) num < 0)
|
||||||
|
- {
|
||||||
|
- num = (unsigned int) num;
|
||||||
|
- negative = true;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-#else
|
||||||
|
- if ((int) num < 0)
|
||||||
|
- negative = true;
|
||||||
|
-#endif
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* We use alloca() to allocate the buffer with the most
|
||||||
|
- pessimistic guess for the size. Using alloca() allows
|
||||||
|
- having more than one integer formatting in a call. */
|
||||||
|
- char *buf = (char *) alloca (1 + 3 * sizeof (unsigned long int));
|
||||||
|
- char *endp = &buf[1 + 3 * sizeof (unsigned long int)];
|
||||||
|
- char *cp = _itoa (num, endp, *fmt == 'x' ? 16 : 10, 0);
|
||||||
|
-
|
||||||
|
- /* Pad to the width the user specified. */
|
||||||
|
- if (width != -1)
|
||||||
|
- while (endp - cp < width)
|
||||||
|
- *--cp = fill;
|
||||||
|
-
|
||||||
|
- if (negative)
|
||||||
|
- *--cp = '-';
|
||||||
|
-
|
||||||
|
- iov[niov].iov_base = cp;
|
||||||
|
- iov[niov].iov_len = endp - cp;
|
||||||
|
- ++niov;
|
||||||
|
- }
|
||||||
|
- break;
|
||||||
|
-
|
||||||
|
- case 's':
|
||||||
|
- /* Get the string argument. */
|
||||||
|
- iov[niov].iov_base = va_arg (arg, char *);
|
||||||
|
- iov[niov].iov_len = strlen (iov[niov].iov_base);
|
||||||
|
- if (prec != -1)
|
||||||
|
- iov[niov].iov_len = MIN ((size_t) prec, iov[niov].iov_len);
|
||||||
|
- ++niov;
|
||||||
|
- break;
|
||||||
|
-
|
||||||
|
- case '%':
|
||||||
|
- iov[niov].iov_base = (void *) fmt;
|
||||||
|
- iov[niov].iov_len = 1;
|
||||||
|
- ++niov;
|
||||||
|
- break;
|
||||||
|
-
|
||||||
|
- default:
|
||||||
|
- assert (! "invalid format specifier");
|
||||||
|
- }
|
||||||
|
- ++fmt;
|
||||||
|
- }
|
||||||
|
- else if (*fmt == '\n')
|
||||||
|
- {
|
||||||
|
- /* See whether we have to print a single newline character. */
|
||||||
|
- if (fmt == startp)
|
||||||
|
- {
|
||||||
|
- iov[niov].iov_base = (char *) startp;
|
||||||
|
- iov[niov++].iov_len = 1;
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
- /* No, just add it to the rest of the string. */
|
||||||
|
- ++iov[niov - 1].iov_len;
|
||||||
|
-
|
||||||
|
- /* Next line, print a tag again. */
|
||||||
|
- tag_p = 1;
|
||||||
|
- ++fmt;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* Finally write the result. */
|
||||||
|
- _dl_writev (fd, iov, niov);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-/* Write to debug file. */
|
||||||
|
-void
|
||||||
|
-_dl_debug_printf (const char *fmt, ...)
|
||||||
|
-{
|
||||||
|
- va_list arg;
|
||||||
|
-
|
||||||
|
- va_start (arg, fmt);
|
||||||
|
- _dl_debug_vdprintf (GLRO(dl_debug_fd), 1, fmt, arg);
|
||||||
|
- va_end (arg);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-/* Write to debug file but don't start with a tag. */
|
||||||
|
-void
|
||||||
|
-_dl_debug_printf_c (const char *fmt, ...)
|
||||||
|
-{
|
||||||
|
- va_list arg;
|
||||||
|
-
|
||||||
|
- va_start (arg, fmt);
|
||||||
|
- _dl_debug_vdprintf (GLRO(dl_debug_fd), -1, fmt, arg);
|
||||||
|
- va_end (arg);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-/* Write the given file descriptor. */
|
||||||
|
-void
|
||||||
|
-_dl_dprintf (int fd, const char *fmt, ...)
|
||||||
|
-{
|
||||||
|
- va_list arg;
|
||||||
|
-
|
||||||
|
- va_start (arg, fmt);
|
||||||
|
- _dl_debug_vdprintf (fd, 0, fmt, arg);
|
||||||
|
- va_end (arg);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-void
|
||||||
|
-_dl_printf (const char *fmt, ...)
|
||||||
|
-{
|
||||||
|
- va_list arg;
|
||||||
|
-
|
||||||
|
- va_start (arg, fmt);
|
||||||
|
- _dl_debug_vdprintf (STDOUT_FILENO, 0, fmt, arg);
|
||||||
|
- va_end (arg);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-void
|
||||||
|
-_dl_error_printf (const char *fmt, ...)
|
||||||
|
-{
|
||||||
|
- va_list arg;
|
||||||
|
-
|
||||||
|
- va_start (arg, fmt);
|
||||||
|
- _dl_debug_vdprintf (STDERR_FILENO, 0, fmt, arg);
|
||||||
|
- va_end (arg);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-void
|
||||||
|
-_dl_fatal_printf (const char *fmt, ...)
|
||||||
|
-{
|
||||||
|
- va_list arg;
|
||||||
|
-
|
||||||
|
- va_start (arg, fmt);
|
||||||
|
- _dl_debug_vdprintf (STDERR_FILENO, 0, fmt, arg);
|
||||||
|
- va_end (arg);
|
||||||
|
- _exit (127);
|
||||||
|
-}
|
||||||
|
-rtld_hidden_def (_dl_fatal_printf)
|
||||||
|
-
|
||||||
|
/* Test whether given NAME matches any of the names of the given object. */
|
||||||
|
int
|
||||||
|
_dl_name_match_p (const char *name, const struct link_map *map)
|
||||||
|
@@ -354,7 +82,6 @@ _dl_name_match_p (const char *name, const struct link_map *map)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-
|
||||||
|
unsigned long int
|
||||||
|
_dl_higher_prime_number (unsigned long int n)
|
||||||
|
{
|
||||||
|
diff --git a/elf/dl-printf.c b/elf/dl-printf.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..d3264ba96cd959bf
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/elf/dl-printf.c
|
||||||
|
@@ -0,0 +1,292 @@
|
||||||
|
+/* printf implementation for the dynamic loader.
|
||||||
|
+ Copyright (C) 1997-2022 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
|
||||||
|
+ <https://www.gnu.org/licenses/>. */
|
||||||
|
+
|
||||||
|
+#include <_itoa.h>
|
||||||
|
+#include <assert.h>
|
||||||
|
+#include <dl-writev.h>
|
||||||
|
+#include <ldsodefs.h>
|
||||||
|
+#include <limits.h>
|
||||||
|
+#include <stdarg.h>
|
||||||
|
+#include <stdint.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <string.h>
|
||||||
|
+#include <sys/uio.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
+
|
||||||
|
+/* Bare-bones printf implementation. This function only knows about
|
||||||
|
+ the formats and flags needed and can handle only up to 64 stripes in
|
||||||
|
+ the output. */
|
||||||
|
+static void
|
||||||
|
+_dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
|
||||||
|
+{
|
||||||
|
+# define NIOVMAX 64
|
||||||
|
+ struct iovec iov[NIOVMAX];
|
||||||
|
+ int niov = 0;
|
||||||
|
+ pid_t pid = 0;
|
||||||
|
+ char pidbuf[12];
|
||||||
|
+
|
||||||
|
+ while (*fmt != '\0')
|
||||||
|
+ {
|
||||||
|
+ const char *startp = fmt;
|
||||||
|
+
|
||||||
|
+ if (tag_p > 0)
|
||||||
|
+ {
|
||||||
|
+ /* Generate the tag line once. It consists of the PID and a
|
||||||
|
+ colon followed by a tab. */
|
||||||
|
+ if (pid == 0)
|
||||||
|
+ {
|
||||||
|
+ char *p;
|
||||||
|
+ pid = __getpid ();
|
||||||
|
+ assert (pid >= 0 && sizeof (pid_t) <= 4);
|
||||||
|
+ p = _itoa (pid, &pidbuf[10], 10, 0);
|
||||||
|
+ while (p > pidbuf)
|
||||||
|
+ *--p = ' ';
|
||||||
|
+ pidbuf[10] = ':';
|
||||||
|
+ pidbuf[11] = '\t';
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Append to the output. */
|
||||||
|
+ assert (niov < NIOVMAX);
|
||||||
|
+ iov[niov].iov_len = 12;
|
||||||
|
+ iov[niov++].iov_base = pidbuf;
|
||||||
|
+
|
||||||
|
+ /* No more tags until we see the next newline. */
|
||||||
|
+ tag_p = -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Skip everything except % and \n (if tags are needed). */
|
||||||
|
+ while (*fmt != '\0' && *fmt != '%' && (! tag_p || *fmt != '\n'))
|
||||||
|
+ ++fmt;
|
||||||
|
+
|
||||||
|
+ /* Append constant string. */
|
||||||
|
+ assert (niov < NIOVMAX);
|
||||||
|
+ if ((iov[niov].iov_len = fmt - startp) != 0)
|
||||||
|
+ iov[niov++].iov_base = (char *) startp;
|
||||||
|
+
|
||||||
|
+ if (*fmt == '%')
|
||||||
|
+ {
|
||||||
|
+ /* It is a format specifier. */
|
||||||
|
+ char fill = ' ';
|
||||||
|
+ int width = -1;
|
||||||
|
+ int prec = -1;
|
||||||
|
+#if LONG_MAX != INT_MAX
|
||||||
|
+ int long_mod = 0;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ /* Recognize zero-digit fill flag. */
|
||||||
|
+ if (*++fmt == '0')
|
||||||
|
+ {
|
||||||
|
+ fill = '0';
|
||||||
|
+ ++fmt;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* See whether with comes from a parameter. Note that no other
|
||||||
|
+ way to specify the width is implemented. */
|
||||||
|
+ if (*fmt == '*')
|
||||||
|
+ {
|
||||||
|
+ width = va_arg (arg, int);
|
||||||
|
+ ++fmt;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Handle precision. */
|
||||||
|
+ if (*fmt == '.' && fmt[1] == '*')
|
||||||
|
+ {
|
||||||
|
+ prec = va_arg (arg, int);
|
||||||
|
+ fmt += 2;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Recognize the l modifier. It is only important on some
|
||||||
|
+ platforms where long and int have a different size. We
|
||||||
|
+ can use the same code for size_t. */
|
||||||
|
+ if (*fmt == 'l' || *fmt == 'Z')
|
||||||
|
+ {
|
||||||
|
+#if LONG_MAX != INT_MAX
|
||||||
|
+ long_mod = 1;
|
||||||
|
+#endif
|
||||||
|
+ ++fmt;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ switch (*fmt)
|
||||||
|
+ {
|
||||||
|
+ /* Integer formatting. */
|
||||||
|
+ case 'd':
|
||||||
|
+ case 'u':
|
||||||
|
+ case 'x':
|
||||||
|
+ {
|
||||||
|
+ /* We have to make a difference if long and int have a
|
||||||
|
+ different size. */
|
||||||
|
+#if LONG_MAX != INT_MAX
|
||||||
|
+ unsigned long int num = (long_mod
|
||||||
|
+ ? va_arg (arg, unsigned long int)
|
||||||
|
+ : va_arg (arg, unsigned int));
|
||||||
|
+#else
|
||||||
|
+ unsigned long int num = va_arg (arg, unsigned int);
|
||||||
|
+#endif
|
||||||
|
+ bool negative = false;
|
||||||
|
+ if (*fmt == 'd')
|
||||||
|
+ {
|
||||||
|
+#if LONG_MAX != INT_MAX
|
||||||
|
+ if (long_mod)
|
||||||
|
+ {
|
||||||
|
+ if ((long int) num < 0)
|
||||||
|
+ negative = true;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ if ((int) num < 0)
|
||||||
|
+ {
|
||||||
|
+ num = (unsigned int) num;
|
||||||
|
+ negative = true;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+#else
|
||||||
|
+ if ((int) num < 0)
|
||||||
|
+ negative = true;
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* We use alloca() to allocate the buffer with the most
|
||||||
|
+ pessimistic guess for the size. Using alloca() allows
|
||||||
|
+ having more than one integer formatting in a call. */
|
||||||
|
+ char *buf = (char *) alloca (1 + 3 * sizeof (unsigned long int));
|
||||||
|
+ char *endp = &buf[1 + 3 * sizeof (unsigned long int)];
|
||||||
|
+ char *cp = _itoa (num, endp, *fmt == 'x' ? 16 : 10, 0);
|
||||||
|
+
|
||||||
|
+ /* Pad to the width the user specified. */
|
||||||
|
+ if (width != -1)
|
||||||
|
+ while (endp - cp < width)
|
||||||
|
+ *--cp = fill;
|
||||||
|
+
|
||||||
|
+ if (negative)
|
||||||
|
+ *--cp = '-';
|
||||||
|
+
|
||||||
|
+ iov[niov].iov_base = cp;
|
||||||
|
+ iov[niov].iov_len = endp - cp;
|
||||||
|
+ ++niov;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 's':
|
||||||
|
+ /* Get the string argument. */
|
||||||
|
+ iov[niov].iov_base = va_arg (arg, char *);
|
||||||
|
+ iov[niov].iov_len = strlen (iov[niov].iov_base);
|
||||||
|
+ if (prec != -1)
|
||||||
|
+ iov[niov].iov_len = MIN ((size_t) prec, iov[niov].iov_len);
|
||||||
|
+ ++niov;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case '%':
|
||||||
|
+ iov[niov].iov_base = (void *) fmt;
|
||||||
|
+ iov[niov].iov_len = 1;
|
||||||
|
+ ++niov;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ default:
|
||||||
|
+ assert (! "invalid format specifier");
|
||||||
|
+ }
|
||||||
|
+ ++fmt;
|
||||||
|
+ }
|
||||||
|
+ else if (*fmt == '\n')
|
||||||
|
+ {
|
||||||
|
+ /* See whether we have to print a single newline character. */
|
||||||
|
+ if (fmt == startp)
|
||||||
|
+ {
|
||||||
|
+ iov[niov].iov_base = (char *) startp;
|
||||||
|
+ iov[niov++].iov_len = 1;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ /* No, just add it to the rest of the string. */
|
||||||
|
+ ++iov[niov - 1].iov_len;
|
||||||
|
+
|
||||||
|
+ /* Next line, print a tag again. */
|
||||||
|
+ tag_p = 1;
|
||||||
|
+ ++fmt;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Finally write the result. */
|
||||||
|
+ _dl_writev (fd, iov, niov);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/* Write to debug file. */
|
||||||
|
+void
|
||||||
|
+_dl_debug_printf (const char *fmt, ...)
|
||||||
|
+{
|
||||||
|
+ va_list arg;
|
||||||
|
+
|
||||||
|
+ va_start (arg, fmt);
|
||||||
|
+ _dl_debug_vdprintf (GLRO(dl_debug_fd), 1, fmt, arg);
|
||||||
|
+ va_end (arg);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/* Write to debug file but don't start with a tag. */
|
||||||
|
+void
|
||||||
|
+_dl_debug_printf_c (const char *fmt, ...)
|
||||||
|
+{
|
||||||
|
+ va_list arg;
|
||||||
|
+
|
||||||
|
+ va_start (arg, fmt);
|
||||||
|
+ _dl_debug_vdprintf (GLRO(dl_debug_fd), -1, fmt, arg);
|
||||||
|
+ va_end (arg);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/* Write the given file descriptor. */
|
||||||
|
+void
|
||||||
|
+_dl_dprintf (int fd, const char *fmt, ...)
|
||||||
|
+{
|
||||||
|
+ va_list arg;
|
||||||
|
+
|
||||||
|
+ va_start (arg, fmt);
|
||||||
|
+ _dl_debug_vdprintf (fd, 0, fmt, arg);
|
||||||
|
+ va_end (arg);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+_dl_printf (const char *fmt, ...)
|
||||||
|
+{
|
||||||
|
+ va_list arg;
|
||||||
|
+
|
||||||
|
+ va_start (arg, fmt);
|
||||||
|
+ _dl_debug_vdprintf (STDOUT_FILENO, 0, fmt, arg);
|
||||||
|
+ va_end (arg);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+_dl_error_printf (const char *fmt, ...)
|
||||||
|
+{
|
||||||
|
+ va_list arg;
|
||||||
|
+
|
||||||
|
+ va_start (arg, fmt);
|
||||||
|
+ _dl_debug_vdprintf (STDERR_FILENO, 0, fmt, arg);
|
||||||
|
+ va_end (arg);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+_dl_fatal_printf (const char *fmt, ...)
|
||||||
|
+{
|
||||||
|
+ va_list arg;
|
||||||
|
+
|
||||||
|
+ va_start (arg, fmt);
|
||||||
|
+ _dl_debug_vdprintf (STDERR_FILENO, 0, fmt, arg);
|
||||||
|
+ va_end (arg);
|
||||||
|
+ _exit (127);
|
||||||
|
+}
|
||||||
|
+rtld_hidden_def (_dl_fatal_printf)
|
146
glibc-rh2040657-8.patch
Normal file
146
glibc-rh2040657-8.patch
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
commit 9ba202c78f0aa39f49929eee63c367847da72ee4
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Fri Jan 14 20:16:05 2022 +0100
|
||||||
|
|
||||||
|
Add --with-rtld-early-cflags configure option
|
||||||
|
|
||||||
|
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
|
||||||
|
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
|
||||||
|
|
||||||
|
Conflicts:
|
||||||
|
INSTALL
|
||||||
|
configure
|
||||||
|
manual/install.texi
|
||||||
|
(Missing --with-timeout-factor downstream.)
|
||||||
|
|
||||||
|
diff --git a/INSTALL b/INSTALL
|
||||||
|
index d6d93ec9be4262d7..d8d4e9f155f56616 100644
|
||||||
|
--- a/INSTALL
|
||||||
|
+++ b/INSTALL
|
||||||
|
@@ -106,6 +106,14 @@ if 'CFLAGS' is specified it must enable optimization. For example:
|
||||||
|
particular case and potentially change debugging information and
|
||||||
|
metadata only).
|
||||||
|
|
||||||
|
+'--with-rtld-early-cflags=CFLAGS'
|
||||||
|
+ Use additional compiler flags CFLAGS to build the early startup
|
||||||
|
+ code of the dynamic linker. These flags can be used to enable
|
||||||
|
+ early dynamic linker diagnostics to run on CPUs which are not
|
||||||
|
+ compatible with the rest of the GNU C Library, for example, due to
|
||||||
|
+ compiler flags which target a later instruction set architecture
|
||||||
|
+ (ISA).
|
||||||
|
+
|
||||||
|
'--disable-shared'
|
||||||
|
Don't build shared libraries even if it is possible. Not all
|
||||||
|
systems support shared libraries; you need ELF support and
|
||||||
|
diff --git a/config.make.in b/config.make.in
|
||||||
|
index e8630a8d0ccf874d..6d43e691f7823262 100644
|
||||||
|
--- a/config.make.in
|
||||||
|
+++ b/config.make.in
|
||||||
|
@@ -110,6 +110,7 @@ CFLAGS = @CFLAGS@
|
||||||
|
CPPFLAGS-config = @CPPFLAGS@
|
||||||
|
CPPUNDEFS = @CPPUNDEFS@
|
||||||
|
extra-nonshared-cflags = @extra_nonshared_cflags@
|
||||||
|
+rtld-early-cflags = @rtld_early_cflags@
|
||||||
|
ASFLAGS-config = @ASFLAGS_config@
|
||||||
|
AR = @AR@
|
||||||
|
NM = @NM@
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index e9d2b1f398c4dba0..03f4e59e754b5463 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -681,6 +681,7 @@ force_install
|
||||||
|
bindnow
|
||||||
|
hardcoded_path_in_tests
|
||||||
|
enable_timezone_tools
|
||||||
|
+rtld_early_cflags
|
||||||
|
extra_nonshared_cflags
|
||||||
|
use_default_link
|
||||||
|
sysheaders
|
||||||
|
@@ -761,6 +762,7 @@ with_selinux
|
||||||
|
with_headers
|
||||||
|
with_default_link
|
||||||
|
with_nonshared_cflags
|
||||||
|
+with_rtld_early_cflags
|
||||||
|
enable_sanity_checks
|
||||||
|
enable_shared
|
||||||
|
enable_profile
|
||||||
|
@@ -1479,6 +1481,8 @@ Optional Packages:
|
||||||
|
--with-default-link do not use explicit linker scripts
|
||||||
|
--with-nonshared-cflags=CFLAGS
|
||||||
|
build nonshared libraries with additional CFLAGS
|
||||||
|
+ --with-rtld-early-cflags=CFLAGS
|
||||||
|
+ build early initialization with additional CFLAGS
|
||||||
|
--with-cpu=CPU select code for CPU variant
|
||||||
|
|
||||||
|
Some influential environment variables:
|
||||||
|
@@ -3383,6 +3387,16 @@ fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
+# Check whether --with-rtld-early-cflags was given.
|
||||||
|
+if test "${with_rtld_early_cflags+set}" = set; then :
|
||||||
|
+ withval=$with_rtld_early_cflags; rtld_early_cflags=$withval
|
||||||
|
+else
|
||||||
|
+ rtld_early_cflags=
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
# Check whether --enable-sanity-checks was given.
|
||||||
|
if test "${enable_sanity_checks+set}" = set; then :
|
||||||
|
enableval=$enable_sanity_checks; enable_sanity=$enableval
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 79f6822d29ce21cf..eb9431875fae1b0e 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -162,6 +162,12 @@ AC_ARG_WITH([nonshared-cflags],
|
||||||
|
[extra_nonshared_cflags=$withval],
|
||||||
|
[extra_nonshared_cflags=])
|
||||||
|
AC_SUBST(extra_nonshared_cflags)
|
||||||
|
+AC_ARG_WITH([rtld-early-cflags],
|
||||||
|
+ AS_HELP_STRING([--with-rtld-early-cflags=CFLAGS],
|
||||||
|
+ [build early initialization with additional CFLAGS]),
|
||||||
|
+ [rtld_early_cflags=$withval],
|
||||||
|
+ [rtld_early_cflags=])
|
||||||
|
+AC_SUBST(rtld_early_cflags)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([sanity-checks],
|
||||||
|
AS_HELP_STRING([--disable-sanity-checks],
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index 52aafc89cec835ab..778e393395fc5248 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -152,6 +152,14 @@ CFLAGS-.o += $(call elide-stack-protector,.o,$(elide-routines.os))
|
||||||
|
CFLAGS-.op += $(call elide-stack-protector,.op,$(elide-routines.os))
|
||||||
|
CFLAGS-.os += $(call elide-stack-protector,.os,$(all-rtld-routines))
|
||||||
|
|
||||||
|
+# Add the requested compiler flags to the early startup code.
|
||||||
|
+CFLAGS-dl-printf.os += $(rtld-early-cflags)
|
||||||
|
+CFLAGS-dl-sysdep.os += $(rtld-early-cflags)
|
||||||
|
+CFLAGS-dl-tunables.os += $(rtld-early-cflags)
|
||||||
|
+CFLAGS-dl-write.os += $(rtld-early-cflags)
|
||||||
|
+CFLAGS-dl-writev.os += $(rtld-early-cflags)
|
||||||
|
+CFLAGS-rtld.os += $(rtld-early-cflags)
|
||||||
|
+
|
||||||
|
ifeq ($(unwind-find-fde),yes)
|
||||||
|
routines += unwind-dw2-fde-glibc
|
||||||
|
shared-only-routines += unwind-dw2-fde-glibc
|
||||||
|
diff --git a/manual/install.texi b/manual/install.texi
|
||||||
|
index 1320ac69b3c645f2..816b77a0a25a88a7 100644
|
||||||
|
--- a/manual/install.texi
|
||||||
|
+++ b/manual/install.texi
|
||||||
|
@@ -131,6 +131,13 @@ that the objects in @file{libc_nonshared.a} are compiled with this flag
|
||||||
|
(although this will not affect the generated code in this particular
|
||||||
|
case and potentially change debugging information and metadata only).
|
||||||
|
|
||||||
|
+@item --with-rtld-early-cflags=@var{cflags}
|
||||||
|
+Use additional compiler flags @var{cflags} to build the early startup
|
||||||
|
+code of the dynamic linker. These flags can be used to enable early
|
||||||
|
+dynamic linker diagnostics to run on CPUs which are not compatible with
|
||||||
|
+the rest of @theglibc{}, for example, due to compiler flags which target
|
||||||
|
+a later instruction set architecture (ISA).
|
||||||
|
+
|
||||||
|
@c disable static doesn't work currently
|
||||||
|
@c @item --disable-static
|
||||||
|
@c Don't build static libraries. Static libraries aren't that useful these
|
52
glibc-rh2040657-9.patch
Normal file
52
glibc-rh2040657-9.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
commit 550116486692efc394d03befee19f7e9c17d5044
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Fri Jan 14 20:16:05 2022 +0100
|
||||||
|
|
||||||
|
powerpc64le: Use <gcc-macros.h> in early HWCAP check
|
||||||
|
|
||||||
|
This is required so that the checks still work if $(early-cflags)
|
||||||
|
selects a different ISA level.
|
||||||
|
|
||||||
|
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
|
||||||
|
Tested-by: Carlos O'Donell <carlos@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/sysdeps/powerpc/powerpc64/le/dl-hwcap-check.h b/sysdeps/powerpc/powerpc64/le/dl-hwcap-check.h
|
||||||
|
index 0437ae4d522fb36d..899c74f880e6f5f0 100644
|
||||||
|
--- a/sysdeps/powerpc/powerpc64/le/dl-hwcap-check.h
|
||||||
|
+++ b/sysdeps/powerpc/powerpc64/le/dl-hwcap-check.h
|
||||||
|
@@ -19,17 +19,18 @@
|
||||||
|
#ifndef _DL_HWCAP_CHECK_H
|
||||||
|
#define _DL_HWCAP_CHECK_H
|
||||||
|
|
||||||
|
+#include <gcc-macros.h>
|
||||||
|
#include <ldsodefs.h>
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
dl_hwcap_check (void)
|
||||||
|
{
|
||||||
|
-#ifdef _ARCH_PWR9
|
||||||
|
+#ifdef GCCMACRO_ARCH_PWR9
|
||||||
|
if ((GLRO (dl_hwcap2) & PPC_FEATURE2_ARCH_3_00) == 0)
|
||||||
|
_dl_fatal_printf ("\
|
||||||
|
Fatal glibc error: CPU lacks ISA 3.00 support (POWER9 or later required)\n");
|
||||||
|
#endif
|
||||||
|
-#ifdef __FLOAT128_HARDWARE__
|
||||||
|
+#ifdef GCCMACRO__FLOAT128_HARDWARE__
|
||||||
|
if ((GLRO (dl_hwcap2) & PPC_FEATURE2_HAS_IEEE128) == 0)
|
||||||
|
_dl_fatal_printf ("\
|
||||||
|
Fatal glibc error: CPU lacks float128 support (POWER 9 or later required)\n");
|
||||||
|
@@ -37,12 +38,12 @@ Fatal glibc error: CPU lacks float128 support (POWER 9 or later required)\n");
|
||||||
|
/* This check is not actually reached when building for POWER10 and
|
||||||
|
running on POWER9 because there are faulting PCREL instructions
|
||||||
|
before this point. */
|
||||||
|
-#if defined _ARCH_PWR10 || defined __PCREL__
|
||||||
|
+#if defined GCCMACRO_ARCH_PWR10 || defined GCCMACRO__PCREL__
|
||||||
|
if ((GLRO (dl_hwcap2) & PPC_FEATURE2_ARCH_3_1) == 0)
|
||||||
|
_dl_fatal_printf ("\
|
||||||
|
Fatal glibc error: CPU lacks ISA 3.10 support (POWER10 or later required)\n");
|
||||||
|
#endif
|
||||||
|
-#ifdef __MMA__
|
||||||
|
+#ifdef GCCMACRO__MMA__
|
||||||
|
if ((GLRO (dl_hwcap2) & PPC_FEATURE2_MMA) == 0)
|
||||||
|
_dl_fatal_printf ("\
|
||||||
|
Fatal glibc error: CPU lacks MMA support (POWER10 or later required)\n");
|
32
glibc.spec
32
glibc.spec
@ -148,7 +148,7 @@ end \
|
|||||||
Summary: The GNU libc libraries
|
Summary: The GNU libc libraries
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Version: %{glibcversion}
|
Version: %{glibcversion}
|
||||||
Release: 19%{?dist}
|
Release: 20%{?dist}
|
||||||
|
|
||||||
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
||||||
# libraries.
|
# libraries.
|
||||||
@ -326,6 +326,18 @@ Patch126: glibc-rh2024347-10.patch
|
|||||||
Patch127: glibc-rh2024347-11.patch
|
Patch127: glibc-rh2024347-11.patch
|
||||||
Patch128: glibc-rh2024347-12.patch
|
Patch128: glibc-rh2024347-12.patch
|
||||||
Patch129: glibc-rh2024347-13.patch
|
Patch129: glibc-rh2024347-13.patch
|
||||||
|
Patch130: glibc-rh2040657-1.patch
|
||||||
|
Patch131: glibc-rh2040657-2.patch
|
||||||
|
Patch132: glibc-rh2040657-3.patch
|
||||||
|
Patch133: glibc-rh2040657-4.patch
|
||||||
|
Patch134: glibc-rh2040657-5.patch
|
||||||
|
Patch135: glibc-rh2040657-6.patch
|
||||||
|
Patch136: glibc-rh2040657-7.patch
|
||||||
|
Patch137: glibc-rh2040657-8.patch
|
||||||
|
Patch138: glibc-rh2040657-9.patch
|
||||||
|
Patch139: glibc-rh2040657-10.patch
|
||||||
|
Patch140: glibc-rh2040657-11.patch
|
||||||
|
Patch141: glibc-rh2040657-12.patch
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Continued list of core "glibc" package information:
|
# Continued list of core "glibc" package information:
|
||||||
@ -1242,6 +1254,20 @@ rpm_inherit_flags \
|
|||||||
"-mtune=zEC12" \
|
"-mtune=zEC12" \
|
||||||
"-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1" \
|
"-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1" \
|
||||||
|
|
||||||
|
# Use the RHEL 8 baseline for the early dynamic loader code, so that
|
||||||
|
# running on too old CPUs results in a diagnostic.
|
||||||
|
%if 0%{?rhel} >= 9
|
||||||
|
%ifarch ppc64le
|
||||||
|
%define glibc_rtld_early_cflags -mcpu=power8
|
||||||
|
%endif
|
||||||
|
%ifarch s390x
|
||||||
|
%define glibc_rtld_early_cflags -march=z13
|
||||||
|
%endif
|
||||||
|
%ifarch x86_64
|
||||||
|
%define glibc_rtld_early_cflags -march=x86-64
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
# libc_nonshared.a cannot be built with the default hardening flags
|
# libc_nonshared.a cannot be built with the default hardening flags
|
||||||
# because the glibc build system is incompatible with
|
# because the glibc build system is incompatible with
|
||||||
# -D_FORTIFY_SOURCE. The object files need to be marked as to be
|
# -D_FORTIFY_SOURCE. The object files need to be marked as to be
|
||||||
@ -1288,6 +1314,7 @@ build()
|
|||||||
--enable-tunables \
|
--enable-tunables \
|
||||||
--enable-systemtap \
|
--enable-systemtap \
|
||||||
${core_with_options} \
|
${core_with_options} \
|
||||||
|
%{?glibc_rtld_early_cflags:--with-rtld-early-cflags=%glibc_rtld_early_cflags} \
|
||||||
%ifarch x86_64 %{ix86}
|
%ifarch x86_64 %{ix86}
|
||||||
--enable-cet \
|
--enable-cet \
|
||||||
%endif
|
%endif
|
||||||
@ -2354,6 +2381,9 @@ fi
|
|||||||
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jan 19 2022 Florian Weimer <fweimer@redhat.com> - 2.34-20
|
||||||
|
- More reliable CPU compatibility diagnostics (#2040657)
|
||||||
|
|
||||||
* Fri Jan 14 2022 Florian Weimer <fweimer@redhat.com> - 2.34-19
|
* Fri Jan 14 2022 Florian Weimer <fweimer@redhat.com> - 2.34-19
|
||||||
- Optionally accelerate sched_getcpu using rseq (#2024347)
|
- Optionally accelerate sched_getcpu using rseq (#2024347)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user