From: Alfonso Alfonso Peterssen via Libc-alpha <libc-alpha@sourceware.org>
To: "libc-alpha@sourceware.org" <libc-alpha@sourceware.org>,
"Vivek Das Mohapatra" <vivek@collabora.com>
Subject: Re: [External] : [RFC][PATCH v12 0/8] Implementation of RTLD_SHARED for dlmopen
Date: Tue, 13 Jul 2021 13:08:44 +0000 [thread overview]
Message-ID: <BYAPR10MB279296838E8184C2CA3879A786149@BYAPR10MB2792.namprd10.prod.outlook.com> (raw)
In-Reply-To: <20210708163255.812-1-vivek@collabora.com>
These patches + https://patchwork.sourceware.org/project/glibc/patch/20200626193228.1953-2-danielwa@cisco.com/ allow to spawn several isolated JVMs within the same process, each one with its own isolated set of native libraries, including the Linux graphical stack, something that wasn't possible before.
The JVM exercises MANY corner cases with its native libraries; we managed to run NetBeans, jEdit, MochaDoom, kotNES... (all graphical applications) inside isolated namespaces, something we've been struggling for years and finally we see some light.
This is a huge milestone, if such complex applications can run, most likely everything else will just work.
We look forward to integrating these patches to make dlmopen fully usable and bug-free.
Best,
Alfonso²
________________________________
From: Libc-alpha <libc-alpha-bounces+alfonso.peterssen=oracle.com@sourceware.org> on behalf of Vivek Das Mohapatra via Libc-alpha <libc-alpha@sourceware.org>
Sent: Thursday, July 8, 2021 6:32 PM
To: libc-alpha@sourceware.org <libc-alpha@sourceware.org>
Subject: [External] : [RFC][PATCH v12 0/8] Implementation of RTLD_SHARED for dlmopen
This is a revision of a previous patchset that I posted here
regarding https://urldefense.com/v3/__https://sourceware.org/bugzilla/show_bug.cgi?id=22745__;!!ACWV5N9M2RV99hQ!eV1V1VkTp5FGE9qvHYkT0J0ksr5o_bFn6aR88pY9tCmVNXczixTZHFkGZa5Fwr0cfbIaEw$
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.
Vivek Das Mohapatra (8):
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
Drop DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE from the libpthread DSO
Makeconfig | 3 +
Makerules | 18 +-
bits/dlfcn.h | 10 +
config.make.in | 1 +
configure | 42 +-
configure.ac | 31 +-
elf/Makefile | 109 +++-
elf/dl-close.c | 43 +-
elf/dl-deps.c | 17 +
elf/dl-fini.c | 6 +-
elf/dl-init.c | 4 +-
elf/dl-load.c | 223 ++++++-
elf/dl-lookup.c | 26 +-
elf/dl-object.c | 78 +++
elf/dl-open.c | 121 +++-
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 | 33 +
elf/tst-dlmopen-main.h | 879 +++++++++++++++++++++++++++
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 | 34 ++
elf/tst-dlmopen-sharedmod-uniq.c | 33 +
elf/tst-dlmopen-std-do-test.c | 12 +
elf/tst-tls-ie-dlmopen.c | 4 +-
extra-lib.mk | 5 +
htl/Makefile | 4 +
iconvdata/Makefile | 3 +
iconvdata/extra-module.mk | 4 +
include/elf.h | 2 +
include/link.h | 7 +-
nptl/Makefile | 8 +-
sysdeps/generic/ldsodefs.h | 11 +
sysdeps/mips/bits/dlfcn.h | 10 +
73 files changed, 2455 insertions(+), 77 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 prev parent reply other threads:[~2021-07-13 13:09 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-08 16:32 [RFC][PATCH v12 0/8] Implementation of RTLD_SHARED for dlmopen Vivek Das Mohapatra via Libc-alpha
2021-07-08 16:32 ` [RFC][PATCH v12 1/8] Define a new dynamic section tag - DT_GNU_FLAGS_1 (bug 22745) Vivek Das Mohapatra via Libc-alpha
2021-08-09 12:27 ` Adhemerval Zanella via Libc-alpha
2021-07-08 16:32 ` [RFC][PATCH v12 2/8] Abstract loaded-DSO search code into a helper function Vivek Das Mohapatra via Libc-alpha
2021-08-09 13:04 ` Adhemerval Zanella via Libc-alpha
2021-07-08 16:32 ` [RFC][PATCH v12 3/8] Use the new DSO finder " Vivek Das Mohapatra via Libc-alpha
2021-08-09 12:59 ` Adhemerval Zanella via Libc-alpha
2021-07-08 16:32 ` [RFC][PATCH v12 4/8] Add DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE to glibc DSOs (bug 22745) Vivek Das Mohapatra via Libc-alpha
2021-08-09 16:48 ` Adhemerval Zanella via Libc-alpha
2021-08-10 13:21 ` Adhemerval Zanella via Libc-alpha
2021-08-10 13:32 ` H.J. Lu via Libc-alpha
2021-07-08 16:32 ` [RFC][PATCH v12 5/8] Implement dlmopen RTLD_SHARED flag " Vivek Das Mohapatra via Libc-alpha
2021-08-09 19:07 ` Adhemerval Zanella via Libc-alpha
2021-08-09 20:24 ` Adhemerval Zanella via Libc-alpha
2021-08-09 20:30 ` Adhemerval Zanella via Libc-alpha
2021-07-08 16:32 ` [RFC][PATCH v12 6/8] Add dlmopen / RTLD_SHARED tests Vivek Das Mohapatra via Libc-alpha
2021-08-09 20:09 ` Adhemerval Zanella via Libc-alpha
2021-07-08 16:32 ` [RFC][PATCH v12 7/8] Restore separate libc loading for the TLS/namespace storage test Vivek Das Mohapatra via Libc-alpha
2021-08-09 19:08 ` Adhemerval Zanella via Libc-alpha
2021-07-08 16:32 ` [RFC][PATCH v12 8/8] Drop DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE from the libpthread DSO Vivek Das Mohapatra via Libc-alpha
2021-08-09 20:10 ` Adhemerval Zanella via Libc-alpha
2021-08-09 21:24 ` Florian Weimer via Libc-alpha
2021-07-13 13:08 ` Alfonso Alfonso Peterssen via Libc-alpha [this message]
2021-08-09 20:34 ` [RFC][PATCH v12 0/8] Implementation of RTLD_SHARED for dlmopen Adhemerval Zanella via Libc-alpha
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
List information: https://www.gnu.org/software/libc/involved.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BYAPR10MB279296838E8184C2CA3879A786149@BYAPR10MB2792.namprd10.prod.outlook.com \
--to=libc-alpha@sourceware.org \
--cc=alfonso.peterssen@oracle.com \
--cc=vivek@collabora.com \
/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).