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
Unknown Object (File)
Fri, Nov 15, 5:25 AM
Unknown Object (File)
Fri, Nov 8, 1:58 AM
Unknown Object (File)
Wed, Nov 6, 6:59 PM
Unknown Object (File)
Oct 17 2024, 5:05 PM
Unknown Object (File)
Oct 16 2024, 9:02 PM
Unknown Object (File)
Oct 16 2024, 7:42 AM
Unknown Object (File)
Oct 15 2024, 1:26 AM
Unknown Object (File)
Oct 15 2024, 1:14 AM
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 Not Applicable
Unit
Tests Not Applicable

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.