Article View: gnu.gcc.bug
Article #6267Patches for SCO Open Server 5.0
From: Sow your wild *HUGS*
Date: Sun, 31 Dec 1995 00:00
Date: Sun, 31 Dec 1995 00:00
1375 lines
49354 bytes
49354 bytes
Hi, here is a patch to Gcc 2.7.2 to allow it to compile properly under SCO
Open Server 5 aswell as adding ELF binary support.
By default, this GCC will produce COFF binaries. To produce ELF binaries,
compile with -melf. If you are compiling library modules to build a
shared ELF library, use -melf -fpic. When you create the actual shared
library, use -shared.
I hope this helps.
J. Kean Johnston (hug@netcom.com)
-------------------> CUT HERE <-------------------------
diff -c -r -N gcc-2.7.2/Makefile.in mygcc/Makefile.in
*** gcc-2.7.2/Makefile.in Sun Nov 26 17:44:25 1995
--- mygcc/Makefile.in Tue Dec 19 18:25:58 1995
***************
*** 245,251 ****
# -g1 causes output of debug info only for file-scope entities.
# we use this here because that should be enough, and also
# so that -g1 will be tested.
! LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) -g1
# Additional options to use when compiling libgcc2.a.
# Some targets override this to -Iinclude
--- 245,251 ----
# -g1 causes output of debug info only for file-scope entities.
# we use this here because that should be enough, and also
# so that -g1 will be tested.
! LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) -g1 -DIN_LIBGCC2
# Additional options to use when compiling libgcc2.a.
# Some targets override this to -Iinclude
***************
*** 760,765 ****
--- 760,769 ----
# Compile the library of arithmetic subroutines with the native compiler.
# Don't compile it with GCC!
# (That would cause most arithmetic functions to call themselves.)
+ #
+ # NOTE: If you modify these rules substantially, please be sure to
+ # check at least config/i386/t-sco5 and possibly other makefile
+ # fragments.
libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status
-rm -f tmplibgcc1.a
# Actually build it in tmplibgcc1.a, then rename at end,
***************
*** 774,780 ****
do \
echo $${name}; \
rm -f $${name}$(objext); \
! $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
mv libgcc1$(objext) $${name}$(objext); \
$(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
--- 778,784 ----
do \
echo $${name}; \
rm -f $${name}$(objext); \
! $(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
mv libgcc1$(objext) $${name}$(objext); \
$(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
***************
*** 794,800 ****
if [ $${name}.asm = $${file} ]; then \
cp $${file} $${name}.s || exit 1; file=$${name}.s; \
else true; fi; \
! $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
$(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
--- 798,804 ----
if [ $${name}.asm = $${file} ]; then \
cp $${file} $${name}.s || exit 1; file=$${name}.s; \
else true; fi; \
! $(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
$(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
***************
*** 840,846 ****
for name in $(LIB1FUNCS); \
do \
echo $${name}; \
! $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -S -DL$${name} $(srcdir)/libgcc1.c; \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
echo '#ifdef ' L$${name} >> libgcc1.S; \
cat libgcc1.s >> libgcc1.S; \
--- 844,850 ----
for name in $(LIB1FUNCS); \
do \
echo $${name}; \
! $(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES) -S -DL$${name} $(srcdir)/libgcc1.c; \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
echo '#ifdef ' L$${name} >> libgcc1.S; \
cat libgcc1.s >> libgcc1.S; \
***************
*** 1032,1044 ****
crtbeginS.o crtendS.o: stamp-crtS ; @true
stamp-crtS: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
! $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
-DCRT_BEGIN -finhibit-size-directive -fno-inline-functions \
! -g0 -c $(srcdir)/crtstuff.c -fPIC
mv crtstuff$(objext) crtbeginS$(objext)
! $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
-DCRT_END -finhibit-size-directive -fno-inline-functions \
! -g0 -c $(srcdir)/crtstuff.c -fPIC
mv crtstuff$(objext) crtendS$(objext)
touch stamp-crtS
--- 1036,1048 ----
crtbeginS.o crtendS.o: stamp-crtS ; @true
stamp-crtS: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
! $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS_S) \
-DCRT_BEGIN -finhibit-size-directive -fno-inline-functions \
! -g0 -c $(srcdir)/crtstuff.c
mv crtstuff$(objext) crtbeginS$(objext)
! $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS_S) \
-DCRT_END -finhibit-size-directive -fno-inline-functions \
! -g0 -c $(srcdir)/crtstuff.c
mv crtstuff$(objext) crtendS$(objext)
touch stamp-crtS
diff -c -r -N gcc-2.7.2/config/i386/sco5.h mygcc/config/i386/sco5.h
*** gcc-2.7.2/config/i386/sco5.h Wed Dec 31 22:00:00 1969
--- mygcc/config/i386/sco5.h Mon Dec 25 17:46:21 1995
***************
*** 0 ****
--- 1,975 ----
+ /* Definitions for Intel 386 running SCO Unix System V 3.2 Version 5.
+ Written by Kean Johnston (hug@netcom.com)
+ Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc.
+
+ This file is part of GNU CC.
+
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+ #include "i386/i386.h" /* Base i386 target definitions */
+ #include "i386/att.h" /* Use AT&T i386 assembler syntax */
+
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fprintf (stderr, " (i386, SCO OpenServer 5 Syntax)");
+
+ #undef LPREFIX
+ #define LPREFIX ".L"
+
+ #undef ALIGN_ASM_OP
+ #define ALIGN_ASM_OP "\t.align"
+
+ #undef ASCII_DATA_ASM_OP
+ #define ASCII_DATA_ASM_OP "\t.ascii"
+
+ #undef ASM_BYTE_OP
+ #define ASM_BYTE_OP "\t.byte"
+
+ #undef IDENT_ASM_OP
+ #define IDENT_ASM_OP "\t.ident"
+
+ #undef COMMON_ASM_OP
+ #define COMMON_ASM_OP "\t.comm"
+
+ #undef SET_ASM_OP
+ #define SET_ASM_OP "\t.set"
+
+ #undef LOCAL_ASM_OP
+ #define LOCAL_ASM_OP "\t.local"
+
+ #undef INT_ASM_OP
+ #define INT_ASM_OP "\t.long"
+
+ #undef ASM_SHORT
+ #define ASM_SHORT "\t.value"
+
+ #undef ASM_LONG
+ #define ASM_LONG "\t.long"
+
+ #undef ASM_DOUBLE
+ #define ASM_DOUBLE "\t.double"
+
+ #undef TYPE_ASM_OP
+ #define TYPE_ASM_OP "\t.type"
+
+ #undef SIZE_ASM_OP
+ #define SIZE_ASM_OP "\t.size"
+
+ #undef STRING_ASM_OP
+ #define STRING_ASM_OP "\t.string"
+
+ #undef SKIP_ASM_OP
+ #define SKIP_ASM_OP "\t.zero"
+
+ #undef GLOBAL_ASM_OP
+ #define GLOBAL_ASM_OP "\t.globl"
+
+ #undef CONST_SECTION_ASM_OP
+ #define CONST_SECTION_ASM_OP_COFF "\t.section\t.rodata, \"x\""
+ #define CONST_SECTION_ASM_OP_ELF "\t.section\t.rodata"
+ #define CONST_SECTION_ASM_OP \
+ ((TARGET_ELF) ? CONST_SECTION_ASM_OP_ELF : CONST_SECTION_ASM_OP_COFF)
+
+ #undef USE_CONST_SECTION
+ #define USE_CONST_SECTION_ELF 1
+ #define USE_CONST_SECTION_COFF 0
+ #define USE_CONST_SECTION \
+ ((TARGET_ELF) ? USE_CONST_SECTION_ELF : USE_CONST_SECTION_COFF)
+
+ #undef INIT_SECTION_ASM_OP
+ #define INIT_SECTION_ASM_OP_ELF "\t.section\t.init"
+ #define INIT_SECTION_ASM_OP_COFF "\t.section\t.init ,\"x\""
+ #define INIT_SECTION_ASM_OP \
+ ((TARGET_ELF) ? INIT_SECTION_ASM_OP_ELF : INIT_SECTION_ASM_OP_COFF)
+
+ #undef CTORS_SECTION_ASM_OP
+ #define CTORS_SECTION_ASM_OP_ELF "\t.section\t.ctors,\"aw\""
+ #define CTORS_SECTION_ASM_OP_COFF INIT_SECTION_ASM_OP_COFF
+ #define CTORS_SECTION_ASM_OP \
+ ((TARGET_ELF) ? CTORS_SECTION_ASM_OP_ELF : CTORS_SECTION_ASM_OP_COFF)
+
+ #undef DTORS_SECTION_ASM_OP
+ #define DTORS_SECTION_ASM_OP_ELF "\t.section\t.dtors, \"aw\""
+ #define DTORS_SECTION_ASM_OP_COFF FINI_SECTION_ASM_OP_COFF
+ #define DTORS_SECTION_ASM_OP \
+ ((TARGET_ELF) ? DTORS_SECTION_ASM_OP_ELF : DTORS_SECTION_ASM_OP_COFF)
+
+ #undef FINI_SECTION_ASM_OP
+ #define FINI_SECTION_ASM_OP_ELF "\t.section\t.fini"
+ #define FINI_SECTION_ASM_OP_COFF "\t.section\t.fini, \"x\""
+ #define FINI_SECTION_ASM_OP \
+ ((TARGET_ELF) ? FINI_SECTION_ASM_OP_ELF : FINI_SECTION_ASM_OP_COFF)
+
+ #undef BSS_SECTION_ASM_OP
+ #define BSS_SECTION_ASM_OP "\t.bss"
+
+ #undef TEXT_SECTION_ASM_OP
+ #define TEXT_SECTION_ASM_OP "\t.text"
+
+ #undef DATA_SECTION_ASM_OP
+ #define DATA_SECTION_ASM_OP "\t.data"
+
+ #undef TYPE_OPERAND_FMT
+ #define TYPE_OPERAND_FMT "@%s"
+
+ #undef APPLY_RESULT_SIZE
+ #define APPLY_RESULT_SIZE \
+ (TARGET_ELF) ? size : 116
+
+ #ifndef ASM_DECLARE_RESULT
+ #define ASM_DECLARE_RESULT(FILE, RESULT)
+ #endif
+
+ #define SCO_DEFAULT_ASM_COFF(FILE,NAME) \
+ do { \
+ if (output_bytecode) \
+ BC_OUTPUT_LABEL (FILE, NAME); \
+ else \
+ ASM_OUTPUT_LABEL (FILE, NAME); \
+ } while (0)
+
+ #undef ASM_DECLARE_FUNCTION_NAME
+ #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
+ do { \
+ if (TARGET_ELF) { \
+ fprintf (FILE, "%s\t ", TYPE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ putc (',', FILE); \
+ fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
+ putc ('\n', FILE); \
+ ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
+ ASM_OUTPUT_LABEL(FILE, NAME); \
+ } else \
+ SCO_DEFAULT_ASM_COFF(FILE, NAME); \
+ } while (0)
+
+ #undef ASM_DECLARE_FUNCTION_SIZE
+ #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
+ do { \
+ if (TARGET_ELF) { if (!flag_inhibit_size_directive) \
+ { \
+ fprintf (FILE, "%s\t ", SIZE_ASM_OP); \
+ assemble_name (FILE, (FNAME)); \
+ fprintf (FILE, ",.-"); \
+ assemble_name (FILE, (FNAME)); \
+ putc ('\n', FILE); \
+ } } \
+ } while (0)
+
+ #undef ASM_DECLARE_OBJECT_NAME
+ #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
+ do { \
+ if (TARGET_ELF) { \
+ fprintf (FILE, "%s\t ", TYPE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ putc (',', FILE); \
+ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
+ putc ('\n', FILE); \
+ size_directive_output = 0; \
+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
+ { \
+ size_directive_output = 1; \
+ fprintf (FILE, "%s\t ", SIZE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
+ } \
+ ASM_OUTPUT_LABEL(FILE, NAME); \
+ } else \
+ SCO_DEFAULT_ASM_COFF(FILE, NAME); \
+ } while (0)
+
+ #undef ASM_FILE_START_1
+ #define ASM_FILE_START_1(FILE)
+
+ #undef ASM_FILE_START
+ #define ASM_FILE_START(FILE) \
+ do { \
+ output_file_directive((FILE),main_input_filename); \
+ fprintf ((FILE), "\t.version\t\"01.01\"\n"); \
+ } while (0)
+
+ #undef ASM_FILE_END
+ #define ASM_FILE_END(FILE) \
+ do { \
+ fprintf ((FILE), "%s\t\"GCC: (GNU) %s\"\n", \
+ IDENT_ASM_OP, version_string); \
+ } while (0)
+
+ #undef ASM_FINISH_DECLARE_OBJECT
+ #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
+ do { \
+ if (TARGET_ELF) { \
+ char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
+ && ! AT_END && TOP_LEVEL \
+ && DECL_INITIAL (DECL) == error_mark_node \
+ && !size_directive_output) \
+ { \
+ size_directive_output = 1; \
+ fprintf (FILE, "%s\t ", SIZE_ASM_OP); \
+ assemble_name (FILE, name); \
+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
+ } \
+ } \
+ } while (0)
+
+ #undef ASM_GENERATE_INTERNAL_LABEL
+ #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
+ do { \
+ if (TARGET_ELF) \
+ sprintf (LABEL, "*.%s%d", (PREFIX), (NUM)); \
+ else \
+ sprintf (LABEL, ".%s%d", (PREFIX), (NUM)); \
+ } while (0)
+
+ #undef ASM_OUTPUT_ADDR_DIFF_ELT
+ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
+ do { \
+ if (TARGET_ELF) \
+ fprintf (FILE, "%s _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", ASM_LONG, LPREFIX, VALUE); \
+ else \
+ fprintf (FILE, "\t.word %s%d-%s%d\n", LPREFIX,VALUE,LPREFIX,REL); \
+ } while (0)
+
+ #undef ASM_OUTPUT_ALIGNED_COMMON
+ #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
+ do { \
+ fprintf ((FILE), "%s\t", COMMON_ASM_OP); \
+ assemble_name ((FILE), (NAME)); \
+ if (TARGET_ELF) \
+ fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \
+ else \
+ fprintf ((FILE), ",%u\n", (SIZE)); \
+ } while (0)
+
+ #undef ASM_OUTPUT_ALIGNED_LOCAL
+ #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
+ do { \
+ if (TARGET_ELF) { \
+ fprintf ((FILE), "%s\t", LOCAL_ASM_OP); \
+ assemble_name ((FILE), (NAME)); \
+ fprintf ((FILE), "\n"); \
+ ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
+ } else { \
+ int align = exact_log2 (ALIGN); \
+ if (align > 2) align = 2; \
+ if (TARGET_SVR3_SHLIB) \
+ data_section (); \
+ else \
+ bss_section (); \
+ ASM_OUTPUT_ALIGN ((FILE), align == -1 ? 2 : align); \
+ ASM_OUTPUT_LABEL ((FILE), (NAME)); \
+ fprintf ((FILE), "%s\t.,.+%u\n", SET_ASM_OP, (ALIGN)); \
+ } \
+ } while (0)
+
+ #undef ESCAPES
+ #define ESCAPES \
+ "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+ \0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\
+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\
+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
+
+ #undef STRING_LIMIT
+ #define STRING_LIMIT ((unsigned) 256)
+
+ #undef ASM_OUTPUT_LIMITED_STRING
+ #define ASM_OUTPUT_LIMITED_STRING(FILE, STR) \
+ do \
+ { \
+ register unsigned char *_limited_str = (unsigned char *) (STR); \
+ register unsigned ch; \
+ fprintf ((FILE), "%s\t\"", STRING_ASM_OP); \
+ for (; ch = *_limited_str; _limited_str++) \
+ { \
+ register int escape; \
+ switch (escape = ESCAPES[ch]) \
+ { \
+ case 0: \
+ putc (ch, (FILE)); \
+ break; \
+ case 1: \
+ fprintf ((FILE), "\\%03o", ch); \
+ break; \
+ default: \
+ putc ('\\', (FILE)); \
+ putc (escape, (FILE)); \
+ break; \
+ } \
+ } \
+ fprintf ((FILE), "\"\n"); \
+ } \
+ while (0)
+
+
+ #undef ASM_OUTPUT_ASCII
+ #define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \
+ do { \
+ if (TARGET_ELF) { \
+ register unsigned char *_ascii_bytes = (unsigned char *) (STR); \
+ register unsigned char *limit = _ascii_bytes + (LENGTH); \
+ register unsigned bytes_in_chunk = 0; \
+ for (; _ascii_bytes < limit; _ascii_bytes++) \
+ { \
+ register unsigned char *p; \
+ if (bytes_in_chunk >= 64) \
+ { \
+ fputc ('\n', (FILE)); \
+ bytes_in_chunk = 0; \
+ } \
+ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \
+ continue; \
+ if (p < limit && (p - _ascii_bytes) <= STRING_LIMIT) \
+ { \
+ if (bytes_in_chunk > 0) \
+ { \
+ fputc ('\n', (FILE)); \
+ bytes_in_chunk = 0; \
+ } \
+ ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes); \
+ _ascii_bytes = p; \
+ } \
+ else \
+ { \
+ if (bytes_in_chunk == 0) \
+ fprintf ((FILE), "%s\t", ASM_BYTE_OP); \
+ else \
+ fputc (',', (FILE)); \
+ fprintf ((FILE), "0x%02x", *_ascii_bytes); \
+ bytes_in_chunk += 5; \
+ } \
+ } \
+ if (bytes_in_chunk > 0) \
+ fprintf ((FILE), "\n"); \
+ } else { \
+ int i = 0; \
+ while (i < (LENGTH)) \
+ { if (i%10 == 0) { if (i!=0) fprintf ((FILE), "\n"); \
+ fprintf ((FILE), "%s ", ASM_BYTE_OP); } \
+ else fprintf ((FILE), ","); \
+ fprintf ((FILE), "0x%x", ((STR)[i++] & 0377)) ;} \
+ fprintf ((FILE), "\n"); } \
+ } while (0)
+
+ #undef ASM_OUTPUT_CASE_LABEL
+ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) \
+ do { \
+ if (TARGET_ELF) \
+ ASM_OUTPUT_ALIGN ((FILE), 2); \
+ ASM_OUTPUT_INTERNAL_LABEL((FILE),(PREFIX),(NUM)); \
+ } while (0)
+
+
+ #undef ASM_OUTPUT_CONSTRUCTOR
+ #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
+ do { \
+ if (TARGET_ELF) { \
+ ctors_section (); \
+ fprintf (FILE, "%s\t ", INT_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "\n"); \
+ } else { \
+ init_section (); \
+ fprintf (FILE, "\tpushl $"); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "\n"); } \
+ } while (0)
+
+ #undef ASM_OUTPUT_DESTRUCTOR
+ #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
+ do { \
+ if (TARGET_ELF) { \
+ dtors_section (); \
+ fprintf (FILE, "%s\t ", INT_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "\n"); \
+ } else { \
+ fini_section (); \
+ fprintf (FILE, "%s\t ", ASM_LONG); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "\n"); } \
+ } while (0)
+
+
+ #undef ASM_OUTPUT_DOUBLE
+ #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
+ do { \
+ long value[2]; \
+ REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), value); \
+ if (TARGET_ELF) { \
+ if (sizeof (int) == sizeof (long)) \
+ { \
+ fprintf((FILE), "%s\t0x%x\n", ASM_LONG, value[0]); \
+ fprintf((FILE), "%s\t0x%x\n", ASM_LONG, value[1]); \
+ } \
+ else \
+ { \
+ fprintf((FILE), "%s\t0x%lx\n", ASM_LONG, value[0]); \
+ fprintf((FILE), "%s\t0x%lx\n", ASM_LONG, value[1]); \
+ } \
+ } else { \
+ if (sizeof (int) == sizeof (long)) \
+ fprintf (FILE, "%s 0x%x,0x%x\n", ASM_LONG, value[0], value[1]); \
+ else \
+ fprintf (FILE, "%s 0x%lx,0x%lx\n", ASM_LONG,value[0],value[1]);} \
+ } while (0)
+
+ #undef ASM_OUTPUT_FLOAT
+ #define ASM_OUTPUT_FLOAT(FILE,VALUE) \
+ do { \
+ long value; \
+ REAL_VALUE_TO_TARGET_SINGLE ((VALUE), value); \
+ if (sizeof (int) == sizeof (long)) \
+ fprintf((FILE), "%s\t0x%x\n", ASM_LONG, value); \
+ else \
+ fprintf((FILE), "%s\t0x%lx\n", ASM_LONG, value); \
+ } while (0)
+
+ #undef ASM_OUTPUT_LONG_DOUBLE
+ #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
+ do { \
+ long l[3]; \
+ REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), l); \
+ if (TARGET_ELF) { \
+ if (sizeof (int) == sizeof (long)) \
+ { \
+ fprintf((FILE), "%s\t0x%x\n", ASM_LONG, l[0]); \
+ fprintf((FILE), "%s\t0x%x\n", ASM_LONG, l[1]); \
+ fprintf((FILE), "%s\t0x%x\n", ASM_LONG, l[2]); \
+ } \
+ else \
+ { \
+ fprintf((FILE), "%s\t0x%lx\n", ASM_LONG, l[0]); \
+ fprintf((FILE), "%s\t0x%lx\n", ASM_LONG, l[1]); \
+ fprintf((FILE), "%s\t0x%lx\n", ASM_LONG, l[2]); \
+ } \
+ } else { \
+ if (sizeof (int) == sizeof (long)) \
+ fprintf (FILE, "%s 0x%x,0x%x,0x%x\n", ASM_LONG, l[0], l[1], l[2]); \
+ else \
+ fprintf (FILE, "%s 0x%lx,0x%lx,0x%lx\n", ASM_LONG,l[0],l[1],l[2]);} \
+ } while (0)
+
+ #undef ASM_OUTPUT_IDENT
+ #define ASM_OUTPUT_IDENT(FILE, NAME) \
+ fprintf (FILE, "%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
+
+ #undef ASM_GLOBALIZE_LABEL
+ #define ASM_GLOBALIZE_LABEL(FILE,NAME) \
+ (fprintf ((FILE), "%s ", GLOBAL_ASM_OP), assemble_name (FILE, NAME), fputs ("\n", FILE))
+
+ #undef ASM_OUTPUT_EXTERNAL_LIBCALL
+ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
+ if (TARGET_ELF) ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0))
+
+ #undef ASM_OUTPUT_INTERNAL_LABEL
+ #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
+ fprintf (FILE, ".%s%d:\n", PREFIX, NUM)
+
+ #undef ASM_OUTPUT_LABELREF
+ #define ASM_OUTPUT_LABELREF(FILE,NAME) \
+ fprintf (FILE, "%s", NAME)
+
+ #undef ASM_OUTPUT_SECTION_NAME
+ #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
+ do { \
+ if (TARGET_ELF) \
+ fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \
+ (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
+ (DECL) && TREE_READONLY (DECL) ? "a" : "aw"); \
+ } while (0)
+
+ #undef ASM_OUTPUT_SKIP
+ #define ASM_OUTPUT_SKIP(FILE,SIZE) \
+ do { \
+ if (TARGET_ELF) \
+ fprintf (FILE, "%s\t%u\n", SKIP_ASM_OP, (SIZE)); \
+ else \
+ fprintf ((FILE), "%s\t.,.+%u\n", SET_ASM_OP, (SIZE)); \
+ } while (0)
+
+
+ #undef CLASS_LIKELY_SPILLED_P
+ #define CLASS_LIKELY_SPILLED_P(CLASS) \
+ (TARGET_ELF) ? (reg_class_size[(int)(CLASS)] == 1) : \
+ (((CLASS) == AREG) || ((CLASS) == DREG) || ((CLASS) == CREG) || \
+ ((CLASS) == BREG) || ((CLASS) == SIREG) || ((CLASS) == DIREG))
+
+ #undef CTOR_LIST_BEGIN
+ #define CTOR_LIST_BEGIN \
+ do { \
+ asm (CTORS_SECTION_ASM_OP); \
+ if (TARGET_ELF) \
+ STATIC func_ptr __CTOR_LIST__[1] = { (func_ptr) (-1) }; \
+ else \
+ asm ("pushl $0"); \
+ } while (0)
+
+ #undef CTOR_LIST_END
+ #define CTOR_LIST_END \
+ do { \
+ if (TARGET_ELF) { \
+ asm (CTORS_SECTION_ASM_OP); \
+ STATIC func_ptr __CTOR_LIST__[1] = { (func_ptr) (0) }; \
+ } else { \
+ CTOR_LIST_BEGIN; \
+ } \
+ } while (0)
+
+ #undef DBX_BLOCKS_FUNCTION_RELATIVE
+ #define DBX_BLOCKS_FUNCTION_RELATIVE 1
+
+ #undef DBX_FUNCTION_FIRST
+ #define DBX_FUNCTION_FIRST 1
+
+ #undef DBX_REGISTER_NUMBER
+ #define DBX_REGISTER_NUMBER(n) \
+ ((TARGET_ELF) ? \
+ ((n) == 0 ? 0 \
+ : (n) == 1 ? 2 \
+ : (n) == 2 ? 1 \
+ : (n) == 3 ? 3 \
+ : (n) == 4 ? 6 \
+ : (n) == 5 ? 7 \
+ : (n) == 6 ? 5 \
+ : (n) == 7 ? 4 \
+ : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \
+ : (-1)) \
+ : \
+ ((n) == 0 ? 0 : \
+ (n) == 1 ? 2 : \
+ (n) == 2 ? 1 : \
+ (n) == 3 ? 3 : \
+ (n) == 4 ? 6 : \
+ (n) == 5 ? 7 : \
+ (n) == 6 ? 4 : \
+ (n) == 7 ? 5 : \
+ (n) + 4))
+
+ #undef DWARF_DEBUGGING_INFO
+ #undef SDB_DEBUGGING_INFO
+ #undef DBX_DEBUGGING_INFO
+ #undef PREFERRED_DEBUGGING_TYPE
+
+ #define DWARF_DEBUGGING_INFO 1
+ #define SDB_DEBUGGING_INFO 1
+ #define PREFERRED_DEBUGGING_TYPE \
+ ((TARGET_ELF) ? DWARF_DEBUG: SDB_DEBUG)
+
+ #undef EXTRA_SECTIONS
+ #define EXTRA_SECTIONS in_const, in_bss, in_init, in_fini, in_ctors, in_dtors
+
+ #undef EXTRA_SECTION_FUNCTIONS
+ #define EXTRA_SECTION_FUNCTIONS \
+ CONST_SECTION_FUNCTION \
+ BSS_SECTION_FUNCTION \
+ INIT_SECTION_FUNCTION \
+ FINI_SECTION_FUNCTION \
+ CTORS_SECTION_FUNCTION \
+ DTORS_SECTION_FUNCTION
+
+ #undef CONST_SECTION_FUNCTION
+ #define CONST_SECTION_FUNCTION \
+ void \
+ const_section () \
+ { \
+ extern void text_section(); \
+ if (!USE_CONST_SECTION) \
+ text_section(); \
+ else if (in_section != in_const) \
+ { \
+ fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \
+ in_section = in_const; \
+ } \
+ }
+
+ #undef FINI_SECTION_FUNCTION
+ #define FINI_SECTION_FUNCTION \
+ void \
+ fini_section () \
+ { \
+ if ((!TARGET_ELF) && in_section != in_fini) \
+ { \
+ fprintf (asm_out_file, "%s\n", FINI_SECTION_ASM_OP); \
+ in_section = in_fini; \
+ } \
+ }
+
+ #undef BSS_SECTION_FUNCTION
+ #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; \
+ } \
+ }
+
+ #undef INIT_SECTION_FUNCTION
+ #define INIT_SECTION_FUNCTION \
+ void \
+ init_section () \
+ { \
+ if ((!TARGET_ELF) && in_section != in_init) \
+ { \
+ fprintf (asm_out_file, "%s\n", INIT_SECTION_ASM_OP); \
+ in_section = in_init; \
+ } \
+ }
+
+ #undef CTORS_SECTION_FUNCTION
+ #define CTORS_SECTION_FUNCTION \
+ void \
+ ctors_section () \
+ { \
+ if (in_section != in_ctors) \
+ { \
+ fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \
+ in_section = in_ctors; \
+ } \
+ }
+
+ #undef DTORS_SECTION_FUNCTION
+ #define DTORS_SECTION_FUNCTION \
+ void \
+ dtors_section () \
+ { \
+ if (in_section != in_dtors) \
+ { \
+ fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \
+ in_section = in_dtors; \
+ } \
+ }
+
+ #undef FRAME_POINTER_REQUIRED
+ #define FRAME_POINTER_REQUIRED \
+ ((TARGET_ELF) ? 0 : \
+ (current_function_calls_setjmp || current_function_calls_longjmp))
+
+ #undef JUMP_TABLES_IN_TEXT_SECTION
+ #define JUMP_TABLES_IN_TEXT_SECTION 1
+
+ #undef LOCAL_LABEL_PREFIX
+ #define LOCAL_LABEL_PREFIX \
+ ((TARGET_ELF) ? "" : ".")
+
+ #undef MD_EXEC_PREFIX
+ #undef MD_STARTFILE_PREFIX
+ #define MD_EXEC_PREFIX "/usr/ccs/bin/"
+ #define MD_STARTFILE_PREFIX "/usr/ccs/lib/"
+
+ #undef NON_SAVING_SETJMP
+ #define NON_SAVING_SETJMP \
+ ((TARGET_ELF) ? 0 : \
+ (current_function_calls_setjmp && current_function_calls_longjmp))
+
+ #undef NO_IMPLICIT_EXTERN_C
+ #define NO_IMPLICIT_EXTERN_C 1
+
+ /* JKJ FIXME - examine the rammifications of RETURN_IN_MEMORY and
+ RETURN_POPS_ARGS */
+
+ #undef RETURN_POPS_ARGS
+ #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \
+ ((TARGET_ELF) ? \
+ (i386_return_pops_args (FUNDECL, FUNTYPE, SIZE)) : \
+ (TREE_CODE (FUNTYPE) == IDENTIFIER_NODE ? 0 \
+ : (TARGET_RTD \
+ && (TYPE_ARG_TYPES (FUNTYPE) == 0 \
+ || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \
+ == void_type_node))) ? (SIZE) \
+ : 0))
+
+ #undef SELECT_SECTION
+ #define SELECT_SECTION(DECL,RELOC) \
+ { \
+ if (TREE_CODE (DECL) == STRING_CST) \
+ { \
+ if (! flag_writable_strings) \
+ const_section (); \
+ else \
+ data_section (); \
+ } \
+ else if (TREE_CODE (DECL) == VAR_DECL) \
+ { \
+ if ((TARGET_ELF && flag_pic && RELOC) \
+ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
+ || !DECL_INITIAL (DECL) \
+ || (DECL_INITIAL (DECL) != error_mark_node \
+ && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
+ data_section (); \
+ else \
+ const_section (); \
+ } \
+ else \
+ const_section (); \
+ }
+
+ #undef SWITCH_TAKES_ARG
+ #define SWITCH_TAKES_ARG(CHAR) \
+ ( (CHAR) == 'D' \
+ || (CHAR) == 'U' \
+ || (CHAR) == 'o' \
+ || (CHAR) == 'e' \
+ || (CHAR) == 'u' \
+ || (CHAR) == 'I' \
+ || (CHAR) == 'm' \
+ || (CHAR) == 'L' \
+ || (CHAR) == 'A' \
+ || (CHAR) == 'h' \
+ || (CHAR) == 'z')
+
+ #undef WORD_SWITCH_TAKES_ARG
+ #define WORD_SWITCH_TAKES_ARG(STR) \
+ (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \
+ && strcmp (STR, "Tdata") && strcmp (STR, "Ttext") \
+ && strcmp (STR, "Tbss"))
+
+ #undef TARGET_DEFAULT
+ #define TARGET_DEFAULT 0201
+
+ #undef HANDLE_SYSV_PRAGMA
+ #define HANDLE_SYSV_PRAGMA 1
+
+ #undef SCCS_DIRECTIVE
+ #define SCCS_DIRECTIVE 1
+
+ /*
+ * Define sizes and types
+ */
+ #undef SIZE_TYPE
+ #undef PTRDIFF_TYPE
+ #undef WCHAR_TYPE
+ #undef WCHAR_TYPE_SIZE
+ #undef LONG_DOUBLE_TYPE_SIZE
+ #define LONG_DOUBLE_TYPE_SIZE 96
+ #define SIZE_TYPE "unsigned int"
+ #define PTRDIFF_TYPE "int"
+ #define WCHAR_TYPE "long int"
+ #define WCHAR_TYPE_SIZE BITS_PER_WORD
+
+
+ /* Please note that these specs may look messy but they are required in
+ order to emulate the SCO Development system as closely as possible.
+ With SCO Open Server 5.0, you now get the linker and assembler free,
+ so that is what these specs are targeted for. These utilities are
+ very argument sensitive: a space in the wrong place breaks everything.
+ So RMS, please forgive this mess. It works.
+
+ Parameters which can be passed to gcc, and their SCO equivalents:
+ GCC Parameter SCO Equivalent
+ -ansi -a ansi
+ -posix -a posix
+ -Xpg4 -a xpg4
+ -Xpg4plus -a xpg4plus
+ -Xods30 -a ods30
+
+ As with SCO, the default is XPG4 plus mode. SCO also allows you to
+ specify a C dialect with -Xt, -Xa, -Xc, -Xk and -Xm. These are passed
+ on to the assembler and linker in the same way that the SCO compiler
+ does.
+
+ SCO also allows you to compile, link and generate either ELF or COFF
+ binaries. With gcc, as with the SCO compiler, the default is coff.
+ Specify -melf to gcc to produce elf binaries. -fpic will get the
+ assembler and linker to produce PIC code.
+ */
+
+ /* Set up assembler flags for PIC and ELF compilations */
+ #undef ASM_SPEC
+ #define ASM_SPEC \
+ "-b %{melf:elf}%{!melf:coff \
+ %{static:%e-static only valid with -melf} \
+ %{shared:%e-shared only valid with -melf} \
+ %{symbolic:%e-symbolic only valid with -melf}} \
+ %{Ym,*} %{Yd,*} %{Wa,*:%*} \
+ %{melf:-E%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},ELF %{Qn:} %{!Qy:-Qn}}"
+
+ /* Use crt1.o as a startup file and crtn.o as a closing file. */
+
+ #undef STARTFILE_SPEC
+ #define STARTFILE_SPEC \
+ "%{!shared:\
+ %{!symbolic: \
+ %{pg:gcrt.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}} \
+ %{!melf:crtbegin.o%s} \
+ %{melf:%{ansi:values-Xc.o%s} \
+ %{!ansi: \
+ %{traditional:values-Xt.o%s} \
+ %{!traditional: \
+ %{Xa:values-Xa.o%s} \
+ %{!Xa:%{Xc:values-Xc.o%s} \
+ %{!Xc:%{Xk:values-Xk.o%s} \
+ %{!Xk:%{Xt:values-Xt.o%s} \
+ %{!Xt:values-Xa.o%s}}}}}} \
+ %{static:crtbegin.o%s}%{!static:crtbeginS.o%s}}"
+
+ #undef ENDFILE_SPEC
+ #define ENDFILE_SPEC \
+ "%{melf:%{!static:crtendS.o%s}%{static:crtend.o%s}} \
+ %{!melf:crtend.o%s} \
+ %{pg:gcrtn.o%s}%{!pg:crtn.o%s}"
+
+ #undef CPP_PREDEFINES
+ #define CPP_PREDEFINES \
+ "-Asystem(unix) -Asystem(svr3) -Acpu(i386) -Amachine(i386)"
+
+ /* You are in a maze of GCC specs ... all alike */
+
+ #undef CPP_SPEC
+ #define CPP_SPEC \
+ "%{melf:-Asystem(svr4) -D__svr4__} \
+ %{fpic:%{!melf:%e-fpic is only valid with -melf}} \
+ %{fPIC:%{!melf:%e-fPIC is only valid with -melf}} \
+ -D__i386 -D__unix -D_SCO_DS=1 -D_M_I386 -D_M_XENIX -D_M_UNIX \
+ %{!Xods30:-D_STRICT_NAMES} \
+ %{!ansi:%{!posix:%{!Xods30:-D_SCO_XPG_VERS=4}}} \
+ %{ansi:-D_STRICT_ANSI} \
+ %{!ansi: \
+ %{!Xpg4: \
+ %{!Xpg4plus: \
+ %{!Xods30: \
+ %{posix:-D_POSIX_C_SOURCE=2 -D_POSIX_SOURCE}}}}} \
+ %{!ansi: \
+ %{!posix: \
+ %{!Xods30: \
+ %{!Xpg4plus: \
+ %{Xpg4:-D_XOPEN_SOURCE}}}}} \
+ %{!ansi: \
+ %{!posix: \
+ %{!Xpg4: \
+ %{!Xpg4plus: \
+ %{Xods30:-D_SCO_ODS_30 -DM_I86 -DM_I86SM -DM_SDATA -DM_STEXT \
+ -DM_BITFIELDS -DM_SYS5 -DM_SYSV -DM_SYS3 -DM_SYSIII \
+ -DM_WORDSWAP}}}}} \
+ %{!ansi: \
+ %{!posix: \
+ %{!Xpg4:-D_M_I86 -D_M_I86SM -D_M_I86SM -D_M_SDATA -D_M_STEXT \
+ -D_M_BITFIELDS -D_M_SYS5 -D_M_SYSV -D_M_SYS3 -D_M_SYSIII \
+ -D_M_WORDSWAP -Di386 -Dunix -DM_I386 -DM_UNIX -DM_XENIX}}} \
+ %{scointl:-DM_INTERNAT -D_M_INTERNAT} \
+ %{traditional:-D_KR -D_SVID -D_NO_PROTOTYPE} \
+ %{melf:-D_SCO_ELF -DM_ELF -D_M_ELF} \
+ %{!melf:-D_M_COFF -DM_COFF -D_SCO_COFF} \
+ %{melf:%{fpic:-D__PIC__ -D__pic__} \
+ %{fPIC:%{!fpic:-D__PIC__ -D__pic__}}} \
+ %{Xa:-D_SCO_C_DIALECT=1} \
+ %{!Xa:%{Xc:-D_SCO_C_DIALECT=3} \
+ %{!Xc:%{Xk:-D_SCO_C_DIALECT=4} \
+ %{!Xk:%{Xt:-D_SCO_C_DIALECT=2 \
+ %{!traditional:-traditional -D_KR -D_NO_PROTOTYPE}}}}} \
+ %{traditional:-traditional -D_KR -D_NO_PROTOTYPE}"
+
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+ "-b %{melf:elf}%{!melf:coff \
+ %{static:%e-static only valid with -melf} \
+ %{shared:%e-shared only valid with -melf} \
+ %{symbolic:%e-symbolic only valid with -melf} \
+ %{fpic:%e-fpic only valid with -melf} \
+ %{fPIC:%e-fPIC only valid with -melf}} \
+ -R%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},%{melf:ELF}%{!melf:COFF} \
+ %{Wl,*%*} %{YP,*} %{YL,*} %{YU,*} \
+ %{!YP,*:%{p:-YP,/usr/ccs/libp:/usr/libp:/usr/ccs/lib:/usr/lib} \
+ %{!p:-YP,/usr/ccs/lib:/usr/lib}} \
+ %{h*} %{static:-dn -Bstatic} %{shared:-G -dy %{!z*:-z text}} \
+ %{symbolic:-Bsymbolic -G -dy %{!z*:-z text}} \
+ %{G:-G} %{melf:%{Qn:} %{!Qy:-Qn}}"
+
+ /* Library spec. If we are not building a shared library, provide the
+ standard libraries, as per the SCO compiler. */
+
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+ "%{!shared:%{!symbolic:-lcrypt -lgen -lc}}"
+
+ #undef LIBGCC_SPEC
+ #define LIBGCC_SPEC \
+ "%{!melf:-lgcc}%{melf:%{!shared:%{!symbolic:-lgcc-elf}}}"
+
+ #define MASK_ELF 010000000000 /* Mask for elf generation */
+ #define TARGET_ELF (target_flags & MASK_ELF)
+
+ #undef SUBTARGET_SWITCHES
+ #define SUBTARGET_SWITCHES { "elf", MASK_ELF },
+
+ #define NO_DOLLAR_IN_LABEL
+
+ /*
+ Here comes some major hackery to get the crt stuff to compile properly.
+ Since we can (and do) compile for both COFF and ELF environments, we
+ set things up accordingly, based on the pre-processor defines for ELF
+ and COFF. This is insane, but then I guess having one compiler with a
+ single back-end supporting two vastly different file format types is
+ a little insane too. But it is not impossible and we get a useful
+ compiler at the end of the day. Onward we go ...
+ */
+
+ #if defined(CRT_BEGIN) || defined(CRT_END) || defined(IN_LIBGCC2)
+ # if defined (_SCO_ELF)
+ # undef OBJECT_FORMAT_ELF
+ # define OBJECT_FORMAT_ELF
+ # undef INIT_SECTION_ASM_OP
+ # undef FINI_SECTION_ASM_OP
+ # undef DTORS_SECTION_ASM_OP
+ # undef CTORS_SECTION_ASM_OP
+ # undef CTOR_LIST_BEGIN
+ # undef CTOR_LIST_END
+ # undef DO_GLOBAL_CTORS_BODY
+ # define INIT_SECTION_ASM_OP INIT_SECTION_ASM_OP_ELF
+ # define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_ELF
+ # define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_ELF
+ # define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_ELF
+ # define CTOR_LIST_BEGIN asm (CTORS_SECTION_ASM_OP_ELF); \
+ STATIC func_ptr __CTOR_LIST__[1] = { (func_ptr) (-1) };
+ # define DO_GLOBAL_CTORS_BODY \
+ do { \
+ unsigned long nptrs = (unsigned long) __CTOR_LIST__[0]; \
+ unsigned i; \
+ if (nptrs == -1) \
+ for (nptrs=0; __CTOR_LIST__[nptrs+1] != 0; nptrs++); \
+ for (i = nptrs; i >= 1; i--) \
+ __CTOR_LIST__[i] (); \
+ } while (0)
+ # else /* ! _SCO_ELF */
+ # undef OBJECT_FORMAT_ELF
+ # undef INIT_SECTION_ASM_OP
+ # undef FINI_SECTION_ASM_OP
+ # undef DTORS_SECTION_ASM_OP
+ # undef CTORS_SECTION_ASM_OP
+ # define INIT_SECTION_ASM_OP INIT_SECTION_ASM_OP_COFF
+ # define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_COFF
+ # define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_COFF
+ # define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_COFF
+ # undef CTOR_LIST_BEGIN
+ # undef CTOR_LIST_END
+ # undef DO_GLOBAL_CTORS_BODY
+ # define CTOR_LIST_BEGIN asm (INIT_SECTION_ASM_OP); asm ("pushl $0")
+ # define CTOR_LIST_END CTOR_LIST_BEGIN
+ # define DO_GLOBAL_CTORS_BODY \
+ do { \
+ func_ptr *p, *beg = alloca(0); \
+ for (p = beg; *p;) \
+ (*p++) (); \
+ } while (0)
+ # endif /* ! _SCO_ELF */
+ #endif /* CRT_BEGIN !! CRT_END */
+
diff -c -r -N gcc-2.7.2/config/i386/t-sco5 mygcc/config/i386/t-sco5
*** gcc-2.7.2/config/i386/t-sco5 Wed Dec 31 22:00:00 1969
--- mygcc/config/i386/t-sco5 Mon Dec 25 18:00:48 1995
***************
*** 0 ****
--- 1,91 ----
+ # The pushl in CTOR initialization interferes with frame pointer elimination.
+ CRTSTUFF_T_CFLAGS =-fno-omit-frame-pointer
+ CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -melf -fPIC
+
+ #
+ # Becuase we can be compiling for either elf or coff, we need to create
+ # special versions of libgcc.a. It IS possible for this not to be done
+ # and let the SCO linker transform the coff objects (which are created
+ # by default) into elf objects. However, this is inefficient. So,
+ # we create a libgcc-elf.a, which is used in the specs in sco5.h.
+ # These are the rules for doing that.
+ #
+ # NOTE: This is duplicated directly from Makefile.in. If you change it
+ # there, be sure to change things here!
+ #
+ EXTRA_PARTS = libgcc-elf.a crtbegin.o crtend.o crtbeginS.o crtendS.o
+ TAROUTOPTS = xpf
+
+ libgcc1-elf.a: stamp-crtS stamp-crt libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status
+ -rm -f tmplibgcc1-elf.a
+ for name in $(LIB1FUNCS); \
+ do \
+ echo $${name}; \
+ rm -f $${name}$(objext); \
+ $(OLDCC) -DIN_LIBGCC1 -dy $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \
+ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ mv libgcc1$(objext) $${name}$(objext); \
+ $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1-elf.a $${name}$(objext); \
+ rm -f $${name}$(objext); \
+ done
+ for file in .. $(LIB1FUNCS_EXTRA); \
+ do \
+ if [ x$${file} != x.. ]; then \
+ name=`echo $${file} | sed -e 's/[.][cS]$$//' -e 's/[.]asm$$//'`; \
+ echo $${name}; \
+ if [ $${name}.asm = $${file} ]; then \
+ cp $${file} $${name}.s || exit 1; file=$${name}.s; \
+ else true; fi; \
+ $(OLDCC) -DIN_LIBGCC1 -dy $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \
+ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1-elf.a $${name}$(objext); \
+ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ rm -f $${name}.s $${name}$(objext); \
+ else true; \
+ fi; \
+ done
+ -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc1-elf.a; else true; fi
+ mv tmplibgcc1-elf.a libgcc1-elf.a
+
+ libgcc2-elf.a: stamp-crtS stamp-crt libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
+ machmode.h longlong.h gbl-ctors.h config.status
+ -rm -f tmplibgcc2-elf.a
+ for name in $(LIB2FUNCS); \
+ do \
+ echo $${name}; \
+ $(GCC_FOR_TARGET) -melf $(LIBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
+ $(srcdir)/libgcc2.c -o $${name}$(objext); \
+ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ $(AR) $(AR_FLAGS) tmplibgcc2-elf.a $${name}$(objext); \
+ rm -f $${name}$(objext); \
+ done
+ for file in .. $(LIB2FUNCS_EXTRA); \
+ do \
+ if [ x$${file} != x.. ]; then \
+ name=`echo $${file} | sed -e 's/[.][cS]$$//' -e 's/[.]asm$$//'`; \
+ oname=` echo $${name} | sed -e 's,.*/,,'`; \
+ echo $${name}; \
+ if [ $${name}.asm = $${file} ]; then \
+ cp $${file} $${name}.s || exit 1; file=$${name}.s; \
+ else true; fi; \
+ $(GCC_FOR_TARGET) -melf $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
+ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ $(AR) $(AR_FLAGS) tmplibgcc2-elf.a $${oname}$(objext); \
+ rm -f $${name}.s $${oname}$(objext); \
+ else true; \
+ fi; \
+ done
+ mv tmplibgcc2-elf.a libgcc2-elf.a
+
+ # Combine the various libraries into a single library, libgcc.a.
+ libgcc-elf.a: libgcc1-elf.a libgcc2-elf.a
+ -rm -rf tmplibgcc-elf.a libgcc-elf.a tmpcopy
+ mkdir tmpcopy
+ -(cd tmpcopy; $(AR) x ../libgcc1-elf.a)
+ -(cd tmpcopy; chmod +w * > /dev/null 2>&1)
+ -(cd tmpcopy; $(AR) x ../libgcc2-elf.a)
+ (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc-elf.a *$(objext))
+ rm -rf tmpcopy
+ -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc-elf.a; else true; fi
+ mv tmplibgcc-elf.a libgcc-elf.a
+
diff -c -r -N gcc-2.7.2/config/i386/x-sco5 mygcc/config/i386/x-sco5
*** gcc-2.7.2/config/i386/x-sco5 Wed Dec 31 22:00:00 1969
--- mygcc/config/i386/x-sco5 Sat Dec 16 15:47:51 1995
***************
*** 0 ****
--- 1,9 ----
+ RANLIB = :
+ RANLIB_TEST = false
+ CC = cc
+ OLDCC = cc
+ CCLIBFLAGS =
+ CLIB = -lPW
+
+ # See all the declarations.
+ FIXPROTO_DEFINES = -D_XOPEN_SOURCE -D_POSIX_C_SOURCE=2
diff -c -r -N gcc-2.7.2/config/i386/xm-sco5.h mygcc/config/i386/xm-sco5.h
*** gcc-2.7.2/config/i386/xm-sco5.h Wed Dec 31 22:00:00 1969
--- mygcc/config/i386/xm-sco5.h Sat Dec 16 12:47:51 1995
***************
*** 0 ****
--- 1,8 ----
+ /* Configuration for GCC for Intel i386 running SCO. */
+
+ #include "i386/xm-sysv3.h"
+
+ /* Big buffers improve performance. */
+
+ #define IO_BUFFER_SIZE (0x8000 - 1024)
+
diff -c -r -N gcc-2.7.2/config/t-libc-ok mygcc/config/t-libc-ok
*** gcc-2.7.2/config/t-libc-ok Thu Sep 9 18:02:50 1993
--- mygcc/config/t-libc-ok Sat Dec 16 12:47:51 1995
***************
*** 1,2 ****
--- 1,3 ----
LIBGCC1=libgcc1.null
CROSS_LIBGCC1=libgcc1.null
+ CRTSTUFF_T_FLAGS_S=-fPIC
diff -c -r -N gcc-2.7.2/config.sub mygcc/config.sub
*** gcc-2.7.2/config.sub Thu Jun 15 19:01:49 1995
--- mygcc/config.sub Sat Dec 16 12:47:51 1995
***************
*** 88,93 ****
--- 88,97 ----
-hiux*)
os=-hiuxwe2
;;
+ -sco5)
+ os=sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
+ ;;
-sco4)
os=-sco3.2v4
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
diff -c -r -N gcc-2.7.2/configure mygcc/configure
*** gcc-2.7.2/configure Sun Nov 26 17:39:15 1995
--- mygcc/configure Sat Dec 16 12:47:51 1995
***************
*** 1047,1052 ****
--- 1047,1062 ----
xmake_file=i386/x-osfrose
extra_objs=halfpic.o
;;
+ i[345]86-*-sco3.2v5*) # 80386 running SCO Open Server 5
+ cpu_type=i386
+ xm_file=i386/xm-sco5.h
+ xmake_file=i386/x-sco5
+ fixincludes=fixinc.sco
+ broken_install=yes
+ tm_file=i386/sco5.h
+ tmake_file=i386/t-sco5
+ extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
+ ;;
i[345]86-*-sco3.2v4*) # 80386 running SCO 3.2v4 system
cpu_type=i386
xm_file=i386/xm-sco.h
diff -c -r -N gcc-2.7.2/gcc.texi mygcc/gcc.texi
*** gcc-2.7.2/gcc.texi Sun Nov 26 14:25:18 1995
--- mygcc/gcc.texi Sat Dec 16 12:47:51 1995
***************
*** 4630,4635 ****
--- 4630,4642 ----
Special flags used when compiling @file{crtstuff.c}.
@xref{Initialization}.
+ @findex CRTSTUFF_T_CFLAGS_S
+ @item CRTSTUFF_T_CFLAGS_S
+ Special flags used when compiling @file{crtstuff.c} for shared
+ linking. Used if you use @file{crtbeginS.o} and @file{crtendS.o}
+ in @code{EXTRA-PARTS}.
+ @xref{Initialization}.
+
@findex MULTILIB_OPTIONS
@item MULTILIB_OPTIONS
For some targets, invoking GNU CC in different ways produces objects
diff -c -r -N gcc-2.7.2/ginclude/stdarg.h mygcc/ginclude/stdarg.h
*** gcc-2.7.2/ginclude/stdarg.h Tue Sep 12 14:50:36 1995
--- mygcc/ginclude/stdarg.h Sat Dec 16 15:09:51 1995
***************
*** 120,126 ****
#undef _BSD_VA_LIST
#endif
! #ifdef __svr4__
/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
so we must avoid testing it and setting it here.
SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
--- 120,126 ----
#undef _BSD_VA_LIST
#endif
! #if defined(__svr4__) || defined(_SCO_DS)
/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
so we must avoid testing it and setting it here.
SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
***************
*** 134,140 ****
#endif /* __i860__ */
typedef __gnuc_va_list va_list;
#endif /* _VA_LIST_ */
! #else /* not __svr4__ */
/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
But on BSD NET2 we must not test or define or undef it.
--- 134,140 ----
#endif /* __i860__ */
typedef __gnuc_va_list va_list;
#endif /* _VA_LIST_ */
! #else /* not __svr4__ || _SCO_DS */
/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
But on BSD NET2 we must not test or define or undef it.
diff -c -r -N gcc-2.7.2/ginclude/varargs.h mygcc/ginclude/varargs.h
*** gcc-2.7.2/ginclude/varargs.h Sun Aug 13 20:18:55 1995
--- mygcc/ginclude/varargs.h Sat Dec 16 15:10:23 1995
***************
*** 131,137 ****
#undef _VA_LIST
#endif
! #ifdef __svr4__
/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
so we must avoid testing it and setting it here.
SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
--- 131,137 ----
#undef _VA_LIST
#endif
! #if defined(__svr4__) || defined(_SCO_DS)
/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
so we must avoid testing it and setting it here.
SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
***************
*** 146,152 ****
typedef __gnuc_va_list va_list;
#endif /* _VA_LIST_ */
! #else /* not __svr4__ */
/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
But on BSD NET2 we must not test or define or undef it.
--- 146,152 ----
typedef __gnuc_va_list va_list;
#endif /* _VA_LIST_ */
! #else /* not __svr4__ || _SCO_DS */
/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
But on BSD NET2 we must not test or define or undef it.
-------------------> CUT HERE <-------------------------
Technical Details
Message-ID:
<199512312045.MAA25159@netcom12.netcom.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 113d02,95c090bfd2c8b7da,start X-Google-Attributes: gid113d02,public From: hug@netcom.com (Sow your wild *HUGS*) Subject: Patches for SCO Open Server 5.0 Date: 1995/12/31 Message-ID: <199512312045.MAA25159@netcom12.netcom.com> X-Deja-AN: 133616617 distribution: gnu sender: daemon@cis.ohio-state.edu organization: GNUs Not Usenet newsgroups: gnu.gcc.bug