From: "Vivek Das Mohapatra" <vivek@collabora.com>
To: libc-alpha@sourceware.org
Subject: [RFC][PATCH v11 0/7] Implementation of RTLD_SHARED for dlmopen
Date: Wed, 9 Jun 2021 18:16:11 +0100 [thread overview]
Message-ID: <20210609171618.20674-1-vivek@collabora.com> (raw)
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 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 autoconf has been omitted from
the patchset as it is not relevant to this feature.
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.
- libpthread still has the new section applied as I'm not 100% sure it doesn't
still need this treatment. I would like to investigate further before
removing the new section from libpthread.
I have not yet implemented, but plan to address once this series is
accepted/acceptable:
- Sensible RTLD_GLOBAL semantics for dlmopened DSOs in non-base namespaces
- dl_iterate_ns_phdr (cf dl_iterate_phdr but taking a namespace argument)
Vivek Das Mohapatra (7):
Define a new dynamic section tag - DT_GNU_FLAGS_1 (bug 22745)
Abstract loaded-DSO search code into a helper function
Use the new DSO finder helper function
Add DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE to glibc DSOs (bug 22745)
Implement dlmopen RTLD_SHARED flag (bug 22745)
Add dlmopen / RTLD_SHARED tests
Restore separate libc loading for the TLS/namespace storage test
Makeconfig | 3 +
Makerules | 18 +-
bits/dlfcn.h | 10 +
config.make.in | 1 +
configure | 42 +-
configure.ac | 31 +-
elf/Makefile | 104 +++-
elf/dl-close.c | 43 +-
elf/dl-fini.c | 6 +-
elf/dl-init.c | 4 +-
elf/dl-load.c | 223 ++++++-
elf/dl-object.c | 78 +++
elf/dl-open.c | 116 +++-
elf/dl-sym.c | 14 +
elf/dynamic-notes.c | 4 +
elf/elf.h | 7 +-
elf/get-dynamic-info.h | 12 +
elf/rtld.c | 2 +-
elf/tst-dlmopen-auditmod.c | 23 +
elf/tst-dlmopen-common.h | 32 +
elf/tst-dlmopen-main.h | 873 +++++++++++++++++++++++++++
elf/tst-dlmopen-modules.h | 21 +
elf/tst-dlmopen-rtld-audit-shared1.c | 8 +
elf/tst-dlmopen-rtld-audit-shared2.c | 8 +
elf/tst-dlmopen-rtld-audit-shared3.c | 7 +
elf/tst-dlmopen-rtld-audit-shared4.c | 8 +
elf/tst-dlmopen-rtld-audit-shared5.c | 8 +
elf/tst-dlmopen-rtld-audit-shared6.c | 8 +
elf/tst-dlmopen-rtld-audit-unique1.c | 7 +
elf/tst-dlmopen-rtld-audit-unique2.c | 7 +
elf/tst-dlmopen-rtld-audit-unique3.c | 7 +
elf/tst-dlmopen-rtld-audit-unique4.c | 7 +
elf/tst-dlmopen-rtld-audit-unique5.c | 7 +
elf/tst-dlmopen-rtld-audit-unique6.c | 7 +
elf/tst-dlmopen-rtld-shared1.c | 7 +
elf/tst-dlmopen-rtld-shared1.h | 64 ++
elf/tst-dlmopen-rtld-shared2.c | 7 +
elf/tst-dlmopen-rtld-shared2.h | 66 ++
elf/tst-dlmopen-rtld-shared3.c | 7 +
elf/tst-dlmopen-rtld-shared3.h | 43 ++
elf/tst-dlmopen-rtld-shared4.c | 7 +
elf/tst-dlmopen-rtld-shared4.h | 14 +
elf/tst-dlmopen-rtld-shared5.c | 7 +
elf/tst-dlmopen-rtld-shared5.h | 25 +
elf/tst-dlmopen-rtld-shared6.c | 7 +
elf/tst-dlmopen-rtld-shared6.h | 36 ++
elf/tst-dlmopen-rtld-unique1.c | 7 +
elf/tst-dlmopen-rtld-unique1.h | 86 +++
elf/tst-dlmopen-rtld-unique2.c | 7 +
elf/tst-dlmopen-rtld-unique2.h | 25 +
elf/tst-dlmopen-rtld-unique3.c | 7 +
elf/tst-dlmopen-rtld-unique3.h | 13 +
elf/tst-dlmopen-rtld-unique4.c | 7 +
elf/tst-dlmopen-rtld-unique4.h | 14 +
elf/tst-dlmopen-rtld-unique5.c | 7 +
elf/tst-dlmopen-rtld-unique5.h | 58 ++
elf/tst-dlmopen-rtld-unique6.c | 7 +
elf/tst-dlmopen-rtld-unique6.h | 51 ++
elf/tst-dlmopen-sharedmod-norm.c | 11 +
elf/tst-dlmopen-sharedmod-uniq.c | 11 +
elf/tst-dlmopen-std-do-test.c | 12 +
elf/tst-tls-ie-dlmopen.c | 4 +-
extra-lib.mk | 3 +
htl/Makefile | 3 +
iconvdata/Makefile | 3 +
iconvdata/extra-module.mk | 4 +
include/elf.h | 2 +
include/link.h | 7 +-
nptl/Makefile | 7 +-
sysdeps/generic/ldsodefs.h | 9 +
sysdeps/mips/bits/dlfcn.h | 10 +
71 files changed, 2349 insertions(+), 72 deletions(-)
create mode 100644 elf/dynamic-notes.c
create mode 100644 elf/tst-dlmopen-auditmod.c
create mode 100644 elf/tst-dlmopen-common.h
create mode 100644 elf/tst-dlmopen-main.h
create mode 100644 elf/tst-dlmopen-modules.h
create mode 100644 elf/tst-dlmopen-rtld-audit-shared1.c
create mode 100644 elf/tst-dlmopen-rtld-audit-shared2.c
create mode 100644 elf/tst-dlmopen-rtld-audit-shared3.c
create mode 100644 elf/tst-dlmopen-rtld-audit-shared4.c
create mode 100644 elf/tst-dlmopen-rtld-audit-shared5.c
create mode 100644 elf/tst-dlmopen-rtld-audit-shared6.c
create mode 100644 elf/tst-dlmopen-rtld-audit-unique1.c
create mode 100644 elf/tst-dlmopen-rtld-audit-unique2.c
create mode 100644 elf/tst-dlmopen-rtld-audit-unique3.c
create mode 100644 elf/tst-dlmopen-rtld-audit-unique4.c
create mode 100644 elf/tst-dlmopen-rtld-audit-unique5.c
create mode 100644 elf/tst-dlmopen-rtld-audit-unique6.c
create mode 100644 elf/tst-dlmopen-rtld-shared1.c
create mode 100644 elf/tst-dlmopen-rtld-shared1.h
create mode 100644 elf/tst-dlmopen-rtld-shared2.c
create mode 100644 elf/tst-dlmopen-rtld-shared2.h
create mode 100644 elf/tst-dlmopen-rtld-shared3.c
create mode 100644 elf/tst-dlmopen-rtld-shared3.h
create mode 100644 elf/tst-dlmopen-rtld-shared4.c
create mode 100644 elf/tst-dlmopen-rtld-shared4.h
create mode 100644 elf/tst-dlmopen-rtld-shared5.c
create mode 100644 elf/tst-dlmopen-rtld-shared5.h
create mode 100644 elf/tst-dlmopen-rtld-shared6.c
create mode 100644 elf/tst-dlmopen-rtld-shared6.h
create mode 100644 elf/tst-dlmopen-rtld-unique1.c
create mode 100644 elf/tst-dlmopen-rtld-unique1.h
create mode 100644 elf/tst-dlmopen-rtld-unique2.c
create mode 100644 elf/tst-dlmopen-rtld-unique2.h
create mode 100644 elf/tst-dlmopen-rtld-unique3.c
create mode 100644 elf/tst-dlmopen-rtld-unique3.h
create mode 100644 elf/tst-dlmopen-rtld-unique4.c
create mode 100644 elf/tst-dlmopen-rtld-unique4.h
create mode 100644 elf/tst-dlmopen-rtld-unique5.c
create mode 100644 elf/tst-dlmopen-rtld-unique5.h
create mode 100644 elf/tst-dlmopen-rtld-unique6.c
create mode 100644 elf/tst-dlmopen-rtld-unique6.h
create mode 100644 elf/tst-dlmopen-sharedmod-norm.c
create mode 100644 elf/tst-dlmopen-sharedmod-uniq.c
create mode 100644 elf/tst-dlmopen-std-do-test.c
--
2.20.1
next reply other threads:[~2021-06-09 17:16 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-09 17:16 Vivek Das Mohapatra [this message]
2021-06-09 17:16 ` [RFC][PATCH v11 1/7] Define a new dynamic section tag - DT_GNU_FLAGS_1 (bug 22745) Vivek Das Mohapatra
2021-06-09 17:16 ` [RFC][PATCH v11 2/7] Abstract loaded-DSO search code into a helper function Vivek Das Mohapatra
2021-06-09 17:16 ` [RFC][PATCH v11 3/7] Use the new DSO finder " Vivek Das Mohapatra
2021-06-09 17:16 ` [RFC][PATCH v11 4/7] Add DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE to glibc DSOs (bug 22745) Vivek Das Mohapatra
2021-06-09 17:16 ` [RFC][PATCH v11 5/7] Implement dlmopen RTLD_SHARED flag " Vivek Das Mohapatra
2021-06-09 17:16 ` [RFC][PATCH v11 6/7] Add dlmopen / RTLD_SHARED tests Vivek Das Mohapatra
2021-06-09 17:16 ` [RFC][PATCH v11 7/7] Restore separate libc loading for the TLS/namespace storage test Vivek Das Mohapatra
2021-06-09 18:29 ` [RFC][PATCH v11 0/7] Implementation of RTLD_SHARED for dlmopen Florian Weimer
2021-06-09 22:50 ` Vivek Das Mohapatra
2021-06-16 13:08 ` [External] : " Alfonso Alfonso Peterssen
2021-06-20 23:18 ` Vivek Das Mohapatra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210609171618.20674-1-vivek@collabora.com \
--to=vivek@collabora.com \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).