diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2000-01-12 19:37:06 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2000-01-12 19:37:06 -0500 |
commit | 512b62fb1bdb3e758207b6bf72eb1024848e8ec6 (patch) | |
tree | d3dff74afbeffac820b068280d9d819772186d74 /gcc | |
parent | 6bb88f3be6ef0f0ad8b7a3819ddefafa63283e76 (diff) | |
download | gcc-512b62fb1bdb3e758207b6bf72eb1024848e8ec6.tar.gz |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/Makefile.in | 3 | ||||
-rw-r--r-- | gcc/aclocal.m4 | 4 | ||||
-rw-r--r-- | gcc/c-common.c | 2 | ||||
-rw-r--r-- | gcc/collect2.c | 8 | ||||
-rw-r--r-- | gcc/config/i386/beos-elf.h | 436 | ||||
-rw-r--r-- | gcc/config/i386/beos-pe.h | 118 | ||||
-rw-r--r-- | gcc/config/i386/t-beos | 14 | ||||
-rw-r--r-- | gcc/config/i386/x-beos | 9 | ||||
-rw-r--r-- | gcc/config/i386/xm-beos.h | 64 | ||||
-rw-r--r-- | gcc/configure.in | 23 | ||||
-rw-r--r-- | gcc/cross-make | 2 | ||||
-rw-r--r-- | gcc/gcc.c | 72 | ||||
-rw-r--r-- | gcc/ginclude/stdarg.h | 6 | ||||
-rw-r--r-- | gcc/ginclude/stddef.h | 4 | ||||
-rw-r--r-- | gcc/ginclude/varargs.h | 6 | ||||
-rw-r--r-- | gcc/hash.h | 4 | ||||
-rw-r--r-- | gcc/system.h | 5 | ||||
-rw-r--r-- | gcc/tm.texi | 16 | ||||
-rw-r--r-- | gcc/toplev.c | 2 |
19 files changed, 764 insertions, 34 deletions
diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 932ab36a5e5..fc7f2d0fdc7 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -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 diff --git a/gcc/aclocal.m4 b/gcc/aclocal.m4 index 543938325ed..300127f2931 100644 --- a/gcc/aclocal.m4 +++ b/gcc/aclocal.m4 @@ -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")]) diff --git a/gcc/c-common.c b/gcc/c-common.c index b07600c69b2..b4353506e08 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -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. */ diff --git a/gcc/collect2.c b/gcc/collect2.c index 9689599aac2..cb5e2fa1d47 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -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"); } diff --git a/gcc/config/i386/beos-elf.h b/gcc/config/i386/beos-elf.h new file mode 100644 index 00000000000..44524df5a99 --- /dev/null +++ b/gcc/config/i386/beos-elf.h @@ -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 diff --git a/gcc/config/i386/beos-pe.h b/gcc/config/i386/beos-pe.h new file mode 100644 index 00000000000..52af628eb81 --- /dev/null +++ b/gcc/config/i386/beos-pe.h @@ -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" diff --git a/gcc/config/i386/t-beos b/gcc/config/i386/t-beos new file mode 100644 index 00000000000..5d73a2361c2 --- /dev/null +++ b/gcc/config/i386/t-beos @@ -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 diff --git a/gcc/config/i386/x-beos b/gcc/config/i386/x-beos new file mode 100644 index 00000000000..37b8ccac9cf --- /dev/null +++ b/gcc/config/i386/x-beos @@ -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` diff --git a/gcc/config/i386/xm-beos.h b/gcc/config/i386/xm-beos.h new file mode 100644 index 00000000000..e190ba1b569 --- /dev/null +++ b/gcc/config/i386/xm-beos.h @@ -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 diff --git a/gcc/configure.in b/gcc/configure.in index bf499fc53c7..4dbcf86f627 100644 --- a/gcc/configure.in +++ b/gcc/configure.in @@ -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 @@ -1277,6 +1277,27 @@ changequote([,])dnl 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 tm_file=i386/bsd386.h diff --git a/gcc/cross-make b/gcc/cross-make index 84be67fd605..fef123c40cd 100644 --- a/gcc/cross-make +++ b/gcc/cross-make @@ -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 diff --git a/gcc/gcc.c b/gcc/gcc.c index b65d6e8cc02..8f81369d178 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -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) diff --git a/gcc/ginclude/stdarg.h b/gcc/ginclude/stdarg.h index 2464599c1b5..3337065a06c 100644 --- a/gcc/ginclude/stdarg.h +++ b/gcc/ginclude/stdarg.h @@ -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 */ diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h index 0004ec77407..ae1037fd09d 100644 --- a/gcc/ginclude/stddef.h +++ b/gcc/ginclude/stddef.h @@ -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 diff --git a/gcc/ginclude/varargs.h b/gcc/ginclude/varargs.h index 6c70f7a0440..210b9674743 100644 --- a/gcc/ginclude/varargs.h +++ b/gcc/ginclude/varargs.h @@ -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 */ diff --git a/gcc/hash.h b/gcc/hash.h index ac3b1ede570..b42502b8108 100644 --- a/gcc/hash.h +++ b/gcc/hash.h @@ -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; diff --git a/gcc/system.h b/gcc/system.h index 431b32fa2ca..5d31b45f2ac 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -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 diff --git a/gcc/tm.texi b/gcc/tm.texi index b2d43c954ac..385a0dcb940 100644 --- a/gcc/tm.texi +++ b/gcc/tm.texi @@ -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 diff --git a/gcc/toplev.c b/gcc/toplev.c index 4ddfc04bdad..9c4a184a79c 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -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; |