protected __start_section and __stop_section symbols
Mon Feb 5 13:49:00 GMT 2018
I was able to find that commit f3996791 is what changed this:
Why was this change made? It's sort of unexpected, and for what it's
worth breaking some codes (not a lot I guess, but at least mine and it
took some time to track down :) ).
On 05/02/18 11:21, Cimbali wrote:
> 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:
> https://stackoverflow.com/q/48591224/1387346 ).
> 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