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)
Tue, Dec 3, 6:05 AM
Unknown Object (File)
Sat, Nov 30, 11:15 AM
Unknown Object (File)
Fri, Nov 29, 10:44 AM
Unknown Object (File)
Nov 25 2024, 4:42 AM
Unknown Object (File)
Nov 24 2024, 12:55 AM
Unknown Object (File)
Nov 23 2024, 1:17 PM
Unknown Object (File)
Nov 23 2024, 1:48 AM
Unknown Object (File)
Nov 21 2024, 7:33 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.