configure.in (i?86-*-beos{pe,elf,}*): Recognize.

* configure.in (i?86-*-beos{pe,elf,}*): Recognize.
        * i386/t-beos, i386/x-beos, i386/xm-beos.h: New files.
        * i386/beos-elf.h, i386/beos-pe.h: New files.

        * Makefile.in (CROSS_SYSTEM_HEADER_DIR): New.
        * cross-make (SYSTEM_HEADER_DIR): Define using
        CROSS_SYSTEM_HEADER_DIR.

        * gcc.c (LIBRARY_PATH_ENV): Provide default.
        (process_command): Use it.
        (main): Likewise.  Kill trailing = from env vars.
        (build_search_list): Put it back.
        * collect2.c (main): Use LIBRARY_PATH_ENV.

        * configure.in (GCC_NEED_DECLARATIONS): Add environ.
        * toplev.c: Use NEED_DECLARATION_ENVIRON.

        * tm.texi (Frame Layout): Document SMALL_STACK.
        * c-common.c (c_common_nodes_and_builtins): Check it.

        * system.h: Undef alloca after including glibc's <stdlib.h>,
        if USE_C_ALLOCA is defined.

        * gcc.c (set_input): New fn.
        (main): After all input files are compiled, reset the input file
        info to the first.

        * aclocal.m4 (rindex, index): If already defined, don't attempt
        to redefine.

        * ginclude/varargs.h: (__va_list__): Define ifndef.
        * ginclude/stdarg.h: Likewise.

        * ginclude/stddef.h (__WCHAR_TYPE__) [BEOS]: Use int
        instead of unsigned char.

        * hash.h (true, false, boolean): Undef before enum.

From-SVN: r31366
This commit is contained in:
Jason Merrill 2000-01-12 19:37:06 -05:00
parent 6bb88f3be6
commit 512b62fb1b
19 changed files with 764 additions and 34 deletions

View File

@ -209,6 +209,9 @@ RANLIB_TEST_FOR_TARGET = \
# Dir to search for system headers. Overridden by cross-make.
SYSTEM_HEADER_DIR = /usr/include
# Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
CROSS_SYSTEM_HEADER_DIR = $(tooldir)/sys-include
# Control whether to run fixproto.
STMP_FIXPROTO = stmp-fixproto

4
gcc/aclocal.m4 vendored
View File

@ -35,11 +35,15 @@ AC_CACHE_VAL(gcc_cv_decl_needed_$1,
#include <unistd.h>
#endif
#ifndef HAVE_RINDEX
#ifndef rindex
#define rindex strrchr
#endif
#endif
#ifndef HAVE_INDEX
#ifndef index
#define index strchr
#endif
#endif
$2],
[char *(*pfn) = (char *(*)) $1],
eval "gcc_cv_decl_needed_$1=no", eval "gcc_cv_decl_needed_$1=yes")])

View File

@ -3650,10 +3650,12 @@ c_common_nodes_and_builtins (cplus_mode, no_builtins, no_nonansi_builtins)
Declare _exit just to mark it as volatile. */
if (! no_builtins && ! no_nonansi_builtins)
{
#ifndef SMALL_STACK
temp = builtin_function ("alloca", ptr_ftype_sizetype,
BUILT_IN_ALLOCA, BUILT_IN_NORMAL, NULL_PTR);
/* Suppress error if redefined as a non-function. */
DECL_BUILT_IN_NONANSI (temp) = 1;
#endif
temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS,
BUILT_IN_NORMAL, NULL_PTR);
/* Suppress error if redefined as a non-function. */

View File

@ -42,6 +42,10 @@ Boston, MA 02111-1307, USA. */
lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1)
#endif /* VMS */
#ifndef LIBRARY_PATH_ENV
#define LIBRARY_PATH_ENV "LIBRARY_PATH"
#endif
#define COLLECT
#include "collect2.h"
@ -1353,9 +1357,9 @@ main (argc, argv)
if (ptr)
fprintf (stderr, "COMPILER_PATH = %s\n", ptr);
ptr = getenv ("LIBRARY_PATH");
ptr = getenv (LIBRARY_PATH_ENV);
if (ptr)
fprintf (stderr, "LIBRARY_PATH = %s\n", ptr);
fprintf (stderr, "%-20s= %s\n", LIBRARY_PATH_ENV, ptr);
fprintf (stderr, "\n");
}

