On 05 Apr 17:22, Bernd Schmidt wrote: > Things seemed to work over here, but now I'm not certain whether the > __start_/__stop_ functionality is GNU ld specific? Maybe we should > just go back to the previous version of this patch which didn't try > to use this. > > Bernd
This approach does not work with shared libraries. The automatically inserted symbols have GLOBAL binding, therefore the __start_/__stop_ from the executable overwrite the respective symbols in DSO. Here is a simple example with 2 DSOs and one executable. The function GOMP_offload_register is called with the following pointers in HOST_TABLE: 1. (funcs 0x604880:0x604898, vars 0x604840:0x604880) 2. (funcs 0x604880:0x604898, vars 0x604840:0x604880) 3. (funcs 0x604880:0x604898, vars 0x604840:0x604880) But with "manually" added start/stop and LOCAL binding everything works fine: 1. (funcs 0x7f286b425530:0x7f286b425540, vars 0x7f286b425540:0x7f286b425540) 2. (funcs 0x7f286b8624a0:0x7f286b8624b0, vars 0x7f286b8624b0:0x7f286b8624b0) 3. (funcs 0x604760:0x604778, vars 0x604780:0x6047c0) -- Ilya