include dbxelf.h elfos.h freebsd-spec.h rs6000/sysv4.h netbsd.h

and netbsd-elf.h on powerpc64-netbsd.

port netbsd64.h forward from GCC changes.  (it's a pity that
a vast portion of linux64.h isn't in some common header that
netbsd64.h and freebsd64.h could also used.  there's 100s of
lines of copypasta here, oh well.)
This commit is contained in:
mrg 2014-03-04 08:43:12 +00:00
parent 93bd3693a8
commit c9d652c862
2 changed files with 49 additions and 93 deletions

View File

@ -2114,13 +2114,15 @@ powerpc*-*-freebsd*)
esac
;;
powerpc*-*-netbsd*)
tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h rs6000/sysv4.h"
tm_file="${tm_file} netbsd.h netbsd-elf.h"
case ${target} in
powerpc64*)
tm_file="rs6000/biarch64.h ${tm_file} rs6000/default64.h rs6000/netbsd64.h"
tmake_file="${tmake_file} rs6000/t-netbsd64"
;;
*)
tm_file="${tm_file} dbxelf.h elfos.h netbsd.h netbsd-elf.h freebsd-spec.h rs6000/sysv4.h rs6000/netbsd.h"
tm_file="${tm_file} rs6000/netbsd.h"
tmake_file="${tmake_file} rs6000/t-netbsd"
;;
esac

View File

