]> gcc.gnu.org Git - gcc.git/commitdiff
crtstuff.c: Fix thinko last change.
authorRichard Henderson <rth@redhat.com>
Tue, 21 Aug 2001 10:12:07 +0000 (03:12 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 21 Aug 2001 10:12:07 +0000 (03:12 -0700)
        * crtstuff.c: Fix thinko last change.  Move list tails to start
        of CRT_END section.  Tidy ifdefs.
        (__EH_FRAME_BEGIN__): Always static for ELF.
        (__do_global_ctors_1): Rename from __frame_dummy.
        * config/mips/iris6.h (LINK_SPEC): Update for __do_global_ctors_1
        name change; don't hide __EH_FRAME_BEGIN__.

From-SVN: r45075

gcc/ChangeLog
gcc/config/mips/iris6.h
gcc/crtstuff.c

index 528fc20daefd72c127b60832ff1759f96e626b1f..82411766053d15bd53767cd98a7dcdf162b37b56 100644 (file)
@@ -1,3 +1,12 @@
+2001-08-21  Richard Henderson  <rth@redhat.com>
+
+       * crtstuff.c: Fix thinko last change.  Move list tails to start
+       of CRT_END section.  Tidy ifdefs.
+       (__EH_FRAME_BEGIN__): Always static for ELF.
+       (__do_global_ctors_1): Rename from __frame_dummy.
+       * config/mips/iris6.h (LINK_SPEC): Update for __do_global_ctors_1
+       name change; don't hide __EH_FRAME_BEGIN__.
+
 2001-08-21  Richard Henderson  <rth@redhat.com>
 
        * gdbinit.in: Move break on exit after break on fancy_abort.
index ce9df16fff347afc88dc083b5f45152c91552a4d..7a9f509c40e3a37861f386f561dad62ecf1fd70b 100644 (file)
@@ -505,6 +505,6 @@ do {                                                                         \
 %{call_shared} %{no_archive} %{exact_version} %{w} \
 %{!shared: %{!non_shared: %{!call_shared: -call_shared -no_unresolved}}} \
 %{rpath} -init __do_global_ctors -fini __do_global_dtors \
-%{shared:-hidden_symbol __do_global_ctors,__do_global_dtors,__EH_FRAME_BEGIN__,__frame_dummy} \
+%{shared:-hidden_symbol __do_global_ctors,__do_global_ctors_1,__do_global_dtors} \
 -_SYSTYPE_SVR4 -woff 131 \
 %{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64}%{!mabi*: -n32}"
index 2e8a2d62acf062a96810d9fa608aa14ac18a8f56..53c76b39ba11dc6207a5e78f350256d1d103d9f3 100644 (file)
@@ -119,8 +119,6 @@ typedef void (*func_ptr) (void);
 
 #ifdef CRT_BEGIN
 
-#ifdef INIT_SECTION_ASM_OP
-
 /* NOTE:  In order to be able to support SVR4 shared libraries, we arrange
    to have one set of symbols { __CTOR_LIST__, __DTOR_LIST__, __CTOR_END__,
    __DTOR_END__ } per root executable and also one set of these symbols
@@ -167,10 +165,7 @@ STATIC func_ptr __DTOR_LIST__[1]
 #ifdef EH_FRAME_SECTION_NAME
 /* Stick a label at the beginning of the frame unwind info so we can register
    and deregister it with the exception handling library code.  */
-#ifdef INIT_SECTION_ASM_OP
-STATIC
-#endif
-char __EH_FRAME_BEGIN__[]
+STATIC char __EH_FRAME_BEGIN__[]
      __attribute__((section(EH_FRAME_SECTION_NAME), aligned(4)))
      = { };
 #endif /* EH_FRAME_SECTION_NAME */
@@ -178,12 +173,13 @@ char __EH_FRAME_BEGIN__[]
 #ifdef JCR_SECTION_NAME
 /* Stick a label at the beginning of the java class registration info
    so we can register them properly.  */
-
 STATIC void *__JCR_LIST__[]
   __attribute__ ((unused, section(JCR_SECTION_NAME), aligned(sizeof(void*))))
   = { };
 #endif /* JCR_SECTION_NAME */
 
+#ifdef INIT_SECTION_ASM_OP
+
 #ifdef OBJECT_FORMAT_ELF
 
 /* Declare the __dso_handle variable.  It should have a unique value
@@ -338,12 +334,11 @@ static void __do_global_ctors_aux (void);
 void
 __do_global_ctors (void)
 {
-#ifdef INVOKE__main  /* If __main won't actually call __do_global_ctors
-                       then it doesn't matter what's inside the function.
-                       The inside of __do_global_ctors_aux is called
-                       automatically in that case.
-                       And the Alliant fx2800 linker crashes
-                       on this reference.  So prevent the crash.  */
+#ifdef INVOKE__main
+  /* If __main won't actually call __do_global_ctors then it doesn't matter
+     what's inside the function.  The inside of __do_global_ctors_aux is
+     called automatically in that case.  And the Alliant fx2800 linker
+     crashes on this reference.  So prevent the crash.  */
   __do_global_ctors_aux ();
 #endif
 }
@@ -378,9 +373,8 @@ __do_global_ctors_aux (void)        /* prologue goes in .init section */
 
 #endif /* OBJECT_FORMAT_ELF */
 
-#else /* INIT_SECTION_ASM_OP */
+#elif defined(HAS_INIT_SECTION) /* ! INIT_SECTION_ASM_OP */
 
-#ifdef HAS_INIT_SECTION
 /* This case is used by the Irix 6 port, which supports named sections but
    not an SVR4-style .fini section.  __do_global_dtors can be non-static
    in this case because we protect it with -hidden_symbol.  */
@@ -399,11 +393,12 @@ __do_global_dtors (void)
 }
 
 #if defined(EH_FRAME_SECTION_NAME) || defined(JCR_SECTION_NAME)
