On Mon, Sep 25, 2017 at 12:41 PM, Segher Boessenkool
[off-list ref] wrote:
On Mon, Sep 25, 2017 at 04:01:55PM +0000, David Laight wrote:
quoted
From: Segher Boessenkool
quoted
The compiler puts this item in .sdata, for 32-bit. There is no .srodata,
so if it wants to use a small data section, it must use .sdata .
Non-external, non-referenced symbols are not put in .sdata, that is the
difference you see with the "static".
I don't think there is a bug here. If you think there is, please open
a GCC bug.
The .sxxx sections are for 'small' data that can be accessed (typically)
using small offsets from a global register.
This means that all sections must be adjacent in the image.
So you can't really have readonly small data.
My guess is that the linker script is putting .srodata in with .sdata.
.srodata does not *exist* (in the ABI).
So, I still think this is a bug. The variable is marked const: this is
not a _suggestion_. :) If the compiler produces output where the
variable is writable, that's a bug.
I can't tell if this bug is related:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=9571
-Kees
--
Kees Cook
Pixel Security