436
gcc/config/i386/beos-elf.h Normal file
View File

@ -0,0 +1,436 @@
/* Definitions for Intel x86 running BeOS
Copyright (C) 1998-99, 2000 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 machine definitions */
#include <i386/att.h> /* Use the i386 AT&T assembler syntax */
#include <svr4.h> /* some common stuff */
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (i386 BeOS/ELF)");
/* Change debugging to Dwarf2. */
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
/* 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 1
#undef ASM_COMMENT_START
#define ASM_COMMENT_START " #"
/* 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, BODY, 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 (flag_pic)
/* 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 DBX_REGISTER_NUMBER
#define DBX_REGISTER_NUMBER(n) \
((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))
/* Output assembler code to FILE to increment profiler label # LABELNO
for profiling a function entry. */
#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE, LABELNO) \
{ \
if (flag_pic) \
{ \
fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%edx\n", \
LPREFIX, (LABELNO)); \
fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \
} \
else \
{ \
fprintf (FILE, "\tmovl $%sP%d,%%edx\n", LPREFIX, (LABELNO)); \
fprintf (FILE, "\tcall mcount\n"); \
} \
}
#undef SIZE_TYPE
#define SIZE_TYPE "long unsigned int"
#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE "long int"
#undef WCHAR_TYPE
#define WCHAR_TYPE "short unsigned int"
#undef WCHAR_UNSIGNED
#define WCHAR_UNSIGNED 1
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 16
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-D__ELF__ -D__BEOS__ -D__INTEL__ -D_X86_=1 \
-D__stdcall=__attribute__((__stdcall__)) \
-D__cdecl=__attribute__((__cdecl__)) \
-D__declspec(x)=__attribute__((x)) \
-Asystem(beos)"
#undef CPP_SPEC
#define CPP_SPEC "%(cpp_cpu) %{!no-fPIC:%{!no-fpic:-D__PIC__ -D__pic__}}"
/* BeOS uses lots of multichars, so don't warn about them unless the
user explicitly asks for the warnings with -Wmultichar. Note that
CC1_SPEC is used for both cc1 and cc1plus. */
#undef CC1_SPEC
#define CC1_SPEC "%{!no-fpic:%{!fPIC:-fpic}} %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}"
#undef CC1PLUS_SPEC
#define CC1PLUS_SPEC "%{!Wctor-dtor-privacy:-Wno-ctor-dtor-privacy}"
/* Provide a LINK_SPEC appropriate for BeOS. 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. */
/* If ELF is the default format, we should not use /lib/elf. */
#undef LINK_SPEC
#define LINK_SPEC "%{!o*:-o %b} -m elf_i386_be -shared -Bsymbolic %{nostart:-e 0}"
/* Provide start and end file specs appropriate to glibc. */
/* LIB_SPEC for BeOS */
#undef LIB_SPEC
#define LIB_SPEC "-lnet -lroot"
/* gcc runtime lib is built into libroot.so on BeOS */
/* ??? This is gonna be lovely when the next release of gcc has
some new symbol in, so that links start failing. */
#undef LIBGCC_SPEC
#define LIBGCC_SPEC ""
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "crti.o%s crtbegin.o%s %{!nostart:start_dyn.o%s}"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
/* Get perform_* macros to build libgcc.a. */
#include "i386/perform.h"
/* A C statement (sans semicolon) to output to the stdio stream
FILE the assembler definition of uninitialized global DECL named
NAME whose size is SIZE bytes and alignment is ALIGN bytes.
Try to use asm_output_aligned_bss to implement this macro. */
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
/* 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
#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
/*
* Support for __declspec(dllimport) & __declspec(dllexport).
*/
/* We don't care about dllimport. */
#define TARGET_NOP_FUN_DLLIMPORT 1
/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
is a valid machine specific attribute for DECL.
The attributes in ATTRIBUTES have previously been assigned to DECL. */
#undef VALID_MACHINE_DECL_ATTRIBUTE
#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
i386_pe_valid_decl_attribute_p (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
extern int i386_pe_valid_decl_attribute_p ();
/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
is a valid machine specific attribute for TYPE.
The attributes in ATTRIBUTES have previously been assigned to TYPE. */
#undef VALID_MACHINE_TYPE_ATTRIBUTE
#define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) \
i386_pe_valid_type_attribute_p (TYPE, ATTRIBUTES, IDENTIFIER, ARGS)
extern int i386_pe_valid_type_attribute_p ();
#define MERGE_MACHINE_DECL_ATTRIBUTES(OLD, NEW) \
i386_pe_merge_decl_attributes ((OLD), (NEW))
extern union tree_node *i386_pe_merge_decl_attributes ();
/* Used to implement dllexport overriding dllimport semantics. It's also used
to handle vtables - the first pass won't do anything because
DECL_CONTEXT (DECL) will be 0 so i386_pe_dll{ex,im}port_p will return 0.
It's also used to handle dllimport override semantics. */
#if 0
#define REDO_SECTION_INFO_P(DECL) \
((DECL_MACHINE_ATTRIBUTES (DECL) != NULL_TREE) \
|| (TREE_CODE (DECL) == VAR_DECL && DECL_VIRTUAL_P (DECL)))
#else
#define REDO_SECTION_INFO_P(DECL) 1
#endif
/* Used only here locally. If the decl has been exported, emit the
necessary assembly. */
#define ASM_EXPORT_DECL(FILE, NAME, DECL) \
do { \
if ((DECL) && i386_pe_dllexport_p (DECL)) \
{ \
fprintf ((FILE), ".section .exports\n"); \
fprintf ((FILE), "\t%s\t\"", STRING_ASM_OP); \
assemble_name (FILE, NAME); \
fprintf ((FILE), "\"\n.previous\n"); \
} \
} while (0)
/* Write the extra assembler code needed to declare a function properly.
Some svr4 assemblers need to also have something extra said about the
function's return value. We allow for that here. */
#undef ASM_DECLARE_FUNCTION_NAME
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
do { \
ASM_EXPORT_DECL(FILE, NAME, DECL); \
fprintf (FILE, "\t%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); \
} while (0)
/* Write the extra assembler code needed to declare an object properly. */
#undef ASM_DECLARE_OBJECT_NAME
#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
do { \
ASM_EXPORT_DECL(FILE, NAME, DECL); \
fprintf (FILE, "\t%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, "\t%s\t ", SIZE_ASM_OP); \
assemble_name (FILE, NAME); \
putc (',', FILE); \
fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \
int_size_in_bytes (TREE_TYPE (DECL))); \
fputc ('\n', FILE); \
} \
ASM_OUTPUT_LABEL(FILE, NAME); \
} while (0)
/* Similarly for COMMON symbols. */
#undef ASM_OUTPUT_ALIGNED_COMMON
#undef ASM_OUTPUT_ALIGNED_DECL_COMMON
#define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
ASM_EXPORT_DECL(FILE, NAME, DECL); \
fprintf ((FILE), "\t%s\t", COMMON_ASM_OP); \
assemble_name ((FILE), (NAME)); \
fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \
} while (0)
#undef ASM_OUTPUT_ALIGNED_LOCAL
#undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP); \
assemble_name ((FILE), (NAME)); \
fprintf ((FILE), "\n"); \
ASM_OUTPUT_ALIGNED_DECL_COMMON((FILE), (DECL), (NAME), (SIZE), (ALIGN)); \
} while (0)
/* This macro gets just the user-specified name out of the string in a
SYMBOL_REF. Discard trailing @[NUM] encoded by ENCODE_SECTION_INFO. */
/* Unused except to let winnt.c compile. */
#undef STRIP_NAME_ENCODING
#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) ((VAR) = (SYMBOL_NAME))
/* For native compiler, use standard BeOS include file search paths
rooted in /boot/develop/headers. For a cross compiler, don't
expect the host to use the BeOS directory scheme, and instead look
for the BeOS include files relative to TOOL_INCLUDE_DIR. Yes, we
use ANSI string concatenation here (FIXME) */
#ifndef CROSS_COMPILE
#undef INCLUDE_DEFAULTS
#define INCLUDE_DEFAULTS \
{ \
{ GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },\
{ GCC_INCLUDE_DIR, "GCC", 0, 0 },\
{ TOOL_INCLUDE_DIR, "BINUTILS", 0, 1}, \
{ "/boot/develop/headers/be/add-ons/graphics", 0, 0, 0 },\
{ "/boot/develop/headers/be/devel", 0, 0, 0 },\
{ "/boot/develop/headers/be/translation", 0, 0, 0 },\
{ "/boot/develop/headers/be/mail", 0, 0, 0 },\
{ "/boot/develop/headers/gnu", 0, 0, 0 },\
{ "/boot/develop/headers/be/drivers", 0, 0, 0 },\
{ "/boot/develop/headers/be/opengl", 0, 0, 0 },\
{ "/boot/develop/headers/be/game", 0, 0, 0 },\
{ "/boot/develop/headers/be/support", 0, 0, 0 },\
{ "/boot/develop/headers/be/storage", 0, 0, 0 },\
{ "/boot/develop/headers/be/kernel", 0, 0, 0 },\
{ "/boot/develop/headers/be/net", 0, 0, 0 },\
{ "/boot/develop/headers/be/midi", 0, 0, 0 },\
{ "/boot/develop/headers/be/media", 0, 0, 0 },\
{ "/boot/develop/headers/be/interface", 0, 0, 0 },\
{ "/boot/develop/headers/be/device", 0, 0, 0 },\
{ "/boot/develop/headers/be/app", 0, 0, 0 },\
{ "/boot/develop/headers/cpp", 0, 0, 0 },\
{ "/boot/develop/headers/posix", 0, 0, 0 },\
{ "/boot/develop/headers/be/precompiled", 0, 0, 0 },\
{ "/boot/develop/headers/be", 0, 0, 0 },\
{ "/boot/develop/headers", 0, 0, 0 }, \
{ 0, 0, 0, 0 } \
};
#else /* CROSS_COMPILE */
#undef INCLUDE_DEFAULTS
#define INCLUDE_DEFAULTS \
{ \
{ GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },\
{ GCC_INCLUDE_DIR, "GCC", 0, 0 },\
{ TOOL_INCLUDE_DIR, "BINUTILS", 0, 1}, \
{ CROSS_INCLUDE_DIR "/be/add-ons/graphics", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/devel", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/translation", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/mail", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/gnu", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/drivers", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/opengl", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/game", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/support", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/storage", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/kernel", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/net", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/midi", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/media", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/interface", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/device", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/app", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/cpp", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/posix", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be/precompiled", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR "/be", 0, 0, 0 },\
{ CROSS_INCLUDE_DIR , 0, 0, 0 }, \
{ 0, 0, 0, 0 } \
};
#endif
/* Whee. LIBRARY_PATH is Be's LD_LIBRARY_PATH, which of course will
cause nasty problems if we override it. */
#define LIBRARY_PATH_ENV "BELIBRARIES"
/* BeOS doesn't have a separate math library. */
#define MATH_LIBRARY ""
/* BeOS headers are C++-aware (and often use C++). */
#define NO_IMPLICIT_EXTERN_C
/* Define this macro if in some cases global symbols from one translation
unit may not be bound to undefined symbols in another translation unit
without user intervention. For instance, under Microsoft Windows
symbols must be explicitly imported from shared libraries (DLLs). */
#define MULTIPLE_SYMBOL_SPACES

118
gcc/config/i386/beos-pe.h Normal file
View File

@ -0,0 +1,118 @@
/* Operating system specific defines for BeOS target.
Copyright (C) 1995-99, 2000 Free Software Foundation, Inc.
Contributed by Fred Fish (fnf@cygnus.com), based on cygwin32.h.
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. */
/* Get all the PE support related things. */
#include "cygwin32.h"
/* Change debugging to Dwarf2. */
#undef SDB_DEBUGGING_INFO
#undef DBX_DEBUGGING_INFO
#define DWARF2_DEBUGGING_INFO
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
/* Support the __declspec keyword by turning them into attributes.
We currently only support: dllimport and dllexport.
Note that the current way we do this may result in a collision with
predefined attributes later on. This can be solved by using one attribute,
say __declspec__, and passing args to it. The problem with that approach
is that args are not accumulated: each new appearance would clobber any
existing args. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-D__BEOS__ -D__INTEL__ -Di386 -D_X86_=1 \
-D__stdcall=__attribute__((__stdcall__)) \
-D__cdecl=__attribute__((__cdecl__)) \
-D__declspec(x)=__attribute__((x)) \
-Asystem(beos) -Acpu(i386) -Amachine(i386)"
#undef CPP_SPEC
#define CPP_SPEC "-remap %(cpp_cpu) %{posix:-D_POSIX_SOURCE}"
#undef LIB_SPEC
#define LIB_SPEC "-lroot -lbe -ltracker -lmedia -lnet -lnetdev -ldevice -lmidi -lgame -latalk -lmail"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "/boot/develop/lib/x86/start_dyn.o /boot/develop/lib/x86/init_term_dyn.o /boot/develop/lib/x86/glue-noinit.a"
/* Temporary. */
#define LINKERSCRIPT_SPEC "%{!T:-Tbeos.ld}"
/* No math library. */
#define MATH_LIBRARY ""
/* Don't ignore dllimport for functions. */
#undef TARGET_NOP_FUN_DLLIMPORT
#define TARGET_NOP_FUN_DLLIMPORT 0
#undef SUBTARGET_SWITCHES
#define SUBTARGET_SWITCHES
/* Disable DWARF2 unwind info; this doesn't appear to work on
COFF-based targets right now. (I want to say "duh?" but someone
will correct me later. */
#undef INCOMING_RETURN_ADDR_RTX
#undef DWARF2_UNWIND_INFO
/* In the current BeOS release (DR9), use of gcc's builtin alloca is a
problem because of the relatively low default stack size of 256K with no
way to expand it. So anything we compile for the BeOS target should not
use the builtin alloca. Defining SMALL_STACK disables builtin alloca. */
#define SMALL_STACK
/* Yuck. */
#ifndef CROSS_COMPILE
#undef INCLUDE_DEFAULTS
#define INCLUDE_DEFAULTS \
{ \
{ GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },\
{ GCC_INCLUDE_DIR, "GCC", 0, 0 },\
{ TOOL_INCLUDE_DIR, "BINUTILS", 0, 1}, \
{ "/boot/develop/headers/be/add-ons/graphics", 0, 0, 0 },\
{ "/boot/develop/headers/be/translation", 0, 0, 0 },\
{ "/boot/develop/headers/be/mail", 0, 0, 0 },\
{ "/boot/develop/headers/gnu", 0, 0, 0 },\
{ "/boot/develop/headers/be/drivers", 0, 0, 0 },\
{ "/boot/develop/headers/be/game", 0, 0, 0 },\
{ "/boot/develop/headers/be/support", 0, 0, 0 },\
{ "/boot/develop/headers/be/storage", 0, 0, 0 },\
{ "/boot/develop/headers/be/kernel", 0, 0, 0 },\
{ "/boot/develop/headers/be/net", 0, 0, 0 },\
{ "/boot/develop/headers/be/midi", 0, 0, 0 },\
{ "/boot/develop/headers/be/media", 0, 0, 0 },\
{ "/boot/develop/headers/be/interface", 0, 0, 0 },\
{ "/boot/develop/headers/be/device", 0, 0, 0 },\
{ "/boot/develop/headers/be/app", 0, 0, 0 },\
{ "/boot/develop/headers/cpp", 0, 0, 0 },\
{ "/boot/develop/headers/posix", 0, 0, 0 },\
{ "/boot/develop/headers/be/precompiled", 0, 0, 0 },\
{ "/boot/develop/headers/be", 0, 0, 0 },\
{ "/boot/develop/headers", 0, 0, 0 }, \
{ 0, 0, 0, 0 } \
};
#endif
/* Whee. LIBRARY_PATH is Be's LD_LIBRARY_PATH, which of course will
cause nasty problems if we override it. */
#define LIBRARY_PATH_ENV "BELIBRARIES"

14
gcc/config/i386/t-beos Normal file
View File

@ -0,0 +1,14 @@
# Do not build libgcc1.
LIBGCC1 =
CROSS_LIBGCC1 =
# There are system headers elsewhere, but these are the ones that
# we are most likely to want to apply any fixes to.
SYSTEM_HEADER_DIR = /boot/develop/headers/posix
CROSS_SYSTEM_HEADER_DIR = $(tooldir)/sys-include/posix
# Use the system assert.h
INSTALL_ASSERT_H =
winnt.o: $(srcdir)/config/i386/winnt.c
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/i386/winnt.c

9
gcc/config/i386/x-beos Normal file
View File

@ -0,0 +1,9 @@
# configuration for BeOS
INSTALL=install -c
# Show we need to use the C version of ALLOCA
ALLOCA=alloca.o
# Use it regardless of whether we are compiling with gcc or not.
USE_ALLOCA= `echo "${ALLOCA}"`
USE_HOST_ALLOCA= `echo ${HOST_PREFIX}${HOST_ALLOCA}`
SUBDIR_USE_ALLOCA = `if [ x$(ALLOCA) != x ]; then echo ../$(ALLOCA); else true; fi`

64
gcc/config/i386/xm-beos.h Normal file
View File

@ -0,0 +1,64 @@
/* Configuration for GNU C-compiler for BeOS host.
Copyright (C) 1997-99, 2000 Free Software Foundation, Inc.
Contributed by Fred Fish (fnf@cygnus.com), based on xm-rs6000.h
by Richard Kenner (kenner@vlsi1.ultra.nyu.edu).
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/xm-i386.h>
/* Arguments to use with `exit'. */
#define SUCCESS_EXIT_CODE 0
#define FATAL_EXIT_CODE 33
/* Include <sys/wait.h> to define the exit status access macros. */
#ifndef inhibit_libc
#include <sys/wait.h>
#endif
#define ONLY_INT_FIELDS
/* use ANSI/SYSV style byte manipulation routines instead of BSD ones */
#undef bcopy
#define bcopy(s,d,n) memmove((d),(s),(n))
#undef bzero
#define bzero(d,n) memset((d),0,(n))
#undef bcmp
#define bcmp(l,r,n) memcmp((l),(r),(n))
#undef index
#define index strchr
#undef rindex
#define rindex strrchr
/* BeOS is closer to USG than BSD */
#define USG
/* Define various things that the BeOS host has. */
#ifndef HAVE_VPRINTF
#define HAVE_VPRINTF
#endif
#ifndef HAVE_PUTENV
#define HAVE_PUTENV
#endif
#define HAVE_RENAME
#define STDC_HEADERS 1

View File

@ -409,7 +409,7 @@ AC_FUNC_MMAP
GCC_NEED_DECLARATIONS(bcopy bzero bcmp \
index rindex getenv atol sbrk abort atof strerror getcwd getwd \
strsignal putc_unlocked fputs_unlocked strstr)
strsignal putc_unlocked fputs_unlocked strstr environ)
GCC_NEED_DECLARATIONS(malloc realloc calloc free, [
#ifdef HAVE_MALLOC_H
@ -1276,6 +1276,27 @@ changequote([,])dnl
tm_file=i386/i386-aout.h
tmake_file=i386/t-i386bare
;;
changequote(,)dnl
i[34567]86-*-beospe*)
changequote([,])dnl
xm_file=i386/xm-beos.h
xm_defines="USE_C_ALLOCA"
tmake_file=i386/t-beos
tm_file=i386/beos-pe.h
xmake_file=i386/x-beos
extra_objs=winnt.o
;;
changequote(,)dnl
i[34567]86-*-beoself* | i[34567]86-*-beos*)
changequote([,])dnl
xm_file=i386/xm-beos.h
tmake_file='i386/t-beos i386/t-crtpic'
tm_file=i386/beos-elf.h
xmake_file=i386/x-beos
extra_objs=winnt.o
extra_parts='crtbegin.o crtend.o'
fixincludes=Makefile.in
;;
changequote(,)dnl
i[34567]86-*-bsdi* | i[34567]86-*-bsd386*)
changequote([,])dnl

View File

@ -5,7 +5,7 @@ LIBGCC1 = $(CROSS_LIBGCC1)
# Dir to search for system headers. Normally /usr/include.
# Use CROSS_INCLUDE_DIR not TOOL_INCLUDE_DIR for other vendor's headers.
SYSTEM_HEADER_DIR = $(tooldir)/sys-include
SYSTEM_HEADER_DIR = $(CROSS_SYSTEM_HEADER_DIR)
# Don't try to compile the things we can't compile.
ALL = all.cross

View File

@ -82,6 +82,11 @@ static char dir_separator_str[] = {DIR_SEPARATOR, 0};
#define GET_ENV_PATH_LIST(VAR,NAME) do { (VAR) = getenv (NAME); } while (0)
#endif
/* Most every one is fine with LIBRARY_PATH. For some, it conflicts. */
#ifndef LIBRARY_PATH_ENV
#define LIBRARY_PATH_ENV "LIBRARY_PATH"
#endif
#ifndef HAVE_KILL
#define kill(p,s) raise(s)
#endif
@ -240,6 +245,7 @@ static int execute PROTO ((void));
static void unused_prefix_warnings PROTO ((struct path_prefix *));
static void clear_args PROTO ((void));
static void fatal_error PROTO ((int));
static void set_input PROTO ((const char *));
/* Specs are strings containing lines, each of which (if not blank)
is made up of a program name, and arguments separated by spaces.
@ -1892,6 +1898,7 @@ build_search_list (paths, prefix, check_dir_p)
struct prefix_list *pprefix;
obstack_grow (&collect_obstack, prefix, strlen (prefix));
obstack_1grow (&collect_obstack, '=');
for (pprefix = paths->plist; pprefix != 0; pprefix = pprefix->next)
{
@ -2941,7 +2948,7 @@ process_command (argc, argv)
}
}
GET_ENV_PATH_LIST (temp, "LIBRARY_PATH");
GET_ENV_PATH_LIST (temp, LIBRARY_PATH_ENV);
if (temp && *cross_compile == '0')
{
const char *startp, *endp;
@ -4935,6 +4942,37 @@ is_directory (path1, path2, linker)
return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode));
}
/* Set up the various global variables to indicate that we're processing
the input file named FILENAME. */
static void
set_input (filename)
const char *filename;
{
register const char *p;
input_filename = filename;
input_filename_length = strlen (input_filename);
input_basename = input_filename;
for (p = input_filename; *p; p++)
if (IS_DIR_SEPARATOR (*p))
input_basename = p + 1;
/* Find a suffix starting with the last period,
and set basename_length to exclude that suffix. */
basename_length = strlen (input_basename);
p = input_basename + basename_length;
while (p != input_basename && *p != '.') --p;
if (*p == '.' && p != input_basename)
{
basename_length = p - input_basename;
input_suffix = p + 1;
}
else
input_suffix = "";
}
/* On fatal signals, delete all the temporary files. */
@ -5335,9 +5373,8 @@ main (argc, argv)
/* Tell do_spec what to substitute for %i. */
input_filename = infiles[i].name;
input_filename_length = strlen (input_filename);
input_file_number = i;
set_input (infiles[i].name);
/* Use the same thing in %o, unless cp->spec says otherwise. */
@ -5352,31 +5389,12 @@ main (argc, argv)
{
/* Ok, we found an applicable compiler. Run its spec. */
/* First say how much of input_filename to substitute for %b */
register const char *p;
int len;
if (cp->spec[0][0] == '#')
error ("%s: %s compiler not installed on this system",
input_filename, &cp->spec[0][1]);
input_basename = input_filename;
for (p = input_filename; *p; p++)
if (IS_DIR_SEPARATOR (*p))
input_basename = p + 1;
/* Find a suffix starting with the last period,
and set basename_length to exclude that suffix. */
basename_length = strlen (input_basename);
p = input_basename + basename_length;
while (p != input_basename && *p != '.') --p;
if (*p == '.' && p != input_basename)
{
basename_length = p - input_basename;
input_suffix = p + 1;
}
else
input_suffix = "";
len = 0;
for (j = 0; j < sizeof cp->spec / sizeof cp->spec[0]; j++)
if (cp->spec[j])
@ -5418,6 +5436,12 @@ main (argc, argv)
clear_failure_queue ();
}
/* Reset the output file name to the first input file name, for use
with %b in LINK_SPEC on a target that prefers not to emit a.out
by default. */
if (n_infiles > 0)
set_input (infiles[0].name);
if (error_count == 0)
{
/* Make sure INPUT_FILE_NUMBER points to first available open
@ -5442,8 +5466,8 @@ main (argc, argv)
}
/* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables
for collect. */
putenv_from_prefixes (&exec_prefixes, "COMPILER_PATH=");
putenv_from_prefixes (&startfile_prefixes, "LIBRARY_PATH=");
putenv_from_prefixes (&exec_prefixes, "COMPILER_PATH");
putenv_from_prefixes (&startfile_prefixes, LIBRARY_PATH_ENV);
value = do_spec (link_command_spec);
if (value < 0)

View File

@ -105,7 +105,10 @@ typedef __gnuc_va_list va_list;
#ifndef _VA_LIST
/* The macro _VA_LIST_T_H is used in the Bull dpx2 */
#ifndef _VA_LIST_T_H
/* The macro __va_list__ is used by BeOS. */
#ifndef __va_list__
typedef __gnuc_va_list va_list;
#endif /* not __va_list__ */
#endif /* not _VA_LIST_T_H */
#endif /* not _VA_LIST */
#endif /* not _VA_LIST_DEFINED */
@ -121,6 +124,9 @@ typedef __gnuc_va_list va_list;
#ifndef _VA_LIST_T_H
#define _VA_LIST_T_H
#endif
#ifndef __va_list__
#define __va_list__
#endif
#endif /* not _VA_LIST_, except on certain systems */

View File

@ -274,12 +274,8 @@ typedef _BSD_RUNE_T_ rune_t;
#endif
#ifndef __WCHAR_TYPE__
#ifdef __BEOS__
#define __WCHAR_TYPE__ unsigned char
#else
#define __WCHAR_TYPE__ int
#endif
#endif
#ifndef __cplusplus
typedef __WCHAR_TYPE__ wchar_t;
#endif

View File

@ -108,7 +108,10 @@ typedef __gnuc_va_list va_list;
#ifndef _VA_LIST
/* The macro _VA_LIST_T_H is used in the Bull dpx2 */
#ifndef _VA_LIST_T_H
/* The macro __va_list__ is used by BeOS. */
#ifndef __va_list__
typedef __gnuc_va_list va_list;
#endif /* not __va_list__ */
#endif /* not _VA_LIST_T_H */
#endif /* not _VA_LIST */
#endif /* not _VA_LIST_DEFINED */
@ -124,6 +127,9 @@ typedef __gnuc_va_list va_list;
#ifndef _VA_LIST_T_H
#define _VA_LIST_T_H
#endif
#ifndef __va_list__
#define __va_list__
#endif
#endif /* not _VA_LIST_, except on certain systems */

View File

@ -25,6 +25,10 @@ Boston, MA 02111-1307, USA. */
#include "obstack.h"
#undef false
#undef true
#undef boolean
typedef enum {false, true} boolean;
typedef PTR hash_table_key;

View File

@ -176,6 +176,11 @@ extern int errno;
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
# ifdef USE_C_ALLOCA
/* Note that systems that use glibc have a <stdlib.h> that includes
<alloca.h> that defines alloca, so let USE_C_ALLOCA override this. */
# undef alloca
#endif
#endif
#ifdef HAVE_UNISTD_H

View File

@ -461,7 +461,7 @@ The environment variable @code{GCC_EXEC_PREFIX}, if any.
@item
The directories specified by the environment variable @code{LIBRARY_PATH}
(native only, cross compilers do not use this).
(or port-specific name; native only, cross compilers do not use this).
@item
The macro @code{STANDARD_EXEC_PREFIX}.
@ -2281,6 +2281,12 @@ during virtual register instantiation.
You only need to define this macro if you want to support call frame
debugging information like that provided by DWARF 2.
@findex SMALL_STACK
@item SMALL_STACK
Define this macro if the stack size for the target is very small. This
has the effect of disabling gcc's builtin @samp{alloca}, though
@samp{__builtin_alloca} is not affected.
@end table
@node Stack Checking
@ -7784,4 +7790,12 @@ in the system math library, or @samp{""} if the target does not have a
separate math library.
You need only define this macro if the default of @samp{"-lm"} is wrong.
@findex LIBRARY_PATH_ENV
@item LIBRARY_PATH_ENV
Define this macro as a C string constant for the environment variable that
specifies where the linker should look for libraries.
You need only define this macro if the default of @samp{"LIBRARY_PATH"}
is wrong.
@end table

View File

@ -138,7 +138,7 @@ You Lose! You must define PREFERRED_DEBUGGING_TYPE!
#define PREFERRED_DEBUGGING_TYPE NO_DEBUG
#endif
#if ! (defined (VMS) || defined (OS2))
#ifdef NEED_DECLARATION_ENVIRON
extern char **environ;
#endif
extern char *version_string;