[Bug middle-end/68414] New: gcc doesn't emit .skip for .vtable_map_vars sections
ro at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Nov 18 15:25:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68414
Bug ID: 68414
Summary: gcc doesn't emit .skip for .vtable_map_vars sections
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: ro at gcc dot gnu.org
CC: ctice at gcc dot gnu.org
Target Milestone: ---
Host: *-*-solaris2.*
Target: *-*-solaris2.*
Build: *-*-solaris2.*
Created attachment 36760
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36760&action=edit
minimal patch, untested
While doing the libvtv port to Solaris, all testcases were failing on
Solaris/SPARC
with Solaris as. It turned out that as doesn't set sh_addralign in the section
header for .vtable_map_vars. This is not a problem with gas in this case, but
for a regular .bss section gcc emits .skip 1 which avoids this.
Consider the following:
$ cat align.bss.c
#define VTV_PAGE_SIZE 4096
char _vtable_map_vars_start []
__attribute__ ((aligned(VTV_PAGE_SIZE)))
= { };
$ gcc -S align.bss.c
$ cat align.vmv.c
#define VTV_PAGE_SIZE 4096
char _vtable_map_vars_start []
__attribute__ ((aligned(VTV_PAGE_SIZE),section(".vtable_map_vars")))
= { };
$ gcc -S align.vmv.c
$ diff -u align.{bss,vmv}.s
--- align.bss.s 2015-11-18 16:20:37.628513468 +0100
+++ align.vmv.s 2015-11-18 16:21:43.411691226 +0100
@@ -1,9 +1,9 @@
- .file "align.bss.c"
+ .file "align.vmv.c"
.global _vtable_map_vars_start
- .section ".bss"
+ .section
".vtable_map_vars%_vtable_map_vars_start",#alloc,#write,#progbits
+ .group
_vtable_map_vars_start,".vtable_map_vars%_vtable_map_vars_start",#comdat
.align 4096
.type _vtable_map_vars_start, #object
.size _vtable_map_vars_start, 0
_vtable_map_vars_start:
- .skip 1
.ident "GCC: (GNU) 5.1.0"
I think this needs to be fixed in varasm.c (assemble_variable) in the special
case for .vtable_map_vars, with something like the attached patch. I'm just
not sure which conditions are necessary to avoid emitting .skip in
unappropriate
cases.
Rainer
More information about the Gcc-bugs
mailing list