This is the mail archive of the
mailing list for the binutils project.
Re: protected __start_section and __stop_section symbols
- From: Cimbali <me at cimba dot li>
- To: binutils at sourceware dot org
- Cc: Alan Modra <amodra at gmail dot com>, "H.J. Lu" <hongjiu dot lu at intel dot com>
- Date: Mon, 5 Feb 2018 14:49:40 +0100
- Subject: Re: protected __start_section and __stop_section symbols
- Authentication-results: sourceware.org; auth=none
- References: <email@example.com>
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:
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.