[PATCH v3] elf: Canonicalize $ORIGIN in an explicit ld.so invocation [BZ 25263]

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Wed Mar 19 14:47:17 GMT 2025



On 19/03/25 11:02, Adhemerval Zanella Netto wrote:
> 
> 
> On 19/03/25 09:42, Joseph Myers wrote:
>> This still isn't working for me; the build fails with "cannot find 
>> -lorigin-mod".  (Before 5291d9f1e274dd869bc0b3d044fd4cbae486893d it was 
>> also broken with a lint-makefiles failure.)
>>
> 
> I forgot that rules dependencies are evaluated in no defined order. I am
> trying to come up a fix, the main issue is making the build with
> --enable-hardcoded-path-in-tests.

I had to reinstate a custom rule to avoid the DT_NEEDED with a full path
and also link tst-origin with built libc:

diff --git a/elf/Makefile b/elf/Makefile
index 3d60000ec9..fd73b68308 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -456,7 +456,6 @@ tests += \
   tst-noload \
   tst-non-directory-path \
   tst-null-argv \
-  tst-origin \
   tst-p_align1 \
   tst-p_align2 \
   tst-p_align3 \
@@ -3451,8 +3450,15 @@ $(objpfx)tst-dlopen-constructor-null-mod2.so: \

 CFLAGS-tst-origin.c += $(no-stack-protector)
 CFLAGS-liborigin-mod.c += $(no-stack-protector)
-LDFLAGS-tst-origin += -Wl,-rpath,\$$ORIGIN -L$(subst :, -L,$(rpath-link)) -lorigin-mod
-$(objpfx)tst-origin.out: tst-origin.sh $(objpfx)liborigin-mod.so $(objpfx)tst-origin
+# The test requires liborigin-mod.so as dependency without a path, which is
+# added by default.
+$(objpfx)tst-origin: $(objpfx)tst-origin.o $(objpfx)liborigin-mod.so
+       $(LINK.o) $(sysdep-LDFLAGS) $(rtld-LDFLAGS) -B$(csu-objpfx) \
+               $(link-test-modules-rpath-link) \
+               $(objpfx)tst-origin.o \
+               -o $@ \
+               -Wl,-rpath,\$$ORIGIN -L$(subst :, -L,$(rpath-link)) -lorigin-mod
+$(objpfx)tst-origin.out: tst-origin.sh $(objpfx)tst-origin
        $(SHELL) \
                $< \
                '$(common-objpfx)' \


More information about the Libc-alpha mailing list