From: Tom Wood Date: Wed, 11 Mar 1992 21:58:46 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=436575867d862234062fee11552bdebad5fb641c;p=gcc.git *** empty log message *** From-SVN: r439 --- diff --git a/gcc/config/m88k/sysv3.h b/gcc/config/m88k/sysv3.h index e9e01f97162..f0a4ecc5659 100644 --- a/gcc/config/m88k/sysv3.h +++ b/gcc/config/m88k/sysv3.h @@ -36,12 +36,12 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ From arul@sdsu.edu. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ - "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}" + "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}} crtbegin.o%s" /* Profiled libraries live in a different directory but keep the same names other than that. arul@sdsu.edu says -lg is always needed. */ #undef LIB_SPEC -#define LIB_SPEC "%{p:-L/lib/libp}%{pg:%{!p:-L/lib/libp}} -lg -lc" +#define LIB_SPEC "%{p:-L/lib/libp}%{pg:%{!p:-L/lib/libp}} -lg -lc crtend.o%s" /* Hot version of the profiler that uses r10 to pass the address of the counter. the _gcc_mcount routine knows not to screw with @@ -58,3 +58,45 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ too many changes to the m88k.h file. */ #undef USE_LIBG #define USE_LIBG + +/* Define a few machine-specific details + of the implementation of constructors. + + CTORS_SECTION_ASM_OP should be defined to concatenate + the macro INIT_SECTION_ASM_OP, a newline, and a push instruction + to push a word containing 0 (or some equivalent of that). + + ASM_OUTPUT_CONSTRUCTOR should be defined + to push the address of the constructor. */ + +#undef DO_GLOBAL_CTORS_BODY +#define DO_GLOBAL_CTORS_BODY \ +do { \ + func_ptr *__CTOR_LIST__ = __builtin_alloca (0), *p; \ + for (p = __CTOR_LIST__; *p; p += 4) \ + (*p) (); \ +} while (0) + +#undef CTORS_SECTION_ASM_OP +#define CTORS_SECTION_ASM_OP \ + INIT_SECTION_ASM_OP "\n" \ + "subu\t r31,r31,16\n\tst\t r0,r31,32\n\t" \ + DATA_SECTION_ASM_OP + +/* The reason we end with DATA_SECTION_ASM_OP is to prevent the + initial and final table elements (see crtstuff.c) from getting into + the .init section and causing a crash. */ + +#undef ASM_OUTPUT_CONSTRUCTOR +#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ + do { \ + init_section (); \ + fprintf (FILE, "\tor.u r13,r0,hi16("); \ + assemble_name (FILE, NAME); \ + fprintf (FILE, ")\nor\t r13,r13,lo16("); \ + assemble_name (FILE, NAME); \ + fprintf (FILE, ")\n\tsubu r31,r31,16\nst\t r13,r31,32\n"); \ + } while (0) + +#undef DTORS_SECTION_ASM_OP +#define DTORS_SECTION_ASM_OP FINI_SECTION_ASM_OP