-2004-07-06 Jan Beulich <jbeulich@novell.com>
+2004-07-07 Jan Beulich <jbeulich@novell.com>
+ Richard Henderson <rth@redhat.com>
+
+ * 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 <jbeulich@novell.com>
* 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.
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),
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)
/* 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;