----- On Jun 14, 2019, at 3:53 PM, Florian Weimer fweimer@xxxxxxxxxx wrote: > * Mathieu Desnoyers: > >> ----- On Jun 14, 2019, at 3:42 PM, Florian Weimer fweimer@xxxxxxxxxx wrote: >> >>> * Mathieu Desnoyers: >>> >>>> + /* Publicize rseq registration ownership. This must be performed >>>> + after rtld re-relocation, before invoking constructors of >>>> + preloaded libraries. */ >>>> + rseq_init (); >>> >>> Please add a comment that IFUNC resolvers do not see the initialized >>> value. I think this is okay because we currently do not support access >>> to extern variables in IFUNC resolvers. >> >> Do IFUNC resolvers happen to observe the __rseq_handled address that >> was internal to ld.so ? > > They should observe the correct address, but they can access the > variable before initialization. An initializer in ld.so will not have > an effect if an interposed definition initalized the variable to > something else. > >> If so, we could simply initialize __rseq_handled twice: early before calling >> IFUNC resolvers, and after ld.so re-relocation. > > No, I don't think this will make a difference. So comment it is: /* Publicize rseq registration ownership. This must be performed after rtld re-relocation, before invoking constructors of preloaded libraries. IFUNC resolvers are called before this initialization, so they may not observe the initialized state. */ rseq_init (); Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com