----- On Jun 6, 2019, at 1:57 PM, Florian Weimer fweimer@redhat.com wrote:
* Mathieu Desnoyers:
[...]
quoted
quoted
The final remaining case is static dlopen. There is a copy of ld.so on
the dynamic side, but it is completely inactive and has never run. I do
not think we need to support that because multi-threading does not work
reliably in this scenario, either. However, we should skip rseq
registration in a nested libc (see the rtld_active function).
So for SHARED, if (!rtld_active ()), we should indeed leave the state of
__rseq_handled as it is, because we are within a nested inactive ld.so.
I think we should add __rseq_handled initialization to ld.so, so it will
only run once, ever.
OK
It's the registration from libc.so which needs some care. In
particular, we must not override an existing registration.
OK, so it could check if __rseq_abi.cpu_id is -1, and only
perform registration if it is the case. Or do you have another
approach in mind ?
For the main thread, "nested" unregistration does not appear to be a
problem, because we rely on program exit() to implicitly unregister.
Thanks,
Mathieu
Thanks,
Florian
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com