Page MenuHomeFreeBSD

csu: Find the main pointer through the GOT
ClosedPublic

Authored by andrew on May 20 2024, 11:59 AM.
Tags
None
Referenced Files
F97545545: D45259.diff
Mon, Sep 30, 12:19 AM
F97502597: D45259.id138889.diff
Sun, Sep 29, 6:46 PM
F97482641: D45259.id138760.diff
Sun, Sep 29, 3:25 PM
F97482631: D45259.id138889.diff
Sun, Sep 29, 3:25 PM
F97452011: D45259.diff
Sun, Sep 29, 10:39 AM
F97447238: D45259.diff
Sun, Sep 29, 9:45 AM
Unknown Object (File)
Sat, Sep 28, 8:22 PM
Unknown Object (File)
Thu, Sep 26, 4:30 PM
Subscribers
None

Details

Summary

Use the Global Offset Table to find the location of main in crt1. With
lld the old code would point to main@plt, however ld.bfd fails to link
when main is in a shared library.

Fix this by using the GOT address to find main as it works with both
lld and bfd.

Sponsored by: Arm Ltd

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 57773
Build 54661: arc lint + arc unit

Event Timeline

It surprises me that GNU ld doesn't want to create canonical PLTs, but avoiding them is reasonable; they are to functions what copy relocations are to data.

Putting main in a shared library sounds particularly cursed, but I guess it's not uncommon for testing frameworks. Presumably this is for libgtest_main.

This revision is now accepted and ready to land.May 20 2024, 5:32 PM

It was for something in the Google testing bits.

This revision was automatically updated to reflect the committed changes.