Message ID | 20240110155011.3930473-1-carlos@redhat.com |
---|---|
State | New |
Headers | show |
Series | elf: Fix tst-nodeps2 test failure. | expand |
* Carlos O'Donell: > When building the testsuite with --enable-hard-coded-path-in-tests > the tst-nodeps2-mod.so is not built with the required DT_RUNPATH > values and the test escapes the test framework and loads the system > libraries and aborts. The fix is to use the existing > $(link-test-modules-rpath-link) variable to set DT_RUNPATH correctly. > > No regressions on x86_64. > --- > elf/Makefile | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/elf/Makefile b/elf/Makefile > index 600812e573..5d78b659ce 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -3022,6 +3022,8 @@ $(objpfx)tst-env-setuid: $(objpfx)tst-sonamemove-runmod2.so > $(objpfx)tst-env-setuid-static.out: $(objpfx)tst-sonamemove-runmod1.so > > # The object tst-nodeps1-mod.so has no explicit dependencies on libc.so. > +# We do not use $(link-test-modules-rpath-link) since the object has no > +# DT_NEEDED. > $(objpfx)tst-nodeps1-mod.so: $(objpfx)tst-nodeps1-mod.os > $(LINK.o) -nostartfiles -nostdlib -shared -o $@ $^ > tst-nodeps1.so-no-z-defs = yes > @@ -3032,7 +3034,8 @@ $(objpfx)tst-nodeps1: $(objpfx)tst-nodeps1-mod.so > # with the IFUNC resolver reference. > $(objpfx)tst-nodeps2-mod.so: $(common-objpfx)libc.so \ > $(objpfx)tst-nodeps1-mod.so $(objpfx)tst-nodeps2-mod.os > - $(LINK.o) -Wl,--no-as-needed -nostartfiles -nostdlib -shared -o $@ $^ > + $(LINK.o) -Wl,--no-as-needed -nostartfiles -nostdlib -shared -o $@ $^ \ > + $(link-test-modules-rpath-link) > $(objpfx)tst-nodeps2.out: \ > $(objpfx)tst-nodeps1-mod.so $(objpfx)tst-nodeps2-mod.so Looks good. Maybe reference the faulty commit 78ca44da0160a0b442f0ca1f253e3360f044b2ec ("elf: Relocate libc.so early during startup and dlmopen (bug 31083)")? Reviewed-by: Florian Weimer <fweimer@redhat.com> Thanks, Florian
On 1/10/24 11:09, Florian Weimer wrote: > * Carlos O'Donell: > >> When building the testsuite with --enable-hard-coded-path-in-tests >> the tst-nodeps2-mod.so is not built with the required DT_RUNPATH >> values and the test escapes the test framework and loads the system >> libraries and aborts. The fix is to use the existing >> $(link-test-modules-rpath-link) variable to set DT_RUNPATH correctly. >> >> No regressions on x86_64. >> --- >> elf/Makefile | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/elf/Makefile b/elf/Makefile >> index 600812e573..5d78b659ce 100644 >> --- a/elf/Makefile >> +++ b/elf/Makefile >> @@ -3022,6 +3022,8 @@ $(objpfx)tst-env-setuid: $(objpfx)tst-sonamemove-runmod2.so >> $(objpfx)tst-env-setuid-static.out: $(objpfx)tst-sonamemove-runmod1.so >> >> # The object tst-nodeps1-mod.so has no explicit dependencies on libc.so. >> +# We do not use $(link-test-modules-rpath-link) since the object has no >> +# DT_NEEDED. >> $(objpfx)tst-nodeps1-mod.so: $(objpfx)tst-nodeps1-mod.os >> $(LINK.o) -nostartfiles -nostdlib -shared -o $@ $^ >> tst-nodeps1.so-no-z-defs = yes >> @@ -3032,7 +3034,8 @@ $(objpfx)tst-nodeps1: $(objpfx)tst-nodeps1-mod.so >> # with the IFUNC resolver reference. >> $(objpfx)tst-nodeps2-mod.so: $(common-objpfx)libc.so \ >> $(objpfx)tst-nodeps1-mod.so $(objpfx)tst-nodeps2-mod.os >> - $(LINK.o) -Wl,--no-as-needed -nostartfiles -nostdlib -shared -o $@ $^ >> + $(LINK.o) -Wl,--no-as-needed -nostartfiles -nostdlib -shared -o $@ $^ \ >> + $(link-test-modules-rpath-link) >> $(objpfx)tst-nodeps2.out: \ >> $(objpfx)tst-nodeps1-mod.so $(objpfx)tst-nodeps2-mod.so > > Looks good. Maybe reference the faulty commit > 78ca44da0160a0b442f0ca1f253e3360f044b2ec ("elf: Relocate libc.so early > during startup and dlmopen (bug 31083)")? Good point. Will do. > Reviewed-by: Florian Weimer <fweimer@redhat.com> Thanks! > Thanks, > Florian >
diff --git a/elf/Makefile b/elf/Makefile index 600812e573..5d78b659ce 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -3022,6 +3022,8 @@ $(objpfx)tst-env-setuid: $(objpfx)tst-sonamemove-runmod2.so $(objpfx)tst-env-setuid-static.out: $(objpfx)tst-sonamemove-runmod1.so # The object tst-nodeps1-mod.so has no explicit dependencies on libc.so. +# We do not use $(link-test-modules-rpath-link) since the object has no +# DT_NEEDED. $(objpfx)tst-nodeps1-mod.so: $(objpfx)tst-nodeps1-mod.os $(LINK.o) -nostartfiles -nostdlib -shared -o $@ $^ tst-nodeps1.so-no-z-defs = yes @@ -3032,7 +3034,8 @@ $(objpfx)tst-nodeps1: $(objpfx)tst-nodeps1-mod.so # with the IFUNC resolver reference. $(objpfx)tst-nodeps2-mod.so: $(common-objpfx)libc.so \ $(objpfx)tst-nodeps1-mod.so $(objpfx)tst-nodeps2-mod.os - $(LINK.o) -Wl,--no-as-needed -nostartfiles -nostdlib -shared -o $@ $^ + $(LINK.o) -Wl,--no-as-needed -nostartfiles -nostdlib -shared -o $@ $^ \ + $(link-test-modules-rpath-link) $(objpfx)tst-nodeps2.out: \ $(objpfx)tst-nodeps1-mod.so $(objpfx)tst-nodeps2-mod.so