svn commit: r211729 - head/contrib/gcc

Rui Paulo rpaulo at FreeBSD.org
Tue Aug 24 00:23:41 UTC 2010


Author: rpaulo
Date: Tue Aug 24 00:23:40 2010
New Revision: 211729
URL: http://svn.freebsd.org/changeset/base/211729

Log:
  Mark the following static variables as __used__ instead of __unused__:
  o force_to_data
  o __CTOR_LIST__
  o __do_global_dtors_aux_fini_array_entry
  o __frame_dummy_init_array_entry
  
  This is necessary because Clang is smart enough to optimize out these
  variables was they were marked as __unused__ (and they are also static).
  The end result was programs segfaulting because these symbols weren't
  present.
  
  This follows the upstream revision 159228 and the author of that
  revision (Jan Hubicka <jh at suse.de>) allowed us to backport this to our
  GPLv2 GCC.
  
  Discussed with:	core

Modified:
  head/contrib/gcc/crtstuff.c

Modified: head/contrib/gcc/crtstuff.c
==============================================================================
--- head/contrib/gcc/crtstuff.c	Tue Aug 24 00:17:05 2010	(r211728)
+++ head/contrib/gcc/crtstuff.c	Tue Aug 24 00:23:40 2010	(r211729)
@@ -175,14 +175,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 */
 
@@ -308,7 +308,7 @@ __do_global_dtors_aux (void)
 CRT_CALL_STATIC_FUNCTION (FINI_SECTION_ASM_OP, __do_global_dtors_aux)
 #else /* !defined(FINI_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 };
 #endif /* !defined(FINI_SECTION_ASM_OP) */
 
@@ -348,7 +348,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 */
@@ -456,7 +456,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))))


More information about the svn-src-head mailing list