This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Fix crtstuff.c wrt used/unused attrs
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sun, 9 May 2010 16:30:06 +0200
- Subject: Fix crtstuff.c wrt used/unused attrs
Hi,
my unused variable/function removal patch cause us to remove unused vars with
-fno-toplevel-reorder. I am not sure if we want to do this (i.e. we can just
disable the feature for toplevel-reorder), but it is valid optimization.
This breaks bootstrap because crtstuff is decorating constructor arrays as
unused rather than used (because it was written before used attribute was
introduced for variables). I think this should be fixed in any case. We can
decide on -fno-toplevel-reorder behaviour later based on if glibc/kernel breaks
with removal too or not.
Bootstrapped/regtested x86_64-linux, OK?
Honza
* crtstuff.c (force_to_data, __do_global_dtors_aux_fini_array_entry,
__frame_dummy_init_array_entry, force_to_data): Attribute as used
rather than unused.
Index: crtstuff.c
===================================================================
--- crtstuff.c (revision 159199)
+++ crtstuff.c (working copy)
@@ -187,14 +187,14 @@ CTOR_LIST_BEGIN;
#elif defined(CTORS_SECTION_ASM_OP)
/* Hack: force cc1 to switch to .data section early, so that assembling
__CTOR_LIST__ does not undo our behind-the-back change to .ctors. */
-static func_ptr force_to_data[1] __attribute__ ((__unused__)) = { };
+static func_ptr force_to_data[1] __attribute__ ((__used__)) = { };
asm (CTORS_SECTION_ASM_OP);
STATIC func_ptr __CTOR_LIST__[1]
- __attribute__ ((__unused__, aligned(sizeof(func_ptr))))
+ __attribute__ ((__used__, aligned(sizeof(func_ptr))))
= { (func_ptr) (-1) };
#else
STATIC func_ptr __CTOR_LIST__[1]
- __attribute__ ((__unused__, section(".ctors"), aligned(sizeof(func_ptr))))
+ __attribute__ ((__used__, section(".ctors"), aligned(sizeof(func_ptr))))
= { (func_ptr) (-1) };
#endif /* __CTOR_LIST__ alternatives */
@@ -336,7 +336,7 @@ __do_global_dtors_aux (void)
CRT_CALL_STATIC_FUNCTION (FINI_SECTION_ASM_OP, __do_global_dtors_aux)
#elif defined (FINI_ARRAY_SECTION_ASM_OP)
static func_ptr __do_global_dtors_aux_fini_array_entry[]
- __attribute__ ((__unused__, section(".fini_array")))
+ __attribute__ ((__used__, section(".fini_array")))
= { __do_global_dtors_aux };
#else /* !FINI_SECTION_ASM_OP && !FINI_ARRAY_SECTION_ASM_OP */
static void __attribute__((used))
@@ -383,7 +383,7 @@ frame_dummy (void)
CRT_CALL_STATIC_FUNCTION (INIT_SECTION_ASM_OP, frame_dummy)
#else /* defined(INIT_SECTION_ASM_OP) */
static func_ptr __frame_dummy_init_array_entry[]
- __attribute__ ((__unused__, section(".init_array")))
+ __attribute__ ((__used__, section(".init_array")))
= { frame_dummy };
#endif /* !defined(INIT_SECTION_ASM_OP) */
#endif /* USE_EH_FRAME_REGISTRY || JCR_SECTION_NAME */
@@ -491,7 +491,7 @@ CTOR_LIST_END;
#elif defined(CTORS_SECTION_ASM_OP)
/* Hack: force cc1 to switch to .data section early, so that assembling
__CTOR_LIST__ does not undo our behind-the-back change to .ctors. */
-static func_ptr force_to_data[1] __attribute__ ((__unused__)) = { };
+static func_ptr force_to_data[1] __attribute__ ((__used__)) = { };
asm (CTORS_SECTION_ASM_OP);
STATIC func_ptr __CTOR_END__[1]
__attribute__((aligned(sizeof(func_ptr))))