[fpc-devel] Smart-linking on linux/x86-64

Joost van der Sluis joost at cnoc.nl
Thu Jul 7 23:05:06 CEST 2022



Op 05-07-2022 om 11:51 schreef Sergei Gorelkin via fpc-devel:
> 05/07/2022 09:39, Sven Barth via fpc-devel wrote:
>> Joost van der Sluis via fpc-devel <fpc-devel at lists.freepascal.org 
>> <mailto:fpc-devel at lists.freepascal.org>> schrieb am Di., 5. Juli 2022, 
>> 00:17:
>> The problem is that *something* would need to reference the debug 
>> sections otherwise they are stripped as well. But as soon as they're 
>> referenced whatever code or data *they* reference is kept as well.
>> One of the better solutions might be to write these references as weak 
>> symbols (on systems that support this) so at least the data/function 
>> isn't kept around.
>> Or the section of the data/function would have to contain a reference 
>> to its corresponding debug entry so that it is kept around as long as 
>> the function/data is kept around...
>> How does GCC do this?
>>
> 
> As far as I had studied this issue, ld essentially "decompiles" the 
> monolithic FDE's from object files into internal representation, and 
> then "compiles" it back, omitting information for the code that won't go 
> into executable due to smartlinking. It also optimizes for size by using 
> 8- and 16-bit offsets instead of 32-bit ones when possible.

Indeed, that is also what I have seen. ld Adapts the cfi-contents. (It 
also removed some mistakes in fpc's implementation)

Regards,

Joost.


More information about the fpc-devel mailing list