This is an archive of the discontinued LLVM Phabricator instance.

[COFF] Assign unique names to autogenerated .weak.<name>.default symbols
ClosedPublic

Authored by mstorsjo on Mar 11 2020, 6:58 AM.

Details

Summary

These symbols need to be external (MSVC tools error out if a weak external points at a symbol that isn't external; this was tried before but had to be reverted in bc5b7217dceecd3eec69593026a9e38dfbfd6908, and this was originally explicitly fixed in 732eeaf2a930ad2755cb4eb5d99a3deae0de4a72).

If multiple object files have weak symbols with defaults, their defaults could cause linker errors due to duplicate definitions, unless the names of the defaults are unique.

GNU binutils handles this by appending the name of another symbol from the same object file to the name of the default symbol. Try to implement something similar; before writing the object file, locate a symbol that should have a unique name and use the name of that one for making the weak defaults unique.

This supersedes D71711.

Diff Detail

Event Timeline

mstorsjo created this revision.Mar 11 2020, 6:58 AM
Herald added a project: Restricted Project. · View Herald TranscriptMar 11 2020, 6:58 AM
Herald added a subscriber: hiraditya. · View Herald Transcript
mstorsjo updated this revision to Diff 250220.Mar 13 2020, 8:41 AM

Fixed a clang-tidy warning.

rnk accepted this revision.Mar 13 2020, 11:11 AM

lgtm

This is pretty interesting behavior. :)

This revision is now accepted and ready to land.Mar 13 2020, 11:11 AM
This revision was automatically updated to reflect the committed changes.