*** empty log message ***
authorTom Wood <wood@gnu.org>
Wed, 11 Mar 1992 21:58:46 +0000 (21:58 +0000)
committerTom Wood <wood@gnu.org>
Wed, 11 Mar 1992 21:58:46 +0000 (21:58 +0000)
From-SVN: r439

gcc/config/m88k/sysv3.h

index e9e01f9716226bff9101258a2c40d4a4ec29b825..f0a4ecc5659b2acc5bf8cd2a40d9fb551cd2796e 100644 (file)
@@ -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