-/* Define a function here to call __register_frame.  crtend.o is linked in
-   after libgcc.a, and hence can't call libgcc.a functions directly.  That
-   can lead to unresolved function references.  */
+/* A helper function for __do_global_ctors, which is in crtend.o.  Here
+   in crtbegin.o, we can reference a couple of symbols not visible there.
+   Plus, since we're before libgcc.a, we have no problems referencing
+   functions from there.  */
 void
-__frame_dummy (void)
+__do_global_ctors_1(void)
 {
 #ifdef EH_FRAME_SECTION_NAME
   static struct object object;
@@ -417,17 +412,68 @@ __frame_dummy (void)
 }
 #endif /* EH_FRAME_SECTION_NAME || JCR_SECTION_NAME */
 
-#endif /* HAS_INIT_SECTION */
-#endif /* INIT_SECTION_ASM_OP */
-#endif /* defined(CRT_BEGIN) */
+#else /* ! INIT_SECTION_ASM_OP && ! HAS_INIT_SECTION */
+#error "What are you doing with crtstuff.c, then?"
+#endif
+
+#elif defined(CRT_END) /* ! CRT_BEGIN */
+
+/* Put a word containing zero at the end of each of our two lists of function
+   addresses.  Note that the words defined here go into the .ctors and .dtors
+   sections of the crtend.o file, and since that file is always linked in
+   last, these words naturally end up at the very ends of the two lists
+   contained in these two sections.  */
+
+#ifdef CTOR_LIST_END
+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__)) = { };
+asm (CTORS_SECTION_ASM_OP);
+STATIC func_ptr __CTOR_END__[1]
+  __attribute__((aligned(sizeof(func_ptr))))
+  = { (func_ptr) 0 };
+#else
+STATIC func_ptr __CTOR_END__[1]
+  __attribute__((section(".ctors"), aligned(sizeof(func_ptr))))
+  = { (func_ptr) 0 };
+#endif
+
+#ifdef DTOR_LIST_END
+DTOR_LIST_END;
+#elif defined(DTORS_SECTION_ASM_OP)
+asm (DTORS_SECTION_ASM_OP);
+STATIC func_ptr __DTOR_END__[1]
+  __attribute__ ((unused, aligned(sizeof(func_ptr))))
+  = { (func_ptr) 0 };
+#else
+STATIC func_ptr __DTOR_END__[1]
+  __attribute__((unused, section(".dtors"), aligned(sizeof(func_ptr))))
+  = { (func_ptr) 0 };
+#endif
 
-#ifdef CRT_END
+#ifdef EH_FRAME_SECTION_NAME
+/* Terminate the frame unwind info section with a 4byte 0 as a sentinel;
+   this would be the 'length' field in a real FDE.  */
+STATIC int __FRAME_END__[]
+     __attribute__ ((unused, mode(SI), section(EH_FRAME_SECTION_NAME),
+                    aligned(4)))
+     = { 0 };
+#endif /* EH_FRAME_SECTION */
+
+#ifdef JCR_SECTION_NAME
+/* Null terminate the .jcr section array.  */
+STATIC void *__JCR_END__[1] 
+   __attribute__ ((unused, section(JCR_SECTION_NAME),
+                  aligned(sizeof(void *))))
+   = { 0 };
+#endif /* JCR_SECTION_NAME */
 
 #ifdef INIT_SECTION_ASM_OP
 
 #ifdef OBJECT_FORMAT_ELF
 
