weak definitions in LTO

Hi,

I have a question regarding the behavior of weak symbol resolution in LTO:

Suppose there are weak definitions in both the source code and some native lib.
In non-LTO path, we will use the version from source code.
In LTO path, LLVM may discard the definition as it has "linkeonce" linkage type. So the native version will be selected by linker.
Now, non-LTO and LTO build may have different behavior.

The question is do we need to make non-LTO and LTO have the same behavior? If so, the LTO part needs to create pseudo uses (or some other mechanism) to keep the symbol from deletion.

Thanks,
Weiming

On the gold plugin this was pr19901.

It was fixed by having the plugin convert linkonce to weak when the
resolution is PREVAILING_DEF (i.e. there is an use from a native
file).

Cheers,
Rafael

Hi Rafael,

Nice.
That should fix the problem.

Thanks,
Weiming