* Mathieu Desnoyers: > ----- On Jun 14, 2019, at 3:09 PM, Florian Weimer fweimer@xxxxxxxxxx wrote: > >> * Mathieu Desnoyers: >> >>> But my original issue remains: if I define a variable called __rseq_handled >>> within either the main executable or the preloaded library, it overshadows >>> the libc one: >>> >>> efficios@compudjdev:~/test/libc-sym$ ./a >>> __rseq_handled main: 0 0x56135fd5102c >>> __rseq_abi.cpu_id main: 29 0x7fcbeca6d5a0 >>> efficios@compudjdev:~/test/libc-sym$ LD_PRELOAD=./s.so ./a >>> __rseq_handled s.so: 0 0x558f70aeb02c >>> __rseq_abi.cpu_id s.so: -1 0x7fdca78b7760 >>> __rseq_handled main: 0 0x558f70aeb02c >>> __rseq_abi.cpu_id main: 27 0x7fdca78b7760 >>> >>> Which is unexpected. >> >> Why is this unexpected? It has to be this way if the main program uses >> a copy relocation of __rseq_handled. As long as there is just one >> address across the entire program and ld.so initializes the copy of the >> variable that is actually used, everything will be fine. > > Here is a printout of the __rseq_handled address observed by ld.so, it > does not match: > > LD_PRELOAD=./s.so ./a > elf: __rseq_handled addr: 7f501c98a140 > __rseq_handled s.so: 0 0x55817a88d02c > __rseq_abi.cpu_id s.so: -1 0x7f501c983760 > __rseq_handled main: 0 0x55817a88d02c > __rseq_abi.cpu_id main: 27 0x7f501c983760 Where do you print the address? Before or after the self-relocation of the dynamic loader? The address is only correct after self-relocation. Thanks, Florian