On Wed, 23 Sep 2020, Richard Biener wrote: > On Wed, 23 Sep 2020, Tobias Burnus wrote: > > > (Pre-remark: the following applies to the host; the offloading > > is only involved as otherwise the (.gnu.)offload_{vars,funcs} > > global variable/table wouldn't exist.) > > > > Due to partitioning, it can happen that the offloading table > > and the functions and variables (which it contains as pointer), > > end up in different ltrans. As the functions and vars end > > up as local symbols ? the linker will not associate the entries > > in the table of one ltrans with the symbol from the other ltrans, > > failing with "undefined reference" errors. > > > > > > This could be fixed properly by either placing all vars/funcs > > referenced in the (.gnu.)offload_{vars,funcs} table in the same > > ltrans parition ? or by ensuring that those symbols are available. > > For funcs, the latter works by setting TREE_PUBLIC (cf. PR) ? but > > I didn't manage to do this for variables. ? Hence: > > > > This patch disables lto partitioning if the code has offloading. > > > > OK for mainline? ? Or better suggestions how to handle this? > > LTRANS usually makes the symbols hidden, not local. 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?
See lto/lto-partition.c:promote_symbol btw Richard. > Richard. > > > 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