From 08a8c6b65b22e0c125c1bd8fcc5428f72b262ca0 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Thu, 8 Jul 2004 06:26:08 +0000 Subject: [PATCH] varasm.c (assemble_variable): Use assemble_zeros for zero-initialized variables. * varasm.c (assemble_variable): Use assemble_zeros for zero-initialized variables. (categorize_decl_for_section): Honor flag_zero_initialized_in_bss for SECCAT_BSS and SECCAT_TBSS. Co-Authored-By: Richard Henderson From-SVN: r84271 --- gcc/ChangeLog | 16 ++++++++++++---- gcc/varasm.c | 16 +++++++++++++--- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 15bf4adc016..66b707546d7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,9 +1,17 @@ -2004-07-06 Jan Beulich +2004-07-07 Jan Beulich + Richard Henderson + + * varasm.c (assemble_variable): Use assemble_zeros for + zero-initialized variables. + (categorize_decl_for_section): Honor flag_zero_initialized_in_bss + for SECCAT_BSS and SECCAT_TBSS. + +2004-07-07 Jan Beulich * varasm.c (asm_output_bss): Don't declare unless BSS_SECTION_ASM_OP. - - * expmed.c (emit_store_flag): Also special-case double-word - (in-)equality comparison against -1. + + * expmed.c (emit_store_flag): Also special-case double-word + (in-)equality comparison against -1. * config/i386/i386.c (ix86_gimplify_va_arg): Don't need temporary for passing arguments the containers for which are registers. diff --git a/gcc/varasm.c b/gcc/varasm.c index 65875e53acf..37a7a7cce1c 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -1563,7 +1563,9 @@ assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED, if (!dont_output_data) { - if (DECL_INITIAL (decl) && DECL_INITIAL (decl) != error_mark_node) + if (DECL_INITIAL (decl) + && DECL_INITIAL (decl) != error_mark_node + && !initializer_zerop (DECL_INITIAL (decl))) /* Output the actual data. */ output_constant (DECL_INITIAL (decl), tree_low_cst (DECL_SIZE_UNIT (decl), 1), @@ -4611,7 +4613,11 @@ categorize_decl_for_section (tree decl, int reloc, int shlib) else if (TREE_CODE (decl) == VAR_DECL) { if (DECL_INITIAL (decl) == NULL - || DECL_INITIAL (decl) == error_mark_node) + || DECL_INITIAL (decl) == error_mark_node + || (flag_zero_initialized_in_bss + /* Leave constant zeroes in .rodata so they can be shared. */ + && !TREE_READONLY (decl) + && initializer_zerop (DECL_INITIAL (decl)))) ret = SECCAT_BSS; else if (! TREE_READONLY (decl) || TREE_SIDE_EFFECTS (decl) @@ -4653,7 +4659,11 @@ categorize_decl_for_section (tree decl, int reloc, int shlib) /* There are no read-only thread-local sections. */ if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl)) { - if (ret == SECCAT_BSS) + /* Note that this would be *just* SECCAT_BSS, except that there's + no concept of a read-only thread-local-data section. */ + if (ret == SECCAT_BSS + || (flag_zero_initialized_in_bss + && initializer_zerop (DECL_INITIAL (decl)))) ret = SECCAT_TBSS; else ret = SECCAT_TDATA;