https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78937
Bug ID: 78937
Summary: New data.rel.ro.local section in TW's gcc
Product: gcc
Version: 6.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: translation
Assignee: unassigned at gcc dot gnu.org
Reporter: jengelh at inai dot de
CC: rguenth at gcc dot gnu.org
Target Milestone: ---
$ cat x.c
static const struct { int i; } foobar = {42};
static const struct { const char *n; } foobaz = {"moo"};
When compiled with the openSUSE Leap 42.2 + devel:gcc "gcc version 6.2.1
20161214 [gcc-6-branch revision 243648] (SUSE Linux)", the result is
anticipated; both symbols end up in rodata:
$ gcc-6 -std=gnu11 -c x.c && nm x.o | grep fooba
0000000000000000 r foobar
0000000000000008 r foobaz
$ gcc-6 -std=gnu11 -S x.c && grep section x.s
.section .rodata
.section .note.GNU-stack,"",@progbits
However, when compiled with pretty much the same compiler, openSUSE Tumbleweed
"gcc version 6.2.1 20161209 [gcc-6-branch revision 243481] (SUSE Linux)", the
following sections are output instead:
$ gcc-6 -std=gnu11 -c x.c -fno-use-linker-plugin && nm x.o | grep fooba
0000000000000000 r foobar
0000000000000000 d foobaz
$ gcc-6 -std=gnu11 -S x.c -fno-use-linker-plugin && grep section x.s
.section .rodata
.section .data.rel.ro.local,"aw",@progbits
.section .note.GNU-stack,"",@progbits
This section seems to be new; why does foobaz end up in .data now? Is this a
result of how gcc itself was built? The only difference is
42.2 gcc -v: [...] --with-default-libstdcxx-abi=gcc4-compatible
TW gcc -v: [...] --enable-plugin
C++ is not used in this case, so is the plugin thing the cause (and if, should
-fno-use-linker-plugin not disable it)?