From: Michael Meissner Date: Fri, 14 Apr 1995 17:06:46 +0000 (+0000) Subject: Emit eabi's main call to __eabi before setting up the minimal TOC, rather than after. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d1d27b4cdfd9461e65f9fbb97c0f911e454409f8;p=gcc.git Emit eabi's main call to __eabi before setting up the minimal TOC, rather than after. From-SVN: r9382 --- diff --git a/gcc/config/rs6000/eabi.h b/gcc/config/rs6000/eabi.h index 7e4d4f083f7..9d19ea0a386 100644 --- a/gcc/config/rs6000/eabi.h +++ b/gcc/config/rs6000/eabi.h @@ -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 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index a905a33de0b..ce2463d5f26 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -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)