@ -59,6 +59,15 @@ extern int dot_symbols;
#define TARGET_PROFILE_KERNEL profile_kernel
#define TARGET_USES_LINUX64_OPT 1
#ifdef HAVE_LD_LARGE_TOC
#undef TARGET_CMODEL
#define TARGET_CMODEL rs6000_current_cmodel
#define SET_CMODEL(opt) rs6000_current_cmodel = opt
#else
#define SET_CMODEL(opt) do {} while (0)
#endif
#undef PROCESSOR_DEFAULT
#define PROCESSOR_DEFAULT PROCESSOR_POWER4
#undef PROCESSOR_DEFAULT64
@ -80,7 +89,7 @@ extern int dot_symbols;
#define SUBSUBTARGET_OVERRIDE_OPTIONS \
do \
{ \
if (!rs6000_explicit_options.alignment) \
if (!global_options_set.x_rs6000_alignment_flags) \
rs6000_alignment_flags = MASK_ALIGN_NATURAL; \
if (TARGET_64BIT) \
{ \
@ -90,14 +99,14 @@ extern int dot_symbols;
error (INVALID_64BIT, "call"); \
} \
dot_symbols = !strcmp (rs6000_abi_name, "aixdesc"); \
if (target_flags & MASK_RELOCATABLE) \
if (rs6000_isa_flags & OPTION_MASK_RELOCATABLE) \
{ \
target_flags &= ~MASK_RELOCATABLE; \
rs6000_isa_flags &= ~OPTION_MASK_RELOCATABLE; \
error (INVALID_64BIT, "relocatable"); \
} \
if (target_flags & MASK_EABI) \
if (rs6000_isa_flags & OPTION_MASK_EABI) \
{ \
target_flags &= ~MASK_EABI; \
rs6000_isa_flags &= ~OPTION_MASK_EABI; \
error (INVALID_64BIT, "eabi"); \
} \
if (TARGET_PROTOTYPE) \
@ -105,11 +114,28 @@ extern int dot_symbols;
target_prototype = 0; \
error (INVALID_64BIT, "prototype"); \
} \
if ((target_flags & MASK_POWERPC64) == 0) \
if ((rs6000_isa_flags & OPTION_MASK_POWERPC64) == 0) \
{ \
target_flags |= MASK_POWERPC64; \
rs6000_isa_flags |= OPTION_MASK_POWERPC64; \
error ("-m64 requires a PowerPC64 cpu"); \
} \
if ((rs6000_isa_flags_explicit \
& OPTION_MASK_MINIMAL_TOC) != 0) \
{ \
if (global_options_set.x_rs6000_current_cmodel \
&& rs6000_current_cmodel != CMODEL_SMALL) \
error ("-mcmodel incompatible with other toc options"); \
SET_CMODEL (CMODEL_SMALL); \
} \
{ \
if (!global_options_set.x_rs6000_current_cmodel) \
SET_CMODEL (CMODEL_MEDIUM); \
if (rs6000_current_cmodel != CMODEL_SMALL) \
{ \
TARGET_NO_FP_IN_TOC = 0; \
TARGET_NO_SUM_IN_TOC = 0; \
} \
} \
} \
else \
{ \
@ -120,16 +146,23 @@ extern int dot_symbols;
TARGET_PROFILE_KERNEL = 0; \
error (INVALID_32BIT, "profile-kernel"); \
} \
if (global_options_set.x_rs6000_current_cmodel) \
{ \
SET_CMODEL (CMODEL_SMALL); \
error (INVALID_32BIT, "cmodel"); \
} \
} \
} \
while (0)
#ifdef RS6000_BI_ARCH
#if 0
#undef OVERRIDE_OPTIONS
#define OVERRIDE_OPTIONS \
rs6000_override_options (((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) \
? (char *) 0 : TARGET_CPU_DEFAULT)
#endif
#endif
@ -153,30 +186,22 @@ extern int dot_symbols;
#endif
#endif
#define ASM_SPEC32 "-a32 %{n} %{T} %{Ym,*} %{Yd,*} \
%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \
%{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \
%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
%{mcall-freebsd: -mbig} \
%{mcall-i960-old: -mlittle} \
%{mcall-linux: -mbig} \
%{mcall-gnu: -mbig} \
%{mcall-netbsd: -mbig} \
}}}}"
#define ASM_SPEC32 "-a32 \
%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \
%{memb|msdata=eabi: -memb}"
#define ASM_SPEC64 "-a64"
#define ASM_SPEC_COMMON "%(asm_cpu) \
%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \
%{v:-V} %{Qy:} %{!Qn:-Qy} %{Wa,*:%*} \
%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian}"
%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}" \
ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
#undef SUBSUBTARGET_EXTRA_SPECS
#define SUBSUBTARGET_EXTRA_SPECS \
{ "asm_spec_common", ASM_SPEC_COMMON }, \
{ "asm_spec32", ASM_SPEC32 }, \
{ "asm_spec64", ASM_SPEC64 }, \
{ "link_os_netbsd_spec32", LINK_OS_NETBSD_SPEC32 }, \
{ "link_os_netbsd_spec32", LINK_OS_NETBSD_SPEC32 }, \
{ "link_os_netbsd_spec64", LINK_OS_NETBSD_SPEC64 },
#undef MULTILIB_DEFAULTS
@ -260,10 +285,6 @@ extern int dot_symbols;
#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \
(!(FIRST) ? upward : FUNCTION_ARG_PADDING (MODE, TYPE))
/* Override svr4.h */
#undef MD_EXEC_PREFIX
#undef MD_STARTFILE_PREFIX
/* NetBSD doesn't support saving and restoring 64-bit regs in a 32-bit
process. XXXMRG? */
#define OS_MISSING_POWERPC64 !TARGET_64BIT
@ -328,9 +349,6 @@ extern int dot_symbols;
#undef ENDFILE_DEFAULT_SPEC
#define ENDFILE_DEFAULT_SPEC "%(endfile_netbsd)"
#undef CRTSAVRES_DEFAULT_SPEC
#define CRTSAVRES_DEFAULT_SPEC ""
#undef LINK_START_DEFAULT_SPEC
#define LINK_START_DEFAULT_SPEC "%(link_start_netbsd)"
@ -468,68 +486,6 @@ extern int dot_symbols;
&& SCALAR_FLOAT_MODE_P (GET_MODE (X)) \
&& BITS_PER_WORD == HOST_BITS_PER_INT)))))
/* This ABI cannot use DBX_LINES_FUNCTION_RELATIVE, nor can it use
dbxout_stab_value_internal_label_diff, because we must
use the function code label, not the function descriptor label. */
#define DBX_OUTPUT_SOURCE_LINE(FILE, LINE, COUNTER) \
do \
{ \
char temp[256]; \
const char *s; \
ASM_GENERATE_INTERNAL_LABEL (temp, "LM", COUNTER); \
dbxout_begin_stabn_sline (LINE); \
assemble_name (FILE, temp); \
putc ('-', FILE); \
s = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \
rs6000_output_function_entry (FILE, s); \
putc ('\n', FILE); \
targetm.asm_out.internal_label (FILE, "LM", COUNTER); \
COUNTER += 1; \
} \
while (0)
/* Similarly, we want the function code label here. Cannot use
dbxout_stab_value_label_diff, as we have to use
rs6000_output_function_entry. FIXME. */
#define DBX_OUTPUT_BRAC(FILE, NAME, BRAC) \
do \
{ \
const char *s; \
dbxout_begin_stabn (BRAC); \
s = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \
/* dbxout_block passes this macro the function name as NAME, \
assuming that it is the function code start label. In our \
case, the function name is the OPD entry. dbxout_block is \
broken, hack around it here. */ \
if (NAME == s) \
putc ('0', FILE); \
else \
{ \
assemble_name (FILE, NAME); \
putc ('-', FILE); \
rs6000_output_function_entry (FILE, s); \
} \
putc ('\n', FILE); \
} \
while (0)
#define DBX_OUTPUT_LBRAC(FILE, NAME) DBX_OUTPUT_BRAC (FILE, NAME, N_LBRAC)
#define DBX_OUTPUT_RBRAC(FILE, NAME) DBX_OUTPUT_BRAC (FILE, NAME, N_RBRAC)
/* Another case where we want the dot name. */
#define DBX_OUTPUT_NFUN(FILE, LSCOPE, DECL) \
do \
{ \
const char *s; \
dbxout_begin_empty_stabs (N_FUN); \
assemble_name (FILE, LSCOPE); \
putc ('-', FILE); \
s = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \
rs6000_output_function_entry (FILE, s); \
putc ('\n', FILE); \
} \
while (0)
/* Select a format to encode pointers in exception handling data. CODE
is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
true if the symbol may be affected by dynamic relocations. */
@ -545,8 +501,6 @@ while (0)
#undef DRAFT_V4_STRUCT_RET
#define DRAFT_V4_STRUCT_RET (!TARGET_64BIT)
#define TARGET_ASM_FILE_END rs6000_elf_end_indicate_exec_stack
#define TARGET_POSIX_IO
#define LINK_GCC_C_SEQUENCE_SPEC \