From: "Vivek Das Mohapatra" <vivek@collabora.com>
To: libc-alpha@sourceware.org
Subject: [RFC][PATCH v10 0/7] Implementation of RTLD_SHARED for dlmopen
Date: Mon, 22 Mar 2021 15:41:04 +0000 [thread overview]
Message-ID: <20210322154111.24798-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
The only changes from v9 are the rewording of a mislocated comment
and the removal of © in favour of (C) in copyright comments.
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-v8) series.
This series (v9) also lifts the requirement for an ld which supports
-z unique / DT_GNU_FLAGS_1+DF_GNU_1_UNIQUE directly. If lack of
support is detected the new dynamic flag section is added via linker
scripts and a dummy dynamic-notes.os object instead.
=======================================================================
In addition this patch series implements the following:
- dlmopen will implicitly apply RTLD_SHARED to the libc/libpthread group
(requires a patched binutils/ld so that the libc family DSOs can
be flagged as requiring this behaviour)
- binutils patchset accepted upstream;
- https://sourceware.org/git/?p=binutils-gdb.git
- commit 8a87b2791181eb7fc1533ffaeb95df8d87d41493
- LD_AUDIT paths will NOT apply this implict sharing rule:
audit libraries will continue to be completely isolated.
- The mechanism for tagging DSOs as implicitly shared has been changed
from a DT_FLAGS_1 flag to a DT_VALRNGHI/LO range dynamic section tag.
(Based on feedback on the binutils side of this patch series).
- DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE
- A flag RTLD_ISOLATE which is used inernally to suppress RTLD_SHARED
behaviour when audit libraries are being loaded, and is also made available
to users who really want a completely separate copy of glibc in their new
namespace.
- Tests for the new dlmopen behaviour
- Adds the unique dso flag to htl/libpthread.so as well as nptl
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 | 19 +-
bits/dlfcn.h | 10 +
config.make.in | 1 +
configure | 54 +-
configure.ac | 32 +-
dynamic-notes.c | 4 +
elf/Makefile | 104 +++-
elf/dl-close.c | 43 +-
elf/dl-fini.c | 6 +-
elf/dl-init.c | 4 +-
elf/dl-load.c | 221 ++++++-
elf/dl-object.c | 78 +++
elf/dl-open.c | 109 +++-
elf/dl-sym.c | 14 +
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 | 3 +
sysdeps/generic/ldsodefs.h | 9 +
sysdeps/mips/bits/dlfcn.h | 10 +
71 files changed, 2355 insertions(+), 67 deletions(-)
create mode 100644 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-03-22 15:41 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-22 15:41 Vivek Das Mohapatra [this message]
2021-03-22 15:41 ` [RFC][PATCH v10 1/7] Define a new dynamic section tag - DT_GNU_FLAGS_1 (bug 22745) Vivek Das Mohapatra
2021-05-28 14:53 ` Adhemerval Zanella
2021-03-22 15:41 ` [RFC][PATCH v10 2/7] Abstract loaded-DSO search code into a helper function Vivek Das Mohapatra
2021-05-28 14:53 ` Adhemerval Zanella
2021-03-22 15:41 ` [RFC][PATCH v10 3/7] Use the new DSO finder " Vivek Das Mohapatra
2021-05-28 14:53 ` Adhemerval Zanella
2021-03-22 15:41 ` [RFC][PATCH v10 4/7] Add DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE to glibc DSOs (bug 22745) Vivek Das Mohapatra
2021-05-28 14:53 ` Adhemerval Zanella
2021-05-28 16:59 ` Adhemerval Zanella
2021-05-28 17:18 ` Andreas Schwab
2021-03-22 15:41 ` [RFC][PATCH v10 5/7] Implement dlmopen RTLD_SHARED flag " Vivek Das Mohapatra
2021-05-28 17:32 ` Adhemerval Zanella
2021-05-28 18:02 ` Adhemerval Zanella
2021-06-02 15:42 ` Vivek Das Mohapatra
2021-05-28 23:22 ` Vivek Das Mohapatra
2021-03-22 15:41 ` [RFC][PATCH v10 6/7] Add dlmopen / RTLD_SHARED tests Vivek Das Mohapatra
2021-03-22 15:41 ` [RFC][PATCH v10 7/7] Restore separate libc loading for the TLS/namespace storage test Vivek Das Mohapatra
2021-03-25 15:15 ` [RFC][PATCH v10 0/7] Implementation of RTLD_SHARED for dlmopen Vivek Das Mohapatra
2021-04-13 17:02 ` Vivek Das Mohapatra
2021-04-29 15:25 ` Vivek Das Mohapatra
2021-05-11 17:42 ` Vivek Das Mohapatra
2021-05-17 19:08 ` [PING][PATCH " 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=20210322154111.24798-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).