summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/config
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>1999-09-19 10:28:57 +0000
committerobrien <obrien@FreeBSD.org>1999-09-19 10:28:57 +0000
commiteed2bb06599ade428caee30d0e0dab80b194a42b (patch)
treea395418b79c52f15433795a1d19ff5e1adb17166 /contrib/gcc/config
parent332c7b8346b8ec379f357561438de2ae5a1fd8c9 (diff)
downloadFreeBSD-src-eed2bb06599ade428caee30d0e0dab80b194a42b.zip
FreeBSD-src-eed2bb06599ade428caee30d0e0dab80b194a42b.tar.gz
This should get us the same functionality we had with GCC 2.7.2.1.
* Support for our dual ELF/a.out building ability * Our custom ASM_* definitions * Our custom debugger and profiling related definitions * Our custom STARTFILE/ENDFILE specs * The stock EGCS 1.1.2 freebsd-elf.h file depended on egcs-1.1.2/gcc/config/linux.h, which included "svr4.h". We will include "svr4.h" via our "tm.h" definition. So add the few bits from "linux.h" we actually needed. * Using our current crtbegin.o/crtend.o we cannot support the DWARF2 unwinding mechanisms. In the future we will switch to the non-sjlj-exceptions type exception machanism. However the `make world' bootstrap problems with the EGCS crtstuff.c must be overcome first. * Our a.out gas doesn't "know" to use NOP's for aligns while in the text section. Thus the a.out alignment generation needed tweaking from what we did with GCC 2.7.2. [from BDE] * The definition of SUPPORTS_ONE_ONLY prevents the compiler from trying to use "linkonce" sections for a.out. The definition of NO_DBX_FUNCTION_END we had causes it to avoid .stabs symbols that the assembler cannot handle for a.out. [from JDP] * The previous "EXCEPTION_SECTION_FUNCTION" is the wrong name for EGCS. It also needed tweaking for EGCS. [from JDP] Also bump __FreeBSD_cc_version to 400002 in case we need to know we are using EGCS at some point.
Diffstat (limited to 'contrib/gcc/config')
-rw-r--r--contrib/gcc/config/i386/freebsd.h246
-rw-r--r--contrib/gcc/config/i386/freebsd.h.fixed246
2 files changed, 278 insertions, 214 deletions
diff --git a/contrib/gcc/config/i386/freebsd.h b/contrib/gcc/config/i386/freebsd.h
index cfef1bc..b7b2752 100644
--- a/contrib/gcc/config/i386/freebsd.h
+++ b/contrib/gcc/config/i386/freebsd.h
@@ -1,8 +1,8 @@
/* Definitions for Intel 386 running FreeBSD with either a.out or ELF format
- Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1996 Free Software Foundation, Inc.
Contributed by Eric Youngdale.
Modified for stabs-in-ELF by H.J. Lu.
- Adapted from Linux version by John Polstra.
+ Adapted from GNU/Linux version by John Polstra.
Added support for generating "old a.out gas" on the fly by Peter Wemm.
This file is part of GNU CC.
@@ -22,35 +22,36 @@ 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. */
-/* A lie, I guess, but the general idea behind FreeBSD/ELF is that we are
- supposed to be outputting something that will assemble under SVr4.
- This gets us pretty close. */
-#include <i386/i386.h> /* Base i386 target machine definitions */
-#include <i386/att.h> /* Use the i386 AT&T assembler syntax */
-#include <linux.h> /* some common stuff */
+/* $FreeBSD$ */
-/* Don't assume anything about the header files. */
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)");
+
+/* The svr4 ABI for the i386 says that records and unions are returned
+ in memory. */
+/* On FreeBSD, we do not. */
+#undef DEFAULT_PCC_STRUCT_RETURN
+#define DEFAULT_PCC_STRUCT_RETURN 0
+
+/* This gets defined in tm.h->linux.h->svr4.h, and keeps us from using
+ libraries compiled with the native cc, so undef it. */
+#undef NO_DOLLAR_IN_LABEL
+
+/* Don't assume anything about the header files. */
+#undef NO_IMPLICIT_EXTERN_C
#define NO_IMPLICIT_EXTERN_C
-/* This defines which switch letters take arguments. On svr4, most of
+/* This defines which switch letters take arguments. On FreeBSD, most of
the normal cases (defined in gcc.c) apply, and we also have -h* and
- -z* options (for the linker). We have a slightly different mix. We
- have -R (alias --rpath), no -z, --soname (-h), --assert etc. */
+ -z* options (for the linker) (comming from svr4).
+ We also have -R (alias --rpath), no -z, --soname (-h), --assert etc. */
#undef SWITCH_TAKES_ARG
-#define SWITCH_TAKES_ARG(CHAR) \
- ( (CHAR) == 'D' \
- || (CHAR) == 'U' \
- || (CHAR) == 'o' \
- || (CHAR) == 'e' \
- || (CHAR) == 'T' \
- || (CHAR) == 'u' \
- || (CHAR) == 'I' \
- || (CHAR) == 'm' \
- || (CHAR) == 'L' \
- || (CHAR) == 'A' \
- || (CHAR) == 'h' \
- || (CHAR) == 'z' /* ignored by ld */ \
+#define SWITCH_TAKES_ARG(CHAR) \
+ (DEFAULT_SWITCH_TAKES_ARG (CHAR) \
+ || (CHAR) == 'h' \
+ || (CHAR) == 'z' /* ignored by ld */ \
|| (CHAR) == 'R')
#undef WORD_SWITCH_TAKES_ARG
@@ -60,9 +61,6 @@ Boston, MA 02111-1307, USA. */
|| !strcmp (STR, "soname") || !strcmp (STR, "defsym") \
|| !strcmp (STR, "assert") || !strcmp (STR, "dynamic-linker"))
-#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD)");
-
#define MASK_PROFILER_EPILOGUE 010000000000
#define MASK_AOUT 004000000000 /* a.out not elf */
#define MASK_UNDERSCORES 002000000000 /* use leading _ */
@@ -81,12 +79,6 @@ Boston, MA 02111-1307, USA. */
{ "underscores", MASK_UNDERSCORES}, \
{ "no-underscores", -MASK_UNDERSCORES},
-/* The svr4 ABI for the i386 says that records and unions are returned
- in memory. */
-/* On FreeBSD, we do not. */
-#undef DEFAULT_PCC_STRUCT_RETURN
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
/* Prefix for internally generated assembler labels. If we aren't using
underscores, we are using prefix `.'s to identify labels that should
be ignored, as in `i386/gas.h' --karl@cs.umb.edu */
@@ -106,6 +98,8 @@ Boston, MA 02111-1307, USA. */
#undef ASM_APP_OFF
#define ASM_APP_OFF "#NO_APP\n"
+#define SET_ASM_OP ".set"
+
/* Output at beginning of assembler file. */
/* The .file command should always begin the output. */
@@ -153,29 +147,28 @@ Boston, MA 02111-1307, USA. */
This is only used for PIC code. See comments by the `casesi' insn in
i386.md for an explanation of the expression this outputs. */
#undef ASM_OUTPUT_ADDR_DIFF_ELT
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
#undef ASM_OUTPUT_ALIGN
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- if ((LOG)!=0) fprintf ((FILE), "\t.p2align %d\n", (LOG))
-
-/* Align labels, etc. at 4-byte boundaries.
- For the 486, align to 16-byte boundary for sake of cache. */
-#undef ASM_OUTPUT_ALIGN_CODE
-#define ASM_OUTPUT_ALIGN_CODE(FILE) \
- fprintf ((FILE), "\t.p2align %d,0x90\n", i386_align_jumps)
-
-/* Align start of loop at 4-byte boundary. */
-#undef ASM_OUTPUT_LOOP_ALIGN
-#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
- fprintf ((FILE), "\t.p2align %d,0x90\n", i386_align_loops)
-
+#define ASM_OUTPUT_ALIGN(FILE,LOG) \
+ if ((LOG)!=0) { \
+ if (in_text_section()) \
+ fprintf ((FILE), "\t.p2align %d,0x90\n", (LOG)); \
+ else \
+ fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
+ }
/* conditionalize the use of ".section rodata" on elf mode - otherwise .text */
#undef USE_CONST_SECTION
#define USE_CONST_SECTION TARGET_ELF
+/* The a.out tools do not support "linkonce" sections. */
+#define SUPPORTS_ONE_ONLY TARGET_ELF
+
+/* The a.out tools do not support "Lscope" .stabs symbols. */
+#define NO_DBX_FUNCTION_END TARGET_AOUT
+
/* A C statement (sans semicolon) to output an element in the table of
global constructors. */
#undef ASM_OUTPUT_CONSTRUCTOR
@@ -285,6 +278,16 @@ do { \
} \
} while (0)
+#undef DEFAULT_VTABLE_THUNKS
+#define DEFAULT_VTABLE_THUNKS 1
+
+/* This is BSD, so we want the DBX format. */
+#define DBX_DEBUGGING_INFO
+
+/* Use stabs instead of DWARF debug format. */
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
/* in elf, the function stabs come first, before the relative offsets */
#undef DBX_FUNCTION_FIRST
#define DBX_CHECK_FUNCTION_FIRST TARGET_ELF
@@ -335,13 +338,13 @@ do { \
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
/* override the exception table positioning */
-#define EXCEPTION_SECTION_FUNCTION \
+#define EXCEPTION_SECTION() \
do { \
if (TARGET_ELF) { \
- named_section (NULL_TREE, ".gcc_except_table"); \
+ named_section (NULL_TREE, ".gcc_except_table", 0); \
} else { \
if (flag_pic) \
data_section (); \
@@ -358,12 +361,61 @@ do { \
VOIDmode, 0); \
} while (0)
-/* Use dollar signs in special g++ assembler names. */
-#undef NO_DOLLAR_IN_LABEL
-
-/* Map i386 registers to the numbers dwarf expects. Of course this is different
- from what stabs expects. */
-
+/* Copy this from the svr4 specifications... */
+/* Define the register numbers to be used in Dwarf debugging information.
+ The SVR4 reference port C compiler uses the following register numbers
+ in its Dwarf output code:
+ 0 for %eax (gnu regno = 0)
+ 1 for %ecx (gnu regno = 2)
+ 2 for %edx (gnu regno = 1)
+ 3 for %ebx (gnu regno = 3)
+ 4 for %esp (gnu regno = 7)
+ 5 for %ebp (gnu regno = 6)
+ 6 for %esi (gnu regno = 4)
+ 7 for %edi (gnu regno = 5)
+ The following three DWARF register numbers are never generated by
+ the SVR4 C compiler or by the GNU compilers, but SDB on x86/svr4
+ believes these numbers have these meanings.
+ 8 for %eip (no gnu equivalent)
+ 9 for %eflags (no gnu equivalent)
+ 10 for %trapno (no gnu equivalent)
+ It is not at all clear how we should number the FP stack registers
+ for the x86 architecture. If the version of SDB on x86/svr4 were
+ a bit less brain dead with respect to floating-point then we would
+ have a precedent to follow with respect to DWARF register numbers
+ for x86 FP registers, but the SDB on x86/svr4 is so completely
+ broken with respect to FP registers that it is hardly worth thinking
+ of it as something to strive for compatibility with.
+ The version of x86/svr4 SDB I have at the moment does (partially)
+ seem to believe that DWARF register number 11 is associated with
+ the x86 register %st(0), but that's about all. Higher DWARF
+ register numbers don't seem to be associated with anything in
+ particular, and even for DWARF regno 11, SDB only seems to under-
+ stand that it should say that a variable lives in %st(0) (when
+ asked via an `=' command) if we said it was in DWARF regno 11,
+ but SDB still prints garbage when asked for the value of the
+ variable in question (via a `/' command).
+ (Also note that the labels SDB prints for various FP stack regs
+ when doing an `x' command are all wrong.)
+ Note that these problems generally don't affect the native SVR4
+ C compiler because it doesn't allow the use of -O with -g and
+ because when it is *not* optimizing, it allocates a memory
+ location for each floating-point variable, and the memory
+ location is what gets described in the DWARF AT_location
+ attribute for the variable in question.
+ Regardless of the severe mental illness of the x86/svr4 SDB, we
+ do something sensible here and we use the following DWARF
+ register numbers. Note that these are all stack-top-relative
+ numbers.
+ 11 for %st(0) (gnu regno = 8)
+ 12 for %st(1) (gnu regno = 9)
+ 13 for %st(2) (gnu regno = 10)
+ 14 for %st(3) (gnu regno = 11)
+ 15 for %st(4) (gnu regno = 12)
+ 16 for %st(5) (gnu regno = 13)
+ 17 for %st(6) (gnu regno = 14)
+ 18 for %st(7) (gnu regno = 15)
+*/
#undef DWARF_DBX_REGISTER_NUMBER
#define DWARF_DBX_REGISTER_NUMBER(n) \
((n) == 0 ? 0 \
@@ -405,10 +457,14 @@ do { \
#define FUNCTION_PROFILER(FILE, LABELNO) \
{ \
if (flag_pic) \
- fprintf (FILE, "\tcall *%s@GOT(%%ebx)\n", \
+ { \
+ fprintf (FILE, "\tcall *%s@GOT(%%ebx)\n", \
TARGET_AOUT ? "mcount" : ".mcount"); \
+ } \
else \
- fprintf (FILE, "\tcall %s\n", TARGET_AOUT ? "mcount" : ".mcount"); \
+ { \
+ fprintf (FILE, "\tcall %s\n", TARGET_AOUT ? "mcount" : ".mcount"); \
+ } \
}
#define FUNCTION_PROFILER_EPILOGUE(FILE) \
@@ -437,47 +493,9 @@ do { \
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE BITS_PER_WORD
-
-/* FREEBSD_NATIVE is defined when gcc is integrated into the FreeBSD
- source tree so it can be configured appropriately without using
- the GNU configure/build mechanism. */
-
-#ifdef FREEBSD_NATIVE
-
-/* Look for the include files in the system-defined places. */
-
-#define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
-
-#define GCC_INCLUDE_DIR "/usr/include"
-
-/* FreeBSD has GCC_INCLUDE_DIR first. */
-#define INCLUDE_DEFAULTS \
- { \
- { GCC_INCLUDE_DIR, 0, 0 }, \
- { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \
- { 0, 0, 0 } \
- }
-
-/* Under FreeBSD, the normal location of the compiler back ends is the
- /usr/libexec directory. */
-
-#define STANDARD_EXEC_PREFIX "/usr/libexec/"
-
-/* Under FreeBSD, the normal location of the various *crt*.o files is the
- /usr/lib directory. */
-
-#define STANDARD_STARTFILE_PREFIX "/usr/lib/"
-
-/* On FreeBSD, gcc is called 'cc' */
-#define GCC_NAME "cc"
-
-/* FreeBSD is 4.4BSD derived */
-#define bsd4_4
-
-#endif /* FREEBSD_NATIVE */
-
+
#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__=4 -D__FreeBSD_cc_version=400001 -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
+#define CPP_PREDEFINES "-Di386 -Dunix -D__FreeBSD__=4 -D__FreeBSD_cc_version=400002 -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
#undef CPP_SPEC
#if TARGET_CPU_DEFAULT == 2
@@ -518,6 +536,9 @@ do { \
have the time to search for those flags. I am sure how to add
support for -soname shared_object_name. H.J.
+ I took out %{v:%{!V:-V}}. It is too much :-(. They can use
+ -Wl,-V.
+
When the -shared link option is used a final link is not being
done. */
@@ -540,8 +561,19 @@ do { \
%{!dynamic-linker: -dynamic-linker /usr/libexec/ld-elf.so.1}} \
%{static:-Bstatic}}}"
-/* Get perform_* macros to build libgcc.a. */
-#include "i386/perform.h"
+/* A C statement to output to the stdio stream FILE an assembler
+ command to advance the location counter to a multiple of 1<<LOG
+ bytes if it is within MAX_SKIP bytes.
+
+ This is used to align code labels according to Intel recommendations. */
+
+#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
+#error "we don't have this for the aout gas"
+#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
+ if ((LOG)!=0) \
+ if ((MAX_SKIP)==0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
+ else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP))
+#endif
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
@@ -560,9 +592,9 @@ do { \
#define TARGET_DEFAULT (MASK_NO_FANCY_MATH_387 | 0301)
#define HAVE_ATEXIT
-#define HAVE_PUTENV
-/* to assist building libgcc2.c */
-#ifndef __ELF__
-#undef OBJECT_FORMAT_ELF
-#endif
+/* FreeBSD ELF using our home-grown crtbegin.o/crtend.o does not support the
+ DWARF2 unwinding mechanisms. Once `make world' bootstraping problems with
+ the EGCS crtstuff.c is overcome, we will switch to the non-sjlj-exceptions
+ type exception machanism. */
+#define DWARF2_UNWIND_INFO 0
diff --git a/contrib/gcc/config/i386/freebsd.h.fixed b/contrib/gcc/config/i386/freebsd.h.fixed
index cfef1bc..b7b2752 100644
--- a/contrib/gcc/config/i386/freebsd.h.fixed
+++ b/contrib/gcc/config/i386/freebsd.h.fixed
@@ -1,8 +1,8 @@
/* Definitions for Intel 386 running FreeBSD with either a.out or ELF format
- Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1996 Free Software Foundation, Inc.
Contributed by Eric Youngdale.
Modified for stabs-in-ELF by H.J. Lu.
- Adapted from Linux version by John Polstra.
+ Adapted from GNU/Linux version by John Polstra.
Added support for generating "old a.out gas" on the fly by Peter Wemm.
This file is part of GNU CC.
@@ -22,35 +22,36 @@ 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. */
-/* A lie, I guess, but the general idea behind FreeBSD/ELF is that we are
- supposed to be outputting something that will assemble under SVr4.
- This gets us pretty close. */
-#include <i386/i386.h> /* Base i386 target machine definitions */
-#include <i386/att.h> /* Use the i386 AT&T assembler syntax */
-#include <linux.h> /* some common stuff */
+/* $FreeBSD$ */
-/* Don't assume anything about the header files. */
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)");
+
+/* The svr4 ABI for the i386 says that records and unions are returned
+ in memory. */
+/* On FreeBSD, we do not. */
+#undef DEFAULT_PCC_STRUCT_RETURN
+#define DEFAULT_PCC_STRUCT_RETURN 0
+
+/* This gets defined in tm.h->linux.h->svr4.h, and keeps us from using
+ libraries compiled with the native cc, so undef it. */
+#undef NO_DOLLAR_IN_LABEL
+
+/* Don't assume anything about the header files. */
+#undef NO_IMPLICIT_EXTERN_C
#define NO_IMPLICIT_EXTERN_C
-/* This defines which switch letters take arguments. On svr4, most of
+/* This defines which switch letters take arguments. On FreeBSD, most of
the normal cases (defined in gcc.c) apply, and we also have -h* and
- -z* options (for the linker). We have a slightly different mix. We
- have -R (alias --rpath), no -z, --soname (-h), --assert etc. */
+ -z* options (for the linker) (comming from svr4).
+ We also have -R (alias --rpath), no -z, --soname (-h), --assert etc. */
#undef SWITCH_TAKES_ARG
-#define SWITCH_TAKES_ARG(CHAR) \
- ( (CHAR) == 'D' \
- || (CHAR) == 'U' \
- || (CHAR) == 'o' \
- || (CHAR) == 'e' \
- || (CHAR) == 'T' \
- || (CHAR) == 'u' \
- || (CHAR) == 'I' \
- || (CHAR) == 'm' \
- || (CHAR) == 'L' \
- || (CHAR) == 'A' \
- || (CHAR) == 'h' \
- || (CHAR) == 'z' /* ignored by ld */ \
+#define SWITCH_TAKES_ARG(CHAR) \
+ (DEFAULT_SWITCH_TAKES_ARG (CHAR) \
+ || (CHAR) == 'h' \
+ || (CHAR) == 'z' /* ignored by ld */ \
|| (CHAR) == 'R')
#undef WORD_SWITCH_TAKES_ARG
@@ -60,9 +61,6 @@ Boston, MA 02111-1307, USA. */
|| !strcmp (STR, "soname") || !strcmp (STR, "defsym") \
|| !strcmp (STR, "assert") || !strcmp (STR, "dynamic-linker"))
-#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD)");
-
#define MASK_PROFILER_EPILOGUE 010000000000
#define MASK_AOUT 004000000000 /* a.out not elf */
#define MASK_UNDERSCORES 002000000000 /* use leading _ */
@@ -81,12 +79,6 @@ Boston, MA 02111-1307, USA. */
{ "underscores", MASK_UNDERSCORES}, \
{ "no-underscores", -MASK_UNDERSCORES},
-/* The svr4 ABI for the i386 says that records and unions are returned
- in memory. */
-/* On FreeBSD, we do not. */
-#undef DEFAULT_PCC_STRUCT_RETURN
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
/* Prefix for internally generated assembler labels. If we aren't using
underscores, we are using prefix `.'s to identify labels that should
be ignored, as in `i386/gas.h' --karl@cs.umb.edu */
@@ -106,6 +98,8 @@ Boston, MA 02111-1307, USA. */
#undef ASM_APP_OFF
#define ASM_APP_OFF "#NO_APP\n"
+#define SET_ASM_OP ".set"
+
/* Output at beginning of assembler file. */
/* The .file command should always begin the output. */
@@ -153,29 +147,28 @@ Boston, MA 02111-1307, USA. */
This is only used for PIC code. See comments by the `casesi' insn in
i386.md for an explanation of the expression this outputs. */
#undef ASM_OUTPUT_ADDR_DIFF_ELT
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
#undef ASM_OUTPUT_ALIGN
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- if ((LOG)!=0) fprintf ((FILE), "\t.p2align %d\n", (LOG))
-
-/* Align labels, etc. at 4-byte boundaries.
- For the 486, align to 16-byte boundary for sake of cache. */
-#undef ASM_OUTPUT_ALIGN_CODE
-#define ASM_OUTPUT_ALIGN_CODE(FILE) \
- fprintf ((FILE), "\t.p2align %d,0x90\n", i386_align_jumps)
-
-/* Align start of loop at 4-byte boundary. */
-#undef ASM_OUTPUT_LOOP_ALIGN
-#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
- fprintf ((FILE), "\t.p2align %d,0x90\n", i386_align_loops)
-
+#define ASM_OUTPUT_ALIGN(FILE,LOG) \
+ if ((LOG)!=0) { \
+ if (in_text_section()) \
+ fprintf ((FILE), "\t.p2align %d,0x90\n", (LOG)); \
+ else \
+ fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
+ }
/* conditionalize the use of ".section rodata" on elf mode - otherwise .text */
#undef USE_CONST_SECTION
#define USE_CONST_SECTION TARGET_ELF
+/* The a.out tools do not support "linkonce" sections. */
+#define SUPPORTS_ONE_ONLY TARGET_ELF
+
+/* The a.out tools do not support "Lscope" .stabs symbols. */
+#define NO_DBX_FUNCTION_END TARGET_AOUT
+
/* A C statement (sans semicolon) to output an element in the table of
global constructors. */
#undef ASM_OUTPUT_CONSTRUCTOR
@@ -285,6 +278,16 @@ do { \
} \
} while (0)
+#undef DEFAULT_VTABLE_THUNKS
+#define DEFAULT_VTABLE_THUNKS 1
+
+/* This is BSD, so we want the DBX format. */
+#define DBX_DEBUGGING_INFO
+
+/* Use stabs instead of DWARF debug format. */
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
/* in elf, the function stabs come first, before the relative offsets */
#undef DBX_FUNCTION_FIRST
#define DBX_CHECK_FUNCTION_FIRST TARGET_ELF
@@ -335,13 +338,13 @@ do { \
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
/* override the exception table positioning */
-#define EXCEPTION_SECTION_FUNCTION \
+#define EXCEPTION_SECTION() \
do { \
if (TARGET_ELF) { \
- named_section (NULL_TREE, ".gcc_except_table"); \
+ named_section (NULL_TREE, ".gcc_except_table", 0); \
} else { \
if (flag_pic) \
data_section (); \
@@ -358,12 +361,61 @@ do { \
VOIDmode, 0); \
} while (0)
-/* Use dollar signs in special g++ assembler names. */
-#undef NO_DOLLAR_IN_LABEL
-
-/* Map i386 registers to the numbers dwarf expects. Of course this is different
- from what stabs expects. */
-
+/* Copy this from the svr4 specifications... */
+/* Define the register numbers to be used in Dwarf debugging information.
+ The SVR4 reference port C compiler uses the following register numbers
+ in its Dwarf output code:
+ 0 for %eax (gnu regno = 0)
+ 1 for %ecx (gnu regno = 2)
+ 2 for %edx (gnu regno = 1)
+ 3 for %ebx (gnu regno = 3)
+ 4 for %esp (gnu regno = 7)
+ 5 for %ebp (gnu regno = 6)
+ 6 for %esi (gnu regno = 4)
+ 7 for %edi (gnu regno = 5)
+ The following three DWARF register numbers are never generated by
+ the SVR4 C compiler or by the GNU compilers, but SDB on x86/svr4
+ believes these numbers have these meanings.
+ 8 for %eip (no gnu equivalent)
+ 9 for %eflags (no gnu equivalent)
+ 10 for %trapno (no gnu equivalent)
+ It is not at all clear how we should number the FP stack registers
+ for the x86 architecture. If the version of SDB on x86/svr4 were
+ a bit less brain dead with respect to floating-point then we would
+ have a precedent to follow with respect to DWARF register numbers
+ for x86 FP registers, but the SDB on x86/svr4 is so completely
+ broken with respect to FP registers that it is hardly worth thinking
+ of it as something to strive for compatibility with.
+ The version of x86/svr4 SDB I have at the moment does (partially)
+ seem to believe that DWARF register number 11 is associated with
+ the x86 register %st(0), but that's about all. Higher DWARF
+ register numbers don't seem to be associated with anything in
+ particular, and even for DWARF regno 11, SDB only seems to under-
+ stand that it should say that a variable lives in %st(0) (when
+ asked via an `=' command) if we said it was in DWARF regno 11,
+ but SDB still prints garbage when asked for the value of the
+ variable in question (via a `/' command).
+ (Also note that the labels SDB prints for various FP stack regs
+ when doing an `x' command are all wrong.)
+ Note that these problems generally don't affect the native SVR4
+ C compiler because it doesn't allow the use of -O with -g and
+ because when it is *not* optimizing, it allocates a memory
+ location for each floating-point variable, and the memory
+ location is what gets described in the DWARF AT_location
+ attribute for the variable in question.
+ Regardless of the severe mental illness of the x86/svr4 SDB, we
+ do something sensible here and we use the following DWARF
+ register numbers. Note that these are all stack-top-relative
+ numbers.
+ 11 for %st(0) (gnu regno = 8)
+ 12 for %st(1) (gnu regno = 9)
+ 13 for %st(2) (gnu regno = 10)
+ 14 for %st(3) (gnu regno = 11)
+ 15 for %st(4) (gnu regno = 12)
+ 16 for %st(5) (gnu regno = 13)
+ 17 for %st(6) (gnu regno = 14)
+ 18 for %st(7) (gnu regno = 15)
+*/
#undef DWARF_DBX_REGISTER_NUMBER
#define DWARF_DBX_REGISTER_NUMBER(n) \
((n) == 0 ? 0 \
@@ -405,10 +457,14 @@ do { \
#define FUNCTION_PROFILER(FILE, LABELNO) \
{ \
if (flag_pic) \
- fprintf (FILE, "\tcall *%s@GOT(%%ebx)\n", \
+ { \
+ fprintf (FILE, "\tcall *%s@GOT(%%ebx)\n", \
TARGET_AOUT ? "mcount" : ".mcount"); \
+ } \
else \
- fprintf (FILE, "\tcall %s\n", TARGET_AOUT ? "mcount" : ".mcount"); \
+ { \
+ fprintf (FILE, "\tcall %s\n", TARGET_AOUT ? "mcount" : ".mcount"); \
+ } \
}
#define FUNCTION_PROFILER_EPILOGUE(FILE) \
@@ -437,47 +493,9 @@ do { \
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE BITS_PER_WORD
-
-/* FREEBSD_NATIVE is defined when gcc is integrated into the FreeBSD
- source tree so it can be configured appropriately without using
- the GNU configure/build mechanism. */
-
-#ifdef FREEBSD_NATIVE
-
-/* Look for the include files in the system-defined places. */
-
-#define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
-
-#define GCC_INCLUDE_DIR "/usr/include"
-
-/* FreeBSD has GCC_INCLUDE_DIR first. */
-#define INCLUDE_DEFAULTS \
- { \
- { GCC_INCLUDE_DIR, 0, 0 }, \
- { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \
- { 0, 0, 0 } \
- }
-
-/* Under FreeBSD, the normal location of the compiler back ends is the
- /usr/libexec directory. */
-
-#define STANDARD_EXEC_PREFIX "/usr/libexec/"
-
-/* Under FreeBSD, the normal location of the various *crt*.o files is the
- /usr/lib directory. */
-
-#define STANDARD_STARTFILE_PREFIX "/usr/lib/"
-
-/* On FreeBSD, gcc is called 'cc' */
-#define GCC_NAME "cc"
-
-/* FreeBSD is 4.4BSD derived */
-#define bsd4_4
-
-#endif /* FREEBSD_NATIVE */
-
+
#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__=4 -D__FreeBSD_cc_version=400001 -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
+#define CPP_PREDEFINES "-Di386 -Dunix -D__FreeBSD__=4 -D__FreeBSD_cc_version=400002 -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
#undef CPP_SPEC
#if TARGET_CPU_DEFAULT == 2
@@ -518,6 +536,9 @@ do { \
have the time to search for those flags. I am sure how to add
support for -soname shared_object_name. H.J.
+ I took out %{v:%{!V:-V}}. It is too much :-(. They can use
+ -Wl,-V.
+
When the -shared link option is used a final link is not being
done. */
@@ -540,8 +561,19 @@ do { \
%{!dynamic-linker: -dynamic-linker /usr/libexec/ld-elf.so.1}} \
%{static:-Bstatic}}}"
-/* Get perform_* macros to build libgcc.a. */
-#include "i386/perform.h"
+/* A C statement to output to the stdio stream FILE an assembler
+ command to advance the location counter to a multiple of 1<<LOG
+ bytes if it is within MAX_SKIP bytes.
+
+ This is used to align code labels according to Intel recommendations. */
+
+#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
+#error "we don't have this for the aout gas"
+#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
+ if ((LOG)!=0) \
+ if ((MAX_SKIP)==0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
+ else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP))
+#endif
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
@@ -560,9 +592,9 @@ do { \
#define TARGET_DEFAULT (MASK_NO_FANCY_MATH_387 | 0301)
#define HAVE_ATEXIT
-#define HAVE_PUTENV
-/* to assist building libgcc2.c */
-#ifndef __ELF__
-#undef OBJECT_FORMAT_ELF
-#endif
+/* FreeBSD ELF using our home-grown crtbegin.o/crtend.o does not support the
+ DWARF2 unwinding mechanisms. Once `make world' bootstraping problems with
+ the EGCS crtstuff.c is overcome, we will switch to the non-sjlj-exceptions
+ type exception machanism. */
+#define DWARF2_UNWIND_INFO 0
OpenPOWER on IntegriCloud