enum rs6000_sdata_type {
SDATA_NONE,
SDATA_DATA,
SDATA_SYSV,
SDATA_EABI
};
extern enum rs6000_sdata_type rs6000_sdata;
#define MASK_NO_BITFIELD_TYPE 0x40000000
#define MASK_STRICT_ALIGN 0x20000000
#define MASK_RELOCATABLE 0x10000000
#define MASK_EABI 0x08000000
#define MASK_LITTLE_ENDIAN 0x04000000
#define MASK_REGNAMES 0x02000000
#define MASK_PROTOTYPE 0x01000000
#define TARGET_NO_BITFIELD_TYPE (target_flags & MASK_NO_BITFIELD_TYPE)
#define TARGET_STRICT_ALIGN (target_flags & MASK_STRICT_ALIGN)
#define TARGET_RELOCATABLE (target_flags & MASK_RELOCATABLE)
#define TARGET_EABI (target_flags & MASK_EABI)
#define TARGET_LITTLE_ENDIAN (target_flags & MASK_LITTLE_ENDIAN)
#define TARGET_REGNAMES (target_flags & MASK_REGNAMES)
#define TARGET_PROTOTYPE (target_flags & MASK_PROTOTYPE)
#define TARGET_TOC ((target_flags & MASK_64BIT) \
|| ((target_flags & (MASK_RELOCATABLE \
| MASK_MINIMAL_TOC)) \
&& flag_pic > 1) \
|| DEFAULT_ABI == ABI_AIX \
|| DEFAULT_ABI == ABI_NT)
#define TARGET_BITFIELD_TYPE (! TARGET_NO_BITFIELD_TYPE)
#define TARGET_BIG_ENDIAN (! TARGET_LITTLE_ENDIAN)
#define TARGET_NO_PROTOTYPE (! TARGET_PROTOTYPE)
#define TARGET_NO_TOC (! TARGET_TOC)
#define TARGET_NO_EABI (! TARGET_EABI)
#define TARGET_ELF 1
#undef SUBTARGET_SWITCHES
#define SUBTARGET_SWITCHES \
{ "bit-align", -MASK_NO_BITFIELD_TYPE }, \
{ "no-bit-align", MASK_NO_BITFIELD_TYPE }, \
{ "strict-align", MASK_STRICT_ALIGN }, \
{ "no-strict-align", -MASK_STRICT_ALIGN }, \
{ "relocatable", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC }, \
{ "no-relocatable", -MASK_RELOCATABLE }, \
{ "relocatable-lib", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC }, \
{ "no-relocatable-lib", -MASK_RELOCATABLE }, \
{ "little-endian", MASK_LITTLE_ENDIAN }, \
{ "little", MASK_LITTLE_ENDIAN }, \
{ "big-endian", -MASK_LITTLE_ENDIAN }, \
{ "big", -MASK_LITTLE_ENDIAN }, \
{ "no-toc", 0 }, \
{ "toc", MASK_MINIMAL_TOC }, \
{ "full-toc", MASK_MINIMAL_TOC }, \
{ "prototype", MASK_PROTOTYPE }, \
{ "no-prototype", -MASK_PROTOTYPE }, \
{ "no-traceback", 0 }, \
{ "eabi", MASK_EABI }, \
{ "no-eabi", -MASK_EABI }, \
{ "regnames", MASK_REGNAMES }, \
{ "no-regnames", -MASK_REGNAMES }, \
{ "sdata", 0 }, \
{ "no-sdata", 0 }, \
{ "sim", 0 }, \
{ "ads", 0 }, \
{ "yellowknife", 0 }, \
{ "mvme", 0 }, \
{ "emb", 0 }, \
{ "solaris-cclib", 0 }, \
{ "shlib", 0 }, \
EXTRA_SUBTARGET_SWITCHES \
{ "newlib", 0 },
#define EXTRA_SUBTARGET_SWITCHES
#define RS6000_ABI_NAME "sysv"
extern const char *rs6000_abi_name;
extern const char *rs6000_sdata_name;
#define SUBTARGET_OPTIONS \
{ "call-", &rs6000_abi_name}, \
{ "sdata=", &rs6000_sdata_name}
extern int g_switch_value;
extern int g_switch_set;
#ifndef SDATA_DEFAULT_SIZE
#define SDATA_DEFAULT_SIZE 8
#endif
#define SUBTARGET_OVERRIDE_OPTIONS \
do { \
if (!g_switch_set) \
g_switch_value = SDATA_DEFAULT_SIZE; \
\
if (!strcmp (rs6000_abi_name, "sysv")) \
rs6000_current_abi = ABI_V4; \
else if (!strcmp (rs6000_abi_name, "sysv-noeabi")) \
{ \
rs6000_current_abi = ABI_V4; \
target_flags &= ~ MASK_EABI; \
} \
else if (!strcmp (rs6000_abi_name, "sysv-eabi") \
|| !strcmp (rs6000_abi_name, "eabi")) \
{ \
rs6000_current_abi = ABI_V4; \
target_flags |= MASK_EABI; \
} \
else if (!strcmp (rs6000_abi_name, "aix")) \
{ \
rs6000_current_abi = ABI_AIX_NODESC; \
target_flags |= MASK_EABI; \
} \
else if (!strcmp (rs6000_abi_name, "aixdesc")) \
rs6000_current_abi = ABI_AIX; \
else if (!strcmp (rs6000_abi_name, "nt")) \
rs6000_current_abi = ABI_NT; \
else if (!strcmp (rs6000_abi_name, "linux")) \
rs6000_current_abi = ABI_V4; \
else if (!strcmp (rs6000_abi_name, "solaris")) \
rs6000_current_abi = ABI_SOLARIS; \
else \
{ \
rs6000_current_abi = ABI_V4; \
error ("Bad value for -mcall-%s", rs6000_abi_name); \
} \
\
if (rs6000_sdata_name) \
{ \
if (!strcmp (rs6000_sdata_name, "none")) \
rs6000_sdata = SDATA_NONE; \
else if (!strcmp (rs6000_sdata_name, "data")) \
rs6000_sdata = SDATA_DATA; \
else if (!strcmp (rs6000_sdata_name, "default")) \
rs6000_sdata = (TARGET_EABI) ? SDATA_EABI : SDATA_SYSV; \
else if (!strcmp (rs6000_sdata_name, "sysv")) \
rs6000_sdata = SDATA_SYSV; \
else if (!strcmp (rs6000_sdata_name, "eabi")) \
rs6000_sdata = SDATA_EABI; \
else \
error ("Bad value for -msdata=%s", rs6000_sdata_name); \
} \
else if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) \
{ \
rs6000_sdata = SDATA_DATA; \
rs6000_sdata_name = "data"; \
} \
else \
{ \
rs6000_sdata = SDATA_NONE; \
rs6000_sdata_name = "none"; \
} \
\
if (TARGET_RELOCATABLE && \
(rs6000_sdata == SDATA_EABI || rs6000_sdata == SDATA_SYSV)) \
{ \
rs6000_sdata = SDATA_DATA; \
error ("-mrelocatable and -msdata=%s are incompatible.", \
rs6000_sdata_name); \
} \
\
else if (flag_pic && \
(rs6000_sdata == SDATA_EABI || rs6000_sdata == SDATA_SYSV)) \
{ \
rs6000_sdata = SDATA_DATA; \
error ("-f%s and -msdata=%s are incompatible.", \
(flag_pic > 1) ? "PIC" : "pic", \
rs6000_sdata_name); \
} \
\
if (rs6000_sdata != SDATA_NONE && DEFAULT_ABI != ABI_V4 \
&& DEFAULT_ABI != ABI_SOLARIS) \
{ \
rs6000_sdata = SDATA_NONE; \
error ("-msdata=%s and -mcall-%s are incompatible.", \
rs6000_sdata_name, rs6000_abi_name); \
} \
\
if (TARGET_RELOCATABLE && !TARGET_MINIMAL_TOC) \
{ \
target_flags |= MASK_MINIMAL_TOC; \
error ("-mrelocatable and -mno-minimal-toc are incompatible."); \
} \
\
if (TARGET_RELOCATABLE && \
(rs6000_current_abi == ABI_AIX || rs6000_current_abi == ABI_NT)) \
{ \
target_flags &= ~MASK_RELOCATABLE; \
error ("-mrelocatable and -mcall-%s are incompatible.", \
rs6000_abi_name); \
} \
\
if (flag_pic > 1 && \
(rs6000_current_abi == ABI_AIX || rs6000_current_abi == ABI_NT)) \
{ \
flag_pic = 0; \
error ("-fPIC and -mcall-%s are incompatible.", \
rs6000_abi_name); \
} \
\
if (rs6000_current_abi == ABI_AIX && TARGET_LITTLE_ENDIAN) \
{ \
target_flags &= ~MASK_LITTLE_ENDIAN; \
error ("-mcall-aixdesc must be big endian"); \
} \
\
if (rs6000_current_abi == ABI_NT && TARGET_BIG_ENDIAN) \
{ \
target_flags |= MASK_LITTLE_ENDIAN; \
error ("-mcall-nt must be little endian"); \
} \
\
\
if (flag_pic > 1) \
target_flags |= MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC; \
\
else if (TARGET_RELOCATABLE) \
flag_pic = 2; \
\
} while (0)
#define DEFAULT_ABI rs6000_current_abi
#define CPP_DEFAULT_SPEC "-D_ARCH_PPC"
#define ASM_DEFAULT_SPEC "-mppc"
#include "rs6000/rs6000.h"
#undef TARGET_DEFAULT
#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS)
#undef PROCESSOR_DEFAULT
#define PROCESSOR_DEFAULT PROCESSOR_PPC601
#undef FIXED_R13
#define FIXED_R13 1
#undef FP_ARG_MAX_REG
#define FP_ARG_MAX_REG ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_AIX_NODESC) \
? FP_ARG_AIX_MAX_REG : FP_ARG_V4_MAX_REG)
#undef RS6000_VARARGS_AREA
#define RS6000_VARARGS_AREA ((rs6000_sysv_varargs_p) ? RS6000_VARARGS_SIZE : 0)
#undef BYTES_BIG_ENDIAN
#undef WORDS_BIG_ENDIAN
#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN)
#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN)
#if !defined(_LITTLE_ENDIAN) && !defined(__sun__)
#define LIBGCC2_WORDS_BIG_ENDIAN 1
#else
#define LIBGCC2_WORDS_BIG_ENDIAN 0
#endif
#undef RS6000_REG_SAVE
#define RS6000_REG_SAVE ((DEFAULT_ABI == ABI_AIX \
|| DEFAULT_ABI == ABI_AIX_NODESC) \
? (TARGET_64BIT ? 64 : 32) \
: 0)
#undef RS6000_SAVE_AREA
#define RS6000_SAVE_AREA \
(((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_AIX_NODESC) ? 24 : 8) << (TARGET_64BIT ? 1 : 0))
#undef FP_SAVE_INLINE
#define FP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) < 64)
#undef XCOFF_DEBUGGING_INFO
#undef OBJECT_FORMAT_COFF
#undef ASM_OUTPUT_EXTERNAL
#undef JUMP_TABLES_IN_TEXT_SECTION
#define JUMP_TABLES_IN_TEXT_SECTION 0
#undef RELATIVE_PREFIX_NOT_LINKDIR
#undef ASM_FILE_END
#undef ASM_OUTPUT_EXTERNAL_LIBCALL
#undef READONLY_DATA_SECTION
#undef SELECT_SECTION
#undef ASM_DECLARE_FUNCTION_NAME
#undef ASM_OUTPUT_CONSTRUCTOR
#undef ASM_OUTPUT_DESTRUCTOR
#include "svr4.h"
#undef SAVE_FP_PREFIX
#undef SAVE_FP_SUFFIX
#define SAVE_FP_PREFIX "_savefpr_"
#define SAVE_FP_SUFFIX "_l"
#undef RESTORE_FP_PREFIX
#undef RESTORE_FP_SUFFIX
#define RESTORE_FP_PREFIX "_restfpr_"
#define RESTORE_FP_SUFFIX "_l"
#undef SAVE_VECTOR_PREFIX
#undef SAVE_VECTOR_SUFFIX
#define SAVE_VECTOR_PREFIX "_savev"
#define SAVE_VECTOR_SUFFIX ""
#undef RESTORE_VECTOR_PREFIX
#undef RESTORE_VECTOR_SUFFIX
#define RESTORE_VECTOR_PREFIX "_restv"
#define RESTORE_VECTOR_SUFFIX ""
#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE "int"
#undef WCHAR_TYPE
#define WCHAR_TYPE "long int"
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 32
#undef PCC_BITFIELD_TYPE_MATTERS
#define PCC_BITFIELD_TYPE_MATTERS (TARGET_BITFIELD_TYPE)
#undef STRICT_ALIGNMENT
#define STRICT_ALIGNMENT (TARGET_STRICT_ALIGN)
#undef STACK_BOUNDARY
#define STACK_BOUNDARY 128
#define ABI_STACK_BOUNDARY 128
#undef BIGGEST_ALIGNMENT
#define BIGGEST_ALIGNMENT 128
#undef BIGGEST_FIELD_ALIGNMENT
#undef ADJUST_FIELD_ALIGN
#undef ROUND_TYPE_ALIGN
#undef TEXT_SECTION_ASM_OP
#define TEXT_SECTION_ASM_OP "\t.section\t\".text\""
#undef DATA_SECTION_ASM_OP
#define DATA_SECTION_ASM_OP "\t.section\t\".data\""
#undef BSS_SECTION_ASM_OP
#define BSS_SECTION_ASM_OP "\t.section\t\".bss\""
#undef INIT_SECTION_ASM_OP
#define INIT_SECTION_ASM_OP "\t.section\t\".init\",\"ax\""
#undef FINI_SECTION_ASM_OP
#define FINI_SECTION_ASM_OP "\t.section\t\".fini\",\"ax\""
#define TOC_SECTION_ASM_OP "\t.section\t\".got\",\"aw\""
#define MINIMAL_TOC_SECTION_ASM_OP \
((TARGET_RELOCATABLE || flag_pic) ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"")
#undef CONST_SECTION_ASM_OP
#define CONST_SECTION_ASM_OP \
((TARGET_RELOCATABLE || flag_pic) ? "\t.section\t\".data\"\t# .rodata" : "\t.section\t\".rodata\"")
#define SDATA_SECTION_ASM_OP "\t.section\t\".sdata\",\"aw\""
#define SDATA2_SECTION_ASM_OP "\t.section\t\".sdata2\",\"a\""
#define SBSS_SECTION_ASM_OP \
((DEFAULT_ABI == ABI_SOLARIS) ? "\t.section\t\".sbss\",\"aw\"" : "\t.section\t\".sbss\",\"aw\",@nobits")
#undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_toc, in_sdata, in_sdata2, in_sbss, in_init, in_fini
#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \
CONST_SECTION_FUNCTION \
CTORS_SECTION_FUNCTION \
DTORS_SECTION_FUNCTION \
TOC_SECTION_FUNCTION \
SDATA_SECTION_FUNCTION \
SDATA2_SECTION_FUNCTION \
SBSS_SECTION_FUNCTION \
INIT_SECTION_FUNCTION \
FINI_SECTION_FUNCTION
extern void toc_section (), sdata_section (), sdata2_section ();
extern void sbss_section ();
#define TOC_SECTION_FUNCTION \
void \
toc_section () \
{ \
if (in_section != in_toc) \
{ \
in_section = in_toc; \
if ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT) \
&& TARGET_MINIMAL_TOC \
&& !TARGET_RELOCATABLE) \
{ \
if (! toc_initialized) \
{ \
toc_initialized = 1; \
fprintf (asm_out_file, "%s\n", TOC_SECTION_ASM_OP); \
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LCTOC", 0); \
fprintf (asm_out_file, "\t.tc "); \
ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1[TC],"); \
ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1"); \
fprintf (asm_out_file, "\n"); \
\
fprintf (asm_out_file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); \
ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1"); \
fprintf (asm_out_file, " = .+32768\n"); \
} \
else \
fprintf (asm_out_file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); \
} \
else if ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT) \
&& !TARGET_RELOCATABLE) \
fprintf (asm_out_file, "%s\n", TOC_SECTION_ASM_OP); \
else \
{ \
fprintf (asm_out_file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); \
if (! toc_initialized) \
{ \
ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1"); \
fprintf (asm_out_file, " = .+32768\n"); \
toc_initialized = 1; \
} \
} \
} \
}
#define SDATA_SECTION_FUNCTION \
void \
sdata_section () \
{ \
if (in_section != in_sdata) \
{ \
in_section = in_sdata; \
fprintf (asm_out_file, "%s\n", SDATA_SECTION_ASM_OP); \
} \
}
#define SDATA2_SECTION_FUNCTION \
void \
sdata2_section () \
{ \
if (in_section != in_sdata2) \
{ \
in_section = in_sdata2; \
fprintf (asm_out_file, "%s\n", SDATA2_SECTION_ASM_OP); \
} \
}
#define SBSS_SECTION_FUNCTION \
void \
sbss_section () \
{ \
if (in_section != in_sbss) \
{ \
in_section = in_sbss; \
fprintf (asm_out_file, "%s\n", SBSS_SECTION_ASM_OP); \
} \
}
#define INIT_SECTION_FUNCTION \
void \
init_section () \
{ \
if (in_section != in_init) \
{ \
in_section = in_init; \
fprintf (asm_out_file, "%s\n", INIT_SECTION_ASM_OP); \
} \
}
#define FINI_SECTION_FUNCTION \
void \
fini_section () \
{ \
if (in_section != in_fini) \
{ \
in_section = in_fini; \
fprintf (asm_out_file, "%s\n", FINI_SECTION_ASM_OP); \
} \
}
extern void rs6000_select_rtx_section (), rs6000_select_section ();
#undef SELECT_RTX_SECTION
#define SELECT_RTX_SECTION(MODE, X) rs6000_select_rtx_section (MODE, X)
#undef SELECT_SECTION
#define SELECT_SECTION(DECL,RELOC) rs6000_select_section (DECL, RELOC)
#undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P
#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X) \
(TARGET_TOC \
&& (GET_CODE (X) == SYMBOL_REF \
|| (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \
&& GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \
|| GET_CODE (X) == LABEL_REF \
|| (!TARGET_NO_FP_IN_TOC \
&& !TARGET_RELOCATABLE \
&& GET_CODE (X) == CONST_DOUBLE \
&& GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
&& BITS_PER_WORD == HOST_BITS_PER_INT)))
extern int rs6000_pic_labelno;
#undef ASM_DECLARE_FUNCTION_NAME
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
do { \
char *orig_name; \
char *init_ptr = (TARGET_64BIT) ? ".quad" : ".long"; \
STRIP_NAME_ENCODING (orig_name, NAME); \
\
if (TARGET_RELOCATABLE && (get_pool_size () != 0 || profile_flag)) \
{ \
char buf[256], *buf_ptr; \
\
ASM_OUTPUT_INTERNAL_LABEL (FILE, "LCL", rs6000_pic_labelno); \
\
ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1); \
STRIP_NAME_ENCODING (buf_ptr, buf); \
fprintf (FILE, "\t%s %s-", init_ptr, buf_ptr); \
\
ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno); \
fprintf (FILE, "%s\n", buf_ptr); \
} \
\
fprintf (FILE, "\t%s\t %s,", TYPE_ASM_OP, orig_name); \
fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
putc ('\n', FILE); \
ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
\
if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT) \
{ \
char *desc_name = orig_name; \
\
while (*desc_name == '.') \
desc_name++; \
\
if (TREE_PUBLIC (DECL)) \
fprintf (FILE, "\t.globl %s\n", desc_name); \
\
fprintf (FILE, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); \
fprintf (FILE, "%s:\n", desc_name); \
fprintf (FILE, "\t%s %s\n", init_ptr, orig_name); \
fprintf (FILE, "\t%s _GLOBAL_OFFSET_TABLE_\n", init_ptr); \
if (DEFAULT_ABI == ABI_AIX) \
fprintf (FILE, "\t%s 0\n", init_ptr); \
fprintf (FILE, "\t.previous\n"); \
} \
fprintf (FILE, "%s:\n", orig_name); \
} while (0)
#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
#undef ASM_OUTPUT_INTERNAL_LABEL_PREFIX
#define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \
fprintf (FILE, ".%s", PREFIX)
#undef SKIP_ASM_OP
#define SKIP_ASM_OP ".space"
#ifndef LOCAL_ASM_OP
#define LOCAL_ASM_OP ".local"
#endif
#ifndef LCOMM_ASM_OP
#define LCOMM_ASM_OP ".lcomm"
#endif
#undef ASM_OUTPUT_ALIGNED_LOCAL
#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
do { \
if (rs6000_sdata != SDATA_NONE && (SIZE) > 0 \
&& (SIZE) <= g_switch_value) \
{ \
sbss_section (); \
ASM_OUTPUT_ALIGN (FILE, exact_log2 (ALIGN / BITS_PER_UNIT)); \
ASM_OUTPUT_LABEL (FILE, NAME); \
ASM_OUTPUT_SKIP (FILE, SIZE); \
if (!flag_inhibit_size_directive && (SIZE) > 0) \
{ \
fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
assemble_name (FILE, NAME); \
fprintf (FILE, ",%d\n", SIZE); \
} \
} \
else \
{ \
fprintf (FILE, "\t%s\t", LCOMM_ASM_OP); \
assemble_name ((FILE), (NAME)); \
fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \
} \
} while (0)
#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)
#undef SWITCH_TAKES_ARG
#define SWITCH_TAKES_ARG(CHAR) \
((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \
|| (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
|| (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
|| (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \
|| (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'G')
#undef ASM_FILE_START
#define ASM_FILE_START(FILE) \
do { \
output_file_directive ((FILE), main_input_filename); \
rs6000_file_start (FILE, TARGET_CPU_DEFAULT); \
} while (0)
#undef ASM_OUTPUT_INT
#define ASM_OUTPUT_INT(FILE,VALUE) \
do { \
static int recurse = 0; \
if ((TARGET_RELOCATABLE || flag_pic) \
&& in_section != in_toc \
&& in_section != in_text \
&& in_section != in_ctors \
&& in_section != in_dtors \
&& !recurse \
&& GET_CODE (VALUE) != CONST_INT \
&& GET_CODE (VALUE) != CONST_DOUBLE \
&& CONSTANT_P (VALUE)) \
{ \
static int labelno = 0; \
char buf[256], *p; \
\
recurse = 1; \
ASM_GENERATE_INTERNAL_LABEL (buf, "LCP", labelno++); \
STRIP_NAME_ENCODING (p, buf); \
fprintf (FILE, "%s:\n", p); \
fprintf (FILE, "\t.long ("); \
output_addr_const (FILE, (VALUE)); \
fprintf (FILE, ")@fixup\n"); \
fprintf (FILE, "\t.section\t\".fixup\",\"aw\"\n"); \
ASM_OUTPUT_ALIGN (FILE, 2); \
fprintf (FILE, "\t.long\t%s\n", p); \
fprintf (FILE, "\t.previous\n"); \
recurse = 0; \
} \
\
else if (GET_CODE (VALUE) == SYMBOL_REF \
&& XSTR (VALUE, 0)[0] == '.' \
&& (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)) \
{ \
char *name = XSTR (VALUE, 0); \
while (*name == '.') \
name++; \
\
fprintf (FILE, "\t.long %s\n", name); \
} \
else \
{ \
fprintf (FILE, "\t.long "); \
output_addr_const (FILE, (VALUE)); \
fprintf (FILE, "\n"); \
} \
} while (0)
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
#define DBX_DEBUGGING_INFO
#define DWARF_DEBUGGING_INFO
#undef ENCODE_SECTION_INFO
#define ENCODE_SECTION_INFO(DECL) rs6000_encode_section_info (DECL)
extern void rs6000_encode_section_info ();
#undef STRIP_NAME_ENCODING
#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \
do { \
char *_name = SYMBOL_NAME; \
while (*_name == '*' || *_name == '@') \
_name++; \
(VAR) = _name; \
} while (0)
#undef ASM_OUTPUT_LABELREF
#define ASM_OUTPUT_LABELREF(FILE,NAME) \
do { \
char *_name = NAME; \
while (*_name == '*' || *_name == '@') \
_name++; \
fputs (_name, FILE); \
} while (0)
#undef ASM_OUTPUT_SECTION_NAME
#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \
do { \
static struct section_info \
{ \
struct section_info *next; \
char *name; \
enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type; \
} *sections; \
struct section_info *s; \
char *mode; \
enum sect_enum type; \
\
for (s = sections; s; s = s->next) \
if (!strcmp (NAME, s->name)) \
break; \
\
if (DECL && TREE_CODE (DECL) == FUNCTION_DECL) \
type = SECT_EXEC, mode = "ax"; \
else if (DECL && DECL_READONLY_SECTION (DECL, RELOC) && !TARGET_RELOCATABLE && !flag_pic) \
type = SECT_RO, mode = "a"; \
else \
type = SECT_RW, mode = "aw"; \
\
if (s == 0) \
{ \
s = (struct section_info *) xmalloc (sizeof (struct section_info)); \
s->name = xmalloc ((strlen (NAME) + 1) * sizeof (*NAME)); \
strcpy (s->name, NAME); \
s->type = type; \
s->next = sections; \
sections = s; \
fprintf (FILE, "\t.section\t\"%s\",\"%s\"\n", NAME, mode); \
} \
else \
{ \
if (DECL && s->type != type) \
error_with_decl (DECL, "%s causes a section type conflict"); \
\
fprintf (FILE, "\t.section\t\"%s\"\n", NAME); \
} \
} while (0)
#undef ASM_OUTPUT_CONSTRUCTOR
#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
do { \
if (DEFAULT_ABI != ABI_SOLARIS) \
{ \
ctors_section (); \
fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
assemble_name (FILE, NAME); \
} \
else \
{ \
init_section (); \
fputs ("\tbl ", FILE); \
assemble_name (FILE, NAME); \
} \
fputs ("\n", FILE); \
} while (0)
#undef ASM_OUTPUT_DESTRUCTOR
#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
do { \
if (DEFAULT_ABI != ABI_SOLARIS) \
{ \
dtors_section (); \
fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
assemble_name (FILE, NAME); \
} \
else \
{ \
fini_section (); \
fputs ("\tbl ", FILE); \
assemble_name (FILE, NAME); \
} \
fputs ("\n", FILE); \
} while (0)
#define DBX_FUNCTION_FIRST
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (PowerPC System V.4)");
#undef CPP_PREDEFINES
#define CPP_PREDEFINES \
"-DPPC -Dunix -D__svr4__ -Asystem(unix) -Asystem(svr4) -Acpu(powerpc) -Amachine(powerpc)"
#undef ASM_SPEC
#define ASM_SPEC "%(asm_cpu) \
%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \
%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \
%{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \
%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian} \
%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
%{mcall-solaris: -mlittle -msolaris} \
%{mcall-linux: -mbig} }}}}"
#ifndef CC1_ENDIAN_BIG_SPEC
#define CC1_ENDIAN_BIG_SPEC ""
#endif
#ifndef CC1_ENDIAN_LITTLE_SPEC
#define CC1_ENDIAN_LITTLE_SPEC "\
%{!mstrict-align: %{!mno-strict-align: \
-mstrict-align \
}}"
#endif
#ifndef CC1_ENDIAN_DEFAULT_SPEC
#define CC1_ENDIAN_DEFAULT_SPEC "%(cc1_endian_big_spec)"
#endif
#undef CC1_SPEC
#define CC1_SPEC "%{G*} \
%{mlittle: %(cc1_endian_little)} %{!mlittle: %{mlittle-endian: %(cc1_endian_little)}} \
%{mbig: %(cc1_endian_big)} %{!mbig: %{mbig-endian: %(cc1_endian_big)}} \
%{mcall-nt: -mlittle %{cc1_endian_little} } \
%{mcall-aixdesc: -mbig %{cc1_endian_big} } \
%{mcall-solaris: -mlittle %{cc1_endian_little} } \
%{mcall-linux: -mbig %{cc1_endian_big} } \
%{!mcall-nt: %{!mcall-aixdesc: %{!mcall-solaris: %{!mcall-linux: \
%(cc1_endian_default) \
}}}} \
%{mcall-solaris: -mregnames } \
%{mno-sdata: -msdata=none } \
%{meabi: %{!mcall-*: -mcall-sysv }} \
%{!meabi: %{!mno-eabi: \
%{mrelocatable: -meabi } \
%{mcall-solaris: -mno-eabi } \
%{mcall-linux: -mno-eabi }}} \
%{msdata: -msdata=default} \
%{mno-sdata: -msdata=none} \
%{profile: -p}"
#undef LINK_PATH_SPEC
#ifndef CROSS_COMPILE
#define LINK_PATH_SPEC "\
%{!R*:%{L*:-R %*}} \
%{!nostdlib: %{!YP,*: \
%{compat-bsd: \
%{p:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
%{!p:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}} \
%{!R*: %{!L*: -R /usr/ucblib}} \
%{!compat-bsd: \
%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
%{!p:-Y P,/usr/ccs/lib:/usr/lib}}}}"
#else
#define LINK_PATH_SPEC ""
#endif
#ifndef LINK_START_SPEC
#define LINK_START_SPEC "\
%{mads: %(link_start_ads) } \
%{myellowknife: %(link_start_yellowknife) } \
%{mmvme: %(link_start_mvme) } \
%{msim: %(link_start_sim) } \
%{mcall-linux: %(link_start_linux) } \
%{mcall-solaris: %(link_start_solaris) } \
%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(link_start_default) }}}}}}"
#endif
#ifndef LINK_START_DEFAULT_SPEC
#define LINK_START_DEFAULT_SPEC ""
#endif
#undef LINK_SPEC
#define LINK_SPEC "\
%{h*} %{v:-V} %{G*} \
%{Wl,*:%*} %{YP,*} %{R*} \
%{Qy:} %{!Qn:-Qy} \
%(link_shlib) \
%{!Ttext*: %(link_start) } \
%(link_target) \
%(link_os)"
#ifndef SHARED_LIB_SUPPORT
#define NO_SHARED_LIB_SUPPORT
#endif
#undef LINK_SHLIB_SPEC
#ifndef NO_SHARED_LIB_SUPPORT
#define LINK_SHLIB_SPEC "\
%{!static: %(link_path) %{!R*:%{L*:-R %*}}} \
%{mshlib: } \
%{static:-dn -Bstatic} \
%{shared:-G -dy -z text} \
%{symbolic:-Bsymbolic -G -dy -z text}"
#else
#define LINK_SHLIB_SPEC "\
%{mshlib: %(link_path) } \
%{!mshlib: %{!shared: %{!symbolic: -dn -Bstatic}}} \
%{static: } \
%{shared:-G -dy -z text %(link_path) } \
%{symbolic:-Bsymbolic -G -dy -z text %(link_path) }"
#endif
#undef LINK_TARGET_SPEC
#define LINK_TARGET_SPEC "\
%{mlittle: -oformat elf32-powerpcle } %{mlittle-endian: -oformat elf32-powerpcle } \
%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: %{mcall-solaris: -oformat elf32-powerpcle}}}}}"
#ifndef LINK_OS_SPEC
#define LINK_OS_SPEC "\
%{mads: %(link_os_ads) } \
%{myellowknife: %(link_os_yellowknife) } \
%{mmvme: %(link_os_mvme) } \
%{msim: %(link_os_sim) } \
%{mcall-linux: %(link_os_linux) } \
%{mcall-solaris: %(link_os_solaris) } \
%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(link_os_default) }}}}}}"
#endif
#ifndef LINK_OS_DEFAULT_SPEC
#define LINK_OS_DEFAULT_SPEC ""
#endif
#undef CPP_SYSV_SPEC
#define CPP_SYSV_SPEC \
"%{mrelocatable*: -D_RELOCATABLE} \
%{fpic: -D__PIC__=1 -D__pic__=1} \
%{!fpic: %{fPIC: -D__PIC__=2 -D__pic__=2}} \
%{mcall-sysv: -D_CALL_SYSV} %{mcall-nt: -D_CALL_NT} \
%{mcall-aix: -D_CALL_AIX} %{mcall-aixdesc: -D_CALL_AIX -D_CALL_AIXDESC} \
%{!mcall-sysv: %{!mcall-aix: %{!mcall-aixdesc: %{!mcall-nt: %(cpp_sysv_default) }}}} \
%{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
#undef CPP_SYSV_DEFAULT_SPEC
#define CPP_SYSV_DEFAULT_SPEC "-D_CALL_SYSV"
#ifndef CPP_ENDIAN_BIG_SPEC
#define CPP_ENDIAN_BIG_SPEC "-D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine(bigendian)"
#endif
#ifndef CPP_ENDIAN_LITTLE_SPEC
#define CPP_ENDIAN_LITTLE_SPEC "-D_LITTLE_ENDIAN -D__LITTLE_ENDIAN__ -Amachine(littleendian)"
#endif
#ifndef CPP_ENDIAN_SOLARIS_SPEC
#define CPP_ENDIAN_SOLARIS_SPEC "-D__LITTLE_ENDIAN__ -Amachine(littleendian)"
#endif
#undef CPP_ENDIAN_SPEC
#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-solaris: %(cpp_endian_solaris) } \
%{mcall-nt: %(cpp_endian_little) } \
%{mcall-linux: %(cpp_endian_big) } \
%{mcall-aixdesc: %(cpp_endian_big) } \
%{!mcall-solaris: %{!mcall-linux: %{!mcall-nt: %{!mcall-aixdesc: %(cpp_endian_default) }}}}}}}}"
#undef CPP_ENDIAN_DEFAULT_SPEC
#define CPP_ENDIAN_DEFAULT_SPEC "%(cpp_endian_big)"
#undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) %(cpp_endian) %(cpp_cpu) \
%{mads: %(cpp_os_ads) } \
%{myellowknife: %(cpp_os_yellowknife) } \
%{mmvme: %(cpp_os_mvme) } \
%{msim: %(cpp_os_sim) } \
%{mcall-linux: %(cpp_os_linux) } \
%{mcall-solaris: %(cpp_os_solaris) } \
%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(cpp_os_default) }}}}}}"
#ifndef CPP_OS_DEFAULT_SPEC
#define CPP_OS_DEFAULT_SPEC ""
#endif
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
%{mads: %(startfile_ads) } \
%{myellowknife: %(startfile_yellowknife) } \
%{mmvme: %(startfile_mvme) } \
%{msim: %(startfile_sim) } \
%{mcall-linux: %(startfile_linux) } \
%{mcall-solaris: %(startfile_solaris) } \
%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(startfile_default) }}}}}}"
#undef STARTFILE_DEFAULT_SPEC
#define STARTFILE_DEFAULT_SPEC ""
#undef LIB_SPEC
#define LIB_SPEC "\
%{mads: %(lib_ads) } \
%{myellowknife: %(lib_yellowknife) } \
%{mmvme: %(lib_mvme) } \
%{msim: %(lib_sim) } \
%{mcall-linux: %(lib_linux) } \
%{mcall-solaris: %(lib_solaris) } \
%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(lib_default) }}}}}}"
#undef LIBGCC_SPEC
#define LIBGCC_SPEC "libgcc.a%s"
#ifndef LIB_DEFAULT_SPEC
#define LIB_DEFAULT_SPEC ""
#endif
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "\
%{mads: ecrtn.o%s} \
%{myellowknife: ecrtn.o%s} \
%{mmvme: ecrtn.o%s} \
%{msim: ecrtn.o%s} \
%{mcall-linux: %(endfile_linux) } \
%{mcall-solaris: scrtn.o%s} \
%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(endfile_default) }}}}}}"
#undef ENDFILE_DEFAULT_SPEC
#define ENDFILE_DEFAULT_SPEC ""
#ifndef LIB_ADS_SPEC
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
#endif
#ifndef STARTFILE_ADS_SPEC
#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s"
#endif
#ifndef ENDFILE_ADS_SPEC
#define ENDFILE_ADS_SPEC "ecrtn.o%s"
#endif
#ifndef LINK_START_ADS_SPEC
#define LINK_START_ADS_SPEC "-T ads.ld%s"
#endif
#ifndef LINK_OS_ADS_SPEC
#define LINK_OS_ADS_SPEC ""
#endif
#ifndef CPP_OS_ADS_SPEC
#define CPP_OS_ADS_SPEC ""
#endif
#ifndef LIB_YELLOWKNIFE_SPEC
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
#endif
#ifndef STARTFILE_YELLOWKNIFE_SPEC
#define STARTFILE_YELLOWKNIFE_SPEC "ecrti.o%s crt0.o%s"
#endif
#ifndef ENDFILE_YELLOWKNIFE_SPEC
#define ENDFILE_YELLOWKNIFE_SPEC "ecrtn.o%s"
#endif
#ifndef LINK_START_YELLOWKNIFE_SPEC
#define LINK_START_YELLOWKNIFE_SPEC "-T yellowknife.ld%s"
#endif
#ifndef LINK_OS_YELLOWKNIFE_SPEC
#define LINK_OS_YELLOWKNIFE_SPEC ""
#endif
#ifndef CPP_OS_YELLOWKNIFE_SPEC
#define CPP_OS_YELLOWKNIFE_SPEC ""
#endif
#ifndef LIB_MVME_SPEC
#define LIB_MVME_SPEC "--start-group -lmvme -lc --end-group"
#endif
#ifndef STARTFILE_MVME_SPEC
#define STARTFILE_MVME_SPEC "ecrti.o%s crt0.o%s"
#endif
#ifndef ENDFILE_MVME_SPEC
#define ENDFILE_MVME_SPEC "ecrtn.o%s"
#endif
#ifndef LINK_START_MVME_SPEC
#define LINK_START_MVME_SPEC "%{!Wl,-T*: %{!T*: -Ttext 0x40000}}"
#endif
#ifndef LINK_OS_MVME_SPEC
#define LINK_OS_MVME_SPEC ""
#endif
#ifndef CPP_OS_MVME_SPEC
#define CPP_OS_MVME_SPEC ""
#endif
#ifndef LIB_SIM_SPEC
#define LIB_SIM_SPEC "--start-group -lsim -lc --end-group"
#endif
#ifndef STARTFILE_SIM_SPEC
#define STARTFILE_SIM_SPEC "ecrti.o%s sim-crt0.o%s"
#endif
#ifndef ENDFILE_SIM_SPEC
#define ENDFILE_SIM_SPEC "ecrtn.o%s"
#endif
#ifndef LINK_START_SIM_SPEC
#define LINK_START_SIM_SPEC "-Ttext 0x10000074"
#endif
#ifndef LINK_OS_SIM_SPEC
#define LINK_OS_SIM_SPEC ""
#endif
#ifndef CPP_OS_SIM_SPEC
#define CPP_OS_SIM_SPEC ""
#endif
#ifndef LIB_LINUX_SPEC
#ifdef USE_GNULIBC_1
#define LIB_LINUX_SPEC "%{mnewlib: --start-group -llinux -lc --end-group } \
%{!mnewlib: -lc }"
#else
#define LIB_LINUX_SPEC "%{mnewlib: --start-group -llinux -lc --end-group } \
%{!mnewlib: %{shared:-lc} %{!shared: %{pthread:-lpthread } \
%{profile:-lc_p} %{!profile:-lc}}}"
#endif
#endif
#ifndef STARTFILE_LINUX_SPEC
#define STARTFILE_LINUX_SPEC "\
%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} \
%{mnewlib: ecrti.o%s} \
%{!mnewlib: crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
#endif
#ifndef ENDFILE_LINUX_SPEC
#define ENDFILE_LINUX_SPEC "\
%{mnewlib: ecrtn.o%s} \
%{!mnewlib: %{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s}"
#endif
#ifndef LINK_START_LINUX_SPEC
#define LINK_START_LINUX_SPEC "-Ttext 0x400074"
#endif
#ifndef LINK_OS_LINUX_SPEC
#define LINK_OS_LINUX_SPEC ""
#endif
#ifndef CPP_OS_LINUX_SPEC
#ifdef USE_GNULIBC_1
#define CPP_OS_LINUX_SPEC "-D__unix__ -D__linux__ \
%{!undef:%{!ansi:%{!std=*:-Dunix -Dlinux}%{std=gnu*:-Dunix -Dlinux}}} \
-Asystem(unix) -Asystem(posix)"
#else
#define CPP_OS_LINUX_SPEC "-D__unix__ -D__linux__ \
%{!undef:%{!ansi:%{!std=*:-Dunix -Dlinux}%{std=gnu*:-Dunix -Dlinux}}} \
-Asystem(unix) -Asystem(posix) %{pthread:-D_REENTRANT}"
#endif
#endif
#ifndef LIB_SOLARIS_SPEC
#define LIB_SOLARIS_SPEC "\
%{mnewlib: --start-group -lsolaris -lc --end-group } \
%{!mnewlib: \
%{ansi:values-Xc.o%s} \
%{!ansi: \
%{traditional:values-Xt.o%s} \
%{!traditional:values-Xa.o%s}} \
%{compat-bsd:-lucb -lsocket -lnsl -lelf -laio} \
%{solaris-cclib: /opt/SUNWspro/SC4.0/lib/libabi.a} \
%{!shared: %{!symbolic: -lc }}}"
#endif
#ifndef STARTFILE_SOLARIS_SPEC
#define STARTFILE_SOLARIS_SPEC "\
%{!msolaris-cclib: scrti.o%s scrt0.o%s} \
%{msolaris-cclib: /opt/SUNWspro/SC4.0/lib/crti.o%s /opt/SUNWspro/SC4.0/lib/crt1.o%s}"
#endif
#ifndef ENDFILE_SOLARIS_SPEC
#define ENDFILE_SOLARIS_SPEC "\
%{!msolaris-cclib: scrtn.o%s} \
%{msolaris-cclib: /opt/SUNWspro/SC4.0/lib/crtn.o%s}"
#endif
#ifndef LINK_START_SOLARIS_SPEC
#ifdef CROSS_COMPILER
#define LINK_START_SOLARIS_SPEC "-Ttext 0x2000074"
#else
#define LINK_START_SOLARIS_SPEC ""
#endif
#endif
#ifndef LINK_OS_SOLARIS_SPEC
#define LINK_OS_SOLARIS_SPEC ""
#endif
#ifndef CPP_OS_SOLARIS_SPEC
#define CPP_OS_SOLARIS_SPEC "-D__ppc -D__sun__=1 -D__unix__ -D__svr4__ -D__SVR4__ \
%{!undef:%{!ansi:%{!std=*:-Dsun=1 -Dunix -DSVR4 -D__EXTENSIONS__} \
%{std=gnu*:-Dsun=1 -Dunix -DSVR4 -D__EXTENSIONS__}}} \
-Amachine(prep)"
#endif
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \
{ "lib_sim", LIB_SIM_SPEC }, \
{ "lib_linux", LIB_LINUX_SPEC }, \
{ "lib_solaris", LIB_SOLARIS_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
{ "startfile_sim", STARTFILE_SIM_SPEC }, \
{ "startfile_linux", STARTFILE_LINUX_SPEC }, \
{ "startfile_solaris", STARTFILE_SOLARIS_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
{ "endfile_sim", ENDFILE_SIM_SPEC }, \
{ "endfile_linux", ENDFILE_LINUX_SPEC }, \
{ "endfile_solaris", ENDFILE_SOLARIS_SPEC }, \
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \
{ "link_path", LINK_PATH_SPEC }, \
{ "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_target", LINK_TARGET_SPEC }, \
{ "link_start", LINK_START_SPEC }, \
{ "link_start_ads", LINK_START_ADS_SPEC }, \
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
{ "link_start_sim", LINK_START_SIM_SPEC }, \
{ "link_start_linux", LINK_START_LINUX_SPEC }, \
{ "link_start_solaris", LINK_START_SOLARIS_SPEC }, \
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \
{ "link_os_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
{ "link_os_sim", LINK_OS_SIM_SPEC }, \
{ "link_os_linux", LINK_OS_LINUX_SPEC }, \
{ "link_os_solaris", LINK_OS_SOLARIS_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_endian_solaris", CPP_ENDIAN_SOLARIS_SPEC }, \
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
{ "cpp_os_sim", CPP_OS_SIM_SPEC }, \
{ "cpp_os_linux", CPP_OS_LINUX_SPEC }, \
{ "cpp_os_solaris", CPP_OS_SOLARIS_SPEC }, \
{ "cpp_os_default", CPP_OS_DEFAULT_SPEC },
#undef MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS { "mbig", "mcall-sysv" }
#define PROFILE_BEFORE_PROLOGUE 1
#undef RS6000_MCOUNT
#define RS6000_MCOUNT "_mcount"