40f32220fc
From-SVN: r3856
143 lines
3.6 KiB
C
143 lines
3.6 KiB
C
/* Definitions for Intel 386 running Linux
|
||
* Copyright (C) 1992 Free Software Foundation, Inc.
|
||
*
|
||
* Written by H.J. Lu (hlu@eecs.wsu.edu)
|
||
*
|
||
* Linux is a POSIX.1 compatible UNIX clone for i386, which uses GNU
|
||
* stuffs as the native stuffs.
|
||
*/
|
||
|
||
#if 0 /* The FSF has fixed the known bugs. But ....... */
|
||
|
||
/* Linux has a hacked gas 1.38.1, which can handle repz, repnz
|
||
* and fildll.
|
||
*/
|
||
|
||
#define GOOD_GAS
|
||
|
||
#endif
|
||
|
||
/* This is tested by i386/gas.h. */
|
||
#define YES_UNDERSCORES
|
||
|
||
#include "i386/gstabs.h"
|
||
|
||
/* Specify predefined symbols in preprocessor. */
|
||
|
||
#undef CPP_PREDEFINES
|
||
#define CPP_PREDEFINES "-Dunix -Di386 -Dlinux"
|
||
|
||
#undef CPP_SPEC
|
||
#if TARGET_CPU_DEFAULT == 2
|
||
#define CPP_SPEC "%{!m386:-D__i486__} %{posix:-D_POSIX_SOURCE}"
|
||
#else
|
||
#define CPP_SPEC "%{m486:-D__i486__} %{posix:-D_POSIX_SOURCE}"
|
||
#endif
|
||
|
||
#undef SIZE_TYPE
|
||
#define SIZE_TYPE "unsigned int"
|
||
|
||
#undef PTRDIFF_TYPE
|
||
#define PTRDIFF_TYPE "int"
|
||
|
||
#undef WCHAR_TYPE
|
||
#define WCHAR_TYPE "long int"
|
||
|
||
#undef WCHAR_TYPE_SIZE
|
||
#define WCHAR_TYPE_SIZE BITS_PER_WORD
|
||
|
||
#undef HAVE_ATEXIT
|
||
#define HAVE_ATEXIT
|
||
|
||
/* Linux uses ctype from glibc.a. I am not sure how complete it is.
|
||
* For now, we play safe. It may change later.
|
||
*/
|
||
#if 0
|
||
#undef MULTIBYTE_CHARS
|
||
#define MULTIBYTE_CHARS 1
|
||
#endif
|
||
|
||
#undef LIB_SPEC
|
||
#define LIB_SPEC "%{g*:-lg} %{!g*:%{!p:%{!pg:-lc}}%{p:-lgmon -lc_p}%{pg:-lgmon -lc_p}}"
|
||
|
||
|
||
#undef STARTFILE_SPEC
|
||
#undef GPLUSPLUS_INCLUDE_DIR
|
||
|
||
#ifdef CROSS_COMPILE
|
||
|
||
/*
|
||
* For cross-compile, we just need to search `$(tooldir)/lib'
|
||
*/
|
||
|
||
#define STARTFILE_SPEC \
|
||
"%{g*:crt0.o%s -static} %{!g*:%{pg:gcrt0.o%s -static} %{!pg:%{p:gcrt0.o%s -static} %{!p:crt0.o%s %{!static:%{nojump:-nojump}} %{static:-static}}}}"
|
||
|
||
/*
|
||
*The cross-compile uses this.
|
||
*/
|
||
#define GPLUSPLUS_INCLUDE_DIR TOOLDIR"/g++-include"
|
||
|
||
#else
|
||
|
||
#define STARTFILE_SPEC \
|
||
"%{g*:crt0.o%s -static} %{!g*:%{pg:gcrt0.o%s -static} %{!pg:%{p:gcrt0.o%s -static} %{!p:crt0.o%s %{!static:%{nojump:-nojump}} %{static:-static}}}}"
|
||
|
||
/*
|
||
*The native Linux system uses this.
|
||
*/
|
||
#define GPLUSPLUS_INCLUDE_DIR "/usr/g++-include"
|
||
|
||
#endif
|
||
|
||
/* The following macros are copied from i386bsd.h. */
|
||
|
||
/* Redefine this to use %eax instead of %edx. */
|
||
#undef FUNCTION_PROFILER
|
||
#define FUNCTION_PROFILER(FILE, LABELNO) \
|
||
{ \
|
||
if (flag_pic) \
|
||
{ \
|
||
fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%eax\n", \
|
||
LPREFIX, (LABELNO)); \
|
||
fprintf (FILE, "\tcall *_mcount@GOT(%%ebx)\n"); \
|
||
} \
|
||
else \
|
||
{ \
|
||
fprintf (FILE, "\tmovl $%sP%d,%%eax\n", LPREFIX, (LABELNO)); \
|
||
fprintf (FILE, "\tcall _mcount\n"); \
|
||
} \
|
||
}
|
||
|
||
/* There are conflicting reports about whether this system uses
|
||
a different assembler syntax. wilson@cygnus.com says # is right. */
|
||
#undef COMMENT_BEGIN
|
||
#define COMMENT_BEGIN "#"
|
||
|
||
#undef ASM_APP_ON
|
||
#define ASM_APP_ON "#APP\n"
|
||
|
||
#undef ASM_APP_OFF
|
||
#define ASM_APP_OFF "#NO_APP\n"
|
||
|
||
/* The following macros are copied from i386v4.h. */
|
||
|
||
/* These have to be defined to get PIC code correct */
|
||
|
||
/* This is how to output an element of a case-vector that is relative.
|
||
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) \
|
||
fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
|
||
|
||
/* Indicate that jump tables go in the text section. This is
|
||
necessary when compiling PIC code. */
|
||
|
||
#define JUMP_TABLES_IN_TEXT_SECTION
|
||
|
||
/* Don't default to pcc-struct-return, because gcc is the only compiler, and
|
||
we want to retain compatibility with older gcc versions. */
|
||
#define DEFAULT_PCC_STRUCT_RETURN 0
|