c8a0e2f4c6
This commit finalizes support for cross compilation. The tools directory are all links to the actual tools and are built on the host system to build Minix. build.sh is the work horse that takes care of all environment settings. It's slightly adjusted for Minix. The /usr/src/Makefile has additional targets needed for cross compilation.
148 lines
5.2 KiB
C
148 lines
5.2 KiB
C
/* Definitions for Intel 386 running MINIX with ELF format
|
|
Copyright (C) 1996, 2000, 2002, 2004 Free Software Foundation, Inc.
|
|
Contributed by Eric Youngdale.
|
|
Modified for stabs-in-ELF by H.J. Lu.
|
|
Adapted from GNU/Linux version by John Polstra.
|
|
Continued development by David O'Brien <obrien@freebsd.org>
|
|
|
|
This file is part of GCC.
|
|
|
|
GCC 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.
|
|
|
|
GCC 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 GCC; see the file COPYING. If not, write to
|
|
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA. */
|
|
|
|
#undef MINIX_TARGET_CPU_CPP_BUILTINS
|
|
#define MINIX_TARGET_CPU_CPP_BUILTINS() \
|
|
do \
|
|
{ \
|
|
builtin_define_with_int_value ("_EM_WSIZE", 4); \
|
|
builtin_define_with_int_value ("_EM_PSIZE", 4); \
|
|
builtin_define_with_int_value ("_EM_SSIZE", 2); \
|
|
builtin_define_with_int_value ("_EM_LSIZE", 4); \
|
|
builtin_define_with_int_value ("_EM_FSIZE", 4); \
|
|
builtin_define_with_int_value ("_EM_DSIZE", 8); \
|
|
} \
|
|
while (0)
|
|
|
|
#define TARGET_VERSION fprintf (stderr, " (i386 MINIX/ELF)");
|
|
|
|
/* Override the default comment-starter of "/". */
|
|
#undef ASM_COMMENT_START
|
|
#define ASM_COMMENT_START "#"
|
|
|
|
#undef ASM_APP_ON
|
|
#define ASM_APP_ON "#APP\n"
|
|
|
|
#undef ASM_APP_OFF
|
|
#define ASM_APP_OFF "#NO_APP\n"
|
|
|
|
#undef DBX_REGISTER_NUMBER
|
|
#define DBX_REGISTER_NUMBER(n) \
|
|
(TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
|
|
|
|
#undef NO_PROFILE_COUNTERS
|
|
#define NO_PROFILE_COUNTERS 1
|
|
|
|
/* Tell final.c that we don't need a label passed to mcount. */
|
|
|
|
#undef MCOUNT_NAME
|
|
#define MCOUNT_NAME ".mcount"
|
|
|
|
/* Make gcc agree with <machine/ansi.h>. */
|
|
|
|
#undef SIZE_TYPE
|
|
#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")
|
|
|
|
#undef PTRDIFF_TYPE
|
|
#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
|
|
|
|
#undef WCHAR_TYPE_SIZE
|
|
#define WCHAR_TYPE_SIZE (TARGET_64BIT ? 32 : BITS_PER_WORD)
|
|
|
|
#undef SUBTARGET_EXTRA_SPECS /* i386.h bogusly defines it. */
|
|
#define SUBTARGET_EXTRA_SPECS \
|
|
{ "minix_dynamic_linker", MINIX_DYNAMIC_LINKER }
|
|
|
|
/* Provide a STARTFILE_SPEC appropriate for MINIX. Here we add
|
|
the magical crtbegin.o file (see crtstuff.c) which provides part
|
|
of the support for getting C++ file-scope static object constructed
|
|
before entering `main'. */
|
|
|
|
#undef STARTFILE_SPEC
|
|
#define STARTFILE_SPEC \
|
|
"%{!shared: \
|
|
%{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
|
|
%{!p:%{profile:gcrt1.o%s} \
|
|
%{!profile:crt1.o%s}}}} \
|
|
crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
|
|
|
|
/* Provide a ENDFILE_SPEC appropriate for MINIX. Here we tack on
|
|
the magical crtend.o file (see crtstuff.c) which provides part of
|
|
the support for getting C++ file-scope static object constructed
|
|
before entering `main', followed by a normal "finalizer" file,
|
|
`crtn.o'. */
|
|
|
|
#undef ENDFILE_SPEC
|
|
#define ENDFILE_SPEC \
|
|
"%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
|
|
|
|
/* Provide a LINK_SPEC appropriate for MINIX. Here we provide support
|
|
for the special GCC options -static and -shared, which allow us to
|
|
link things in one of these three modes by applying the appropriate
|
|
combinations of options at link-time. We like to support here for
|
|
as many of the other GNU linker options as possible. But I don't
|
|
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. */
|
|
|
|
#undef LINK_SPEC
|
|
#define LINK_SPEC "\
|
|
%{p:%nconsider using `-pg' instead of `-p' with gprof(1)} \
|
|
%{v:-V} \
|
|
%{assert*} %{R*} %{rpath*} %{defsym*} \
|
|
%{shared:-Bshareable %{h*} %{soname*}} \
|
|
%{!shared: \
|
|
%{!static: \
|
|
%{rdynamic:-export-dynamic} \
|
|
%{!dynamic-linker:-dynamic-linker %(minix_dynamic_linker) }} \
|
|
%{static:-Bstatic}} \
|
|
%{symbolic:-Bsymbolic}"
|
|
|
|
/* 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
|
|
#undef ASM_OUTPUT_MAX_SKIP_ALIGN
|
|
#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
|
|
|
|
/* Don't default to pcc-struct-return, we want to retain compatibility with
|
|
older gcc versions AND pcc-struct-return is nonreentrant.
|
|
(even though the SVR4 ABI for the i386 says that records and unions are
|
|
returned in memory). */
|
|
|
|
#undef DEFAULT_PCC_STRUCT_RETURN
|
|
#define DEFAULT_PCC_STRUCT_RETURN 0
|