-static func_ptr __CTOR_END__[];
 static void
 __do_global_ctors_aux (void)
 {
@@ -491,86 +537,31 @@ asm (TEXT_SECTION_ASM_OP);
 
 #endif /* OBJECT_FORMAT_ELF */
 
-#else /* defined(INIT_SECTION_ASM_OP) */
+#elif defined(HAS_INIT_SECTION) /* ! INIT_SECTION_ASM_OP */
 
-#ifdef HAS_INIT_SECTION
 /* This case is used by the Irix 6 port, which supports named sections but
    not an SVR4-style .init section.  __do_global_ctors can be non-static
    in this case because we protect it with -hidden_symbol.  */
-static func_ptr __CTOR_END__[];
-extern void __frame_dummy (void);
+extern void __do_global_ctors_1(void);
 void
 __do_global_ctors (void)
 {
   func_ptr *p;
 #if defined(EH_FRAME_SECTION_NAME) || defined(JCR_SECTION_NAME)
-  __frame_dummy ();
+  __do_global_ctors_1();
 #endif
   for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--)
     (*p) ();
 }
-#endif
-
-#endif /* defined(INIT_SECTION_ASM_OP) */
-
-/* Put a word containing zero at the end of each of our two lists of function
-   addresses.  Note that the words defined here go into the .ctors and .dtors
-   sections of the crtend.o file, and since that file is always linked in
-   last, these words naturally end up at the very ends of the two lists
-   contained in these two sections.  */
 
-#ifdef CTOR_LIST_END
-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__)) = { };
-asm (CTORS_SECTION_ASM_OP);
-STATIC func_ptr __CTOR_END__[1]
-  __attribute__((aligned(sizeof(func_ptr))))
-  = { (func_ptr) 0 };
-
-#else
-STATIC func_ptr __CTOR_END__[1]
-  __attribute__((section(".ctors"), aligned(sizeof(func_ptr))))
-  = { (func_ptr) 0 };
+#else /* ! INIT_SECTION_ASM_OP && ! HAS_INIT_SECTION */
+#error "What are you doing with crtstuff.c, then?"
 #endif
 
-#ifdef DTOR_LIST_END
-DTOR_LIST_END;
-#elif defined(DTORS_SECTION_ASM_OP)
-asm (DTORS_SECTION_ASM_OP);
-STATIC func_ptr __DTOR_END__[1]
-  __attribute__ ((unused, aligned(sizeof(func_ptr))))
-  = { (func_ptr) 0 };
-#else
-STATIC func_ptr __DTOR_END__[1]
-  __attribute__((unused, section(".dtors"), aligned(sizeof(func_ptr))))
-  = { (func_ptr) 0 };
+#else /* ! CRT_BEGIN && ! CRT_END */
+#error "One of CRT_BEGIN or CRT_END must be defined."
 #endif
 
-#ifdef EH_FRAME_SECTION_NAME
-/* Terminate the frame unwind info section with a 4byte 0 as a sentinel;
-   this would be the 'length' field in a real FDE.  */
-STATIC int __FRAME_END__[]
-     __attribute__ ((unused, mode(SI), section(EH_FRAME_SECTION_NAME),
-                    aligned(4)))
-     = { 0 };
-#endif /* EH_FRAME_SECTION */
-
-#ifdef JCR_SECTION_NAME
-/* Stick a label at the beginning of the java class registration info
-   so we can register them properly.  */
-
-STATIC void *__JCR_END__[1] 
-   __attribute__ ((unused, section(JCR_SECTION_NAME),
-                  aligned(sizeof(func_ptr))))
-   = { 0 };
-#endif /* JCR_SECTION_NAME */
-
-#endif /* defined(CRT_END) */
-
 #else  /* OBJECT_FORMAT_MACHO */
 
 /* For Mach-O format executables, we assume that the system's runtime is
@@ -609,9 +600,7 @@ __reg_frame_ctor (void)
   __register_frame_info ((void *) eh_frame->addr, &object);
 }
 
-#endif /* CRT_BEGIN */
-
-#ifdef CRT_END
+#elif defined(CRT_END)
 
 static void __dereg_frame_dtor (void) __attribute__ ((destructor));
 
@@ -630,6 +619,9 @@ STATIC int __FRAME_END__[]
      __attribute__ ((unused, mode(SI), section(EH_FRAME_SECTION_NAME),
                     aligned(4)))
      = { 0 };
-#endif /* CRT_END */
+
+#else /* ! CRT_BEGIN && ! CRT_END */
+#error "One of CRT_BEGIN or CRT_END must be defined."
+#endif
 
 #endif /* OBJECT_FORMAT_MACHO */
This page took 0.079089 seconds and 5 git commands to generate.