]> gcc.gnu.org Git - gcc.git/commitdiff
Emit eabi's main call to __eabi before setting up the minimal TOC, rather than after.
authorMichael Meissner <meissner@gcc.gnu.org>
Fri, 14 Apr 1995 17:06:46 +0000 (17:06 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Fri, 14 Apr 1995 17:06:46 +0000 (17:06 +0000)
From-SVN: r9382

gcc/config/rs6000/eabi.h
gcc/config/rs6000/rs6000.c

index 7e4d4f083f77feea0e24bc0fa2705e7be81fafa4..9d19ea0a38612a8e91367f1baeef8edc3d05d1d3 100644 (file)
@@ -50,7 +50,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
   ((TARGET_RELOCATABLE) ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"")
 
 /* Invoke an initializer function to set up the GOT */
-#define INVOKE__main 1
 #define NAME__MAIN "__eabi"
 
 #undef TARGET_VERSION
index a905a33de0b4d522a3f4091850adacac5533d3a0..ce2463d5f26c76fc796cef45171cfb9fda16d82b 100644 (file)
@@ -1612,6 +1612,19 @@ output_prolog (file, size)
   int total_size = (basic_size + size + current_function_outgoing_args_size);
   char buf[256];
 
+  /* If this is eabi, call __eabi with main, but do so before the minimal TOC
+     is setup, so we can't use the normal mechanism.  */
+#if defined(USING_SVR4_H) && defined(NAME__MAIN) && !defined(INVOKE__main)
+  int main_p = 0;
+
+  if (IDENTIFIER_LENGTH (DECL_NAME (current_function_decl)) == 4
+      && !strcmp (IDENTIFIER_POINTER (DECL_NAME (current_function_decl)), "main"))
+    {
+      main_p = 1;
+      regs_ever_live[65] = 1;
+    }
+#endif
+
   /* Round size to multiple of 8 bytes.  */
   total_size = (total_size + 7) & ~7;
 
@@ -1715,6 +1728,12 @@ output_prolog (file, size)
   if (frame_pointer_needed)
     asm_fprintf (file, "\tmr 31,1\n");
 
+  /* If this is eabi, call __eabi before loading up the minimal TOC */
+#if defined(USING_SVR4_H) && defined(NAME__MAIN) && !defined(INVOKE__main)
+  if (main_p)
+    fprintf (file, "\tbl %s\n", NAME__MAIN);
+#endif
+
   /* If TARGET_MINIMAL_TOC, and the constant pool is needed, then load the
      TOC_TABLE address into register 30.  */
   if (TARGET_MINIMAL_TOC && get_pool_size () != 0)
This page took 0.076027 seconds and 5 git commands to generate.