On Wed, 23 Sep 2020, Tobias Burnus wrote: > Actually working patch attached. > > As mentioned, just using TREE_PUBLIC in input_offload_tables > works for functions but for variables this gets overridden. > > The externally_visible is set to avoid running into the > promote_symbol code (? visibility hidden) later in the > function.
Hmm, but offload_vars and offload_funcs do not need to be exported since they get stored into tables with addresses pointing to them (and that table is exported). So I think we don't yet understand what goes wrong. Note that ultimatively the desired visibility is determined by the linker and communicated via the resolution file to the WPA stage. I'm not sure whether both host and offload code participate in the same link and thus if the offload tables are properly seen as being referenced (for a non-DSO symbols are usually _not_ force-exported) - so, how is the offload table constructed? I'm not sure we can properly tell the linker of the host object that a certain symbol will be referenced from a dynamically loaded DSO - visibility("default") doesn't work. #include <dlfcn.h> int global_sym __attribute__((visibility("default"))); int main() { dlopen("test.so", RTLD_NOW); return 0; } with -flto we elide global_sym, if I compile with -Wl,-export-dynamic it works fine (even w/o the visibility). But the question is how to selectively mark a symbol at the compile-stage so the linker will force-export it ... The 'used' attribute seems to work but that feels like a band-aid ... Richard. > On 9/23/20 5:47 PM, Tobias Burnus wrote: > > ... > > On 9/23/20 4:23 PM, Tobias Burnus wrote: > >> On 9/23/20 3:10 PM, Richard Biener wrote: > >> > >>> On Wed, 23 Sep 2020, Richard Biener wrote: > >>>> LTRANS usually makes the symbols hidden, not local. > >> Could also be ? whatever the 'nm' output means. > >>>> So are you > >>>> sure this isn't a target bug (hidden symbols not implemented > >>>> but the host compiler obviously having checked that but assuming > >>>> the target behaves the same as the host) or a linker bug? > >> > >> Unlikely, I assume the Linux x86-64 linker is rather well tested. > >> As written this is the host ? just the offloading symbol table is > >> device specific. > >> > >>> See lto/lto-partition.c:promote_symbol btw. > >> > >> Thanks for the pointer; it pointed me to node->externally_visible, > > ... > > Tobias > > ----------------- > Mentor Graphics (Deutschland) GmbH, Arnulfstra?e 201, 80634 M?nchen / Germany > Registergericht M?nchen HRB 106955, Gesch?ftsf?hrer: Thomas Heurung, Alexander > Walter > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imend