Message ID | 20130823070807.GI1814@tucnak.redhat.com |
---|---|
State | New |
Headers | show |
On Fri, Aug 23, 2013 at 9:08 AM, Jakub Jelinek <jakub@redhat.com> wrote: > On the following testcase we generate > .section .lbss,"aw",@progbits > which causes assembler warning, it is supposed to be > .section .lbss,"aw",@nobits > instead. The following patch fixes that. I went through all of > default_section_type_flags and looked for which sections the default > decision is based on section name and which sections have large data > counterparts on x86-64 and I hope I've caught up all of them. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/4.8? > > 2013-08-23 Jakub Jelinek <jakub@redhat.com> > > PR target/58218 > * config/i386/x86-64.h (TARGET_SECTION_TYPE_FLAGS): Define. > * config/i386/i386.c (x86_64_elf_section_type_flags): New function. > > * gcc.target/i386/pr58218.c: New test. > > --- gcc/config/i386/x86-64.h.jj 2013-04-25 23:47:56.000000000 +0200 > +++ gcc/config/i386/x86-64.h 2013-08-22 20:15:12.197344591 +0200 > @@ -103,3 +103,6 @@ see the files COPYING3 and COPYING.RUNTI > > #undef TARGET_ASM_UNIQUE_SECTION > #define TARGET_ASM_UNIQUE_SECTION x86_64_elf_unique_section > + > +#undef TARGET_SECTION_TYPE_FLAGS > +#define TARGET_SECTION_TYPE_FLAGS x86_64_elf_section_type_flags > --- gcc/config/i386/i386.c.jj 2013-08-22 20:30:09.206333231 +0200 > +++ gcc/config/i386/i386.c 2013-08-22 22:25:53.249919215 +0200 > @@ -4912,6 +4912,31 @@ x86_64_elf_select_section (tree decl, in > return default_elf_select_section (decl, reloc, align); > } > > +/* Select a set of attributes for section NAME based on the properties > + of DECL and whether or not RELOC indicates that DECL's initializer > + might contain runtime relocations. */ > + > +static unsigned int x86_64_elf_section_type_flags (tree, const char *, int) > + ATTRIBUTE_UNUSED; > + > +static unsigned int > +x86_64_elf_section_type_flags (tree decl, const char *name, int reloc) Could we avoid prototype with: static unsigned int ATTRIBUTE_UNUSED x86_64_elf_section_type_flags ( ... ) ? The patch is OK with or without this change. We already have a mixture of declarations there... Thanks, Uros.
--- gcc/config/i386/x86-64.h.jj 2013-04-25 23:47:56.000000000 +0200 +++ gcc/config/i386/x86-64.h 2013-08-22 20:15:12.197344591 +0200 @@ -103,3 +103,6 @@ see the files COPYING3 and COPYING.RUNTI #undef TARGET_ASM_UNIQUE_SECTION #define TARGET_ASM_UNIQUE_SECTION x86_64_elf_unique_section + +#undef TARGET_SECTION_TYPE_FLAGS +#define TARGET_SECTION_TYPE_FLAGS x86_64_elf_section_type_flags --- gcc/config/i386/i386.c.jj 2013-08-22 20:30:09.206333231 +0200 +++ gcc/config/i386/i386.c 2013-08-22 22:25:53.249919215 +0200 @@ -4912,6 +4912,31 @@ x86_64_elf_select_section (tree decl, in return default_elf_select_section (decl, reloc, align); } +/* Select a set of attributes for section NAME based on the properties + of DECL and whether or not RELOC indicates that DECL's initializer + might contain runtime relocations. */ + +static unsigned int x86_64_elf_section_type_flags (tree, const char *, int) + ATTRIBUTE_UNUSED; + +static unsigned int +x86_64_elf_section_type_flags (tree decl, const char *name, int reloc) +{ + unsigned int flags = default_section_type_flags (decl, name, reloc); + + if (decl == NULL_TREE + && (strcmp (name, ".ldata.rel.ro") == 0 + || strcmp (name, ".ldata.rel.ro.local") == 0)) + flags |= SECTION_RELRO; + + if (strcmp (name, ".lbss") == 0 + || strncmp (name, ".lbss.", 5) == 0 + || strncmp (name, ".gnu.linkonce.lb.", 16) == 0) + flags |= SECTION_BSS; + + return flags; +} + /* Build up a unique section name, expressed as a STRING_CST node, and assign it to DECL_SECTION_NAME (decl). RELOC indicates whether the initial value of EXP requires --- gcc/testsuite/gcc.target/i386/pr58218.c.jj 2013-08-22 20:26:56.827563563 +0200 +++ gcc/testsuite/gcc.target/i386/pr58218.c 2013-08-22 20:26:48.000000000 +0200 @@ -0,0 +1,5 @@ +/* PR target/58218 */ +/* { dg-do assemble { target lp64 } } */ +/* { dg-options "-mcmodel=medium" } */ + +struct { float x[16385]; } a = { { 0.f, } };