diff options
Diffstat (limited to 'contrib/gcc/config/rs6000/sysv4.h')
-rw-r--r-- | contrib/gcc/config/rs6000/sysv4.h | 333 |
1 files changed, 125 insertions, 208 deletions
diff --git a/contrib/gcc/config/rs6000/sysv4.h b/contrib/gcc/config/rs6000/sysv4.h index ecc37ee..3da996f 100644 --- a/contrib/gcc/config/rs6000/sysv4.h +++ b/contrib/gcc/config/rs6000/sysv4.h @@ -1,5 +1,5 @@ /* Target definitions for GNU compiler for PowerPC running System V.4 - Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003 + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -21,6 +21,9 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* Header files should be C++ aware in general. */ +#define NO_IMPLICIT_EXTERN_C + /* Yes! We are ELF. */ #define TARGET_OBJECT_FORMAT OBJECT_ELF @@ -34,10 +37,6 @@ Boston, MA 02111-1307, USA. */ #undef ASM_DEFAULT_SPEC #define ASM_DEFAULT_SPEC "-mppc" -/* Override rs6000.h definition. */ -#undef CPP_DEFAULT_SPEC -#define CPP_DEFAULT_SPEC "-D_ARCH_PPC" - /* Small data support types. */ enum rs6000_sdata_type { SDATA_NONE, /* No small data support. */ @@ -152,6 +151,7 @@ extern int g_switch_set; /* Whether -G xx was passed. */ { "emb", 0, \ N_("Set the PPC_EMB bit in the ELF flags header") }, \ { "vxworks", 0, N_("no description yet") }, \ + { "windiss", 0, N_("Use the WindISS simulator") }, \ { "shlib", 0, N_("no description yet") }, \ EXTRA_SUBTARGET_SWITCHES \ { "newlib", 0, N_("no description yet") }, @@ -257,13 +257,16 @@ do { \ rs6000_sdata_name); \ } \ \ - if (rs6000_sdata != SDATA_NONE && DEFAULT_ABI != ABI_V4) \ + if ((rs6000_sdata != SDATA_NONE && DEFAULT_ABI != ABI_V4) \ + || (rs6000_sdata == SDATA_EABI && !TARGET_EABI)) \ { \ rs6000_sdata = SDATA_NONE; \ error ("-msdata=%s and -mcall-%s are incompatible", \ rs6000_sdata_name, rs6000_abi_name); \ } \ \ + targetm.have_srodata_section = rs6000_sdata == SDATA_EABI; \ + \ if (TARGET_RELOCATABLE && !TARGET_MINIMAL_TOC) \ { \ target_flags |= MASK_MINIMAL_TOC; \ @@ -326,7 +329,7 @@ do { \ /* Define this to set the endianness to use in libgcc2.c, which can not depend on target_flags. */ -#if !defined(_LITTLE_ENDIAN) && !defined(__sun__) +#if !defined(__LITTLE_ENDIAN__) && !defined(__sun__) #define LIBGCC2_WORDS_BIG_ENDIAN 1 #else #define LIBGCC2_WORDS_BIG_ENDIAN 0 @@ -383,10 +386,6 @@ do { \ /* Real stack boundary as mandated by the appropriate ABI. */ #define ABI_STACK_BOUNDARY ((TARGET_EABI && !TARGET_ALTIVEC_ABI) ? 64 : 128) -/* No data type wants to be aligned rounder than this. */ -#undef BIGGEST_ALIGNMENT -#define BIGGEST_ALIGNMENT ((TARGET_EABI && !TARGET_ALTIVEC) ? 64 : 128) - /* An expression for the alignment of a structure field FIELD if the alignment computed in the usual way is COMPUTED. */ #define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ @@ -433,12 +432,11 @@ do { \ /* Besides the usual ELF sections, we need a toc section. */ /* Override elfos.h definition. */ #undef EXTRA_SECTIONS -#define EXTRA_SECTIONS in_const, in_toc, in_sdata, in_sdata2, in_sbss, in_init, in_fini +#define EXTRA_SECTIONS in_toc, in_sdata, in_sdata2, in_sbss, in_init, in_fini /* Override elfos.h definition. */ #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ - CONST_SECTION_FUNCTION \ TOC_SECTION_FUNCTION \ SDATA_SECTION_FUNCTION \ SDATA2_SECTION_FUNCTION \ @@ -550,41 +548,14 @@ fini_section () \ } \ } -/* A C statement or statements to switch to the appropriate section - for output of RTX in mode MODE. You can assume that RTX is some - kind of constant in RTL. The argument MODE is redundant except in - the case of a `const_int' rtx. Select the section by calling - `text_section' or one of the alternatives for other sections. - - Do not define this macro if you put all constants in the read-only - data section. */ - -/* Override elfos.h definition. */ -#undef SELECT_RTX_SECTION -#define SELECT_RTX_SECTION(MODE, X, ALIGN) rs6000_select_rtx_section (MODE, X) - -/* A C statement or statements to switch to the appropriate - section for output of DECL. DECL is either a `VAR_DECL' node - or a constant of some sort. RELOC indicates whether forming - the initial value of DECL requires link-time relocations. */ - -/* Override elfos.h definition. */ -#undef SELECT_SECTION -#define SELECT_SECTION(DECL, RELOC, ALIGN) rs6000_select_section (DECL, RELOC) +/* Override default elf definitions. */ +#undef TARGET_ASM_SELECT_RTX_SECTION +#define TARGET_ASM_SELECT_RTX_SECTION rs6000_elf_select_rtx_section +#undef TARGET_ASM_SELECT_SECTION +#define TARGET_ASM_SELECT_SECTION rs6000_elf_select_section +#define TARGET_ASM_UNIQUE_SECTION rs6000_elf_unique_section -/* A C statement to build up a unique section name, expressed as a - STRING_CST node, and assign it to DECL_SECTION_NAME (decl). - RELOC indicates whether the initial value of EXP requires - link-time relocations. If you do not define this macro, GCC will use - the symbol name prefixed by `.' as the section name. Note - this - macro can now be called for uninitialized data items as well as - initialised data and functions. */ - -/* Override elfos.h definition. */ -#undef UNIQUE_SECTION -#define UNIQUE_SECTION(DECL, RELOC) rs6000_unique_section (DECL, RELOC) - -/* Return non-zero if this entry is to be written into the constant pool +/* Return nonzero if this entry is to be written into the constant pool in a special way. We do so if this is a SYMBOL_REF, LABEL_REF or a CONST containing one of them. If -mfp-in-toc (the default), we also do this for floating-point constants. We actually can only do this @@ -644,18 +615,14 @@ extern int rs6000_pic_labelno; putc ('\n', FILE); \ } \ \ - fprintf (FILE, "%s", TYPE_ASM_OP); \ - assemble_name (FILE, NAME); \ - putc (',', FILE); \ - fprintf (FILE, TYPE_OPERAND_FMT, "function"); \ - putc ('\n', FILE); \ + ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \ ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ \ if (DEFAULT_ABI == ABI_AIX) \ { \ const char *desc_name, *orig_name; \ \ - STRIP_NAME_ENCODING (orig_name, NAME); \ + orig_name = (*targetm.strip_name_encoding) (NAME); \ desc_name = orig_name; \ while (*desc_name == '.') \ desc_name++; \ @@ -674,39 +641,6 @@ extern int rs6000_pic_labelno; ASM_OUTPUT_LABEL (FILE, NAME); \ } while (0) -/* A C compound statement that outputs the assembler code for a thunk function, - used to implement C++ virtual function calls with multiple inheritance. The - thunk acts as a wrapper around a virtual function, adjusting the implicit - object parameter before handing control off to the real function. - - First, emit code to add the integer DELTA to the location that contains the - incoming first argument. Assume that this argument contains a pointer, and - is the one used to pass the this' pointer in C++. This is the incoming - argument *before* the function prologue, e.g. %o0' on a sparc. The - addition must preserve the values of all other incoming arguments. - - After the addition, emit code to jump to FUNCTION, which is a - FUNCTION_DECL'. This is a direct pure jump, not a call, and does not touch - the return address. Hence returning from FUNCTION will return to whoever - called the current thunk'. - - The effect must be as if FUNCTION had been called directly with the adjusted - first argument. This macro is responsible for emitting all of the code for - a thunk function; FUNCTION_PROLOGUE' and FUNCTION_EPILOGUE' are not - invoked. - - The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already been - extracted from it.) It might possibly be useful on some targets, but - probably not. - - If you do not define this macro, the target-independent code in the C++ - frontend will generate a less efficient heavyweight thunk that calls - FUNCTION instead of jumping to it. The generic approach does not support - varargs. */ - -#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \ - output_mi_thunk (FILE, THUNK_FNDECL, DELTA, FUNCTION) - /* The USER_LABEL_PREFIX stuff is affected by the -fleading-underscore flag. The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */ @@ -718,15 +652,8 @@ extern int rs6000_pic_labelno; #define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \ asm_fprintf (FILE, "%L%s", PREFIX) -#define ASM_OUTPUT_LABEL(FILE,NAME) \ - (assemble_name (FILE, NAME), fputs (":\n", FILE)) - -/* This is how to output a command to make the user-level label named NAME - defined for reference from other files. */ - -#define ASM_GLOBALIZE_LABEL(FILE,NAME) \ - do { fputs ("\t.globl ", FILE); \ - assemble_name (FILE, NAME); putc ('\n', FILE);} while (0) +/* Globalizing directive for a label. */ +#define GLOBAL_ASM_OP "\t.globl " /* This says how to output assembler code to declare an uninitialized internal linkage data object. Under SVR4, @@ -749,11 +676,7 @@ do { \ ASM_OUTPUT_LABEL (FILE, NAME); \ ASM_OUTPUT_SKIP (FILE, SIZE); \ if (!flag_inhibit_size_directive && (SIZE) > 0) \ - { \ - fprintf (FILE, "%s", SIZE_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, ",%d\n", SIZE); \ - } \ + ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE); \ } \ else \ { \ @@ -761,12 +684,12 @@ do { \ assemble_name ((FILE), (NAME)); \ fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \ } \ + ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ } while (0) /* Describe how to emit uninitialized external linkage items. */ #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ do { \ - ASM_GLOBALIZE_LABEL (FILE, NAME); \ ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \ } while (0) @@ -781,9 +704,7 @@ do { \ do { \ if (DEFAULT_ABI == ABI_V4) \ asm_fprintf (FILE, \ - (TARGET_32BIT \ - ? "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,12(%s)\n" \ - : "\tstdu %s,-32(%s)\n\tstd %s,24(%s)\n"), \ + "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,12(%s)\n", \ reg_names[1], reg_names[1], reg_names[REGNO], \ reg_names[1]); \ } while (0) @@ -795,9 +716,7 @@ do { \ do { \ if (DEFAULT_ABI == ABI_V4) \ asm_fprintf (FILE, \ - (TARGET_32BIT \ - ? "\t{l|lwz} %s,12(%s)\n\t{ai|addic} %s,%s,16\n" \ - : "\tld %s,24(%s)\n\t{ai|addic} %s,%s,32\n"), \ + "\t{l|lwz} %s,12(%s)\n\t{ai|addic} %s,%s,16\n", \ reg_names[REGNO], reg_names[1], reg_names[1], \ reg_names[1]); \ } while (0) @@ -832,39 +751,22 @@ extern int fixuplabelno; /* This is the end of what might become sysv4.h. */ /* Use DWARF 2 debugging information by default. */ -#undef PREFERRED_DEBUGGING_TYPE -#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG +#undef PREFERRED_DEBUGGING_TYPE +#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG /* Historically we have also supported stabs debugging. */ -#define DBX_DEBUGGING_INFO - -/* If we are referencing a function that is static or is known to be - in this file, make the SYMBOL_REF special. We can use this to indicate - that we can branch to this function without emitting a no-op after the - call. For real AIX calling sequences, we also replace the - function name with the real name (1 or 2 leading .'s), rather than - the function descriptor name. This saves a lot of overriding code - to read the prefixes. */ +#define DBX_DEBUGGING_INFO 1 -#undef ENCODE_SECTION_INFO -#define ENCODE_SECTION_INFO(DECL) rs6000_encode_section_info (DECL) +#define TARGET_ENCODE_SECTION_INFO rs6000_elf_encode_section_info +#define TARGET_STRIP_NAME_ENCODING rs6000_elf_strip_name_encoding +#define TARGET_IN_SMALL_DATA_P rs6000_elf_in_small_data_p +#define TARGET_SECTION_TYPE_FLAGS rs6000_elf_section_type_flags /* The ELF version doesn't encode [DS] or whatever at the end of symbols. */ #define RS6000_OUTPUT_BASENAME(FILE, NAME) \ assemble_name (FILE, NAME) -/* This macro gets just the user-specified name - out of the string in a SYMBOL_REF. Discard - a leading * or @. */ -#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ -do { \ - const char *_name = SYMBOL_NAME; \ - while (*_name == '*' || *_name == '@') \ - _name++; \ - (VAR) = _name; \ -} while (0) - /* This is how to output a reference to a user-level label named NAME. `assemble_name' uses this. */ @@ -893,9 +795,19 @@ do { \ #define TARGET_VERSION fprintf (stderr, " (PowerPC System V.4)"); #endif -#ifndef CPP_PREDEFINES -#define CPP_PREDEFINES \ - "-DPPC -Dunix -D__svr4__ -Asystem=unix -Asystem=svr4 -Acpu=powerpc -Amachine=powerpc" +#ifndef TARGET_OS_CPP_BUILTINS +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + builtin_define_std ("PPC"); \ + builtin_define_std ("unix"); \ + builtin_define ("__svr4__"); \ + builtin_assert ("system=unix"); \ + builtin_assert ("system=svr4"); \ + builtin_assert ("cpu=powerpc"); \ + builtin_assert ("machine=powerpc"); \ + } \ + while (0) #endif /* Pass various options to the assembler. */ @@ -977,12 +889,14 @@ do { \ %{myellowknife: %(link_start_yellowknife) } \ %{mmvme: %(link_start_mvme) } \ %{msim: %(link_start_sim) } \ +%{mwindiss: %(link_start_windiss) } \ %{mcall-freebsd: %(link_start_freebsd) } \ %{mcall-linux: %(link_start_linux) } \ %{mcall-gnu: %(link_start_gnu) } \ %{mcall-netbsd: %(link_start_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %{!mcall-freebsd: %(link_start_default) }}}}}}}}" +%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ + %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: \ + %{!mcall-freebsd: %(link_start_default) }}}}}}}}}" #define LINK_START_DEFAULT_SPEC "" @@ -1034,75 +948,37 @@ do { \ %{myellowknife: %(link_os_yellowknife) } \ %{mmvme: %(link_os_mvme) } \ %{msim: %(link_os_sim) } \ +%{mwindiss: %(link_os_windiss) } \ %{mcall-freebsd: %(link_os_freebsd) } \ %{mcall-linux: %(link_os_linux) } \ %{mcall-gnu: %(link_os_gnu) } \ %{mcall-netbsd: %(link_os_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %(link_os_default) }}}}}}}}" +%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ + %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ + %{!mcall-netbsd: %(link_os_default) }}}}}}}}}" #define LINK_OS_DEFAULT_SPEC "" #define CPP_SYSV_SPEC \ "%{mrelocatable*: -D_RELOCATABLE} \ %{fpic: -D__PIC__=1 -D__pic__=1} \ -%{!fpic: %{fPIC: -D__PIC__=2 -D__pic__=2}} \ -%{mlong-double-128: -D__LONG_DOUBLE_128__=1} \ -%{!mlong-double-64: %(cpp_longdouble_default)} \ -%{mcall-sysv: -D_CALL_SYSV} \ -%{mcall-aix: -D_CALL_AIX} %{mcall-aixdesc: -D_CALL_AIX -D_CALL_AIXDESC} \ -%{!mcall-sysv: %{!mcall-aix: %{!mcall-aixdesc: %(cpp_sysv_default) }}} \ -%{msoft-float: -D_SOFT_FLOAT} \ -%{!msoft-float: %{!mhard-float: \ - %{mcpu=401: -D_SOFT_FLOAT} \ - %{mcpu=403: -D_SOFT_FLOAT} \ - %{mcpu=405: -D_SOFT_FLOAT} \ - %{mcpu=ec603e: -D_SOFT_FLOAT} \ - %{mcpu=801: -D_SOFT_FLOAT} \ - %{mcpu=821: -D_SOFT_FLOAT} \ - %{mcpu=823: -D_SOFT_FLOAT} \ - %{mcpu=860: -D_SOFT_FLOAT} \ - %{!mcpu*: %(cpp_float_default) }}}" - -/* Whether floating point is disabled by default. */ -#define CPP_FLOAT_DEFAULT_SPEC "" - -/* Whether 'long double' is 128 bits by default. */ -#define CPP_LONGDOUBLE_DEFAULT_SPEC "" - -#define CPP_SYSV_DEFAULT_SPEC "-D_CALL_SYSV" - -#define CPP_ENDIAN_BIG_SPEC "-D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian" - -#define CPP_ENDIAN_LITTLE_SPEC "-D_LITTLE_ENDIAN -D__LITTLE_ENDIAN__ -Amachine=littleendian" - -#define CPP_ENDIAN_SPEC \ -"%{mlittle: %(cpp_endian_little) } \ -%{mlittle-endian: %(cpp_endian_little) } \ -%{mbig: %(cpp_endian_big) } \ -%{mbig-endian: %(cpp_endian_big) } \ -%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ - %{mcall-freebsd: %(cpp_endian_big) } \ - %{mcall-linux: %(cpp_endian_big) } \ - %{mcall-gnu: %(cpp_endian_big) } \ - %{mcall-netbsd: %(cpp_endian_big) } \ - %{mcall-i960-old: %(cpp_endian_little) } \ - %{mcall-aixdesc: %(cpp_endian_big) } \ - %{!mcall-linux: %{!mcall-gnu: %{!mcall-freebsd: %{!mcall-netbsd: %{!mcall-aixdesc: %(cpp_endian_default) }}}}}}}}}" - -#define CPP_ENDIAN_DEFAULT_SPEC "%(cpp_endian_big)" +%{!fpic: %{fPIC: -D__PIC__=2 -D__pic__=2}}" /* Override rs6000.h definition. */ #undef CPP_SPEC -#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) %(cpp_endian) %(cpp_cpu) \ +#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) \ %{mads: %(cpp_os_ads) } \ %{myellowknife: %(cpp_os_yellowknife) } \ %{mmvme: %(cpp_os_mvme) } \ %{msim: %(cpp_os_sim) } \ +%{mwindiss: %(cpp_os_windiss) } \ %{mcall-freebsd: %(cpp_os_freebsd) } \ %{mcall-linux: %(cpp_os_linux) } \ %{mcall-gnu: %(cpp_os_gnu) } \ %{mcall-netbsd: %(cpp_os_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %(cpp_os_default) }}}}}}}}" +%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ + %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ + %{!mcall-netbsd: %(cpp_os_default) }}}}}}}}}" #define CPP_OS_DEFAULT_SPEC "" @@ -1113,11 +989,14 @@ do { \ %{myellowknife: %(startfile_yellowknife) } \ %{mmvme: %(startfile_mvme) } \ %{msim: %(startfile_sim) } \ +%{mwindiss: %(startfile_windiss) } \ %{mcall-freebsd: %(startfile_freebsd) } \ %{mcall-linux: %(startfile_linux) } \ %{mcall-gnu: %(startfile_gnu) } \ %{mcall-netbsd: %(startfile_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %(startfile_default) }}}}}}}}" +%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ + %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ + %{!mcall-netbsd: %(startfile_default) }}}}}}}}}" #define STARTFILE_DEFAULT_SPEC "" @@ -1128,27 +1007,36 @@ do { \ %{myellowknife: %(lib_yellowknife) } \ %{mmvme: %(lib_mvme) } \ %{msim: %(lib_sim) } \ +%{mwindiss: %(lib_windiss) } \ %{mcall-freebsd: %(lib_freebsd) } \ %{mcall-linux: %(lib_linux) } \ %{mcall-gnu: %(lib_gnu) } \ %{mcall-netbsd: %(lib_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %(lib_default) }}}}}}}}" +%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ + %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ + %{!mcall-netbsd: %(lib_default) }}}}}}}}}" #define LIB_DEFAULT_SPEC "" /* Override svr4.h definition. */ #undef ENDFILE_SPEC -#define ENDFILE_SPEC "crtsavres.o%s \ -%{mads: %(endfile_ads)} \ -%{myellowknife: %(endfile_yellowknife)} \ -%{mmvme: %(endfile_mvme)} \ -%{msim: %(endfile_sim)} \ -%{mcall-freebsd: %(endfile_freebsd) } \ -%{mcall-linux: %(endfile_linux) } \ -%{mcall-gnu: %(endfile_gnu) } \ -%{mcall-netbsd: %(endfile_netbsd) } \ -%{mvxworks: %(endfile_vxworks) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %{!mvxworks: %(endfile_default) }}}}}}}}}" +#define ENDFILE_SPEC "\ +%{mads: crtsavres.o%s %(endfile_ads)} \ +%{myellowknife: crtsavres.o%s %(endfile_yellowknife)} \ +%{mmvme: crtsavres.o%s %(endfile_mvme)} \ +%{msim: crtsavres.o%s %(endfile_sim)} \ +%{mwindiss: %(endfile_windiss)} \ +%{mcall-freebsd: crtsavres.o%s %(endfile_freebsd) } \ +%{mcall-linux: crtsavres.o%s %(endfile_linux) } \ +%{mcall-gnu: crtsavres.o%s %(endfile_gnu) } \ +%{mcall-netbsd: crtsavres.o%s %(endfile_netbsd) } \ +%{mvxworks: crtsavres.o%s %(endfile_vxworks) } \ +%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ + %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ + %{!mcall-netbsd: %{!mvxworks: %(crtsavres_default) \ + %(endfile_default) }}}}}}}}}}" + +#define CRTSAVRES_DEFAULT_SPEC "crtsavres.o%s" #define ENDFILE_DEFAULT_SPEC "" @@ -1207,7 +1095,7 @@ do { \ /* FreeBSD support. */ #define CPP_OS_FREEBSD_SPEC "\ - -D__PPC__ -D__ppc__ -D__PowerPC__ -D__powerpc__ \ + -D__ELF__ -D__PPC__ -D__ppc__ -D__PowerPC__ -D__powerpc__ \ -Acpu=powerpc -Amachine=powerpc" #define STARTFILE_FREEBSD_SPEC FBSD_STARTFILE_SPEC @@ -1216,7 +1104,17 @@ do { \ #define LINK_START_FREEBSD_SPEC "" #define LINK_OS_FREEBSD_SPEC "\ - %{symbolic:-Bsymbolic}" + %{p:%e`-p' not supported; use `-pg' and gprof(1)} \ + %{Wl,*:%*} \ + %{v:-V} \ + %{assert*} %{R*} %{rpath*} %{defsym*} \ + %{shared:-Bshareable %{h*} %{soname*}} \ + %{!shared: \ + %{!static: \ + %{rdynamic: -export-dynamic} \ + %{!dynamic-linker: -dynamic-linker /usr/libexec/ld-elf.so.1}} \ + %{static:-Bstatic}} \ + %{symbolic:-Bsymbolic}" /* GNU/Linux support. */ #ifdef USE_GNULIBC_1 @@ -1375,14 +1273,31 @@ ncrtn.o%s" %{mcpu=823: -DCPU=PPC603} \ %{mcpu=860: -DCPU=PPC603}" +/* WindISS support. */ + +#define LIB_WINDISS_SPEC "--start-group -li -lcfp -lwindiss -lram -limpl -limpfp --end-group" + +#define CPP_OS_WINDISS_SPEC "\ +-D__rtasim \ +-D__EABI__ \ +-D__ppc \ +%{!msoft-float: -D__hardfp} \ +" + +#define STARTFILE_WINDISS_SPEC "crt0.o%s crtbegin.o%s" + +#define ENDFILE_WINDISS_SPEC "crtend.o%s" + +#define LINK_START_WINDISS_SPEC "" + +#define LINK_OS_WINDISS_SPEC "" + /* Define any extra SPECS that the compiler needs to generate. */ /* Override rs6000.h definition. */ #undef SUBTARGET_EXTRA_SPECS #define SUBTARGET_EXTRA_SPECS \ { "cpp_sysv", CPP_SYSV_SPEC }, \ - { "cpp_sysv_default", CPP_SYSV_DEFAULT_SPEC }, \ - { "cpp_endian_default", CPP_ENDIAN_DEFAULT_SPEC }, \ - { "cpp_endian", CPP_ENDIAN_SPEC }, \ + { "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \ { "lib_ads", LIB_ADS_SPEC }, \ { "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \ { "lib_mvme", LIB_MVME_SPEC }, \ @@ -1392,6 +1307,7 @@ ncrtn.o%s" { "lib_linux", LIB_LINUX_SPEC }, \ { "lib_netbsd", LIB_NETBSD_SPEC }, \ { "lib_vxworks", LIB_VXWORKS_SPEC }, \ + { "lib_windiss", LIB_WINDISS_SPEC }, \ { "lib_default", LIB_DEFAULT_SPEC }, \ { "startfile_ads", STARTFILE_ADS_SPEC }, \ { "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \ @@ -1402,6 +1318,7 @@ ncrtn.o%s" { "startfile_linux", STARTFILE_LINUX_SPEC }, \ { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ { "startfile_vxworks", STARTFILE_VXWORKS_SPEC }, \ + { "startfile_windiss", STARTFILE_WINDISS_SPEC }, \ { "startfile_default", STARTFILE_DEFAULT_SPEC }, \ { "endfile_ads", ENDFILE_ADS_SPEC }, \ { "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \ @@ -1412,6 +1329,7 @@ ncrtn.o%s" { "endfile_linux", ENDFILE_LINUX_SPEC }, \ { "endfile_netbsd", ENDFILE_NETBSD_SPEC }, \ { "endfile_vxworks", ENDFILE_VXWORKS_SPEC }, \ + { "endfile_windiss", ENDFILE_WINDISS_SPEC }, \ { "endfile_default", ENDFILE_DEFAULT_SPEC }, \ { "link_path", LINK_PATH_SPEC }, \ { "link_shlib", LINK_SHLIB_SPEC }, \ @@ -1426,6 +1344,7 @@ ncrtn.o%s" { "link_start_linux", LINK_START_LINUX_SPEC }, \ { "link_start_netbsd", LINK_START_NETBSD_SPEC }, \ { "link_start_vxworks", LINK_START_VXWORKS_SPEC }, \ + { "link_start_windiss", LINK_START_WINDISS_SPEC }, \ { "link_start_default", LINK_START_DEFAULT_SPEC }, \ { "link_os", LINK_OS_SPEC }, \ { "link_os_ads", LINK_OS_ADS_SPEC }, \ @@ -1437,14 +1356,11 @@ ncrtn.o%s" { "link_os_gnu", LINK_OS_GNU_SPEC }, \ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \ { "link_os_vxworks", LINK_OS_VXWORKS_SPEC }, \ + { "link_os_windiss", LINK_OS_WINDISS_SPEC }, \ { "link_os_default", LINK_OS_DEFAULT_SPEC }, \ { "cc1_endian_big", CC1_ENDIAN_BIG_SPEC }, \ { "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \ { "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \ - { "cpp_endian_big", CPP_ENDIAN_BIG_SPEC }, \ - { "cpp_endian_little", CPP_ENDIAN_LITTLE_SPEC }, \ - { "cpp_float_default", CPP_FLOAT_DEFAULT_SPEC }, \ - { "cpp_longdouble_default", CPP_LONGDOUBLE_DEFAULT_SPEC }, \ { "cpp_os_ads", CPP_OS_ADS_SPEC }, \ { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \ { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \ @@ -1453,8 +1369,9 @@ ncrtn.o%s" { "cpp_os_gnu", CPP_OS_GNU_SPEC }, \ { "cpp_os_linux", CPP_OS_LINUX_SPEC }, \ { "cpp_os_netbsd", CPP_OS_NETBSD_SPEC }, \ - { "cpp_os_vxworks", CPP_OS_VXWORKS_SPEC }, \ { "cpp_os_rtems", CPP_OS_RTEMS_SPEC }, \ + { "cpp_os_vxworks", CPP_OS_VXWORKS_SPEC }, \ + { "cpp_os_windiss", CPP_OS_WINDISS_SPEC }, \ { "cpp_os_default", CPP_OS_DEFAULT_SPEC }, /* Define this macro as a C expression for the initializer of an @@ -1481,7 +1398,7 @@ ncrtn.o%s" pack(pop)'. The pack(push,<n>) pragma specifies the maximum alignment (in bytes) of fields within a structure, in much the same way as the __aligned__' and __packed__' __attribute__'s - do. A pack value of zero resets the behaviour to the default. + do. A pack value of zero resets the behavior to the default. Successive invocations of this pragma cause the previous values to be stacked, so that invocations of #pragma pack(pop)' will return to the previous value. */ |