[RFC][PATCH v12 0/8] Implementation of RTLD_SHARED for dlmopen
Adhemerval Zanella
adhemerval.zanella@linaro.org
Mon Aug 9 20:34:57 GMT 2021
On 08/07/2021 13:32, Vivek Das Mohapatra via Libc-alpha wrote:
> This is a revision of a previous patchset that I posted here
> regarding https://sourceware.org/bugzilla/show_bug.cgi?id=22745
>
> Introduction:
>
> =======================================================================
> As discussed in the URL above dlmopen requires a mechanism for
> [optionally] sharing some objects between more than one namespace.
>
> The following patchset provides an implementation for this: If an
> object is loaded with the new RTLD_SHARED flag we instead ensure
> that a "master" copy exists (and is flagged as no-delete) in the
> main namespace and a thin wrapper or clone is placed in the target
> namespace.
>
> This patch series should address all the comments received on the
> earlier (v1-v10) series.
>
> =======================================================================
>
> Changes from v11:
>
> - If a DSO is required in a non-base namespace because it is mentioned
> in a DT_NEEDED entry and it is itself flagged DF_GNU_1_UNIQUE then
> a proxy is generated for it.
>
> - Relocations via non-base namespace proxies work reliably (some code
> paths did not do the address calculation relative to the DSO base
> correctly when a proxy was involved).
>
> - Tests extended cover the above two scenarios.
>
> Changes from v10:
>
> - A segfault in a dlmopen error pathway (which does not seem to have existed
> when v10 was applied to the then-HEAD commit) has been fixed.
>
> - The fallback mechanism for adding DT_GNU_FLAGS_1 sections to the required
> binaries has had some infrastructure moved to the elf/ directory
>
> - The runstatedir setting introduced by recent autoconf has been omitted from
> the patchset as it is not relevant to this feature.
>
> - libpthread no longer tagged DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE.
> (with both -z unique supporting linkers and if the .os hack is
> used to add the new flag - this was inconsistent before).
>
> Not changed:
>
> - There is still some diagnostic info in the config.log when the linker
> layout is acceptable but -z unique is not yet supported. I believe this
> _is_ useful diagnostic information as a developer might otherwise wonder
> why the vanilla linker was being rejected when its layout output seemed
> fine.
>
> I have not yet implemented, but plan to address once this series is
> accepted/acceptable:
>
> - dl_iterate_ns_phdr (cf dl_iterate_phdr but taking a namespace argument)
>
> - Check RTLD_GLOBAL interacts properly and unsurprisingly with RTLD_SHARED.
Hi Vivek,
This patchset looks much better than before, I have added my comments on the
set. There are some spots that need rework, like some patches that should be
merged, some style fixes, and testcase; but in general I think we can move
forward.
I have fixed all my remarks on a personal branch [1] and checked on both
x86_64-linux-gnu and i686-linux-gnu with binutils with and without DT_GNU_FLAGS_1
support. If you are ok with my changes, please report the patches without the RFC
so I can ack them and I will push them upstream.
Thanks for working on this.
[1] https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/azanella/rtld-shared
More information about the Libc-alpha
mailing list