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

Florian Weimer fweimer@redhat.com
Fri Mar 21 17:45:02 GMT 2025


* Florian Weimer:

> * Adhemerval Zanella Netto:
>
>> 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:
>
> This looks like a job for .EXTRA_PREREQS, I think:
>
>   <https://www.gnu.org/software/make/manual/html_node/Special-Variables.html#index-_002eEXTRA_005fPREREQS-_0028prerequisites-not-added-to-automatic-variables_0029>
>
> Unfortunately that was only added in make 4.3, which is quite recent.
>
> I think we could add this:
>
>  # sofini.os must be placed last since it terminates .eh_frame section.
>  build-module-helper-objlist = \
>  	$(patsubst %_pic.a,$(whole-archive) %_pic.a $(no-whole-archive),\
>  		   $(filter-out %.lds $(map-file) $(+preinit) $(+postinit) \
> + 				$(build-module-nolink) \
>  				$(elf-objpfx)sofini.os \
>  				$(link-libc-deps),$^))
>
>
> and then use:
>
> LDFLAGS-tst-origin += -Wl,-rpath,\$$ORIGIN -L$(subst :, -L,$(rpath-link)) -lorigin-mod
> $(objpfx)tst-origin: $(objpfx)liborigin-mod.so
> $(objpfx)tst-origin: build-module-nolink = $(objpfx)liborigin-mod.so
>
> But I haven't tested it.

I found out why this didn't work.  The link is for the main program, so
build-module-helper-objlist is unused.  I'm testing a more complete
approach.

Thanks,
Florian



More information about the Libc-alpha mailing list