protected __start_section and __stop_section symbols

Mon Feb 5 10:21:00 GMT 2018


According to readelf, when I define a section in GCC code with 
__attribute__(("section")) in a shared library, the __start_section and 
__stop_section symbols (which allow me retrieve the start and end of 
said section) are now protected with ld v2.29.1.

I had some code that relied on having those symbols overruled by a 
program to which the library is linked, that is if the section exists in 
the program then use it from the library, otherwise fall back to the 
library's section (details and reproducible example here: ).

This is no longer possible, but used to work with ld v2.26.1. I could 
not find any decent changelog for ld, nor any mention of this in the man 
page, and cannot figure out if this is a bug or a feature. Why did this 
change of behaviour happen?

I am aware that the __start_section and __stop_section symbols are 
barely documented to start with, but I'd like to know if there is a way 
for the symbols not to be protected even with newer versions of ld, or 
if I have to use another way of accessing data in a program from a 
library's constructor.


More information about the Binutils mailing list