X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=gcc%2Fconfig%2Fsparc%2Fnetbsd-elf.h;fp=gcc%2Fconfig%2Fsparc%2Fnetbsd-elf.h;h=ebd0260d55a3844388740830583470cc5b32371e;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=f141f8971f47fa8b76604790f5b2576bc845e2c9;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/config/sparc/netbsd-elf.h b/gcc/config/sparc/netbsd-elf.h index f141f897..ebd0260d 100644 --- a/gcc/config/sparc/netbsd-elf.h +++ b/gcc/config/sparc/netbsd-elf.h @@ -1,57 +1,47 @@ -/* Definitions of target machine for GNU compiler, for ELF on NetBSD/sparc +/* Definitions of target machine for GCC, for ELF on NetBSD/sparc and NetBSD/sparc64. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. Contributed by Matthew Green (mrg@eterna.com.au). -This file is part of GNU CC. +This file is part of GCC. -GNU CC is free software; you can redistribute it and/or modify +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) +the Free Software Foundation; either version 3, or (at your option) any later version. -GNU CC is distributed in the hope that it will be useful, +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 GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +along with GCC; see the file COPYING3. If not see +. */ + +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + NETBSD_OS_CPP_BUILTINS_ELF(); \ + if (TARGET_ARCH64) \ + { \ + builtin_define ("__sparc64__"); \ + builtin_define ("__sparc_v9__"); \ + builtin_define ("__sparcv9"); \ + } \ + else \ + builtin_define ("__sparc"); \ + builtin_define ("__sparc__"); \ + } \ + while (0) /* Make sure these are undefined. */ #undef MD_EXEC_PREFIX #undef MD_STARTFILE_PREFIX -#undef CPP_PREDEFINES -#define CPP_PREDEFINES "-D__sparc__ -D__NetBSD__ -D__ELF__ \ --Asystem=unix -Asystem=NetBSD" - -/* CPP defines used for 64 bit code. */ -#undef CPP_SUBTARGET_SPEC64 -#define CPP_SUBTARGET_SPEC64 \ - "-D__sparc64__ -D__sparc_v9__ -D_LP64 %{posix:-D_POSIX_SOURCE}" - -/* CPP defines used for 32 bit code. */ -#undef CPP_SUBTARGET_SPEC32 -#define CPP_SUBTARGET_SPEC32 "-D__sparc %{posix:-D_POSIX_SOURCE}" - -/* CPP_ARCH32_SPEC and CPP_ARCH64_SPEC are wrong from sparc/sparc.h; we - always want the non-SPARC_BI_ARCH versions, since the SPARC_BI_ARCH - versions define __SIZE_TYPE__ and __PTRDIFF_TYPE__ incorrectly for - NetBSD. */ -#undef CPP_ARCH32_SPEC -#define CPP_ARCH32_SPEC "-D__GCC_NEW_VARARGS__ -Acpu=sparc -Amachine=sparc" - -#undef CPP_ARCH64_SPEC -#define CPP_ARCH64_SPEC "-D__arch64__ -Acpu=sparc64 -Amachine=sparc64" - -/* sparc/sparc.h defines NO_BUILTIN_SIZE_TYPE and NO_BUILTIN_PTRDIFF_TYPE - if SPARC_BI_ARCH is defined. This is wrong for NetBSD; size_t and - ptrdiff_t do not change for 32-bit vs. 64-bit. */ -#undef NO_BUILTIN_PTRDIFF_TYPE -#undef NO_BUILTIN_SIZE_TYPE +/* CPP defines used by all NetBSD targets. */ +#undef CPP_SUBTARGET_SPEC +#define CPP_SUBTARGET_SPEC "%(netbsd_cpp_spec)" /* SIZE_TYPE and PTRDIFF_TYPE are wrong from sparc/sparc.h. */ #undef SIZE_TYPE @@ -60,35 +50,14 @@ Boston, MA 02111-1307, USA. */ #undef PTRDIFF_TYPE #define PTRDIFF_TYPE "long int" -#undef PREFERRED_DEBUGGING_TYPE -#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - /* This is the char to use for continuation (in case we need to turn continuation back on). */ #undef DBX_CONTIN_CHAR #define DBX_CONTIN_CHAR '?' -#undef DBX_REGISTER_NUMBER -#define DBX_REGISTER_NUMBER(REGNO) \ - (TARGET_FLAT && REGNO == HARD_FRAME_POINTER_REGNUM ? 31 : REGNO) - #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." -/* This is how to output a definition of an internal numbered label where - PREFIX is the class of label and NUM is the number within the class. */ - -#undef ASM_OUTPUT_INTERNAL_LABEL -#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ - fprintf (FILE, ".L%s%d:\n", PREFIX, NUM) - -/* This is how to output a reference to an internal numbered label where - PREFIX is the class of label and NUM is the number within the class. */ - -#undef ASM_OUTPUT_INTERNAL_LABELREF -#define ASM_OUTPUT_INTERNAL_LABELREF(FILE,PREFIX,NUM) \ - fprintf (FILE, ".L%s%d", PREFIX, NUM) - /* This is how to store into the string LABEL the symbol_ref name of an internal numbered label where PREFIX is the class of label and NUM is the number within the class. @@ -102,30 +71,20 @@ Boston, MA 02111-1307, USA. */ #define USER_LABEL_PREFIX "" #undef ASM_SPEC -#define ASM_SPEC "%{fpic:-K PIC} %{fPIC:-K PIC} %{V} %{v:%{!V:-V}} \ +#define ASM_SPEC "%{fpic|fPIC|fpie|fPIE:-K PIC} %{V} %{v:%{!V:-V}} \ %{mlittle-endian:-EL} \ %(asm_cpu) %(asm_arch) %(asm_relax)" #undef STDC_0_IN_SYSTEM_HEADERS +/* Attempt to enable execute permissions on the stack. */ +#define ENABLE_EXECUTE_STACK NETBSD_ENABLE_EXECUTE_STACK + #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (%s)", TARGET_NAME); -/* - * Clean up afterwards generic SPARC ELF configuration. - */ - -/* FIXME: Aren't these supposed to be available for SPARC ELF? */ -#undef MULDI3_LIBCALL -#undef DIVDI3_LIBCALL -#undef UDIVDI3_LIBCALL -#undef MODDI3_LIBCALL -#undef UMODDI3_LIBCALL -#undef INIT_SUBTARGET_OPTABS -#define INIT_SUBTARGET_OPTABS - /* Below here exists the merged NetBSD/sparc & NetBSD/sparc64 compiler - description, allowing one to build 32 bit or 64 bit applications + description, allowing one to build 32-bit or 64-bit applications on either. We define the sparc & sparc64 versions of things, occasionally a neutral version (should be the same as "netbsd-elf.h") and then based on SPARC_BI_ARCH, DEFAULT_ARCH32_P, and TARGET_CPU_DEFAULT, @@ -200,35 +159,22 @@ Boston, MA 02111-1307, USA. */ /* Make sure we use the right output format. Pick a default and then make sure -m32/-m64 switch to the right one. */ -#define LINK_ARCH32_SPEC \ - "%-m elf32_sparc \ - %{assert*} %{R*} %{V} %{v:%{!V:-V}} \ - %{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}}" - -#define LINK_ARCH64_SPEC \ - "%-m elf64_sparc \ - %{assert*} %{R*} %{V} %{v:%{!V:-V}} \ - %{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}}" - -#define LINK_ARCH_SPEC "\ -%{m32:%(link_arch32)} \ -%{m64:%(link_arch64)} \ -%{!m32:%{!m64:%(link_arch_default)}} \ -" +#define LINK_ARCH32_SPEC "-m elf32_sparc" + +#define LINK_ARCH64_SPEC "-m elf64_sparc" + +#define LINK_ARCH_SPEC \ + "%{m32:%(link_arch32)} \ + %{m64:%(link_arch64)} \ + %{!m32:%{!m64:%(link_arch_default)}}" + +#undef LINK_SPEC +#define LINK_SPEC \ + "%(link_arch) \ + %{!mno-relax:%{!r:-relax}} \ + %(netbsd_link_spec)" + +#define NETBSD_ENTRY_POINT "__start" #if DEFAULT_ARCH32_P #define LINK_ARCH_DEFAULT_SPEC LINK_ARCH32_SPEC @@ -243,15 +189,9 @@ Boston, MA 02111-1307, USA. */ { "link_arch64", LINK_ARCH64_SPEC }, \ { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \ { "link_arch", LINK_ARCH_SPEC }, \ - { "cpp_subtarget_spec32", CPP_SUBTARGET_SPEC32 }, \ - { "cpp_subtarget_spec64", CPP_SUBTARGET_SPEC64 }, - - -/* What extra switches do we need? */ -#undef SUBTARGET_SWITCHES -#define SUBTARGET_SWITCHES \ - {"long-double-64", -MASK_LONG_DOUBLE_128, N_("Use 64 bit long doubles") }, \ - {"long-double-128", MASK_LONG_DOUBLE_128, N_("Use 128 bit long doubles") }, + { "netbsd_cpp_spec", NETBSD_CPP_SPEC }, \ + { "netbsd_link_spec", NETBSD_LINK_SPEC_ELF }, \ + { "netbsd_entry_point", NETBSD_ENTRY_POINT }, /* Build a compiler that supports -m32 and -m64? */ @@ -261,9 +201,6 @@ Boston, MA 02111-1307, USA. */ #undef LONG_DOUBLE_TYPE_SIZE #define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64) -#undef MAX_LONG_DOUBLE_TYPE_SIZE -#define MAX_LONG_DOUBLE_TYPE_SIZE 128 - #if defined(__arch64__) || defined(__LONG_DOUBLE_128__) #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128 #else @@ -283,20 +220,7 @@ Boston, MA 02111-1307, USA. */ #define MULTILIB_DEFAULTS { "m64" } #endif -#undef CPP_SUBTARGET_SPEC -#if DEFAULT_ARCH32_P -#define CPP_SUBTARGET_SPEC \ - "%{m64:%(cpp_subtarget_spec64)}%{!m64:%(cpp_subtarget_spec32)}" -#else -#define CPP_SUBTARGET_SPEC \ - "%{!m32:%(cpp_subtarget_spec64)}%{m32:%(cpp_subtarget_spec32)}" -#endif - -/* Restore this from sparc/sparc.h, netbsd.h changes it. */ -#undef CPP_SPEC -#define CPP_SPEC "%(cpp_cpu) %(cpp_arch) %(cpp_endian) %(cpp_subtarget)" - -/* Name the port. */ +/* Name the port. */ #undef TARGET_NAME #define TARGET_NAME (DEFAULT_ARCH32_P ? TARGET_NAME32 : TARGET_NAME64) @@ -308,18 +232,12 @@ Boston, MA 02111-1307, USA. */ #undef LONG_DOUBLE_TYPE_SIZE #define LONG_DOUBLE_TYPE_SIZE 128 -#undef MAX_LONG_DOUBLE_TYPE_SIZE -#define MAX_LONG_DOUBLE_TYPE_SIZE 128 - #undef LIBGCC2_LONG_DOUBLE_TYPE_SIZE #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128 #undef CC1_SPEC #define CC1_SPEC CC1_SPEC64 -#undef CPP_SUBTARGET_SPEC -#define CPP_SUBTARGET_SPEC CPP_SUBTARGET_SPEC64 - #undef TARGET_NAME #define TARGET_NAME TARGET_NAME64 @@ -332,15 +250,9 @@ Boston, MA 02111-1307, USA. */ #undef LONG_DOUBLE_TYPE_SIZE #define LONG_DOUBLE_TYPE_SIZE 64 -#undef MAX_LONG_DOUBLE_TYPE_SIZE -#define MAX_LONG_DOUBLE_TYPE_SIZE 64 - #undef LIBGCC2_LONG_DOUBLE_TYPE_SIZE #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64 -#undef CPP_SUBTARGET_SPEC -#define CPP_SUBTARGET_SPEC CPP_SUBTARGET_SPEC32 - #undef CC1_SPEC #define CC1_SPEC CC1_SPEC32