mips_cpu is 5000, set interlocks and cop_interlocks.
(mips_ip): Give a better error message if the ISA level is wrong.
(md_parse_option): Recognize -mcpu=[v][r]5000.
* config/tc-mips.c (load_register): Remove unnecessary code that
was causing the high 32bits of 64bit constants to be lost.
Fixes PR10503. The compiler was producing the assembler code:
dli $3,0xfffffffffffff
when constructing the softfloat library. Unfortunately it was being
incorrectly assembled.
* config/tc-mips.c: Added cop_interlocks, to avoid NOP insertion
between co-processor comparisons and branches for the VR4300.
The preliminary documentation was slightly unclear on this issue, but
NEC have confirmed that there is an interlock within the CPU.
(mips_target_format): If mips_64, return elf64 targets rather than
elf32 ones.
(md_longopts): Add "32" and "64".
(md_parse_option): Handle -32 and -64.
(md_show_usage): Mention -32 and -64.
(cons_fix_new_mips): If mips_64, don't convert an 8 byte reloc to
a 4 byte one.
(mips_frob_file): Declare.
* config/tc-mips.c (struct mips_hi_fixup): Define.
(mips_hi_fixup_list): New static variable.
(imm_unmatched_hi): New static variable.
(md_assemble): Clear imm_reloc, imm_unmatched_hi, and
offset_reloc. Pass imm_unmatched_hi to append_insn.
(append_insn): Add unmatched_hi parameter. If it is set, add the
new fixup to mips_hi_fixup_list. Change all callers.
(mips_ip): Set imm_unmatched_hi when appropriate.
(mips_frob_file): New function.
(s_extern): Don't declare.
(reg_needs_delay): New static function.
(macro_build): Permit GOT/CALL_HI/LO relocs.
(macro_build_lui): If place is not NULL, use the number in the
expression.
(load_address): Handle mips_big_got case.
(macro): Handle mips_big_got for M_LA_AB, M_JAL_A, and load and
store macros.
(OPTION_XGOT): Define.
(md_longopts): Add "xgot" if OBJ_ELF.
(md_parse_option): Handle -xgot.
(md_show_usage): Mention -xgot.
(md_apply_fix): Permit GOT/CALL_HI/LO relocs.
(tc_gen_reloc): Handle GOT/CALL_HI/LO relocs.
* config/tc-mips.c (mips_4010): New static variable.
(interlocks): New static variable.
(md_begin): Check for a cpu of "r4010". Set mips_4010 correctly.
If mips_4650 or mips_4010, set interlocks.
(append_insn): Check interlocks, not mips_4650.
(mips_emit_delays): Likewise.
(mips_ip): Only permit INSN_4010 instructions if mips_4010.
(md_longopts): Add "m4010" and "no-m4010".
(md_parse_option): Accept -mcpu=r4010. Handle -m4010 and
-no-m4010.
(md_show_usage): Document -m4010 and -no-m4010.
(ecoff_directive_def): Set ecoff_debugging_seen.
(ecoff_stab): Likewise.
* ecoff.h: Make idempotent.
(ecoff_debugging_seen): Declare.
* config/tc-mips.c: Include ecoff.h.
(mips_debug): New static variable.
(s_stringer, s_mips_space): Remove unneeded declarations.
(md_parse_option): In case 'g', set mips_debug to debugging level.
(mips_local_label): New function.
* tc-mips.h (LOCAL_LABEL): Call mips_local_label.
(mips_local_label): Declare.
PR 6978.
* config/obj-multi.h (obj_frob_symbol, obj_frob_file, S_GET_SIZE, S_SET_SIZE,
S_GET_ALIGN, S_SET_ALIGN, obj_copy_symbol_attributes, OBJ_PROCESS_STAB): New
macros.
* config/tc-mips.c: Protect against redefining them also when including
obj-elf.h. Test only OBJ_ELF for including elf/mips.h.
* config/tc-mips.c (mips_target_format): Changed to a function, checking flavor
and byte order at run time.
(md_parse_option, cases OPTION_EB and OPTION_EL): Set target_big_endian here.
(md_begin): Not here.
* config/tc-mips.h (mips_target_format): Adjust declaration.
(TARGET_FORMAT): Call mips_target_format.
* config/tc-mips.h (USE_GLOBAL_POINTER_OPT): Define in terms of OUTPUT_FLAVOR.
* config/tc-mips.c (g_switch_value, g_switch_seen): Define unconditionally.
(md_begin, mips_ip, md_parse_option, s_change_sec, s_option, s_abicalls,
nopic_need_relax): Check USE_GLOBAL_POINTER_OPT at run time, instead of
compiling conditionally on GPOPT.
(GPOPT): Don't define.
(md_shortopts): Always include -G.
(RDATA_SECTION_NAME): Select at run time.
(md_begin): Test for ELF format at run time instead of compile time.
(mips_ip, s_change_sec): Ditto.
(md_parse_option, cases OPTION_CALL_SHARED and OPTION_NON_SHARED): Ditto.
(OPTION_CALL_SHARED, OPTION_NON_SHARED, mips_regmask_frag): Define
unconditionally.
(nopic_need_relax): New static function, split out from
md_estimate_size_before_relax.
(md_estimate_size_before_relax): Call it.
(load_address, macro): In NO_PIC branches, if nopic_need_relax returns nonzero,
don't attempt GP optimization.
* subsegs.c (subsegs_begin): Don't do it here.
* as.c (main): Call frag_init before subsegs_begin.
* frags.c (frag_append_1_char): New function.
* frags.h (frag_append_1_char): Declare it.
(FRAG_APPEND_1_CHAR): Call it. Old definition is commented out for now.
* as.h (struct frag): Added (but commented out) new fields for tracking current
alignment.
(frag_now_fix): Changed macro to function declaration.
* frags.c (frag_now_fix): Define function here.
(frag_new): Use it instead of accessing `frags' directly.
* frags.h (frags): Change comment to indicate it shouldn't be accessed directly.
* subsegs.h (struct frchain): New field frch_obstack, intended to eventually
replace global `frags' obstack.
* subsegs.c (subseg_set_rest): Use frag_now_fix instead of accessing `frags'
directly. Initialize fields of new frchainS explicitly instead of with memset.
* config/obj-coff.c (obj_coff_ln) [!BFD_ASSEMBLER]: Use frag_now_fix.
* config/tc-mips.c (s_loc), config/obj-vms.c (vms_resolve_symbol_redef),
symbols.c (colon): Likewise.
(md_begin): Don't mips_cpu if it was already set.
(md_parse_option): For -mipsN, don't set mips_cpu if it was
already set. For -mcpu=, just set mips_cpu, not mips_isa.