aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-04-28 22:07:20 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1992-04-28 22:07:20 -0400
commitcb6409c1c52546082fcd4bf074ce3de8a71eadb0 (patch)
tree87a380b6e55b62447ab9bfb249921fc75c5fb6aa
parent5cccf78f372fb4ca0067f56305e3ebeab6dc19c2 (diff)
downloadgcc-cb6409c1c52546082fcd4bf074ce3de8a71eadb0.zip
gcc-cb6409c1c52546082fcd4bf074ce3de8a71eadb0.tar.gz
gcc-cb6409c1c52546082fcd4bf074ce3de8a71eadb0.tar.bz2
*** empty log message ***
From-SVN: r856
-rw-r--r--gcc/config/m68k/tower-as.h72
1 files changed, 70 insertions, 2 deletions
diff --git a/gcc/config/m68k/tower-as.h b/gcc/config/m68k/tower-as.h
index c43882e..8a16854 100644
--- a/gcc/config/m68k/tower-as.h
+++ b/gcc/config/m68k/tower-as.h
@@ -30,7 +30,15 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "tower.h"
+#undef SELECT_RTX_SECTION
+/* Use default settings for system V.3. */
+
+#include "svr3.h"
+
+/* Names to predefine in the preprocessor for this target machine. */
+
+#define CPP_PREDEFINES "-Dunix -Dtower32 -Dtower32_600"
/* Define __HAVE_68881 in preprocessor only if -m68881 is specified.
This will control the use of inline 68881 insns in certain macros.
@@ -43,7 +51,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define STARTFILE_SPEC \
"%{p:%{m68881:/usr/lib/fp/mcrt1.o}%{!m68881:/lib/mcrt1.o}} \
- %{!p:%{m68881:/usr/lib/fp/crt1.o}%{!m68881:/lib/crt1.o}}"
+ %{!p:%{m68881:/usr/lib/fp/crt1.o}%{!m68881:/lib/crt1.o}} \
+ crtbegin.o%s"
/* These four macros control how m68k.md is expanded. */
@@ -64,13 +73,20 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/* All the ASM_OUTPUT macros need to conform to the Tower as syntax. */
#define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \
- fprintf (FILE, "\tfile\t\"%s\"\n", FILENAME)
+ do { \
+ fprintf (FILE, "\tfile\t\"%s\"\n", FILENAME); \
+ fprintf (FILE, "section ~init,\"x\"\n"); \
+ fprintf (FILE, "section ~fini,\"x\"\n"); \
+ fprintf (FILE, "section ~rodata,\"x\"\n"); \
+ fprintf (FILE, "text\n"); \
+ } while (0)
#define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \
fprintf (FILE, "\tln\t%d\n", \
(sdb_begin_function_line \
? last_linenum - sdb_begin_function_line : 1))
+#undef ASM_OUTPUT_IDENT
#define ASM_OUTPUT_IDENT(FILE, NAME) \
fprintf (FILE, "\tident\t\"%s\" \n", NAME)
@@ -586,3 +602,55 @@ do { fprintf (asm_out_file, "\ttag\t"); \
#define SDB_GENERATE_FAKE(BUFFER, NUMBER) \
sprintf ((BUFFER), "~%dfake", (NUMBER));
+
+#define NO_DOLLAR_IN_LABEL
+#define NO_DOT_IN_LABEL
+
+/* Define a few machine-specific details
+ of the implementation of constructors.
+
+ The __CTORS_LIST__ goes in the .init section. Define CTOR_LIST_BEGIN
+ and CTOR_LIST_END to contribute to the .init section an 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. */
+
+#define ASM_LONG "\tlong"
+#undef INIT_SECTION_ASM_OP
+#define INIT_SECTION_ASM_OP "section\t~init"
+#undef FINI_SECTION_ASM_OP
+#define FINI_SECTION_ASM_OP "section\t~fini"
+#undef CONST_SECTION_ASM_OP
+#define CONST_SECTION_ASM_OP "section\t~rodata"
+
+#define CTOR_LIST_BEGIN \
+ asm (INIT_SECTION_ASM_OP); \
+ asm ("clr.l -(%sp)")
+#define CTOR_LIST_END CTOR_LIST_BEGIN
+
+#define BSS_SECTION_ASM_OP "section\t~bss"
+#define BSS_SECTION_FUNCTION \
+void \
+bss_section () \
+{ \
+ if (in_section != in_bss) \
+ { \
+ fprintf (asm_out_file, "%s\n", BSS_SECTION_ASM_OP); \
+ in_section = in_bss; \
+ } \
+}
+
+#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
+ do { \
+ init_section (); \
+ fprintf (FILE, "\tmov.l &"); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, ",-(%%sp)\n"); \
+ } while (0)
+
+/* We do not want leading underscores. */
+
+#undef ASM_OUTPUT_LABELREF
+#define ASM_OUTPUT_LABELREF(FILE,NAME) \
+ fprintf (FILE, "%s", NAME)