(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.
(s_mri): New function.
* read.h (s_mri): Declare.
* app.c (scrub_m68k_mri): New static variable.
(mri_pseudo): New static variable.
(do_scrub_begin): Add m68k_mri parameter. Use it rather than
flag_m68k_mri. Initialize scrub_m68k_mri.
(mri_state, mri_last_ch): New static variables.
(struct app_save): Add scrub_m68k_mri, mri_state, and mri_last_ch
fields.
(app_push): Save new fields.
(app_pop): Restore new fields.
(do_scrub_chars): Check scrub_m68k_mri rather than flag_mri_mri.
If TC_M68K, use a trivial state machine to look for occurrences of
the .mri pseudo-op, and change the mode appropriately.
* as.h (do_scrub_begin): Update prototype.
* input-scrub.c (input_scrub_begin): Pass flag_m68k_mri to
do_scrub_begin.
* config/tc-m68k.c (reg_prefix_optional_seen): New static
variable.
(m68k_mri_mode_change): New function.
(md_parse_option): Set reg_prefix_optional_seen.
* config/tc-m68k.h (m68k_mri_mode_change): Declare.
(MRI_MODE_CHANGE): Define.
* doc/as.texinfo: Document .mri pseudo-op.
Support for OBJ_ELF on m68k, mostly inside #ifdef OBJ_ELF:
* config/m68k-parse.h (enum pic_relocation): Define.
(struct m68k_exp): Add pic_reloc field.
* config/tc-m68k.h (TC_RELOC_RTSYM_LOC_FIXUP): Define.
(tc_fix_adjustable): Define to call tc_m68k_fix_adjustable.
(NO_RELOC): Define to BFD_RELOC_NONE if BFD_ASSEMBLER, to zero
otherwise.
* config/tc-m68k.c: Delete definition of NO_RELOC.
(struct m68k_it): Add pic_reloc field.
(add_fix): Copy over pic_reloc field.
(md_pseudo_table): Interpret .align parameter as byte count.
(mote_pseudo_table): Likewise.
(tc_m68k_fix_adjustable): New function.
(get_reloc_code): New function.
(md_assemble): Use it as last argument to fix_new_exp.
(md_apply_fix_2): For a relocation against a symbol don't put the
addend into the data.
(tc_gen_reloc): Different addend computation for OBJ_ELF.
(m68k_ip): Don't relax an operand that requires pic relocation.
(md_begin): Align .text, .data and .bss on 4 byte boundary by
default.
* write.c (fixup_segment): Don't add symbol value to addend if
TC_M68K and OBJ_ELF.
* config/m68k-parse.y (yylex): Handle @PLTPC, etc.
(motorola_operand): Add rule for `(zapc, EXPR)'.
(do_align): Take new len parameter. Change all callers. Pass it
to md_do_align.
(s_align_bytes): Arg now indicates the length of the fill pattern.
(s_align_ptwo): Likewise.
* config/obj-coff.c (write_object_file): Pass length to
md_do_align.
* config/tc-i386.h (md_do_align): Take new len parameter.
* config/tc-m88k.h (md_do_align): Likewise.
* config/tc-m88k.c (m88k_do_align): Likewise.
* config/tc-sh.h (md_do_align): Likewise.
* config/tc-sh.c (sh_do_align): Likewise.
* doc/as.texinfo: Document new pseudo-ops.
* config/obj-coff.c (fixup_mdeps): Divide offset by fr_var, as is
done in cvt_frag_to_fill.
PR 8974.
* app.c (do_scrub_chars): If flag_m68k_mri, don't put a dot in
front of generated pseudo-ops.
* read.c (potable): Ignore "name".
(s_app_file): Permit a single quote after the string, since one
may appear in m68k MRI mode.
(arch_tab): Add HX.
(targ_has_sfr): Handle ARCH_HX.
(targ_has_iclass): Handle ARCH_HX.
(tc_coff_fix2rtype): Add return 0 to avoid warning.
(tc_headers_hook): If the architecture was specified explicitly,
use it when setting the flags. Set the extern variable coff_flags
rather than headers->filehdr.f_flags, since the latter is set
unconditionally in obj-coff.c.
(i960_handle_align): Remove unused variable fixp.
patches from Alan Modra <alan@spri.levels.unisa.edu.au>:
* configure.in: Set OPCODES and BFD to search directories.
Substitute OPCODES_DEP and BFDDEP. On SunOS, set HLDFLAGS.
* configure: Rebuild.
* Makefile.in (LDFLAGS, HLDFLAGS): New variables.
(LIBDEPS): New variable.
(as.new0: Depend upon $(LIBDEPS) rather than $(LIBS). Use
$(HLDFLAGS) in link.
(check): Set LD_LIBRARY_PATH in the environment.
than comparing S_GET_SEGMENT to undefined_section.
(write_object_file): Skip symbols which were equated to an
undefined or common symbol.
* symbols.c (resolve_symbol_value): Use S_IS_DEFINED and
S_IS_COMMON rather than comparing S_GET_SEGMENT to
undefined_section.
(S_GET_VALUE): Likewise. Avoid recursion problems if S_IS_DEFINED
or S_IS_COMMON call S_GET_VALUE.
* config/obj-aout.h (S_IS_COMMON): Define if not BFD_ASSEMBLER.
* config/obj-aout.c (obj_emit_relocations): If a reloc is equated
to an undefined or common symbol, convert the reloc to be against
the target symbol.
(obj_crawl_symbol_chain): Skip symbols which were equated to an
undefined or common symbol.
* config/obj-bout.h (S_IS_COMMON): Define if not BFD_ASSEMBLER.
* config/obj-bout.c (obj_emit_relocations): If a reloc is equated
to an undefined or common symbol, convert the reloc to be against
the target symbol.
(obj_crawl_symbol_chain): Skip symbols which were equated to an
undefined or common symbol.
* config/obj-coff.c (do_relocs_for): Use S_IS_DEFINED and
S_IS_COMMON rather than comparing S_GET_SEGMENT to
undefined_section.
(yank_symbols): Skip symbols which were equated to an undefined or
common symbol.
* configure.in (m68*-apple-aux*): New target.
* config/te-aux.h: New file.
* config/obj-coff.c (compare_external_relocs): New static function
if TE_AUX.
(do_relocs_for): Sort relocs if TE_AUX.
(fixup_segment): If TE_AUX, store common symbol value in segment.
* config/tc-m68k.h (TARGET_FORMAT): Define if TE_AUX.
BSF_FUNCTION.
(s_cpload): Set BSF_OBJECT for _gp_disp symbol.
* read.c (s_lcomm): If S_SET_SIZE is defined, set the size of the
symbol.
* ecoff.c (add_procedure): Set the BSF_FUNCTION flag.
(ecoff_build_symbols): If S_SET_SIZE is defined, set the size of
an undefined symbol and the size of a function symbol.
* config/obj-elf.c (elf_frob_symbol): If TC_MIPS, set BSF_OBJECT
for all common symbols.
(add_ecoff_symbol): Add addend argument. Change all callers.
(coff_sym_value): Make static.
(coff_sym_addend): New static variable.
(ecoff_directive_def): Initialize coff_sym_addend.
(ecoff_directive_val): Accept symbol + constant.
(ecoff_directive_endef): Pass coff_sym_addend to add_ecoff_symbol.
(ecoff_build_symbols): Include the addend in the symbol value.
(md_begin): Initialize it. Rewrite warn_on_bump handling.
(sparc_ip): If no architecture or -bump specified, don't mark as
mismatched those in default_compatible.
* configure.in (i386-*-sco*elf*): Use fmt elf, targ sco5.
* configure: Rebuild.
* config/sco5.mt: New file; set TDEFINES to -DSCO_ELF.
* config/tc-i386.c (sco_id): New function, if SCO_ELF.
* config/tc-i386.h (tc_init_after_args): Define if SCO_ELF.
(sco_id): Declare if SCO_ELF.
({max,warn_after}_architecture): New static locals.
(md_begin): Replace NUMOPCODES with sparc_num_opcodes.
If both architecture and -bump requested, set max_architecture to max.
(sparc_md_end): Simplify.
(sparc_ip): Replace references to can_bump_v9_p with max_architecture.
Rewrite code to bump architecture and check for conflicts.
(md_longopts): Recognize -xarch={v8plus,v8plusa} for compatibility
with Solaris assembler.
(md_parse_option): Likewise. Call sparc_opcode_lookup_arch.
(md_show_usage): Update.
undefined symbol, preserve the X_op of O_symbol.
(S_GET_VALUE): Fix check to permit this case.
* write.c (write_relocs): If a reloc is against an undefined
symbol equated to another symbol, change the reloc to be against
the latter symbol.
* config/obj-coff.c (do_relocs_for): Likewise.
If the MRI assembler sees
foo EQU bar
call foo
where bar is not defined, it generates a reloc against bar rather than
against foo. Since the gas documentation does not define this case,
this change makes gas compatible.
* config/tc-mips.c (load_register): Optimise "dli" loads.
(md_show_usage): add "-mcpu=vr4100" to help text.
Provide code to check for either the hi32, or lo32 bits of a 64bit
"dli" constant being 0xffffffff. Also for bit15 of a 16bit constant
being set, so that sign-extension can be used to fill the higher order
bits if required.
(distclean): Use it.
(maintainer-clean): Depend upon clean-here rather than clean,
distclean, and clean-info. Run make maintainer-clean in doc.
Remove files listed in DISTCLEAN_HERE.
* doc/Makefile.in (maintainer-clean realclean): Split out from
distclean. Depend upon clean-info and distclean.
call it.
* config/tc-a29k.h (tc_unrecognized_line): Define.
* config/tc-a29k.c (a29k_unrecognized_line): New function.
(md_operand): Handle a29k style local dollar labels.
table entries, table allocation and control structure are larger now, but
collisions are reduced and string compares even further reduced.
Dump lots more statistics, especially hash code data, for --statistics. Dump
statistics even in error cases.
Details in ChangeLog.
* configure: Update.
* mpw-make.sed: Reorder commands to make sed happier.
* config/te-macos.h: New file.
* config/tc-ppc.h (TARGET_FORMAT): Set correctly for PowerMac.
$extend. Based on code from Eric Freudenthal
<freudenthal@nyu.edu>.
* config/tc-a29k.h (LEX_DOLLAR): Define.
* read.c (LEX_DOLLAR): Define if not defined.
(lex_type): Use LEX_DOLLAR.
set to 1.
* macro.c (get_any_string): Don't keep quotes if macro_strip_at is
set, even if macro_alternate is set.
(get_apost_token): If macro_strip_at, only skip kind if it is '@'.
(sub_actual): If macro_strip_at, and kind is '@', don't look up
the token unless it ended in '@'.
* config/tc-a29k.c (line_separator_chars): Remove '@'.
* doc/c-a29k.texi: Document macro usage on A29K.
(ppc_eb): Likewise. Set the storage class to C_BLOCK, not C_FCN.
(ppc_frob_symbol): Don't change C_BLOCK symbols to C_HIDEXT.
* config/obj-coff.c (coff_frob_symbol): Don't call
SA_SET_SYM_ENDNDX with the current symbol; call it with the next
one. If OBJ_XCOFF, try to figure out whether the symbol is going
to be dropped.
(ppc_stab_symbol): New static variable.
(ppc_change_csect): Check that ppc_toc_csect is not NULL.
(ppc_stabx): Set ppc_stab_symbol around call to symbol_make. Set
sy_tc.real_name to the stab string.
(ppc_bc, ppc_ec): New static functions.
(ppc_canonicalize_symbol_name): If ppc_stab_symbol is set, don't
do anything.
(ppc_symbol_new_hook): If ppc_stab_symbol is set, don't look for a
suffix.
(ppc_csect): Move most of the code to ppc_change_csect, and call
it.
(ppc_change_csect): New static function, taken from ppc_csect.
(ppc_section): New static function.
(ppc_saw_abs): New static varable.
(ppc_frob_symbol): Create aux entry for absolute symbols. Warn if
a symbol has no csect.
(ppc_adjust_symtab): New function.
* config/tc-ppc.h (tc_adjust_symtab): Define if OBJ_XCOFF.
(ppc_adjust_symtab): Declare if OBJ_XCOFF.
(pa_subspace): For ".nsubspa", always create a new subspace
with the given attributes, even if one already exists with the
same name.
So we can put every function into its own $CODE$ subspace.
* frags.c (frags): Variable deleted.
(frag_alloc): New function.
(frag_grow, frag_more, frag_variant, frag_now_fix, frag_append_1_char): Refer
to frchain_now->frch_obstack instead of frags variable.
(frag_new): Ditto. Verify that frch_last and frag_now match on entry and exit,
and that old frag_now has non-zero type. Replace "know" uses with "assert".
Use frag_alloc instead of mucking with obstack alignment.
* frags.h (frags): Declaration deleted.
* subsegs.h (struct frchain): Add new field frch_frag_now.
* subsegs.c (frchains, dummy_frag, absolute_frchain): New static variables.
(subsegs_begin): Initialize frchains obstack. Under gcc, don't give it any
stricter alignment than frchainS structures need. Do not initialize frags
obstack. Set frag_now to point to dummy_obstack. Initialize absolute_frchain.
(subseg_set_rest): Save and restore frag_now in frch_frag_now field of
frchainS. Don't create new frags on section switch, and use frag_alloc when
creating a new frag chain. For absolute section, set frchain_now to
absolute_frchain. Verify that frch_last and frag_now match on entry and exit.
Initialize per-chain obstack, and under gcc, set required alignment to that
needed by fragS structure.
* write.c (chain_frchains_together_1): Verify fr_type is nonzero.
In one test case of Mike's (i386-linux, over 300K lines of .s code with lots
of stabs records), run time and memory use are reduced by about 1/3.
Might introduce some problems in cases that use the frag obstacks in unusual
ways. Test suite does pass for i386-linux and sparc-solaris targets though.
(ppc_biei): Set segment to now_seg and value to coff_n_line_nos.
(ppc_frob_symbol): Handle C_BINCL and C_EINCL symbols by setting
the fix_line field.
* config/obj-coff.c (coff_n_line_nos): Rename from n_line_nos, and
make non-static. Change all users.
* config/obj-coff.h (coff_n_line_nos): Declare.
* configure.in (AC_ARG_WITH(bfd-assembler)): Fix help message.
* config/obj-elf.c (obj_elf_common): Convert specified byte alignment to power
of two. Set size of local bss symbol.
* config/tc-m68k.c (tc_gen_reloc): Fix typo in variable name.
skip characters after the pseudo-op.
(s_else): Likewise.
* read.c (get_line_sb): Don't look past buffer_limit.
(s_include): In MRI mode, skip characters after the file name.
* config/tc-i960.c (md_pseudo_table): Add endian.
(get_args): Don't discard a space between alphanumeric characters.
(get_cdisp): Change text_section to now_seg.
(s_endian): New static function.
* config/tc-i960.h (MRI_MODE_NEEDS_PSEUDO_DOT): Define.
* expr.h (operatorT): Add O_logical_not, O_logical_and, and
O_logical_or.
* expr.c (operand): Treat '!' as logical not operator. If
TC_I960, in MRI mode permit `sizeof secname' and `startof
secname'.
(op_rank): Bump values by 2 to make room for && and ||. Add
entries for !, &&, and ||.
(expr_begin): Only do MRI changes if TC_M68K.
(operator): Recognize || and &&.
(expr): Handle new operatorT values.
* symbols.c (resolve_symbol_value): Handle new operatorT values.
(print_expr_1): Likewise.
* read.c (potable): Add debug, err, irep, irepc, print, purgem,
and rep.
(read_a_source_file): Handle MRI_MODE_NEEDS_PSEUDO_DOT.
(mri_comment_field): Only handle weird comments if TC_M68K.
(s_err): New function.
(s_org): Only punt in MRI mode if TC_M68K.
(s_mri_sect): Write TC_I960 version.
(s_print, s_purgem): New functions.
* read.h (s_err, s_print, s_purgem): Declare.
* cond.c (s_ifeqs): Implement.
(ignore_input): Handle MRI_MODE_NEEDS_PSEUDO_DOT.
* macro.c (macro_strip_at): New static variable.
(macro_init): Add strip_at parameter.
(do_formals): If macro_strip_at, change NARG to $NARG.
(define_macro): Skip a comma after the macro name.
(get_apost_token): Skip character if macro_strip_at, even if
macro_mri.
(macro_expand_body): If macro_strip_at, don't recognize parameters
in strings unless they are preceded by an '@'. If macro_strip_at,
pass '@' as strip character to sub_actual. If macro_strip_at,
strip '@' characters.
(macro_expand): If macro_strip_at, change NARG to $NARG.
(delete_macro): New function.
(expand_irp): Skip leading and trailing '"' characters if irpc.
* macro.h (macro_init): Mention new strip_at parameter.
(delete_macro): Declare.
* as.c (main): If TC_I960, pass flag_mri to macro_init as
strip_at; otherwise, pass 0.
* gasp.c (process_pseudo_op): Pass 0 to macro_init as strip_at.
(main): Likewise.
* doc/as.texinfo: Document i960 MRI mode.
* as.c (show_usage): Mention --defsym.
VERSION, move gen of "conf" here from makefile.
* mpw-make.sed: New file, sed commands to translate Unix makefile
into MPW syntax.
* mpw-make.in: Remove.
* mac-as.r: New file, Mac resource file.
* as.h (inline): Don't decide about defining if __MWERKS__,
remove redundant conditional and definition.
* stabs.c (s_stab_generic): Fix syntax for OBJ_PROCESS_STAB.
Change OBJ_COFF checks to check OBJ_XCOFF instead.
(TARGET_FORMAT): Fully parenthesize.
(LEX_QM): Define if TE_PE.
* config/tc-ppc.c: Replace OBJ_COFF by OBJ_XCOFF throughout.
Remove checks of TE_PE within #ifdef OBJ_XCOFF sections.
(init_regtable): Make i unsigned.
(ppc_set_current_section): Rename from setCurrentSection. Change
all callers.
(ppc_arch): Return after as_fatal to avoid gcc warning.
(md_assemble): Only declare reloc if OBJ_ELF. Add default to
switch on fixups[i].reloc to avoid gcc warning.
(IMAGE_SGN_LNK_OTHER): Fix nested comment.
(ppc_pe_function): Don't call ppc_canonicalize_symbol_name.
(ppc_frob_symbol): Remove TE_PE section checks.
(md_estimate_size_before_relax): Return after abort to avoid gcc
warning.
(md_apply_fix3): Add BFD_RELOC_16_GOT_PCREL to switch.
* read.c (LEX_QM): Define as 0 if not defined.
(lex_type): Use LEX_QM for '?'.