From 64270ab0561fce7eaa80684e0c71ee8184fbcf87 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 18 Dec 2004 22:49:55 +0100 Subject: [PATCH] re PR middle-end/15486 (-fdata-sections moves common vars to .bss) PR middle-end/15486 * varasm.c (asm_emit_uninitialised): Return early if a custom section is requested. (assemble_variable): Revert 2002-03-15 patch. From-SVN: r92365 --- gcc/ChangeLog | 7 ++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/fdata-sections-1.c | 9 ++++++++ gcc/varasm.c | 29 +++++++++++++++---------- 4 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/fdata-sections-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e6851c99ce5..e72b8475649 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-12-18 Eric Botcazou + + PR middle-end/15486 + * varasm.c (asm_emit_uninitialised): Return early if + a custom section is requested. + (assemble_variable): Revert 2002-03-15 patch. + 2004-12-18 Richard Henderson * stor-layout.c (layout_decl): Use unshare_expr, not unsave_expr. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5380e992ee3..ab2a082c44a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-12-18 Eric Botcazou + + * gcc.dg/fdata-sections-1.c: New test. + 2004-12-18 Roger Sayle PR middle-end/18548 diff --git a/gcc/testsuite/gcc.dg/fdata-sections-1.c b/gcc/testsuite/gcc.dg/fdata-sections-1.c new file mode 100644 index 00000000000..d2b2b580738 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fdata-sections-1.c @@ -0,0 +1,9 @@ +/* PR middle-end/15486 */ +/* Origin: Jonathan Larmour */ + +/* { dg-do compile { target *-*-linux* } } */ +/* { dg-options "-fdata-sections" } */ + +int x; + +/* { dg-final { scan-assembler "comm" } } */ diff --git a/gcc/varasm.c b/gcc/varasm.c index 078959f739e..e6d018c9125 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -1442,9 +1442,16 @@ asm_emit_uninitialised (tree decl, const char *name, destination = asm_dest_common; } + if (destination != asm_dest_common) + { + resolve_unique_section (decl, 0, flag_data_sections); + /* Custom sections don't belong here. */ + if (DECL_SECTION_NAME (decl)) + return false; + } + if (destination == asm_dest_bss) globalize_decl (decl); - resolve_unique_section (decl, 0, flag_data_sections); if (flag_shared_data) { @@ -1625,16 +1632,6 @@ assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED, if (DECL_PRESERVE_P (decl)) targetm.asm_out.mark_decl_preserved (name); - /* Output any data that we will need to use the address of. */ - if (DECL_INITIAL (decl) == error_mark_node) - reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0; - else if (DECL_INITIAL (decl)) - { - reloc = compute_reloc_for_constant (DECL_INITIAL (decl)); - output_addressed_constants (DECL_INITIAL (decl)); - } - resolve_unique_section (decl, reloc, flag_data_sections); - /* Handle uninitialized definitions. */ /* If the decl has been given an explicit section name, then it @@ -1688,7 +1685,17 @@ assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED, if (TREE_PUBLIC (decl) && DECL_NAME (decl)) globalize_decl (decl); + /* Output any data that we will need to use the address of. */ + if (DECL_INITIAL (decl) == error_mark_node) + reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0; + else if (DECL_INITIAL (decl)) + { + reloc = compute_reloc_for_constant (DECL_INITIAL (decl)); + output_addressed_constants (DECL_INITIAL (decl)); + } + /* Switch to the appropriate section. */ + resolve_unique_section (decl, reloc, flag_data_sections); variable_section (decl, reloc); /* dbxout.c needs to know this. */