Hi Richard, 

I've only used custom linker scripts with my embedded work, so I don't know 
much about the GCC default.  

Presently, every library function is already in its own section to facilitate 
--gc-sections optimization.  However, I #include every file together to ensure 
that all of the sections are still built into a single object file.  So far the 
linker has done what I've expected (i.e., placed all of the used 
functions/sections in a contiguous block of memory and discarded the unused 
functions).  

Is the linker aware of section hierarchy, such that using a common section 
prefix (e.g. ".text.m0fp.*") would gather the appropriate sections together 
from multiple object files?  I didn't think it was so aware; rather, that such 
prefixes were just a convention to help organize custom linker scripts.  Adding 
such rules to the default linker script wouldn't be ideal, as everyone using a 
custom script might then have library breakage unless they knew to add 
equivalent rules.  

If the consensus is to split the library, it might help to add a set of 
intermediate branches (trampolines?) in the libm portion.  This would add 
execution cycles, but not require as many extra bytes.  

Regards,
Daniel


On Thu, Nov 8, 2018, at 11:19 PM, Richard Henderson wrote:
> On 11/7/18 6:10 PM, Daniel Engel wrote:
> > Also, loss of control of linking order would require all short branches in 
> > the libm section to be replaced with long branches.  This particularly 
> > impacts the exception handling in almost every function.
> 
> You could partially remedy this by placing all the code into a unique section,
> e.g. ".text.m0fp".  The default linker script would place all instances of 
> this
> section together.  Additional tricks can be played if we're willing to modify
> the linker scripts further.
> 
> 
> r~

Reply via email to