diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0bc8c86c115..827e15de7f2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-07-31 matthew green + + * config.gcc (i386-*-netbsdelf): New description. + * config/i386/netbsd-elf.h: New file. + 2001-07-30 Geoffrey Keating * loop.c (check_dbra_loop): Use single_set to compute diff --git a/gcc/config.gcc b/gcc/config.gcc index 6380bab81a8..ae88835b77e 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1051,6 +1051,13 @@ i[34567]86-*-freebsd[12] | i[34567]86-*-freebsd[12].* | i[34567]86-*-freebsd*aou i[34567]86-*-freebsd*) tm_file="${tm_file} i386/att.h svr4.h ${fbsd_tm_file} i386/freebsd.h" ;; +i[34567]86-*-netbsdelf*) + xm_defines=POSIX + tm_file="${tm_file} i386/att.h svr4.h i386/netbsd-elf.h" + tmake_file=t-netbsd + gnu_ld=yes + float_format=i386 + ;; i[34567]86-*-netbsd*) tm_file=i386/netbsd.h tmake_file=t-netbsd diff --git a/gcc/config/i386/netbsd-elf.h b/gcc/config/i386/netbsd-elf.h new file mode 100644 index 00000000000..5188ef4ac2f --- /dev/null +++ b/gcc/config/i386/netbsd-elf.h @@ -0,0 +1,181 @@ +/* Definitions of target machine for GNU compiler, + for i386/ELF NetBSD systems. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by matthew green + +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, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate + libc, depending on whether we're doing profiling; if `-posix' is specified, + link against the appropriate libposix first. */ + +#undef LIB_SPEC +#define LIB_SPEC \ + "%{posix:%{!p:%{!pg:-lposix}}%{p:-lposix_p}%{pg:-lposix_p}} \ + %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" + +/* Provide a STARTFILE_SPEC appropriate for NetBSD ELF targets. Here we + provide support for the special GCC option -static. On ELF targets, + we also add the crtbegin.o file which provides part of the support + for getting C++ file-scope static objects constructed before entering + `main'. We use the NetBSD crt0. */ + +#undef STARTFILE_SPEC +#define STARTFILE_SPEC \ + "%{!shared: \ + %{pg:gcrt0%O%s} \ + %{!pg: \ + %{p:gcrt0%O%s} \ + %{!p:crt0%O%s}}} \ + %{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s}" + +/* Provide an ENDFILE_SPEC approrpiate for NetBSD ELF targets. Here we + add crtend.o, which provides part of the support for getting C++ + file-scope static objects deconstructed after exiting `main'. */ + +#undef ENDFILE_SPEC +#define ENDFILE_SPEC \ + "%{!shared:crtend%O%s} %{shared:crtendS%O%s}" + +/* Provide a LINK_SPEC appropriate for a NetBSD/i386 ELF target. Only + the linker emulation is i386-specific. The rest are + common to all ELF targets, except for the name of the start function. */ + +#undef LINK_SPEC +#define LINK_SPEC \ + "-m elf_i386 \ + %{assert*} %{R*} \ + %{shared:-shared} \ + %{!shared: \ + -dp \ + %{!nostdlib:%{!r*:%{!e*:-e __start}}} \ + %{!static: \ + -dy %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \ + %{static:-static}}" + +/* Provide a CPP_SPEC appropriate for NetBSD. Current we just deal with + the GCC option `-posix'. */ + +#undef CPP_SPEC +#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}" + +/* Provide an ASM_SPEC appropriate for NetBSD. Currently we only deal + with the options for generating PIC code. */ + +#undef ASM_SPEC +#define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k -K}" + +/* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate + libc, depending on whether we're doing profiling. */ + +#undef LIB_SPEC +#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" + +/* This defines which switch letters take arguments. */ +#undef SWITCH_TAKES_ARG +#define SWITCH_TAKES_ARG(CHAR) \ + (DEFAULT_SWITCH_TAKES_ARG(CHAR) \ + || (CHAR) == 'R') + +/* Implicit library calls should use memcpy, not bcopy, etc. */ + +#define TARGET_MEM_FUNCTIONS + +/* Names to predefine in the preprocessor for this target machine. */ + +#define CPP_PREDEFINES "\ +-Di386 -D__NetBSD__ -D__ELF__ -Asystem(unix) -Asystem(NetBSD)" + +/* Make gcc agree with */ + +#undef SIZE_TYPE +#define SIZE_TYPE "unsigned int" + +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE "int" + +#undef WCHAR_TYPE +#define WCHAR_TYPE "int" + +#undef WCHAR_UNSIGNED +#define WCHAR_UNSIGNED 0 + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE 32 + +#undef WINT_TYPE +#define WINT_TYPE "int" + +/* Output assembler code to FILE to increment profiler label # LABELNO + for profiling a function entry. Under NetBSD/i386, the assembler does + nothing special with -pg. */ + +#undef ASM_APP_ON +#define ASM_APP_ON "#APP\n" + +#undef ASM_APP_OFF +#define ASM_APP_OFF "#NO_APP\n" + +#undef ASM_FINAL_SPEC +#define ASM_FINAL_SPEC "%{pipe:-}" + +#undef DBX_REGISTER_NUMBER +#define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] + +#undef NO_PROFILE_COUNTERS +#define NO_PROFILE_COUNTERS + +#undef HAS_INIT_SECTION + +#undef DEFAULT_VTABLE_THUNKS +#define DEFAULT_VTABLE_THUNKS 1 + +/* This is how we tell the assembler that two symbols have the same value. */ + +#define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \ + do { assemble_name(FILE, NAME1); \ + fputs(" = ", FILE); \ + assemble_name(FILE, NAME2); \ + fputc('\n', FILE); } while (0) + +/* A C statement to output to the stdio stream FILE an assembler + command to advance the location counter to a multiple of 1<