gcc/ChangeLog: 2004-05-02 Robert Millan * config.gcc: Merge kfreebsd*-gnu with linux* and add knetbsd*-gnu. * config/linux.h: Allow overriding of LINUX_TARGET_OS_CPP_BUILTINS. * config/i386/linux.h: Allow overriding of LINK_EMULATION, DYNAMIC_LINKER and register names in sc_ structure. * config/kfreebsd-gnu.h: New. kfreebsd-gnu followup for linux.h. * config/i386/kfreebsd-gnu.h: New. Ditto for i386-kfreebsd-gnu. * config/knetbsd-gnu.h: New. Ditto for knetbsd-gnu. * config/i386/knetbsd-gnu.h: New. Ditto for i386-knetbsd-gnu. * config/kfreebsdgnu.h: Remove. * config/t-kfreebsd-gnu: Likewise. * config/i386/kfreebsdgnu.h: Likewise. diff -Nur gcc.old/gcc/config/i386/kfreebsd-gnu.h gcc/gcc/config/i386/kfreebsd-gnu.h --- gcc.old/gcc/config/i386/kfreebsd-gnu.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc/gcc/config/i386/kfreebsd-gnu.h 2004-04-15 19:43:37.000000000 +0200 @@ -0,0 +1,26 @@ +/* Definitions for Intel 386 running kFreeBSD-based GNU systems with ELF format + Copyright (C) 2004 + Free Software Foundation, Inc. + Contributed by Robert Millan. + +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, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#undef LINK_EMULATION +#define LINK_EMULATION "elf_i386_fbsd" +#undef REG_NAME +#define REG_NAME(reg) sc_ ## reg diff -Nur gcc.old/gcc/config/i386/kfreebsdgnu.h gcc/gcc/config/i386/kfreebsdgnu.h --- gcc.old/gcc/config/i386/kfreebsdgnu.h 2003-10-21 11:52:47.000000000 +0200 +++ gcc/gcc/config/i386/kfreebsdgnu.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -/* Definitions for Intel 386 running GNU/KFreeBSD systems with ELF format. - Copyright (C) 2002 Free Software Foundation, Inc. - Contributed by Bruno Haible. - -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, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (i386 KFreeBSD/ELF)"); - -/* FIXME: Is a KFreeBSD-specific fallback mechanism necessary? */ -#undef MD_FALLBACK_FRAME_STATE_FOR - -#undef LINK_SPEC -#define LINK_SPEC "-m elf_i386_fbsd %{shared:-shared} \ - %{!shared: \ - %{!ibcs: \ - %{!static: \ - %{rdynamic:-export-dynamic} \ - %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \ - %{static:-static}}}" diff -Nur gcc.old/gcc/config/i386/knetbsd-gnu.h gcc/gcc/config/i386/knetbsd-gnu.h --- gcc.old/gcc/config/i386/knetbsd-gnu.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc/gcc/config/i386/knetbsd-gnu.h 2004-04-15 19:43:44.000000000 +0200 @@ -0,0 +1,24 @@ +/* Definitions for Intel 386 running kNetBSD-based GNU systems with ELF format + Copyright (C) 2004 + Free Software Foundation, Inc. + Contributed by Robert Millan. + +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, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#undef REG_NAME +#define REG_NAME(reg) sc_ ## reg diff -Nur gcc.old/gcc/config/i386/linux.h gcc/gcc/config/i386/linux.h --- gcc.old/gcc/config/i386/linux.h 2003-11-29 04:08:10.000000000 +0100 +++ gcc/gcc/config/i386/linux.h 2004-04-15 19:40:30.000000000 +0200 @@ -108,24 +108,30 @@ /* If ELF is the default format, we should not use /lib/elf. */ +#ifndef LINK_EMULATION +# define LINK_EMULATION "elf_i386" +#endif +#ifndef DYNAMIC_LINKER +# ifdef USE_GNULIBC_1 +# define DYNAMIC_LINKER "/lib/ld-linux.so.1" +# else +# define DYNAMIC_LINKER "/lib/ld-linux.so.2" +# endif +#endif + +#undef SUBTARGET_EXTRA_SPECS +#define SUBTARGET_EXTRA_SPECS \ + { "link_emulation", LINK_EMULATION },\ + { "dynamic_linker", DYNAMIC_LINKER } + #undef LINK_SPEC -#ifdef USE_GNULIBC_1 -#define LINK_SPEC "-m elf_i386 %{shared:-shared} \ - %{!shared: \ - %{!ibcs: \ - %{!static: \ - %{rdynamic:-export-dynamic} \ - %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \ - %{static:-static}}}" -#else -#define LINK_SPEC "-m elf_i386 %{shared:-shared} \ +#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ %{!shared: \ %{!ibcs: \ %{!static: \ %{rdynamic:-export-dynamic} \ - %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ + %{!dynamic-linker:-dynamic-linker %(dynamic_linker)}} \ %{static:-static}}}" -#endif /* A C statement (sans semicolon) to output to the stdio stream FILE the assembler definition of uninitialized global DECL named @@ -217,6 +223,8 @@ #include #include +#define REG_NAME(reg) reg + #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ do { \ unsigned char *pc_ = (CONTEXT)->ra; \ @@ -245,28 +253,28 @@ else \ break; \ \ - new_cfa_ = sc_->esp; \ + new_cfa_ = sc_->REG_NAME(esp); \ (FS)->cfa_how = CFA_REG_OFFSET; \ (FS)->cfa_reg = 4; \ (FS)->cfa_offset = new_cfa_ - (long) (CONTEXT)->cfa; \ \ /* The SVR4 register numbering macros aren't usable in libgcc. */ \ (FS)->regs.reg[0].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[0].loc.offset = (long)&sc_->eax - new_cfa_; \ + (FS)->regs.reg[0].loc.offset = (long)&sc_->REG_NAME(eax) - new_cfa_; \ (FS)->regs.reg[3].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[3].loc.offset = (long)&sc_->ebx - new_cfa_; \ + (FS)->regs.reg[3].loc.offset = (long)&sc_->REG_NAME(ebx) - new_cfa_; \ (FS)->regs.reg[1].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[1].loc.offset = (long)&sc_->ecx - new_cfa_; \ + (FS)->regs.reg[1].loc.offset = (long)&sc_->REG_NAME(ecx) - new_cfa_; \ (FS)->regs.reg[2].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[2].loc.offset = (long)&sc_->edx - new_cfa_; \ + (FS)->regs.reg[2].loc.offset = (long)&sc_->REG_NAME(edx) - new_cfa_; \ (FS)->regs.reg[6].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[6].loc.offset = (long)&sc_->esi - new_cfa_; \ + (FS)->regs.reg[6].loc.offset = (long)&sc_->REG_NAME(esi) - new_cfa_; \ (FS)->regs.reg[7].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[7].loc.offset = (long)&sc_->edi - new_cfa_; \ + (FS)->regs.reg[7].loc.offset = (long)&sc_->REG_NAME(edi) - new_cfa_; \ (FS)->regs.reg[5].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[5].loc.offset = (long)&sc_->ebp - new_cfa_; \ + (FS)->regs.reg[5].loc.offset = (long)&sc_->REG_NAME(ebp) - new_cfa_; \ (FS)->regs.reg[8].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[8].loc.offset = (long)&sc_->eip - new_cfa_; \ + (FS)->regs.reg[8].loc.offset = (long)&sc_->REG_NAME(eip) - new_cfa_; \ (FS)->retaddr_column = 8; \ goto SUCCESS; \ } while (0) diff -Nur gcc.old/gcc/config/kfreebsd-gnu.h gcc/gcc/config/kfreebsd-gnu.h --- gcc.old/gcc/config/kfreebsd-gnu.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc/gcc/config/kfreebsd-gnu.h 2004-04-15 19:44:29.000000000 +0200 @@ -0,0 +1,36 @@ +/* Definitions for kFreeBSD-based GNU systems with ELF format + Copyright (C) 2004 + Free Software Foundation, Inc. + Contributed by Robert Millan. + +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, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#undef LINUX_TARGET_OS_CPP_BUILTINS +#define LINUX_TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + builtin_define ("__FreeBSD_kernel__"); \ + builtin_define ("__GLIBC__"); \ + builtin_define_std ("unix"); \ + builtin_assert ("system=unix"); \ + builtin_assert ("system=posix"); \ + } \ + while (0) + +#undef DYNAMIC_LINKER +#define DYNAMIC_LINKER "/lib/ld.so.1" diff -Nur gcc.old/gcc/config/kfreebsdgnu.h gcc/gcc/config/kfreebsdgnu.h --- gcc.old/gcc/config/kfreebsdgnu.h 2003-12-18 03:32:11.000000000 +0100 +++ gcc/gcc/config/kfreebsdgnu.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,41 +0,0 @@ -/* Definitions for GNU/KFreeBSD systems with ELF format. - Copyright (C) 2002 Free Software Foundation, Inc. - Contributed by Bruno Haible. - -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, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#undef WCHAR_TYPE -#define WCHAR_TYPE "int" - -#undef TARGET_OS_CPP_BUILTINS -#define TARGET_OS_CPP_BUILTINS() \ - builtin_define ("__GNU_KFreeBSD__=0"); \ - builtin_define ("__gnu_kfreebsd__=0"); \ - builtin_define ("__FreeBSD_kernel__=5"); \ - builtin_define ("__ELF__"); \ - builtin_define_std ("unix"); \ - builtin_assert ("system=posix"); - -#undef TARGET_CPU_CPP_BUILTINS -#define TARGET_CPU_CPP_BUILTINS() \ - builtin_define ("__i386__"); \ - builtin_define_std ("i386"); \ - builtin_assert ("cpu=i386"); \ - builtin_assert ("machine=i386"); - -/* do {} while (0) */ diff -Nur gcc.old/gcc/config/knetbsd-gnu.h gcc/gcc/config/knetbsd-gnu.h --- gcc.old/gcc/config/knetbsd-gnu.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc/gcc/config/knetbsd-gnu.h 2004-04-15 19:44:38.000000000 +0200 @@ -0,0 +1,36 @@ +/* Definitions for kNetBSD-based GNU systems with ELF format + Copyright (C) 2004 + Free Software Foundation, Inc. + Contributed by Robert Millan. + +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, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#undef LINUX_TARGET_OS_CPP_BUILTINS +#define LINUX_TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + builtin_define ("__NetBSD_kernel__"); \ + builtin_define ("__GLIBC__"); \ + builtin_define_std ("unix"); \ + builtin_assert ("system=unix"); \ + builtin_assert ("system=posix"); \ + } \ + while (0) + +#undef DYNAMIC_LINKER +#define DYNAMIC_LINKER "/lib/ld.so.1" diff -Nur gcc.old/gcc/config/linux.h gcc/gcc/config/linux.h --- gcc.old/gcc/config/linux.h 2003-11-29 04:08:10.000000000 +0100 +++ gcc/gcc/config/linux.h 2004-04-15 19:34:10.000000000 +0200 @@ -97,6 +97,7 @@ %{!p:%{!pg:%{!g*:-lc} %{g*:-lg}}}}" #endif +#ifndef LINUX_TARGET_OS_CPP_BUILTINS #define LINUX_TARGET_OS_CPP_BUILTINS() \ do { \ builtin_define ("__gnu_linux__"); \ @@ -106,6 +107,7 @@ builtin_assert ("system=unix"); \ builtin_assert ("system=posix"); \ } while (0) +#endif #if !defined(USE_GNULIBC_1) && defined(HAVE_LD_EH_FRAME_HDR) #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " diff -Nur gcc.old/gcc/config/t-kfreebsd-gnu gcc/gcc/config/t-kfreebsd-gnu --- gcc.old/gcc/config/t-kfreebsd-gnu 2003-10-21 11:52:47.000000000 +0200 +++ gcc/gcc/config/t-kfreebsd-gnu 1970-01-01 01:00:00.000000000 +0100 @@ -1,16 +0,0 @@ -# glibc provides a limits.h, which must be combined with gcc's limits.h. -LIMITS_H_TEST = true - -# Compile crtbeginS.o and crtendS.o with pic. -CRTSTUFF_T_CFLAGS_S = -fPIC -# Compile libgcc2.a with pic. -TARGET_LIBGCC2_CFLAGS = -fPIC - -# Override t-slibgcc-elf-ver to export some libgcc symbols with -# the symbol versions that glibc used. -SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver - -# Use unwind-dw2-fde-glibc -LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \ - $(srcdir)/unwind-sjlj.c -LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c diff -Nur gcc.old/gcc/config.gcc gcc/gcc/config.gcc --- gcc.old/gcc/config.gcc 2004-04-15 19:02:35.000000000 +0200 +++ gcc/gcc/config.gcc 2004-04-15 19:48:30.000000000 +0200 @@ -408,21 +408,10 @@ esac fbsd_tm_file="${fbsd_tm_file} freebsd-spec.h freebsd.h" ;; -*-*-kfreebsd*-gnu) - # Must come before *-*-gnu* - xm_defines=POSIX # needed for cross-compiling from FreeBSD? - extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o" - # GNU tools are the only tools. - gas=yes - gnu_ld=yes - case ${enable_threads} in - "" | yes | posix) thread_file='posix' ;; - esac - ;; *-*-linux*libc1* | *-*-linux*aout*) # Avoid the generic linux case. ;; -*-*-linux* | frv-*-*linux*) +*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu) # Must come before *-*-gnu* (because of *-*-linux-gnu* systems). extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o" gas=yes @@ -922,10 +911,14 @@ tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/i386-coff.h" use_fixproto=yes ;; -i[34567]86-*-linux*) # Intel 80386's running GNU/Linux +i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu) + # Intel 80386's running GNU/* # with ELF format using glibc 2 - # aka GNU/Linux C library 6 tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h" + case ${target} in + i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h i386/knetbsd-gnu.h" ;; + i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;; + esac tmake_file="${tmake_file} i386/t-crtstuff" ;; x86_64-*-linux*) @@ -933,12 +926,6 @@ i386/x86-64.h i386/linux64.h" tmake_file="${tmake_file} i386/t-linux64" ;; -i[34567]86-*-kfreebsd*-gnu) # must be before i[34567]86-*-gnu* - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h kfreebsdgnu.h i386/kfreebsdgnu.h" - tmake_file="t-slibgcc-elf-ver t-kfreebsd-gnu i386/t-crtstuff" - float_format=i386 - use_fixproto=no - ;; i[34567]86-*-gnu*) ;; i[34567]86-pc-msdosdjgpp*)