[ELF] Prevent LTO stripping of wrapped script-referenced symbols
After 1af25a98, we stop unconditionally retaining wrapped symbols, which means that LTO's summary-based global dead stripping can eliminate them even if they'll be referenced by a linker script after the wrapping is performed. Mark symbols referenced in linker scripts as `referenced` in addition to `isUsedInRegularObj`, so that the wrapping logic correctly sets `referencedAfterWrap` for the symbols which will be referenced after wrapping, which will prevent LTO from eliminating them. An alternative would have been to change the `referencedAfterWrap` logic to look at `isUsedInRegularObj` in addition to `referenced`, but `isUsedInRegularObj` is also set in other places (e.g. for the entry symbol), and it's not clear that we want `referencedAfterWrap` to take all those places into account, so it seemed better to keep that logic as-is and instead set `referenced` for linker script-referenced symbols. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D124433
Loading
Please sign in to comment