Wed Dec 31 12:29:47 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (md_relax_table): Correct branch ranges.

Mon Dec 22 13:06:05 1997  Joel Sherrill  <joel@oarcorp.com>

	* configure.in (i386*-go32-rtems*): Fix to be the same as
	i[3456]86-go32.
	* configure: Rebuild.

Mon Dec 22 12:54:07 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (macro): The 4650 doesn't permit M_LDC1_AB,
	M_SDC1_AB, M_L_DOB, M_L_DAB, M_S_DAB, or M_S_DOB.
	(mips_ip): Always check for FP_D, not just for instructions that
	are not part of the regular ISA.

Thu Dec 18 16:49:28 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-d10v.c (build_insn): Make `number' a long for 64-bit hosts.

Thu Dec 18 16:42:57 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-alpha.c (cpu_types): 21164pc/pca56 does not have CIX.

Wed Dec 17 21:23:07 1997  Jeffrey A Law  (law@cygnus.com)

	* expr.c (integer_constant 32bit bignum): Mask off bits outside
	the range we care about.

Wed Dec 17 15:29:03 1997  Michael Meissner  <meissner@cygnus.com>

	* config/tc-d30v.c (md_shortopts): Add 'n' and 'N' options.
	(exec_type_enum): Enumeration giving all of the exec types.
	(warn_nops): New static variable to give nop warning level.
	({cur,prev}_mul32_p): New static variable to keep track of whether
	the current/previous instruction is a 32-bit multiply.
	(Optimizing): Make static.
	(NOP{2,_LEFT,_RIGHT}): Macros for word of nops and left/right
	nops.
	(d30v_insert_operand): Delete declaration of unused function.
	(write_2_short): Make exec_type argument enum, not int.
	(parallel_ok): Ditto.
	(check_range): Delete unused variable(s).
	(build_insn): Ditto.
	(find_format): Ditto.
	(md_apply_fix3): Ditto.
	(md_show_usage): Document -n and -N.
	(md_parse_option): Parse -n and -N.
	(write_1_short): If -n, warn about adding a nop.  Use
	NOP_{LEFT,RIGHT}.
	(write_2_short): Use enumeration values instead of hard coded
	integers.  Reset exec_type for default operations.  For explicit
	parallel operations, call parallel_ok to make sure everything is
	ok.  If writing out a parallel operation, and the previous
	instruction was a 32-bit multiply, indicate current instruction
	is.
	(parallel_ok): Allow add/tx ... to be done in parallel with
	another add/tx ... assuming the gpr registers don't overlap.
	(md_assemble): Use exec type enumeration values, not hard coded
	ints.  Check for loads or 16-bit multiplies following in the next
	cycle after a 32-bit multiply.  Add nops if that is the case.
	(do_assemble): Copy prev_mul32_p to cur_mul32_p, and set
	cur_mul32_p if current instruction is a 32-bit multiply.
	(find_format): Change spacing and layout.

Tue Dec 16 16:55:45 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (tic80_relax): New static variable.
	(md_longopts): Add new OPTION_RELAX and OPTION_NO_RELAX options.
	(md_parse_option): Handle new relax options.
	(md_show_usage): Document new relax options.
	(find_opcode): Don't use short forms of PC relative branches if
	tic80_relax is set.

Tue Dec 16 15:26:03 1997  Michael Meissner  <meissner@cygnus.com>

	* config/tc-d30v.c (parallel_ok): Remove non-register bits from
	used/set flag fields.  Make flag vars unsigned long.  Use
	FLAG_A{0,1} for accumulators.  Allow any 2 insns to be done in
	parallel if they use the same conditional flag with reversed
	meaning.  Allow 2 add/sub insns that set the carry or overflow
	flags but do not query them to be done in parallel.  Don't allow 2
	word store operations to be done in parallel with ADDppp or
	SUBppp.  Don't allow loads to be done in parallel with 16 bit
	multiplies.

Tue Dec 16 09:20:43 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-arm.c: Prevent use of interworking support for
	non-COFF targets.

Mon Dec 15 15:20:32 1997  Nick Clifton  <nickc@cygnus.com>

	* doc/all.texi: Add M32R cpu.

	* doc/as.texinfo: Add documentation of m32r processor.

	* doc/c-m32r.texi: New file, documenting m32r specific features.

Mon Dec 15 10:32:28 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mips.c (mips_ip): Correctly insert 'P' operands into
	the instruction.

Fri Dec 12 11:44:20 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (build_insn): Handle instructions that have
	long (32 bit) PC relative offsets.  Fix places that previously
	misused R_MPPCR for 15 bit offsets to use the new R_MPPCR15W type.
	(md_apply_fix): Add case to handle long PC relative offsets.

Fri Dec 12 10:35:01 1997  Nick Clifton  <nickc@cygnus.com>

	* doc/c-arm.texi (ARM Options): Document support for new ARM
	processor names.

	* config/tc-arm.c (md_parse_option): Add support for new ARM
	processor names.

Thu Dec 11 17:46:50 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Don't overwrite opcode table data.
	(insop, m68k_ip): Make `opcode' const so it doesn't happen again.

Fri Dec  5 11:23:59 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (md_assemble): Fix BFD_RELOC_32 against a
	symbol + offset.

	* config/tc-v850.h (ELF_TC_SPECIAL_SECTIONS): Use
	SHT_V850_{S|T|Z}COMMON to mark special common sections.

Tue Dec  2 17:05:13 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c: Brought up to date with the branch.

Mon Dec  1 20:24:18 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* config/tc-sh.c (SWITCH_TABLE_CONS): Handle (fix)->fx_size == 1.
	(SWITCH_TABLE): Handle BFD_RELOC_8.
	(md_apply_fix): #ifndef BFD_ASSEMBLER code: Handle fixP->fx_size == 1.
	(coff_reloc_map): Add BFD_RELOC_8_PCREL entry.
	(sh_coff_reloc_mangle): SWITCH_TABLE case: Handle BFD_RELOC_8.

Sat Nov 22 16:19:22 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-alpha.c (range_signed_16, range_signed_32): Work around an
	apparent bug in gcc's long long support crossing from x86.

Sat Nov 22 14:26:09 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-arm.c: Brought up to date with latest changes on arm
	branch.

Sat Nov 22 15:50:09 1997  Klaus Kaempf  <kkaempf@progis.de>

	* config-gas.com: Get version info from configure.in.

	* makefile.vms: include depend.obj in OBJS.

	* config/tc-alpha.c (s_alpha_section): Remove ".lcomm" handling.

	* config/tc-alpha.c (alpha_basereg_clobbered): Remove variable and
	all corresponding code.

Thu Nov 20 15:06:08 1997  Richard Earnshaw <rearnsha@arm.com>

	* config/tc-arm.h (TARGET_FORMAT for generic a.out targets): Allow
	run-time endian selection.

Wed Nov 19 17:44:42 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-sh.c (parse_reg): Properly quote for fv4.

Wed Nov 19 23:46:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* symbols.c (resolve_symbol_value): Add missing breaks in case on
	symbol value operator.

Tue Nov 18 18:45:14 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* config/tc-d10v.c (parallel_ok, find_opcode):
	Split OPERAND_FLAG into OPERAND_FFLAG and OPERAND_CFLAG.

Sun Nov 16 10:05:07 1997  Fred Fish  <fnf@cygnus.com>

	* config/obj-coff.c (fixup_segment): Cast second arg of
	md_apply_fix3 call to type "valueT *".

Thu Nov 13 13:53:10 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (emulations): Make FreeBSD an aout / i386bsd
	variant.
	* configure: Re-generate.

Thu Nov 13 11:07:14 1997  Gavin Koch  <gavin@cygnus.com>

	* config/tc-mips.c (macro_build): Use the membership field
	for INSN_MACRO's.
	(mips_ip): Same.

Thu Nov 13 02:04:55 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* config/tc-d10v.c (find_opcode): For OPCODE_FAKE, add check for
	first argument if it's supposed to be a register.

Tue Nov 11 19:25:05 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* app.c (do_scrub_chars):  If d10v, re-insert a space before
	a '#' when in state 10.

Tue Nov 11 13:33:15 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-h8300.c: Include "subsegs.h".
	(tc_reloc_mangle): Handle references to symbols which are not
	being output, so that references to `.' work.

Mon Nov 10 13:43:33 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Call add_fix when needed for '_'
	case.

	* macro.c (sub_actual): If we don't find a parameter for an &,
	just substitute &.

Fri Nov  7 21:29:32 1997  Ken Raeburn  <raeburn@cygnus.com>

	* config/tc-mips.c (mips_ip): In default case, call as_bad
	instead of fprintf, to get "assembler messages:" message output
	before instead of after.

Fri Nov  7 10:36:22 1997  Doug Evans  <devans@canuck.cygnus.com>

	* frags.h: Handle multiple inclusion.

Wed Nov  5 10:51:49 1997  Doug Evans  <devans@canuck.cygnus.com>

	Based on a patch from Ian.Dall@dsto.defence.gov.au.
	* as.h (struct frag, frag support): Moved from here.
	* frags.h: To here.
	(struct frag, member tc_frag_data): New member if TC_FRAG_TYPE
	is defined.
	(struct frag, member fr_cgen): Renamed from fr_targ.cgen.
	* cgen.c (cgen_asm_finish_insn): Update.
	* config/tc-m32r.c (md_estimate_size_before_relax): Update.
	* config/tc-m32r.h (TC_FRAG_INIT): Renamed from md_init_frag.
	(md_convert_frag): Ditto.
	* config/tc-ns32k.h (TC_FRAG_TYPE): Define.
	(frag_opcode_frag,frag_opcode_offset,frag_bsr): Update.
	(TC_FRAG_INIT): Update.

Tue Nov  4 16:35:57 1997  Ian Dall  <Ian.Dall@dsto.defence.gov.au>

	* write.c (print_fixup): Use TC_FIX_DATA_PRINT (if defined) to
	print out MD fields of fix.
	* frags.c (frag_var, frag_variant): Use TC_FRAG_INIT macro (if
	defined) to initialize MD fields in frag.
	* as.h (struct frag, ns32k support): Rename ns32k to fr_ns32k.
	Delete pcrel_adjust.  Add fr_opcode_fragP, fr_opcode_offset.
	* config/tc-ns32k.h: Add comments. Remove obsolete
	BFD_FAST_SECTION_FILL definition, change prototypes for
	fix_new_ns32k and fix_new_ns32k_exp to add new arguments
	opcode_frag and opcode_offset and remove pcrel_adjust.
	(TC_FIX_TYPE): add opcode_fragP and opcode_offset fields.
	(TC_FIX_DATA_PRINT): new macro to print out TC_FIX_TYPE.
	(TC_FRAG_INIT): new macro to initialize machine dependent field in
	frags.
	(frag_opcode_frag, frag_opcode_offset, frag_bsr): macros to access
	MD fields in frag structure.
	(fix_im_disp, fix_bit_fixP, fix_opcode_frag, fix_opcode_offset,
	fix_bsr): macros to access MD fields in fix structure.
	* config/tc-ns32k.c: Avoid overlength lines. Align comments.  Don't
	use struct opcode_location as these fields are now in the frag
	structure.
	(convert_iif): Call frag_more as it is needed instead
	of trying to allocate for the whole insn. Avoid call of frag_more
	with negative argument.
	(md_pcrel_adjust, md_fix_pcrel_adjust, md_apply_fix,
	md_estimate_size_before_relax, md_pcrel_from,
	tc_aout_fix_to_chars): use accessor macros to get md fields in fix
	and frag structures.
	(fix_new_ns32k, fix_new_ns32k_exp): add new arguments opcode_frag and
	opcode_offset and remove pcrel_adjust.
	(convert_iif, cons_fix_new_ns32k): call fix_new_ns32k,
	fix_new_ns32k_exp with changed arguments.

Mon Nov  3 13:30:17 1997  Gavin Koch  <gavin@cygnus.com>

	* config/tc-mips.c (md_begin): Reorganize setting of default values so
	that mips_cpu depends on TARGET_CPU, and mips_opts.isa depends on
	mips_cpu.
	(md_parse_option): Remove all code that sets defaults; md_begin
	handles all of this now.

Sun Nov  2 14:46:09 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (STAGESTUFF): Change bin_PROGRAMS to
	noinst_PROGRAMS.
	(bootstrap, bootstrap2, bootstrap3): Likewise.
	* Makefile.in: Rebuild.

	* config/tc-ppc.c (ppc_fix_adjustable): Don't adjust relocs in the
	TOC section to be against the csect.

Fri Oct 31 18:19:55 1997  Ken Raeburn  <raeburn@cygnus.com>

	* config/tc-mips.c (validate_mips_insn): New function, checks
	match versus mask bits, and also verifies that all bits to be
	output are actually specified somewhere.
	(md_begin): Call it for 32-bit instructions, instead of doing
	match/mask check here.  In case of failure, print a message, but
	check the rest of the opcode table before exiting.

Thu Oct 30 13:46:20 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-arm.c (md_apply_fix3): Fix thumb ADR pseudo op.  Patch
	from Tony Thompson at ARM: athompso@arm.com

Thu Oct 30 11:11:26 1997  Michael Meissner  <meissner@cygnus.com>

	* config/tc-d30v.c (build_insn): Allow odd registers for ld2w and
	friends.

Fri Oct 24 15:56:47 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (md_assemble): When handling @l, always sign
	extend if the operand expects a signed value.

	* config/tc-mips.h (LOCAL_LABELS_DOLLAR): Don't define; use
	default which is to permit dollar labels.

Fri Oct 24 11:19:22 1997  Jakub Jelinek  <jj@sunsite.mff.cuni.cz>

	* config/tc-sparc.c (sparc_memory_model): New variable.
	(md_longopts): Add -TSO/-PSO/-RMO options.
	(md_parse_options): Handle them.
	(sparc_elf_final_processing): For 64 ELF, set required
	memory ordering in e_flags. Default to RMO and let the user
	override it through command line.

	* config/tc-sparc.h (elf_tc_final_processing): Add.

Wed Oct 22 17:42:12 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-sparc.c (v9a_asr_table): New variable.
	(sparc_ip): Handle v9a asr's.
	Patch from David Miller <davem@vger.rutgers.edu>.

Wed Oct 22 17:22:59 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-sparc.h (md_do_align): New macro.
	* config/tc-sparc.c (sparc_handle_align): Handle rs_align_code.
	Patch from Jakub Jelinek <jj@sunsite.mff.cuni.cz>.

Wed Oct 22 12:51:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.c (sh_small): New variable.
	(OPTION_SMALL): Define.
	(md_longopts): Add "small".
	(md_parse_option): Handle OPTION_SMALL.
	(md_show_usage): Mention -small.
	* config/tc-sh.h (sh_small): Declare.
	(SUB_SEGMENT_ALIGN): Handle sh_small.
	* config/obj-coff.h (TARGET_FORMAT): Check sh_small in TC_SH
	case.

	* config/tc-mips.c (macro): Correct handling of constant in M_LI_D
	case in little endian mode.

Tue Oct 21 10:20:11 1997  Doug Evans  <devans@canuck.cygnus.com>

	* config/tc-sparc.c (md_apply_fix3, cases ..._H44, ..._HIX22): Leave
	overflow signalling to linker.

Mon Oct 20 14:54:06 1997  Klaus K"ampf  <kkaempf@progis.de>

	* makefile.vms: Fix for dec c.

	* config-gas.com: Give explanation for dec c setup in error
	message.

	* config/tc-alpha.c (s_alpha_comm): Make .comm symbols separate
	sections on openvms/alpha.

	* config/obj-evax.c: support .weak pseudo-op

Mon Oct 20 10:13:32 1997  Doug Evans  <devans@canuck.cygnus.com>

	* config/tc-sparc.c (default_arch_size): New static local.
	(struct sparc_arch): Rename arch_size to default_arch_size.
	New member user_option_p.
	(sparc_arch_table): Always include v9, v9a.  New entry v9-64.
	(init_default_arch): Check whether default arch is valid.
	Set default_arch_size in addition to sparc_arch_size.
	(OPTION_32,OPTION_64): Define.
	(md_longopts): New entries for -32, -64.
	(md_parse_option): Handle them.
	(md_show_usage): Print them.  Ensure init_default_arch called.
	* configure.in (sparc64): Set arch to v9-64.
	* configure: Regenerated.

Sun Oct 19 13:50:50 1997  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (subsegs_finish): New function, broken out of
	write_object_file.
	(write_object_file): Some code moves into subsegs_finish.
	* write.c (subsegs_finish): Declare.
	* as.c (main): Call subsegs_finish.

	* read.c (s_include): Check for error return from
	demand_copy_string.

Tue Oct 14 20:50:58 1997  Richard Henderson  <rth@cygnus.com>

	* read.c (get_line_sb): Accept any eol marker while scanning macros.

Tue Oct 14 19:12:45 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-alpha.h (DIFF_EXPR_OK): Define.
	* config/tc-i386.h (DIFF_EXPR_OK): Define.
	* config/tc-alpha.c (md_apply_fix): Notice fx_pcrel and substitute
	the correct relocation when it exists.
	* config/tc-i386.c (md_apply_fix3): Likewise.

	* config/tc-ppc.h: Correct typo in comment.
	* config/tc-v850.h: Likewise.

Fri Oct 10 16:09:35 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/tc-d10v.c (parallel_ok): Allow parallel instruction issue
	when second instruction is writing to first instructions inputs.

Mon Oct 13 15:27:17 1997  Richard Henderson  <rth@cygnus.com>

	* ecoff.c (PAGE_SIZE): Double to 8k as a hack to allow some C++
	templated programs to build with -g.

Fri Oct 10 17:48:29 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (md_relax_table): Add support for relaxing
	unconditional branches.  This patch is courtesy of Jim Wilson.
	(md_convert_frag): Fix relaxing of branches.  This patch is
	courtesy of Jim Wilson.
	(md_assemble): Create different fixups for conditional and
	unconditional branches.  This patch is courtesy of Jim Wilson.
	(md_estimate_size_before_relax): Estimate size of variable part of
	fixup based on whether it is for a conditional or an unconditional
	branch.  This patch is courtesy of Jim Wilson.
	(v850_sdata, v850_tdata, v850_zdata, v850_sbss, v850_tbss,
	v850_zbss, v850_rosdata, v850_rozdata, v850_bss): Add call to
	obj_elf_section_change_hook().
	(v850_comm): New function.
	(md_pseudo_table): Add new pseudo ops .zcomm, .scomm and .tcomm.
	(md_begin): Add bss flag to seg_info of bss sections.

	Add support for .scommon, .tcommon and .zcommon sections.

	* config/tc-v850.h (ELF_TC_SPECIAL_SECTIONS): Add .scommon,
	.zcommon, .tbss, .call_table_data and .call_table_text.

Fri Oct 10 15:01:14 1997  Doug Evans  <dje@canuck.cygnus.com>

	* configure.in (sparc): Set DEFAULT_ARCH from correct target.
	* configure: Regenerated.

Fri Oct 10 11:22:45 1997  Martin M. Hunt  <hunt@cygnus.com>

	* config/tc-d10v.c: Fixes to make sure the AT_WORD
	expression is not confused with -1.

Fri Oct 10 11:54:50 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/tc-d10v.c (parallel_ok): Flag SP as modified for @-sp
	operand - OPERAND_ATMINUS.

Fri Oct 10 00:47:44 1997  Michael Meissner  <meissner@cygnus.com>

	* config/tc-d10v.c (parallel_ok): Note that auto increment and
	decrement modify the index register.

Thu Oct  9 15:17:50 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Robin Kirkham <Robin.Kirkham@mlb.dmt.csiro.au>:
	* config/tc-m68k.c (archs): Add 68306, 68307, 68322, 68356, 68334,
	68336, 68341, 68349.
	* doc/c-m68k.texi (M68K-Opts): Add -m68ec000 -m68hc000 -m68hc001
	-m68306, -m68307, -m68322, -m68356, -m68ec020, -m68ec030,
	-m68ec040, -m68ec060, -m68330, -m68334, -m68336, -m68341,
	-m68349.

	* doc/Makefile.am (CPU_DOCS): Define.
	(as.info): Depend upon $(CPU_DOCS).
	* doc/Makefile.in: Rebuild.

	* configure.in: Remove AM_PROG_INSTALL; it's called by
	AM_INIT_AUTOMAKE.
	* configure: Rebuild.

Thu Oct  9 01:44:36 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* config/tc-d10v.h (TC_START_LABEL): Don't define.
	(tc_frob_label): Define.

Thu Oct  9 00:07:23 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* config/tc-d10v.c (write_2_short): Fix bug that wouldn't allow
	to pair a branch and link with anything but an exe instruction.

Wed Oct  8 16:28:53 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-alpha.c (load_expression): Disable the sym+const .got
	optimization to reduce the alignment surprises for gcc.

Wed Oct  8 16:11:15 1997  Doug Evans  <dje@canuck.cygnus.com>

	* config/obj-coff.h (TC_SPARC): Don't define TARGET_FORMAT.
	* config/tc-sparc.c (sparc_target_format): Handle coff here.
	(sparc_ip): Add %hix,%lox.
	(md_apply_fix3): Call as_bad_where, not as_bad.
	Add support for BFD_RELOC_SPARC_{HIX22,LOX10}.
	(tc_gen_reloc): Add support for BFD_RELOC_SPARC_{HIX22,LOX10}.

Wed Oct  8 12:33:32 1997  Richard Henderson  <rth@cygnus.com>

	* configure.in: Change alpha-*-* to alpha*-*-*; config.guess now
	recognizes alphaev5 etc.
	* configure: Rebuild.

Wed Oct  8 00:04:05 1997  Gavin Koch  <gavin@cygnus.com>

	* config/tc-mips.c (md_begin): Replace the TARGET_CPU value
	of mipsr3900 with mipstx39.

	* config/tc-mips.c (mips_ip): Don't print the 'opcode requires
	-mipsXX message' if the insn isn't an ISA insn.

Tue Oct  7 12:48:30 1997  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-sparc.h (TARGET_FORMAT support): Moved to tc-sparc.c.
	Redefine TARGET_FORMAT to call sparc_target_format.
	* config/tc-sparc.c (in_unsigned_range): New function.
	(sparc_arch_size): Make static.
	(sparc_target_format): New function.
	(sparc_ip): Delete variable immediate_max.  Rewrite %hi/etc reloc
	handling.  Add support for %hh,%hm,%lm,%h44,%m44,%l44.
	(output_insn): Set `fx_no_overflow'.
	(md_apply_fix3): Handle BFD_RELOC_SPARC_{7,H44,M44,L44}.
	(tc_gen_reloc): Likewise.

Mon Oct  6 14:04:50 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (v850_section): Remove.

	* config/obj-elf.c (obj_elf_section): Enhance error message.

Fri Oct  3 15:40:38 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c: Undef OBJ_COPY_SYMBOL_ATTRIBUTES before
	including obj-elf.h in OBJ_MAYBE_ELF case.
	(mips_target_format): Return NULL after abort to avoid warning.

	* ecoff.c (generate_ecoff_stab): Remove unused static function.

	* expr.c (operator): Accept ==.  From Anders Blomdell
	<anders.blomdell@control.lth.se>.

	* config/atof-ieee.c (gen_to_words): When generating a denormal
	number, handle an overflow into the smallest normalized number.

Mon Sep 29 15:24:52 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* as.h, input-scrub.c (new_logical_line): New return value.
	* read.c (s_app_file): Don't note the same file several times
	in a row.

Thu Sep 25 13:08:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Remove ` operand specifier.

Wed Sep 24 16:54:40 1997  Joel Sherrill  <joel@oarcorp.com>

	* configure.in (sh*-*-rtems*): New target, like sh-*-elf*.
	* configure: Rebuild.

Wed Sep 24 11:30:25 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Handle q and v operand specifiers.

	* doc/c-i386.texi (i386-Float): Remove incorrect assertion that
	fn* instructions do not insert implicit fwait.  This was changed
	Jan 29, 1996.

	* config/m68k-parse.y (yylex): Permit an expression to be used for
	the scale factor.

	* Makefile.am (EXTRA_as_new_SOURCES): Set to config/m68k-parse.y,
	not m68k-parse.y.
	* Makefile.in: Rebuild.

	* aclocal.m4: Rebuild with new libtool.
	* configure: Rebuild.

Tue Sep 23 17:48:09 1997  Ian Lance Taylor  <ian@cygnus.com>

	* app.c (do_scrub_chars): Clear mri_state at end of .mri
	pseudo-op.

	* config/tc-mips.c (hilo_interlocks): Change from a static
	variable to a macro, so that it varies with the variables upon
	which it depends.
	(gpr_interlocks, cop_interlocks): Likewise.
	(md_begin): Don't initialize them.

Fri Sep 19 17:08:41 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (md_assemble): Use strcasecomp instead
	of strcmp where appropriate.

Thu Sep 18 14:11:56 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (md_assemble): Cope with a zero data area
	relocation with a constant offset.
	(md_assemble): Produce error message when special data area
	relocations are used on instructions which do not support them.
	(md_assemble): Reset processor mask if defined by command line
	switch.

Thu Sep 18 11:24:01 1997  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-sparc.c: Reorganize file.
	(parse_keyword_arg): Allow numbers in reg names.
	(SPECIAL_CASE_NONE): New macro.
	(md_assemble): Use it.
	(lookup_arch,init_default_arch): New functions.
	(default_arch,default_init_p,sparc_arch_table): New static locals.
	(sparc_arch_size): New static local.
	(max_architecture): Initialize in init_default_arch.
	(md_parse_options): Call init_default_arch if necessary.
	Rewrite -xarch/-A processing.
	(md_show_usage): Print -A values from sparc_arch_table.
	(md_begin): Call init_default_arch if necessary.
	(sparc_md_end): Handle both 32 and 64 bit environments.
	* config/tc-sparc.h (TARGET_FORMAT): Likewise.
	* acconfig.h (SPARC_V9,SPARC_ARCH64): Delete.
	(DEFAULT_ARCH): Add.
	* config.in: Regenerate.
	* configure.in (sparc): Default DEFAULT_ARCH based on target cpu.
	(SPARC_V9,SPARC_ARCH64): Delete.
	* configure: Regenerate.
	* config/vms-conf.h (SPARC_V9,SPARC_ARCH64): Delete.

Wed Sep 17 16:54:20 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (v850_reloc_prefix): Recoded to use CHECK_ ()
	macro.
	(handle_tdaoff, handle_zdaoff, handle_sdaoff): New functions.

	* config/tc-v850.c (md_assemble): Corrected typo.
	* config/tc-v850.c Add new sections: call_table_data and
	call_table_text.
	(v850_reloc_prefix): Add support for ctoff() relocation prefix.
	(handle_ctoff): New Function.

	* doc/c-v850.texi (V850 Opcodes): Document call table relocations.

Tue Sep 16 14:18:22 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (v850_reloc_prefix): Add support for a 16 bit
	displacement from the tiny data area pointer.

Mon Sep 15 21:28:09 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (fix_new_hppa): Make declaration match
	definition.

Mon Sep 15 18:33:06 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (processor_mask): New variable.
	(set_machine, md_parse_option): Set processor_mask.
	(md_assemble): Check that instruction is available to target
	processor.

	* config/tc-v850.h (TARGET_PROCESSOR): New constant.

Mon Sep 15 11:28:04 1997  Ken Raeburn  <raeburn@cygnus.com>

	Merge in work from Martin Hunt:

	* config/tc-d30v.c (build_insn): For mvfsys and mvtsys,
	CR is 0 for PSWL and PSWH.

	* config/tc-d30v.c (do_assemble): Don't accept
	illegal condition codes for cmpu instruction.

	* config/tc-d30v.c: Add support for BFD_RELOC_D30V_9_PCREL
	used in d*i instructions.

	* config/tc-d30v.c (check_size): New function.  Check
	relocations for overflows.
	(md_pcrel_from_section): Fix relocations between sections.
	(md_apply_fix3): Use new relocation types for 15 and 21
	bit relocations in the right container. Needed because
	the address of the instruction is not eight-byte aligned
	but the relocations must be.

	* config/tc-d30v.c (md_apply_fix3): Check for overflow.
	(find_format): If ".s" or ".l" are used, don't try
	to compute branch sizes.

	* config/tc-d30v.c (do_assemble): Check for ".s" or
	".l" extensions to opcode names.
	(find_format): Generate the correct instructions when
	".s" or ".l" are used.

	* config/tc-d30v.c (build_insn): Check for odd registers
	on instructions that require even registers.

	* config/tc-d30v.h (md_start_line_hook): Define.
	* config/tc-d30v.c (md_start_line_hook): New hook.
	Checks the beginning of each line for a ".".  If it
	finds one, assume a pseudo-op and flush any unwritten
	instructions.

	* config/tc-d30v.c (md_apply_fix3): Fix problem
	with determining when fixups were done.

	* config/tc-d30v.c (build_insn): Fix bug where the numeric
	part of a symbol (for example, "foo+8") was being written
	into the instruction.
	(md_pseudo_table): Change .word to be 32 bits and add
	.hword as 16 bits.

	* config/tc-d30v.c (parallel_ok): Check to see if first
	instruction is a jump.

	* config/tc-d30v.c (parallel_ok): Major code reorganization.

Wed Sep 10 10:07:08 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (md_assemble): Corrected spelling mistake.
	* configure.in (emulations): Add v850 emulation.

Tue Sep  9 17:14:33 1997  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.am (CPU_TYPES): Add arc.
	(TARGET_CPU_CFILES): Add tc-arc.c.
	(TARGET_CPU_HFILES): Add tc-arc.h.
	(dependencies): Rebuild.
	* Makefile.in: Rebuild.
	* configure.in: Recognize arc-*-elf*.
	* configure: Regenerated.
	* config/tc-arc.[ch]: New files.

Tue Sep  9 10:19:37 1997  Nick Clifton  <nickc@cygnus.com>

	* doc/c-v850.texi (V850 Opcodes): Document hi0() reloc prefix.
	Correct description of hi() reloc prefix.

	* doc/c-v850.texi (V850 Opcodes): Document new reloc prefix.
	* config/tc-v850.c (v850_reloc_prefix): Add hilo() reloc prefix.
	* config/tc-v850.c (md_assemble): Add support for BFD_RELOC_32.

	* doc/c-v850.texi: Document new pseudo ops and command line
	options.

	* config/tc-v850.c (set_machine): New function.
	* config/tc-v850.c (.v850): New pseudo op.
	* config/tc-v850.c (.v850e): New pseudo op.
	* config/tc-v850.c (.v850ea): New pseudo op.


Mon Sep  8 23:08:04 1997  Ian Lance Taylor  <ian@cygnus.com>

	Support -alh and -ald for DWARF 1:
	* listing.c (struct list_info_struct): Add debugging field.
	(listing_newline): Initialize the debugging field.  If ELF, if the
	section starts with .debug or .line, set the debugging field in
	the listing structure.
	(debugging_pseudo): Add list parameter.  Change all callers.  If
	the debugging field is set, consider it to be a debugging pseudo.
	If ELF, skip blank lines between debugging lines.
	* read.c (emit_expr): If ELF, look for line numbers.
	(stringer): If ELF, look for file names.

Mon Sep  8 12:33:40 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (v850_insert_operand): Only test for overflow
	if there is no insert function.

	* config/tc-v850.h (TARGET_MACHINE): New constant.

	* config/tc-v850.c (v850_insert_operand): Add
	-mwarn_unsigned_overflow.
	(md_begin): Set BFD machine number based on machine variable.
	(md_parse_option): Add -mv850, -mv850e and -mv850ea options.

Mon Sep  8 11:20:46 1997  Ian Lance Taylor  <ian@cygnus.com>

	* as.h: Don't declare alloca if it is a macro.
	* macro.c: Likewise.

Sun Sep  7 00:30:19 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-alpha.c (md_parse_option): Move m[] out to top level and
	rename to cpu_types[].
	(s_alpha_arch): New function.
	(md_pseudo_table): Add "arch".

	* config/tc-alpha.c (md_begin): Merge the two loops through the
	opcode table.
	(s_alpha_proc): Add initial SKIP_WHITESPACE.
	(s_alpha_set): Likewise.  Use get_symbol_end instead local while loop.

Sat Sep  6 19:38:12 1997  Fred Fish  <fnf@cygnus.com>

	* read.h (s_lcomm_bytes): Add prototype (for real this time).

Thu Sep  4 12:10:01 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-elf.c (elf_frob_symbol): Only set BSF_OBJECT for
	symbols on Irix.

Wed Sep  3 11:21:33 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c: Remove BFD_RELOC_V850_16_PCREL.

Tue Sep  2 18:32:30 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (md_convert_frag): PC relative instructions arex
	relative to the next instruction, not the current instruction.
	(md_assemble): Similarly.

Tue Sep  2 15:58:52 1997  Nick Clifton  <nickc@cygnus.com>

	* doc/c-v850.texi: Explanations of offsets in SDA/ZDA areas
	correcetd.

	* config/tc-v850.c: Add support for SDA/TDA/ZDA sections.
	(v850_reloc_prefix): Duplicate code eliminated.  Add code to
	recognise special instructions.
	(md_assemble): Calculation of the size of a fixups corrected.

	* config/tc-v850.h (ELF_TC_SPECIAL_SECTIONS): Add SDA/TDA/ZDA
	sections.

Tue Sep  2 15:40:56 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/tc-v850.c (md_assemble): Use opcode->name instead of
	opcode->opcode as the sentinal. Zero is a valid opcode.

Tue Aug 26 16:51:14 1997  Ian Lance Taylor  <ian@cygnus.com>

	* doc/as.texinfo (Machine Dependencies): Add v850 to menu.
	* doc/c-v850.texi: Change node name to match other chapter nodes.

Tue Aug 26 09:46:22 1997  Nick Clifton  <nickc@cygnus.com>

	* doc/c-v850.texi (V850 Opcodes): Correct name for tiny data area
	pointer.

Tue Aug 26 12:23:25 1997  Ian Lance Taylor  <ian@cygnus.com>

	* expr.c (integer_constant): If BFD64, don't make a bignum if the
	number will fit in 64 bits.

	* config/tc-alpha.c (load_expression): Check explicitly for O_big,
	rather than calling abort.

	* as.h: Don't define alloca if __GNUC__.  Just declare it.
	* macro.c: Copy alloca handling from as.h.

	* config/tc-i386.c (i386_align_code): Correct 16 bit noops.  From
	Gabriel Paubert <paubert@iram.es>.

	* config/tc-i386.c (md_assemble): In JumpByte case, when looking
	for a WORD_PREFIX_OPCODE, change it to ADDR_PREFIX_OPCODE if this
	is jcxz or a loop instruction.

Mon Aug 25 16:04:14 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (pre_defined_registers): Add 'hp' as alias for
	r2.
	(md_begin): Set up machine architecture and type.

Mon Aug 25 14:25:48 1997  Ian Lance Taylor  <ian@cygnus.com>

	* symbols.c (resolve_symbol_value): Store the value back into the
	symbol expression, to handle add or subtract simplification
	correctly.  Handle O_symbol_rva.  Add default case.

	* config/tc-ppc.c (ppc_change_csect): Temporarily lower the
	chunksize while creating the new subsection.
	* as.c (chunksize): Initialize to zero.
	* subsegs.c (subseg_set_rest): Change 5000 to chunksize when
	calling obstack_begin.

Mon Aug 25 11:21:48 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (md_assemble): Restore input_line_pointer upon
	exit.

	* config/tc-v850.c (parse_register_list): Support constant
	expressions as register lists.

Mon Aug 25 10:19:34 1997  Nick Clifton  <nickc@cygnus.com>

	* doc/c-v850.texi: Change the major node to v850 Machine
	Dependencies.

Fri Aug 22 11:16:14 1997  Nick Clifton  <nickc@cygnus.com>

	* doc/as.texinfo: Add inclusion of c-v850.texi

	* doc/c-v850.texi: New file.

	* read.c (is_end_of_line): Make NUL character be considered to be
	a line terminator.

Fri Aug 22 10:45:33 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (parse_register_list): Add support for curly
	brace syntax.
	(cc_names): Add "e" and "ne" conditions.

Thu Aug 21 11:00:36 1997  Nick Clifton  <nickc@cygnus.com>

	* app.c (do_scrub_chars): Support a double dash as starting a
	comment that extends to end of line.

Thu Aug 21 10:54:27 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (v850_section, v850_bss, v850_offset): New
	functions.
	(md_pseudo_table): New pseudo ops: .bss, .offset, .section

Thu Aug 21 00:59:53 1997  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-m32r.c (md_estimate_size_before_relax): Update recorded
	insn when changing to a different instruction.

Wed Aug 20 00:45:20 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* config/tc-sh.c (parse_reg, get_specific, build_Mytes): Add SH4
	floating point extensions.
	(parse_reg): parse sgr and dbr.

Tue Aug 19 17:07:34 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (system_register_name): Support numbers for
	system register IDs.

Tue Aug 19 08:59:12 1997  Fred Fish  <fnf@cygnus.com>

	* read.c (s_lcomm_internal): Renamed from s_lcomm, added arg to
	flag when alignment is in bytes instead of power of 2, and code to
	use that flag to convert alignment to bytes.
	(s_lcomm, s_lcomm_bytes):  New helpers that call s_lcomm_internal.
	* read.h (s_lcomm_bytes): Add prototype.
	* config/obj-coff.c (write_object_file): If ALIGNMENT_IN_S_FLAGS is
	defined, write alignment to alignment bits in section header s_flags
	rather than the s_align field.
	* config/obj-coff.h (ALIGNMENT_IN_S_FLAGS): Define for TC_TIC80.
	* config/tc-tic80.c (md_pseudo_table): Use s_lcomm_bytes for bss
	pseudo, instead of s_lcomm which wants a power of two for alignment.

Mon Aug 18 20:42:23 1997  Richard Henderson  <rth@cygnus.com>

	* macro.c (check_macro): use alloca instead of xmalloc to plug leak.

Mon Aug 18 20:33:06 1997  Richard Henderson  <rth@cygnus.com>

	* as.c (show_usage): Add -am.
	* input-scrub.c (input_scrub_include_sb): Don't add leading \n
	if we've already got one.
	* listing.c (struct list_info_struct): Add line_contents.
	(listing_newline): Put unused argument to work: if non-null, save it...
	(listing_listing): ... and regurgitate during listing instead of line
	from file.
	* listing.h (LISTING_MACEXP): New define.
	(LISTING_NEWLINE): Argument is NULL.
	* read.c (read_a_source_file): If expanding macros, break up input
	lines and pass them to listing_newline.
	* doc/as.texinfo: Document -ac and -am.

	* cond.c (s_ifc): Add missing demand_empty_rest_of_line.

Mon Aug 18 11:26:36 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (md_apply_fix3): Add support for new 16 bit PC
	relative reloc.

Mon Aug 18 11:24:21 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c: Remove support_v850e flag and command line
	option.

	* configure.in (emulations): Add support for v850e target

	* configure (emulations): Add support for v850e target

Mon Aug 18 11:24:21 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c: Remove support_v850ea flag and command line
	option.

	* configure.in (emulations): Add support for v850ea target

	* configure (emulations): Add support for v850ea target

Fri Aug 15 14:00:13 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (check-DEJAGNU): Don't cd into testsuite until after
	setting EXPECT and TCL_LIBRARY.
	* Makefile.in: Rebuild.

	* as.h (enum debug_info_type): Define.
	(debug_type): Declare.
	* as.c (debug_type): New global variable.
	(show_usage): Add --gstabs.
	(parse_args): Handle --gstabs.
	* read.c (generate_asm_lineno): Remove.
	(read_a_source_file): Output stabs debugging if appropriate.
	Change checks of generate_asm_lineno to check debug_type.  Only
	generate ECOFF debugging if ECOFF_DEBUGGING is defined.
	* read.h (generate_asm_lineno): Don't declare.
	(stabs_generate_asm_lineno): Declare.
	* stabs.c (stabs_generate_asm_lineno): New function.
	* ecoff.c (add_file): Use debug_type, not generate_asm_lineno.
	Don't turn off debugging.
	(add_file): Remove old #if 0 code.
	(ecoff_new_file): Set debug_type, not generate_asm_lineno.
	(ecoff_directive_end): Don't generate stabs line symbols.
	(ecoff_generate_asm_lineno): Don't check stabs_seen.  Don't set
	generate_asm_lineno.
	(line_label_cnt): Remove.
	(ecoff_generate_asm_line_stab): Remove.
	* ecoff.h (ecoff_generate_asm_line_stab): Don't declare.
	* doc/as.texinfo, doc/as.1: Document --gstabs.

Wed Aug 13 18:58:56 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-v850.c (md_assemble, md_show_usage, md_parse_option):
	Add support for v850ea instructions.

	* config/tc-v850.c (md_assemble, md_show_usage, md_parse_option):
	Add support for v850e instructions.

	* config/tc-v850.c (md_assemble): Fix error recovery to reload
	text of entire opcode.

Tue Aug 12 10:27:34 1997  Richard Henderson  <rth@cygnus.com>

	* doc/internals.texi: Document rs_leb128.

Tue Aug 12 12:17:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Give an error message for SIZE_BYTE
	in ABSL case, rather than calling abort.

Mon Aug 11 21:48:00 1997  Richard Henderson  <rth@cygnus.com>

	* as.h (enum _relax_state): Add rs_leb128.
	* read.c (potable): Add sleb128 and uleb128.
	(sizeof_*leb128, output_*leb128, emit_leb128_expr, s_leb128): New
	functions.
	* read.h: Update prototypes.
	* symbols.c (resolve_symbol_value): Streamline quite a bit.  Return
	the symbol value, add a second FINALIZE argument that prevents
	changes from being comitted.  Update all callers.
	* write.c (cvt_frag_to_fill, relax_segment): Handle rs_leb128.
	* doc/as.texinfo: Document the new pseudos.

Sun Aug 10 14:51:49 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (MOSTLYCLEANFILES): Add site.bak, site.exp, stage,
	stage1, and stage2.
	(DISTCLEANFILES): Define.
	* doc/Makefile.am (DISTCLEANFILES): Define.
	* Makefile.in, doc/Makefile.in: Rebuild.

Wed Aug  6 00:30:30 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Define TARGET_BYTES_BIG_ENDIAN if endian is set.
	Don't set targ or gas_target.  Define SCO_ELF and
	TARGET_SOLARIS_COMMENT when appropriate.  Don't substitute for
	target_frag.
	* Makefile.am: Remove @target_frag@.
	(INCLUDES): Remove $(INTERNAL_CFLAGS), $(CROSS), $(HDEFINES), and
	$(TDEFINES).
	(dep-am): Mark as phony.
	* acconfig.h: Add TARGET_BYTES_BIG_ENDIAN, TARGET_SOLARIS_COMMENT,
	and SCO_ELF.
	* config/arm-big.mt, config/arm-lit.mt: Remove.
	* config/mips-big.mt, config/mips-lit.mt: Remove.
	* config/ppc-big.mt, config/ppc-lit.mt: Remove.
	* config/ppc-sol.mt: Remove.
	* config/i386coff.mt, config/m68kcoff.mt: Remove.
	* config/m88kcoff.mt: Remove.
	* config/sco5.mt: Remove.
	* configure, config.in, Makefile.in: Rebuild.

	* Makefile.am ($(srcdir)/config/m68k-parse.h): New target, to
	further try to circumvent the .y.h rule.
	* Makefile.in: Rebuild.

Tue Aug  5 12:32:07 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am: New file, based on old Makefile.in.
	* acinclude.m4: New file, from old aclocal.m4.
	* configure.in: Call AM_INIT_AUTOMAKE and AM_PROG_LIBTOOL.  Remove
	shared library handling; now handled by libtool.  Replace
	AC_CONFIG_HEADER with AM_CONFIG_HEADER.  Call AC_PROG_YACC,
	AC_PROG_LEX, and AC_DECL_YYTEXT.  Call AM_MAINTAINER_MODE,
	AM_CYGWIN32, and AM_EXEEXT.  Don't call CY_CYGWIN32 or CY_EXEEXT.
	* config.in: New file, created by autoheader.
	* conf.in: Remove.
	* acconfig.h: Mention PACKAGE, VERSION, and USING_CGEN.
	* stamp-h.in: New file.
	* as.c (print_version_id): Change GAS_VERSION to VERSION.
	(parse_args): Likewise.
	* config/obj-vms.c: (Write_VMS_MHD_Records): Likewise.
	* doc/Makefile.am: New file, based on old doc/Makefile.in.
	* Makefile.in, doc/Makefile.in: Now built with automake.
	* aclocal.m4: Now built with aclocal.
	* configure: Rebuild.

	* cond.c (s_else): If not listing false conditionals, turn listing
	off in the false branch of the else.

Mon Aug  4 11:28:35 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (macro): Fix handling of a double load from a
	symbol plus an offset.

	* ecoff.c (ecoff_build_symbols): Set fMerge to 0 for an FDR which
	has an associated external symbol.

Sun Aug  3 23:23:59 1997  Richard Henderson  <rth@cygnus.com>

	* config/tc-alpha.c (s_alpha_ucons): New function.
	(md_pseudo_table): Add unaligned data pseudos for DWARF.

Thu Jul 31 15:13:43 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_assemble): Ignore the rest of the current
	line if we encounter an error.

	* config/tc-v850.c (md_assemble): Sign extend constants value
	for hi and hi0 expressions.
	(v850_insert_operand): Enable range checking for generic 16bit
	operands.

Tue Jul 29 14:20:43 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_assemble): Turn on fx_no_overflow for
	LO16, HI16 and HI16_S relocs.

Mon Jul 28 18:41:41 1997  Rob Savoye  <rob@chinadoll.cygnus.com>

	* configure.in: Use CYGWIN and EXEEXT autoconf macro to look for
	win32 dependencies.
	* configure: Regenerated with autoconf 2.12.
	* Makefile.in: Add $(EXEEXT) to all executables.

Fri Jul 25 10:54:43 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (md_apply_fix): Improve warnings for out of range
	unconditional branches.
	(hppa_fix_adjustable): Don't adjust anything with a RR% or LR%
	field selector.

Thu Jul 24 15:21:49 1997  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-sparc.c (md_begin): Cast sparc_opcodes to PTR for hash_insert.

Thu Jul 24 17:51:29 1997  Ian Lance Taylor  <ian@cygnus.com>

	* macro.c (define_macro): Make sure the index is in range before
	checking for '('.

Thu Jul 24 12:13:19 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (build_insn): Remove "extended" and replace with
	"fx" and "fxfrag".  Add "ffrag".  Change code to initialize and use
	the right f/ffrag and fx/fxfrag pairs since instruction may be split
	across frags.

Tue Jul 22 18:38:56 1997  Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>

	* config/te-go32.h (USE_ALIGN_PTWO): Define.
	* config/tc-i386.c (md_pseudo_table): If USE_ALIGN_PTWO is
	defined, use s_align_ptwo for .align.
	* configure.in (i386-*-msdosdjgpp*): New target.
	(i386-*-go32*): Set em to go32 and targ to coffgo32.
	* configure: Rebuild.

Tue Jul 22 12:41:40 1997  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-sparc.c (last_opcode): New static local.
	(md_assemble): Don't issue "FP branch in delay slot" warning if
	the delay slot has been annulled.

Tue Jul 22 13:25:13 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (md_apply_fix_2): Check for PC relative reloc
	code if BFD_ASSEMBLER.

Mon Jul 21 08:57:17 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (system_registers): Fix ordering of registers.

Tue Jul 15 16:29:54 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (build_insn): Initialize extended word to zero
	when it will be filled in later by relocation information.

Mon Jul 14 23:10:58 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (macro_build): Restore check of fmt argument.
	(mips_ip): Fix ISA checks.

Mon Jul 14 19:30:55 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (build_insn): Fix endianness problem with
	O_big operands.

Sun Jul 13 20:43:46 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (check_absolute_expr): Change warning to
	error.

Fri Jul 11 10:18:47 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mips.c (macro_build): Refine code to check if an
	instruction is available on a particular cpu variant.
	(mips_ip): Likewise.

Mon Jul  7 22:53:08 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.c (tc_i386_fix_adjustable): Change ifndef
	OBJ_AOUT to ifdef OBJ_ELF.
	(md_apply_fix3): When mangling 32 bit PC relative reloc for
	BFD_ASSEMBLER, handle one ELF case for COFF as well, and add a PE
	case.
	* write.c (fixup_segment): Change special case for i386-coff to
	not apply for i386-pe.
	* config/obj-coff.c (coff_adjust_section_syms): Only count fixups
	which were not done.
	(coff_frob_file_after_relocs): Rename from coff_frob_file.
	(coff_format_ops): Initialize frob_file_after_relocs field rather
	than frob_file field.
	* config/obj-coff.h (coff_frob_file): Don't declare.
	(coff_frob_file_after_relocs): Declare.
	(obj_frob_file): Don't define.
	(obj_frob_file_after_relocs): Define.
	* configure.in: Set bfd_gas to yes for i386-*-cygwin32.
	* configure: Rebuild.

Wed Jul  2 12:05:00 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (fixup_segment): Never subtract section
	address from PC relative reloc which will be fully resolved.

Tue Jul  1 15:23:07 1997  Jeffrey A Law  (law@cygnus.com)

	* ecoff.c (page_type): Renamed from page_t to avoid conflict
	with hpux10 header files.

Mon Jun 30 12:27:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Jason Merrill <jason@cygnus.com>:
	* read.c (do_align): If BFD_ASSEMBLER, only use NOP_OPCODE if
	SEC_CODE is set.
	* config/tc-i386.h (md_maybe_text): Define.
	(md_do_align): Use md_maybe_text.

Fri Jun 27 19:15:27 1997  Michael Meissner  <meissner@cygnus.com>

	* config/tc-ppc.h (tc_fix_adjustable): Only check for GOT type
	relocations, don't check for symbol being external, weak, etc.

Mon Jun 16 19:12:51 1997  Geoff Keating  <geoffk@ozemail.com.au>

	* config/tc-ppc.h (tc_fix_adjustable): Don't let the assembler
	calculate relocations to any external symbol, because we might be
	linking a shared object and the symbol might be overriden or moved
	(for instance, moved into a static executable's .bss section).
	(GLOBAL_OFFSET_TABLE_NAME): Delete. This is an i386 wierdness.

	* config/tc-ppc.h (tc_fix_adjustable): GOT-based relocations can't
	be calculated by the assembler.

	* config/tc-ppc.c (md_apply_fix3): Handle @plt or @local branch
	whose destination lies in the same file, by ignoring the @plt or
	@local and aiming the branch at its destination.

Mon Jun 16 13:59:18 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* symbols.c (copy_symbol_attributes): Copy BSF_OBJECT flag.
	* config/obj-elf.h (OBJ_COPY_SYMBOL_ATTRIBUTES): Copy size
	expression.

	* config/obj-multi.h (OBJ_COPY_SYMBOL_ATTRIBUTES): Define instead
	of obj_copy_symbol_attributes.

Mon Jun 16 12:45:56 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (ppc_insert_operand): In 32 bit mode, with a
	signed operand, sign extend a 32 bit value to the host size.

	* Makefile.in (CFLAGS): Subsitute from configure script.  From
	Jeff Makey <jeff@cts.com>.

	* config/tc-i386.c (i386_operand): Use alloca rather than a fixed
	buffer size to make a copy of the symbol.

	* Makefile.in (OBJS): Put @extra_objects@ on the same line as
	macro.o.

Thu Jun 12 12:16:20 1997  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (write_object_file): In non BFD_ASSEMBLER code, as we
	step through the frags calling cvt_frag_to_fill, switch to
	SEG_DATA when we reach data_frag_root.

Tue Jun 10 17:08:34 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (md_assemble): Allow an empty register
	list for instructions which use register lists.

Tue Jun 10 11:18:09 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* config/tc-arm.c (md_apply_fix3): Make temp unsigned long.

	* config/tc-arm.c (arm_adjust_symtab): Only set storage classes if
	OBJ_COFF.

	* config/tc-arm.c: Add prototypes for many static functions.
	(struct asm_opcode ): Add prototypes for parms field.
	(struct thumb_opcode ): Likewise.
	(fp_op2): Remove unused flags parameter.
	(output_inst): Make static.
	(arm_after_pass_hook): Remove unused ignore parameter.
	* config/tc-arm.h (arm_after_pass_hook): Declare.
	(arm_start_line_hook): Declare.
	(arm_frob_label): Declare.

Mon Jun  9 12:55:45 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* depend.c (wrap_output): new prototype.

Mon Jun  9 12:52:44 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.c (md_apply_fix): Check for overflow.

	* config/tc-m68k.c (md_section_align): If a.out and BFD, force
	section size to be aligned.

Fri Jun  6 17:15:55 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.h (md_cons_align): Define.
	(sh_cons_align): Declare.
	* config/tc-sh.c (md_pseudo_table): Add .uaword and .ualong.
	(sh_no_align_cons): New static variable.
	(s_uacons): New static function.
	(sh_cons_align): New function.
	(sh_handle_align): Warn about misaligned data.
	* doc/c-sh.texi: Document .uaword and .ualong.

Thu Jun  5 15:38:17 1997  Ian Lance Taylor  <ian@cygnus.com>

	* macro.c (macro_expand): In MRI mode, treat single quote as a
	separator character when checking for a positional argument.

Tue Jun  3 16:15:13 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-arm.c (md_parse_option): Merge in changes from
	armT-970328-branch.

	* config/tc-arm.h: Merge in changes from armT-970328-branch.

	* configure.in (emulations): Add Thumb architecture support from
	armT-9703-28-branch.

Mon Jun  2 16:25:07 1997  Nick Clifton  <nickc@cygnus.com>

	* doc/all.texi: Add enabling of ARM documentation.

	* doc/as.texinfo: Add ARM documentation from armT-970328-branch.

Mon Jun  2 11:55:12 1997  Gavin Koch  <gavin@cygnus.com>

	* config/tc-mips.c: Added r3900 support.

Thu May 29 12:58:26 1997  Ben Pfaff  <pfaffben@pilot.msu.edu>

	* as.c: (parse_args) `-t' option requires an argument.

Wed May 28 15:45:07 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-arm.c (md_begin): Change call to
	coff_arm_bfd_set_private_flags() to a call to
	bfd_set_private_flags().

Wed May 28 16:17:34 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in: Rebuild dependencies.

	* config/tc-i386.c (tc_gen_reloc): Don't try to convert the type
	of a BFD_RELOC_RVA reloc.

Wed May 28 10:48:14 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (tc_fix_adjustable): Reject absolute calls/jumps.
	(hppa_force_relocation): Force a relocation for an absolute
	call/jump.

Mon May 26 13:24:25 1997  Ian Lance Taylor  <ian@cygnus.com>

	* doc/as.texinfo: Don't use @value in section names or index
	entries; it confuses texinfo.tex.

Fri May 23 00:09:35 1997  Tom Tromey  <tromey@cygnus.com>

	* doc/as.texinfo: Updated for -MD option.
	* Makefile.in (CFILES): Added depend.c.
	(OBJS): Added depend.o.
	* as.h (start_dependencies, register_dependency,
	print_dependencies): New declarations.
	* depend.c: New file.
	* as.c (parse_args): Added -MD option.
	(main): Call print_dependencies.
	(show_usage): Added help for -MD.
	* read.c (s_app_file): Call register_dependency.
	(s_include): Call register_dependency when file is found.
	(read_a_source_file): Call register_dependency.

Wed May 21 17:39:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (symbol_to_chars): If TE_PE, don't add the
	section address to the symbol value.

Tue May 20 11:23:31 1997  Gavin Koch  <gavin@cygnus.com>

	* config/tc-mips.c (macro_build,mips_ip): Move the INSN_ISA field
	into the new membership field.

Thu May 15 10:00:53 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-arm.c (md_begin): If no cpu type is specified on the
	command line then the ARM7 is now chosen by default when setting
	the BFD machine and architecture.

Wed May 14 09:54:53 1997  Nick Clifton  <nickc@cygnus.com>

	* config/tc-arm.c (global variables): Added 'uses_apcs_26' flag to
	hold APCS selection.
	(md_begin): Added code to generate flags to be set into the COFF
	header and the calls to the BFD functions to do this.
	(md_parse_option, md_show_usage): Added new command line
	options -mapcs-32, -mapcs-26, -marmv2, -marmv2a, -marmv3,
	-marmv3m, -marmv4, -marmv4t.

	* config/tc-arm.h (LOCAL_LABEL): Removed the definition of this macro
	as it is never used.

Tue May 13 22:26:14 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (md_convert_frag): Prefix temporary
	label name with ".".
	* config/tc-mn10300.c (md_convert_frag): Likewise.

Tue May 13 14:44:39 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (set_at): Check for bignum.
	(check_absolute_expr, macro, mips16_macro): Likewise.

Tue May 13 10:45:56 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (md_apply_fix): Check PC relative relocations
	for overflow/underflow, only insert lower 15 bits into instruction.

Mon May 12 13:33:08 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* config/tc-i386.c (pi): Check for RegMMX.

Thu May  8 11:10:15 1997  Ian Lance Taylor  <ian@cygnus.com>

	* expr.c (expr): When subtracting values in the same frag,
	subtract X_add_number rather than adding it.

Wed May  7 15:39:48 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (write_object_file): Just pass NULL to
	md_do_align, not the address of a char holding NOP_OPCODE.

	* config/tc-mips.c (macro): Handle constants for M_LI_D and
	M_LI_DD.
	(mips_ip): For 'F', 'L', 'f', and 'l', generate a constant rather
	than an address if the floating point value looks sufficiently
	simple.

Tue May  6 12:18:09 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.c (md_section_align): If a.out and BFD, force
	section size to be aligned.

Mon May  5 17:16:55 1997  Ian Lance Taylor  <ian@cygnus.com>

	* cond.c: Include "macro.h".
	(struct conditional_frame): Add macro_nest field.
	(initialize_cframe): Initialize macro_nest.
	(cond_finish_check): Add nest parameter.  Change all callers.
	(cond_exit_macro): New function.
	* as.h (cond_finish_check): Update declaration.
	(cond_exit_macro): Declare.
	* input-scrub.c (macro_nest): Make globally visible.
	(input_scrub_next_buffer): Call cond_finish_check.
	* macro.h (macro_nest): Declare.
	* read.c (s_mexit): Call cond_exit_macro.

	* config/tc-i386.h (RegMMX): Define.
	* config/tc-i386.c (pi): Check for all register types.
	(type_names): Add RegMMX.
	(md_assemble): Handle RegMMX.

Wed Apr 30 12:47:00 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* config/obj-coff.c (c_section_symbol): Clear the LOCAL bit #ifdef
	TE_DELTA.

Tue Apr 29 20:23:10 1997  Jim Wilson  <wilson@cygnus.com>

	* config/tc-mips.c (nopic_need_relax): Add new parameter
	before_relaxing.  Use it when testing ecoff_extern_size.
	(load_address, macro, md_estimate_size_before_relax): Fix all
	callers.

Tue Apr 29 19:54:36 1997  Richard Henderson  <rth@tamu.edu>

	* config/obj-elf.c (elf_pseudo_table): Add "subsection".
	(obj_elf_subsection): New static function.

Tue Apr 29 19:52:47 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (coff_header_append): Don't reset string_size
	each time through the loop.

Fri Apr 25 14:17:46 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* Makefile.in (DISTSTUFF): Add itbl-parse.h.

Fri Apr 25 12:03:15 1997  Ian Lance Taylor  <ian@cygnus.com>

	* doc/internals.texi (Porting GAS): Correct documentation for
	current configure handling of targ-cpu.h, et. al.
	(CPU backend): Document listing macros.

	* listing.c (data_buffer): Set size based on other listing macros,
	rather than always using 100.
	(data_buffer_size): Remove static variable.
	(calc_hex): Make data_buffer_size a local variable.  Don't leave
	any slop when filling data_buffer.

Mon Apr 21 15:33:19 1997  Ian Lance Taylor  <ian@cygnus.com>

	* doc/c-mips.texi: Document .set autoextend.

Sat Apr 19 23:09:25 1997  Niklas Hallqvist  <niklas@petra.appli.se>

	* configure.in (i386-*-openbsd*, m68k-*-openbsd*,
	mips-dec-openbsd*, ppc-*-*bsd*, ns32k-pc532-openbsd*,
	sparc-*-openbsd*): New targets.
	* configure: Rebuild.

Sat Apr 19 22:52:03 1997  Jim Wilson  <wilson@cygnus.com>

	* config/obj-elf.c (elf_frob_symbol): If TC_MIPS, set BSF_OBJECT
	for all undefined symbols.

Fri Apr 18 13:37:35 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (ppc_fix_adjustable): Handle zero length csects
	correctly.

Fri Apr 18 11:51:35 1997  Niklas Hallqvist  <niklas@appli.se>

	* configure.in (alpha*-*-openbsd*): New target.
	* configure: Rebuild.

Thu Apr 17 13:59:47 1997  Per Fogelstrom  <pefo@openbsd.org>

	* configure.in (mips-*-openbsd*): New target.
	* configure: Rebuild.

Wed Apr 16 12:31:24 1997  Martin Hunt <hunt@cygnus.com>

	* config/tc-d30v.c (parallel_ok): Fix parallel checking
	for instructions using conditional execution.

Tue Apr 15 18:11:44 1997  Gavin Koch  <gavin@cygnus.com>

	* config/tc-mips.c (insn_uses_reg): Correct test for fpr pairs.

Tue Apr 15 13:04:47 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (srcroot): Remove.
	(INSTALL): Set to @INSTALL@.
	(INSTALL_XFORM, INSTALL_XFORM1): Remove.
	(all, dvi): Don't set srcroot.
	(install): Depend upon as.new, gasp.new, and installdirs.  Use
	$(program_transform_name) directly, rather than using
	$(INSTALL_XFORM) and $(INSTALL_XFORM1).
	(installdirs): New target.
	* doc/Makefile.in (INSTALL_XFORM1): Remove.
	(install): Depend upon installdirs.  Use $(program_transform_name)
	directly, rather than using $(INSTALL_XFORM) and
	$(INSTALL_XFORM1).
	(installdirs): New target.
	(install-info-as): Run mkinstalldirs.
	(install-info-gasp): Likewise.

Mon Apr 14 11:59:08 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (INSTALL): Change install.sh to install-sh.

	* symbols.c (resolve_symbol_value): Check for division by zero.

	From Thomas Graichen <graichen@rzpd.de>:
	* Makefile.in: Always use $(SHELL) when running move-if-change.
	* configure.in: Use ${CONFIG_SHELL} when running $ac_config_sub.
	* configure: Rebuild.

Thu Apr 10 14:40:00 1997  Doug Evans  <dje@canuck.cygnus.com>

	* cgen.c (cgen_parse_operand): Renamed from cgen_asm_parse_operand.
	New argument `want'.  Update enum cgen_parse_operand_result values.
	Initialize if CGEN_PARSE_OPERAND_INIT.
	* config/tc-m32r.c (md_begin): Set cgen_parse_operand_fn.
	(md_assemble): Call cgen_asm_init_parse.
	Update call to m32r_cgen_assemble_insn, call as_bad if assembly failed.

Wed Apr  9 11:49:41 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Handle #j.

Tue Apr  8 16:37:57 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (md_convert_frag): Create fixup at the
	right address for call label:32,regs,imm.

Mon Apr  7 14:58:22 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (pa_subspace_start): If OBJ_ELF, then always return
	zero.
	* config/tc-hppa.h (tc_frob_symbol): Don't reset the value of the
	symbol for OBJ_ELF anymore.

Mon Apr  7 10:54:59 1997  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in: Regenerate dependencies.
	(TARG_CPU): New variable.
	(cgen.o): Depend on cgen.h, $(TARG_CPU)-opc.h.
	(.dep1): Delete creating of cgen-opc.h.
	(.tcdep): Put proper contents in cgen-opc.h.
	* configure.in (m32r): Delete setting of extra_files, extra_links.
	(AC_OUTPUT): Create cgen-opc.h.
	* configure: Regenerated.

Sat Apr  5 13:19:12 1997  Klaus Kaempf  <kkaempf@progis.de>

	* makefile.vms: Update to build gasp.exe.

Fri Apr  4 16:10:02 1997  Doug Evans  <dje@canuck.cygnus.com>

	* write.c (relax_frag): Make non-static.
	* write.h (relax_frag): Add prototype for.
	* config/tc-m32r.h (md_do_align): New arg `max'.
	* config/tc-m32r.c (m32r_do_align): Likewise.
	Update calls to frag_align, frag_align_pattern.
	(fill_insn): Update call to m32r_do_align.
	(m32r_scomm): Update call to frag_align.

	* config/tc-m32r.[ch]: New files.
	* cgen.c: New file.
	* Makefile.in (CPU_TYPES): Add m32r.
	(TARGET_CPU_CFILES): Add tc-m32r.c.
	(TARGET_CPU_HFILES): Add tc-m32r.h.
	(DISTCLEAN_HERE): Add cgen-opc.h.
	(.dep1,.tcdep): Create empty cgen-opc.h.
	(cgen.o): Add dependencies.
	(dependencies): Regenerate.
	* as.h (struct frag): New member fr_targ.
	(fr_pcrel_adjust,fr_bsr): Move into union fr_targ.ns32k.
	* conf.in (USING_CGEN): New macro.
	* configure.in (m32r-*-*): Add entry for.
	Add cgen.o to extra_objects.
	* configure: Regenerate.
	* frags.c (frag_var): fr_pcrel_adjust renamed to
	fr_targ.ns32k.pcrel_adjust.  fr_bsr renamed to fr_targ.ns32k.bsr.
	(frag_variant): Likewise.
	* write.c (relax_frag): Likewise.
	* config/tc-ns32k.c (*): Likewise.

Fri Apr  4 13:26:10 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-hppa.h (TC_EOL_IN_INSN): Check explicitly for '!',
	rather than for any end of line character.

	* config/tc-hppa.c (tc_gen_reloc): If hppa_ren_reloc_type fails,
	call abort (i.e., as_abort) rather than crashing.

	* config/tc-mips.c: Protect uses of STO_MIPS16 with an ifdef of
	OBJ_ELF, rather than of S_GET_OTHER.

	* Makefile.in (DISTCLEAN_HERE): Add site.exp and site.bak.

Thu Apr  3 13:16:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (VERSION): Set to 2.8.1.

	* Branched binutils 2.8.

Wed Apr  2 12:24:10 1997  Ian Lance Taylor  <ian@cygnus.com>

	* COPYING: Update FSF address.

	* config/tc-mips.c (mips16_macro): Handle M_DMUL and M_MUL.

Tue Apr  1 18:29:47 1997  Jim Wilson  <wilson@cygnus.com>

	* config/tc-mips.c (md_begin): Don't set interlocks for 4100.

Tue Apr  1 16:24:28 1997  Klaus Kaempf  <kkaempf@progis.de>

	* config-gas.com: Update to handle both vax and alpha.
	* makefile.vms: Update to use config-gas.
	* conf-a-gas.com: Remove file.

Tue Apr  1 16:08:21 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in: Remove unnecessary itbl-parse.h, ibtl-parse.c, and
	itbl-lex.c dependencies.  Remove rules for itbl-lex.o,
	itbl-parse.o, and itbl-ops.o; just use the normal .c.o rule.

Tue Apr  1 11:25:56 1997  Michael Meissner  <meissner@cygnus.com>

	* config/tc-tic80.c (line_comment_char): Make '#' start comments
	at the beginning of a line for compatibility with .S files where
	cpp leaves the filename transitions beginning with '#'.

Tue Apr  1 00:07:30 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c: Only compile tc_coff_symbol_emit_hook and
	tc_coff_sizemachdep if OBJ_COFF.

Mon Mar 31 23:53:44 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* config/tc-ppc.c (register_name): Declare.

Mon Mar 31 16:31:04 1997  Joel Sherrill  <joel@oarcorp.com>

	* configure.in (hppa*-*-rtems*): New target, like hppa-*-*elf*.
	* configure: Rebuild.

Mon Mar 31 14:15:19 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_pseudo_table): Add "stabn".
	(mips16_mark_labels): New static function.
	(append_insn): Call mips16_mark_labels.
	(mips_emit_delays): Likewise.
	(s_insn): Likewise.  Don't call mips_clear_insn_labels.
	(s_mips_stab): New static function.

	* configure.in: Use ELF for mips-*-gnu*.
	* configure: Rebuild.

Mon Mar 31 14:01:40 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* config/tc-m68k.h (TARGET_FORMAT): Set to "coff-m68k-sysv" if
	TE_DELTA.

Fri Mar 28 18:03:19 1997  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* configure.in: Add AC_ARG_ENABLE for commonbfdlib.  If it is set,
	set OPCODES_LIB to empty.
	* configure: Rebuild.

Fri Mar 28 15:25:24 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* configure.in (sparc-*-linux*aout*, sparc-*-linux*): New
	targets.
	* configure: Rebuild.

Fri Mar 28 13:08:33 1997  Ian Lance Taylor  <ian@cygnus.com>

	* itbl-parse.y (yyerror): Make static.  Declare.

	From Ralf Baechle <ralf@gnu.ai.mit.edu>:
	* configure.in: Set emulations for mips-*-linux*-*.
	* configure: Rebuild.

	* config/tc-mips.c (struct mips_set_options): Define.
	(mips_opts): New static variable.
	(mips_isa): Remove.  Now a field in mips_opts.  Change all
	references.
	(mips16, mips16_autoextend, mips_warn_about_macros): Likewise.
	(mips_noreorder, mips_nomove, mips_noat, mips_nobopt): Likewise.
	(struct mips_option_stack): Define.
	(mips_opts_stack): New static variable.
	(s_mipsset): Add support for .set push and .set pop.
	* doc/c-mips.texi: Document .set push and .set pop.

	* config/obj-elf.c (obj_elf_section_change_hook): New function.
	* config/obj-elf.h (obj_elf_section_change_hook): Declare it.
	* config/tc-mips.c (s_change_sec): Call it if OBJ_ELF.

Thu Mar 27 12:23:56 1997  Ian Lance Taylor  <ian@cygnus.com>

	* as.c (parse_args): Update copyright date in version message.

	* Makefile.in (clean-here): Remove dependency files.

	* read.c (s_comm): Check S_IS_COMMON as well as S_IS_DEFINED.
	(s_mri_common): Check S_IS_COMMON unconditionally.
	* symbols.c (colon): Check S_IS_COMMON as well as S_IS_DEFINED.
	* config/tc-alpha.c (s_alpha_comm): Likewise.
	* config/tc-mips.c (nopic_need_relax): Likewise.
	* config/tc-ppc.c (ppc_elf_lcomm): Likewise.
	(ppc_pe_comm): Likewise.
	* config/obj-elf.c (obj_elf_common): Likewise.  Set segment of
	common symbol to bfd_com_section_ptr.
	* config/tc-sparc.c (s_common): Likewise.
	(tc_gen_reloc): Likewise.

Thu Mar 27 00:29:46 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d30v.c (md_apply_fix3): Get the relocs right.

Wed Mar 26 13:35:15 1997  H.J. Lu  <hjl@lucon.org>

	* config/tc-i386.c (tc_i386_fix_adjustable): Only define if
	BFD_ASSEMBLER.

Wed Mar 26 11:32:51 1997  Ian Lance Taylor  <ian@cygnus.com>

	* input-scrub.c (input_scrub_next_buffer): Handle very long input
	lines correctly.

	* listing.c (print_lines): Add lineno parameter.  Change all
	callers.
	(listing_listing): Only call calc_hex for the right line.
	(listing_list): Set the new edict based on the current edict, in
	order to handle listing commands in macros correctly.

	* config/tc-mips.c (insn_uses_reg): Map register numbers in mips16
	instructions.

	* cond.c (cond_finish_check): New function.
	* as.h (cond_finish_check): Declare.
	* as.c (main): Call cond_finish_check.

Tue Mar 25 14:45:54 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d30v.c (md_assemble): If two instructions
	are supposed to be assembled in parallel and the first one is
	long, print an error and stop.
	(md_apply_fix3): Don't calculate absolute relocs.  Just write
	them out.

Mon Mar 24 12:11:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.h (iclrKludge): Define.
	* config/tc-i386.c (md_assemble): Handle iclrKludge.

	* config/tc-alpha.h (tc_frob_file_before_adjust): Define if
	OBJ_ECOFF.
	(alpha_frob_file_before_adjust): Declare if OBJ_ECOFF.
	* config/tc-alpha.c (alpha_debug): New static variable.
	(md_parse_option): Set alpha_debug if -g is seen.
	(alpha_frob_file_before_adjust): New function if OBJ_ECOFF.

Sun Mar 23 18:03:31 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d30v.c (build_insn): Enable range-checking code.
	(postfix): Stop at space or comma.
	(md_assemble): Change error message.

Sat Mar 22 13:44:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in: Added automatic dependency building.
	* dep-in.sed: New file.

Fri Mar 21 15:42:37 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-ieee.c (segment_name): Don't define function if this
	is a macro.

	* config/obj-coff.h (DO_STRIP): Don't define.
	* config/tc-h8300.h (DO_STRIP): Don't define.
	* config/tc-h8500.h (DO_STRIP): Don't define.
	* config/tc-w65.h (DO_STRIP): Don't define.
	* config/tc-z8k.h (DO_STRIP): Don't define.

	* symbols.c (colon): Call obj_frob_label if it is defined.
	* config/obj-vms.h (obj_frob_label): Rename from tc_frob_label.

	* configure.in: Don't set files and links.  Don't call
	AC_LINK_FILES.  Substitute te_file.  Create targ-cpu.h,
	obj-format.h, targ-env.h, and itbl-cpu.h in AC_OUTPUT.
	* configure: Rebuild.
	* Makefile.in (TARG_CPU_C): New variable.
	(TARG_CPU_O, TARG_CPU_H): New variables.
	(OBJ_FORMAT_C, OBJ_FORMAT_O, OBJ_FORMAT_H): New variables.
	(TARG_ENV_H, ATOF_TARG_C, ATOF_TARG_O): New variables.
	(SOURCES): Rename from REAL_SOURCES.  Delete old definition.
	(LINKED_SOURCES): Remove.
	(HEADERS): Rename from REAL_HEADERS.  Delete old definition.
	(LINKED_HEADERS): Remove.
	(OBJS): Use $(TARG_CPU_O), etc., rather than targ-cpu.o, etc.
	($(OBJS)): Depend upon $(TARG_ENV_H), etc., rather than
	targ-cpu.h, etc.
	($(TARG_CPU_O), $(OBJ_FORMAT_O) $(ATOF_TARG_O)): New targets.
	(targ-cpu.o, obj-format.o, atof-targ.o): Remove targets.
	(itbl-cpu.h): Remove target.
	(DISTCLEAN_HERE): Remove targ-cpu.c, obj-format.c, atof-targ.c,
	atof-targ.h.

Thu Mar 20 19:18:58 1997  Ian Lance Taylor  <ian@cygnus.com>

	* doc/as.texinfo (Symbol Names): Don't use obsolete @ctrl macro.

Thu Mar 20 16:49:14 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/tc-m68k.c (mri_chip): Replace calls to get_symbol_end by
	open coded loop that does not require the name to start with a
	name beginner.

Thu Mar 20 13:42:01 1997  H.J. Lu  <hjl@lucon.org>

	* frags.c (frag_var): Change offset parameter to offsetT.
	(frag_variant): Likewise.
	* frags.h (frag_variant, frag_var): Update declarations.
	* config/tc-m68k.c (struct m68k_it): Change foff field to
	offsetT.
	(add_frag): Change off parameter to offsetT.
	* Several files: Add casts to calls to frag_var.

	* Makefile.in (m68k-parse.c): Depend upon itbl-parse.c, to
	serialize a parallel make.
	(itbl-parse.h): Split target out from itbl-parse.c.

Thu Mar 20 12:48:45 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* config/m68k-parse.y (motorola_operand): Allow (zdireg,EXPR).

	* config/te-delta.h (COFF_COMMON_ADDEND): Define.
	* config/obj-coff.c (fixup_segment): Check COFF_COMMON_ADDEND when
	storing the value of a common symbol.

Wed Mar 19 11:37:57 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* config/obj-coff.c (glue_symbols): Unused variable symbolP
	removed.
	(crawl_symbols): Do not modify symbol_rootP and symbol_lastP here;
	that is done by symbol_remove and symbol_insert.

	* config/obj-coff.h (S_IS_LOCAL): Return 0 for a debugging
	symbol.

Wed Mar 19 11:06:29 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (load_register): In 32 bit mode, when not
	dealing with a 64 bit number, permit the upper 32 bits to be set
	even if bit 31 is not set.

Tue Mar 18 23:30:14 1997  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (potable): Add "equiv".
	(s_set): Handle .equiv based on argument.
	* doc/as.texinfo (Equiv): New node to document .equiv.
	(Err): New node to document .err.

Tue Mar 18 15:50:13 1997  H.J. Lu  <hjl@lucon.org>

	* Many files: Add function prototypes.
	* as.c (show_usage, parse_args): Make static.
	* frags.h (frag_alloc): Declare.
	* subsegs.c (subseg_set_rest): Don't declare frag_alloc.
	* symbols.c (dollar_label_instance): Change return type to long.
	* symbols.h (print_symbol_value): Declare.
	(print_expr, print_expr_1, print_symbol_value_1): Declare.
	* write.c (fix_new_exp): Don't declare make_expr_symbol.
	(remove_subsegs, relax_frag): Make static.
	* config/atof-vax.c (atof_vax_sizeof): Change letter to int.
	(what_kind_of_float): Likewise.
	(atof_vax): Make static.  Change what_kind to int.
	(md_atof): Change what_statement_type to int.
	* config/obj-ecoff.h (obj_ecoff_set_ext): Declare.
	* config/tc-alpha.c (vax_md_atof): Declare.
	(md_atof): Don't declare atof_ieee and vax_md_atof.
	* config/tc-i386.c (set_16bit_code_flag): Make static.
	* config/tc-i386.h (tc_i386_fix_adjustable): Declare.
	* config/tc-m68k.c (add_fix): Change width to int.
	(insert_reg): Change regname to const.
	(md_atof): Don't declare atof_ieee.
	(demand_empty_rest_of_line): Don't declare.
	* config/tc-m88k.c (md_atof): Don't declare atof_ieee.
	* config/tc-sparc.c (cmp_reg_entry): Change args to const PTR.
	(parse_keyword_arg): Change lookup_fn to take const arg.
	(md_atof): Don't declare atof_ieee.
	* config/tc-sparc.h: Add ifdef for multiple inclusion.
	(tc_aout_pre_write_hook): Don't declare.

Mon Mar 17 11:21:09 1997  Ian Lance Taylor  <ian@cygnus.com>

	* as.h (bfd_alloc_by_size_t): Don't declare.
	* Many files: Use xmalloc rather than bfd_alloc_by_size_t.

Sun Mar 16 13:49:21 1997  Philippe De Muyter <phdm@info.ucl.ac.be>

	* symbols.c (symbol_new): Don't call debug_verify_symchain.
	(symbol_append): Set sy_next and sy_previous when adding a single
	symbol to an empty list.  Call debug_verify_symchain.
	(verify_symbol_chain): Use assert, not know.

Sat Mar 15 20:27:12 1997  Fred Fish  <fnf@cygnus.com>

	* NEWS: Note BeOS support.
	* configure.in: (ppc-*-beos): New target, use coff as object format.
	* configure: Regenerate with autoconf.

Sat Mar 15 19:14:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_apply_fix): Improve error message for out
	of range branch.

	* Makefile.in: Add dependencies on obstack.h where needed.

Fri Mar 14 15:33:38 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_estimate_size_before_relax): Handle the
	case of a symbol equated to another symbol when using SVR4_PIC.

	* Makefile.in (TARG_CPU_DEP_sparc): Add opcode/sparc.h.

Thu Mar 13 11:20:51 1997  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (read_a_source_file): Call LISTING_NEWLINE before
	HANDLE_CONDITIONAL_ASSEMBLY when handling an MRI line label.

	* config/obj-elf.c (obj_elf_data): Call md_flush_pending_output
	and md_elf_section_change_hook if they are defined.
	(obj_elf_text, obj_elf_previous): Likewise.

Wed Mar 12 11:40:20 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-multi.h (struct elf_obj_sy): Define if
	OBJ_MAYBE_ELF.
	(OBJ_SYMFIELD_TYPE): Define as struct elf_obj_sy if
	OBJ_MAYBE_ELF.
	* config/obj-elf.h (struct elf_obj_sy): Don't define if
	OBJ_SYMFIELD_TYPE is defined.

	* doc/as.texinfo (bss): Improve description of .bss section.  In
	ELF or COFF, you are permitted to switch into the section.
	(Comm): Rewrite description of common symbols.
	(Lcomm): Mention that some targets permit a third argument.

Tue Mar 11 01:13:31 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (ppc_elf_lcomm): Don't call S_CLEAR_EXTERNAL.

	* symbols.c (colon): Change type of local to int.  From Alan Modra
	<alan@spri.levels.unisa.edu.au>.

	* config/tc-m88k.c (m88k_do_align): Don't use a special nop
	alignment if a zero fill pattern was explicitly specified.
	* config/tc-sh.c (sh_do_align): Likewise.

	* read.c (equals): Always permit register names to be redefined.

	* config/tc-mips.c (mips_fix_adjustable): Permit a reloc against a
	mips16 symbol to be adjusted if a symbol is being subtracted from
	it.

	From Eric Youngdale <eric@andante.jic.com>:
	* config/obj-elf.c (obj_elf_symver): Check for duplicate or
	illegal symbol version names.
	(elf_frob_symbol): Check for external default versions.

Sun Mar  9 23:49:12 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Eric Youngdale <eric@andante.jic.com>:
	* config/obj-elf.h (struct elf_obj_sy): Define.
	(OBJ_SYMFIELD_TYPE): Define to elf_obj_sy struct.  Change all
	users.
	* config/obj-elf.c (obj_elf_symver): Just record the name.
	(obj_symbol_new_hook): Initialized versioned_name field.
	(elf_frob_symbol): If there is a versioned_name, either rename the
	symbol, or add an alias with that name.

Thu Mar  6 13:55:32 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (md_relax_table): Define.
	(md_convert_frag): Implement.
	(md_assemble): Handle relaxable operands/instructions correctly.
	(md_estimate_size_before_relax): Implement.
	* config/tc-mn10300.h (TC_GENERIC_RELAX_TABLE): Define.

	* config/tc-mn10200.c (md_relax_table): Fix typos.

	* config/tc-mn10300.c (md_assemble): Don't use any MN10300 specific
	relocs anymore.  Tweak fx_offset for pc-relative relocs.

Wed Mar  5 15:46:16 1997  Ian Lance Taylor  <ian@cygnus.com>

	* cond.c (s_ifc): Call mri_comment_field and mri_comment_end when
	in MRI mode.

Tue Mar  4 19:34:21 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (md_pseudo_table): Add "sect" and "section"
	pseudo-ops.
	* config/tc-tic80.c (md_begin): Declare external variable
	coff_flags and insert an F_AR32WR bit into it.

Tue Mar  4 10:01:04 1997  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (equals): Add reassign parameter.  Change all callers.
	* read.h (equals): Update declaration.

Sat Mar  1 01:04:04 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips16_extended_frag): Don't assume that we
	can rely on the frag address to determine whether a frag is
	earlier or later.

Fri Feb 28 14:40:00 1997  Ian Lance Taylor  <ian@cygnus.com>

	* write.h (LOCAL_LABEL): Only define if not BFD_ASSEMBLER.
	(S_LOCAL_NAME): Likewise.
	(FAKE_LABEL_NAME): Define unconditionally.
	* symbols.c (colon): Call bfd_is_local_label, not LOCAL_LABEL, if
	BFD_ASSEMBLER.
	(S_IS_LOCAL): Call bfd_is_local_label_name, not LOCAL_LABEL.
	* config/tc-*.h: Only define LOCAL_LABEL if not BFD_ASSEMBLER.
	Don't define FAKE_LABEL_NAME.
	* config/te-ic960.h: Likewise.
	* config/tc-mips.h (tc_frob_file_before_adjust): Define.
	(mips_frob_file_before_adjust): Declare.
	* config/tc-mips.c (mips_frob_file_before_adjust): New function.
	(mips_local_label): Remove.

	* config/te-sco386.h: Remove; not used.

Thu Feb 27 15:39:16 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80 (md_pseudo_table): Add align pseudo op to do
	byte alignment rather than power-of-two alignment that is the
	GAS default.

Thu Feb 27 13:29:04 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (md_assemble): Handle a reloc width of 'W'.

	* gasp.c (hash_add_to_string_table): Correct misspelling in error
	message, and add newline.
	(process_file): Don't process assignments in the label if this is
	a equ or assign pseudo-op.
	(process_pseudo_op): Swap first argument to do_assign for K_ASSIGN
	and K_EQU, to match documentation.

Thu Feb 27 12:00:03 1997  Michael Meissner  <meissner@cygnus.com>

	* config/obj-coff.c (obj_coff_section): Add 'r' section attribute
	to denote read-only data sections.

Thu Feb 27 00:26:33 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-elf.c (obj_elf_common): Set BSF_OBJECT in flags.
	* config/tc-sparc.c (s_common): Likewise, if BFD_ASSEMBLER.

	* expr.c (operand): Simplify 0b handling.  Don't treat 0b as a
	binary number if the next character is '+' or '-'.

Wed Feb 26 20:47:12 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (FLT_CHARS): Change from "dD" to "fF".
	(find_opcode): Match operands that can be floats.
	(build_insn): Handle O_big (float) expressions and build
	correct opcode.

Wed Feb 26 18:19:00 1997  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.in (mips*-*-lnews*): New target, also make empty
	emulation list for this target.
	* configure: Update.
	* config/tc-mips.c (ECOFF_LITTLE_FORMAT): Define.
	(mips_target_format): Use.
	* config/te-lnews.h: New file.

Wed Feb 26 15:33:46 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (find_opcode, build_insn): Changes to match
	operands with :m or :s modifiers and generate the right opcodes
	for them.

Wed Feb 26 11:56:11 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (itbl-parse.c itbl-parse.h): Use $(BISON) and
	$(BISONFLAGS), not $(YACC) and $(YACCFLAGS).

Tue Feb 25 22:02:23 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* config/tc-m68k.c (instring): Useless local declaration of
	crack_operand removed.
	* expr.h (expressionS): Changed type of X_op field to operatorT if
	__GNUC__.

Tue Feb 25 13:17:27 1997  Ian Lance Taylor  <ian@cygnus.com>

	Based on patches from Robert Lipe <robertl@dgii.com>:
	* configure.in: Add i386coff and i386elf to emulation list.
	* configure: Rebuild.
	* as.c (i386coff, i386elf): Declare.
	* obj.h (coff_format_ops): Declare.
	* config/obj-coff.c (OBJ_HEADER): Define.
	(coff_obj_symbol_new_hook): Rename from obj_symbol_new_hook.
	(coff_obj_read_begin_hook): Rename from obj_read_begin_hook.
	(obj_pseudo_table): Add "version".
	(coff_pop_insert): New static function.
	(coff_sec_sym_ok_for_reloc): New static function.
	(no_func): New static function.
	(coff_format_ops): New variable.
	* config/obj-coff.h (coff_obj_symbol_new_hook): Declare.
	(obj_symbol_new_hook): Define.
	(coff_obj_read_begin_hook): Declare.
	(obj_read_begin_hook): Define.
	* config/tc-i386.h (i386_target_format): Declare.
	* config/tc-i386.c: Check OBJ_MAYBE_ELF as well as OBJ_ELF; check
	OUTPUT_FLAVOR when appropriate.
	(i386_target_format): New function.
	* Makefile.in (obj-coff.o): New target.
	(e-i386coff.o, e-i386elf.o): New targets.

	From Stephen Williams <steve@icarus.icarus.com>:
	* config/tc-i960.h (TC_SYMFIELD_TYPE): Define if OBJ_COFF.
	(_tc_get_bal_of_call): Don't declare.
	(tc_get_bal_of_call): Declare as function, don't define as macro.
	* config/tc-i960.c (tc_set_bal_of_call): If OBJ_COFF, store balP
	in sy_tc field, not x_balntry field.
	(tc_get_bal_of_call): Rename from _tc_get_bal_of_call.  Change
	return type to symbolS *.  If OBJ_COFF, retrieve value from sy_tc
	field, not x_balntry field.

	* config/obj-elf.c (obj_elf_section): Permit a .note section to
	have the SHF_ALLOC attribute.

	* Makefile.in ($(OBJS)): Don't depend upon $(IT_HDRS).
	(TARG_CPU_DEP_mips): Depend upon $(srcdir)/itbl-ops.h.
	(itbl-lex.o): Depend upon itbl-parse.h.

	* itbl-parse.y (yyerror): Change return type to int.  Change to
	use old style function declaration.

	* Makefile.in (itbl-lex.o): Remove -Wall.
	(itbl-parse.o): Likewise.

	* cond.c (s_ifdef): If we should omit conditionals from listings,
	call listing_list.
	(s_if, s_ifc, s_endif, s_else, s_ifeqs): Likewise.
	* listing.c (list_info_struct): Add EDICT_NOLIST_NEXT.
	(listing_listing): Handle EDICT_NOLIST_NEXT.
	(listing_list): An argument of 2 means EDICT_NOLIST_NEXT.
	* listing.h (LISTING_NOCOND): Define.
	(LISTING_SKIP_COND): Define.
	* as.c (show_usage): Mention c as a suboption of -a.
	(parse_args): Handle c as a suboption of -a.
	* doc/as.texinfo: Document -alc.

Mon Feb 24 23:34:14 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c (md_apply_fix): Handle R_ABS type fixups.

Mon Feb 24 18:27:43 1997  Eric Youngdale  <eric@andante.jic.com>

	* doc/as.texinfo: Document .symver.

Mon Feb 24 15:19:57 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Change pre_defined_registers to
	d10v_predefined_registers and reg_name_cnt to d10v_reg_name_cnt.

Mon Feb 24 10:40:45 1997  Fred Fish  <fnf@cygnus.com>

	* config/obj-coff.c: Fix typo in comment section.
	* config/tc-tic80.c (md_pseudo_table): Add entry for bss, which takes
	an additional alignment argument.
	(find_opcode): Allow O_symbol relocs for any 32 bit field, not just
	base relative ones.
	(build_insn): Handle O_symbol relocs for any 32 bit field, not just
	base relative ones.

Mon Feb 24 02:23:00 1997  Dawn Perchik  <dawn@cygnus.com>

	* Makefile.in: Remove dependancies on itbl-cpu.h.
	* as.c: Define stubs for itbl_parse and itbl_init if HAVE_ITBL_CPU
	is not defined.

Mon Feb 24 02:03:00 1997  Dawn Perchik  <dawn@cygnus.com>

	* itbl-ops.h: Include as.h.

Mon Feb 24 01:04:00 1997  Dawn Perchik  <dawn@cygnus.com>

	* as.c: Remove -t option.
	* configure, configure.in: Move itbl-cpu.h to mips specific configure.
	* itbl-ops.h: Include itbl-cpu.h only if HAVE_ITBL_CPU is defined.
	* config/tc-mips.h: Define HAVE_ITBL_CPU.

Sun Feb 23 18:01:00 1997  Dawn Perchik  <dawn@cygnus.com>

	* itbl-ops.c: Don't define DEBUG.

Sun Feb 23 17:49:00 1997  Dawn Perchik  <dawn@cygnus.com>

	* Makefile.in: Update itbl-test.c to reflect its new location.

Sun Feb 23 15:50:00 1997  Dawn Perchik  <dawn@cygnus.com>

	* itbl-ops.c: Add test for itbl_have_entries.
	* config/tc-mips.c: Remove test for itbl_have_entries.
	* config/tc-mips.h: Define tc_init_after_args to mips_init_after_args.

Sun Feb 23 18:13:19 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (DISTSTUFF): Remove itbl-parse.y, itbl-lex.l, and
	itbl-ops.c.  Add itbl-parse.c and itbl-lex.c.
	(LEX, LEXFLAGS): Define.
	* itbl-ops.c (append_insns_as_macros): Remove bogus ASSERT.

Sat Feb 22 21:25:00 1997  Dawn Perchik  <dawn@cygnus.com>

	* itbl-parse.y: Fix indentation mistakes from indent program.
	* itbl-lex.l: Fix indentation mistakes from indent program.
	* itbl-ops.h: Add include for ansidecl.h.
	Add PARAMS around function arguments.
	Add declaration for itbl_have_entries.
	* itbl-ops.c: Add PARAMS around function arguments.
	* Makefile.in: Add itbl build rules.
	Add dependancies for itbl files to mips target.
	* as.c: Add itbl support.
	Add new option "--insttbl" for dynamically extending instruction set.
	* as.h: Declare insttbl_file_name;
	the name of file defining extensions to the basic instruction set
	* configure.in, configure: Add itbl-parse.o, itbl-lex.o, and
	itbl-ops.o to extra_objects for mips configuration.
	Add include file link from itbl-cpu.h to
	config/itbl-${target_cpu_type}.h.
	* config/tc-mips.c: Allow copz instructions.
	Add notes for future additions to the itbl support.
	Add debug macros.
	(macro): Call itbl_assemble to assemble itbl instructions.
	See if an unknown register is specified in an itbl entry.

Sat Feb 22 20:53:01 1997  Fred Fish  <fnf@cygnus.com>
	* doc/internals.texi (CPU backend): Fix typo in md_section_align
	description.
	* config/tc-tic80.h (NEED_FX_R_TYPE): Define.
	* config/tc-tic80.c (find_opcode): Add code to support O_symbol
	operands.
	(build_insn): Grab a frag early so we can use the address in
	fixups.  Take one's complement of BITNUM values before insertion
	in opcode.  Add code to support O_symbol operands.
	(md_apply_fix): Replace unimplemented warning with implementation.
	(md_pcrel_from): Ditto.
	(tc_coff_fix2rtype): Ditto.

Fri Feb 21 14:34:31 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d30v.c (parallel_ok): New function.
	* config/tc-d30v.h: Define TARGET_BYTES_BIG_ENDIAN.
	* config/tc-d10v.c (md_pcrel_from_section): Return 0 if
	relocation is in different section.

Fri Feb 21 10:08:25 1997  Jim Wilson  <wilson@cygnus.com>

	* config/tc-mips.c (mips_ip): If configured for an embedded ELF system,
	don't set the section alignment to 2**4.

Fri Feb 21 11:55:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (line_comment_chars): Add '*'.

	* app.c (LEX_IS_TWOCHAR_COMMENT_2ND): Don't define.
	(do_scrub_begin): Don't set lex['*'].
	(do_scrub_chars): When handling LEX_IS_TWOCHAR_COMMENT_1ST, don't
	check for LEX_IS_TWOCHAR_COMMENT_2ND.  Instead, just check for
	a literal '*'.

	* configure.in: Set em=svr4 for m68k-*-sysv4*.
	* configure: Rebuild.
	* config/te-svr4.h: New file.
	* config/tc-m68k.c (m68k_comment_chars): Only include `#' if
	TE_SVR4 or TE_DELTA.

Thu Feb 20 22:24:39 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (md_convert_frag): Create a fixup for the
	short conditional branch around a long unconditional branch.

Thu Feb 20 13:56:00 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (obj_coff_ln [both versions]): Call
	new_logical_line.

	* config/tc-arm.c (fix_new_arm): Use make_expr_symbol to handle a
	complex expression.

	* symbols.c (resolve_symbol_value): If both left and right
	operands are undefined, warn about both of them.

Wed Feb 19 00:53:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	Based on patches from Eric Youngdale <eric@andante.jic.com>:
	* config/obj-elf.c (elf_pseudo_table): Add "symver".
	(obj_elf_symver): New static function.
	* config/obj-elf.h (OBJ_COPY_SYMBOL_ATTRIBUTES): Copy the st_other
	field.

	* write.c (relax_segment): Make type and printf format agree.

	* read.c (get_line_sb): Don't end the line on a semicolon inside a
	string.

Tue Feb 18 18:42:51 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d30v.c, config/tc-d30v.h: New files.

	* configure: Rebuilt.

	* configure.in: Add case for d30v.

Sun Feb 16 17:47:29 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-alpha.h (md_operand): Define with a null expansion,
	like all the other targets.
	* doc/internals.texi (CPU backend): Add missing word in
	md_flush_pending_output description.  Fix typo in md_convert_frag
	description.
	* config/tc-tic80: Minor comment additions/changes.

Fri Feb 14 18:09:59 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* config/tc-m68k.c (LOCAL_LABEL): Macro redefined if TE_DELTA.
	(tc_canonicalize_symbol_name): Macro defined if TE_DELTA.
	* config/obj-coff.c (obj_coff_def): Use
	tc_canonicalize_symbol_name if defined.
	(obj_coff_tag, obj_coff_val): Likewise.
	* expr.c (operand): Reject '~' as operator if is_name_beginner.

Fri Feb 14 17:24:48 1997  Ian Lance Taylor  <ian@cygnus.com>

	Based on notes from Peter Eriksson <peter@ifm.liu.se>.  The target
	does not actually work, though:
	* configure.in (i386-sequent-bsd*): New target.
	* configure: Rebuild.
	* config/tc-dynix.h: New file.
	* config/tc-i386.h: Define TARGET_FORMAT if TE_DYNIX.

	* read.c (do_align): Add max parameter.  Change all callers.
	Remove useless static variables.
	(s_align): New static function.  Do common portion of
	s_align_bytes and s_align_ptwo.
	(s_align_bytes, s_align_ptwo): Just call s_align.
	* frags.c (frag_align): Add max parameter.  Change all callers.
	(frag_align_pattern): Likewise.
	* frags.h (frag_align, frag_align_pattern): Update declarations.
	* write.c (relax_segment): Limit alignment change to fr_subtype.
	Fix some types to be addressT.
	* config/obj-coff.c (size_section): Likewise.
	* config/obj-ieee.c (size_section): Likewise.
	* config/tc-d10v.h (md_do_align): Add max parameter.
	* config/tc-i386.h (md_do_align): Likewise.
	* 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.
	* as.h: Improve comments on rs_align and rs_align_code.
	* doc/as.texinfo: Document new alignment arguments.
	* doc/internals.texi (Frags): Document use of fr_subtype field for
	rs_align and rs_align_code.

Fri Feb 14 15:56:06 1997  Gavin Koch  <gavin@cygnus.com>

	* config/tc-mips.c: Changed opcode parsing.

Thu Feb 13 20:02:16 1997  Fred Fish  <fnf@cygnus.com>

	* config/{tc-alpha.h, tc-d10v.h, tc-generic.h, tc-i960.h,
	tc-mn10200.h, tc-mn10300.h, tc-sh.h, tc-vax.h, tc-w65.h}:
	Add default definition of zero for TARGET_BYTES_BIG_ENDIAN.
	* config/{tc-arm.h, tc-hppa.h, tc-i386.h, tc-mips.h, tc-ns32k.h,
	tc-ppc.h, tc-sparc.h}: Move definition of TARGET_BYTES_BIG_ENDIAN
	to a location consistent with the rest of the target include files.
	* config/tc-i386.c: Remove misleading comment.
	* doc/internals.texi (CPU backend): Add description of function
	md_undefined_symbol.
	* config/tc-tic80.c: Add code to insert predefined symbols into the
	symbol table so they can be parsed by the standard expression parser.
	Remove custom code that use to parse them.
	* config/tc-tic80.h: Move definition of TARGET_BYTES_BIG_ENDIAN
	to a location consistent with the rest of the target include files.

Thu Feb 13 21:44:18 1997  Klaus Kaempf  <kkaempf@progis.de>

	* as.h: GNU c provides unlink() function.

	Unify section handling on openVMS/Alpha:
	* config/tc-alpha.c(s_alpha_link): Remove.
	(s_alpha_section): New function.
	Remove case-hacking of symbols
	Add .code_address pseudo-op.
	(BFD_RELOC_ALPHA_CODEADDR): New relocation.
	(s_alpha_code_address): New function.
	(alpha_ctors_section, alpha_dtors_section): New sections for C++
	static constructors/destructors.
	Add debug code for crash debugs, to be removed when traceback code
	is added to object code.
	(s_alpha_name): New function for .name pseudo-op.
	(alpha_print_token): New function to print token expressions with
	alpha specific extensions.

	* makefile.vms: Allow compilation with current gcc snapshot.

Thu Feb 13 16:29:04 1997  Fred Fish  <fnf@cygnus.com>

	* doc/Makefile.in (TEXI2DVI): Set to just name of program.
	(DVIPS): Set to dvips.
	(ps, as.ps, gasp.ps): New targets.
	(internals.info, gasp.dvi, internals.dvi): Set both TEXINPUTS
	and MAKEINFO env variables.
	(internals.ps): Use DVIPS macro.
	(clean): Remove core and backup files.
	(distclean): Remove temporary files from building internals.
	(clean-dvi): Ditto.
	* doc/internals.texi (Frags): Fix typo.
	(GAS processing): Ditto.
	(CPU backend): Ditto.
	* ecoff.c (init_file): Use TARGET_BYTES_BIG_ENDIAN value directly.
	* mpw-config.in: Define TARGET_BYTES_BIG_ENDIAN as 1.
	* read.c: Remove ugly hack that dealt with config files not
	correctly defining TARGET_BYTES_BIG_ENDIAN.
	(target_big_endian): Use TARGET_BYTES_BIG_ENDIAN directly.
	* config/arm-big.mt: Define TARGET_BYTES_BIG_ENDIAN to 1.
	* config/arm-lit.mt: Define TARGET_BYTES_BIG_ENDIAN to 0.
	* config/mips-big.mt: Define TARGET_BYTES_BIG_ENDIAN to 1.
	* config/mips-lit.mt: Define TARGET_BYTES_BIG_ENDIAN to 0.
	* config/ppc-lit.mt: Define TARGET_BYTES_BIG_ENDIAN to 1.
	* config/ppc-sol.mt: Replace TARGET_BYTES_LITTLE_ENDIAN
	with TARGET_BYTES_BIG_ENDIAN defined to 0.
	* config/tc-arm.h: Remove use of TARGET_BYTES_LITTLE_ENDIAN
	and simplify.  Test value of TARGET_BYTES_BIG_ENDIAN, not just
	whether it is defined or not.
	* config/tc-mips.h: Remove use of TARGET_BYTES_LITTLE_ENDIAN.
	* config/tc-ppc.h: Remove use of TARGET_BYTES_LITTLE_ENDIAN
	and simplify. Test value of TARGET_BYTES_BIG_ENDIAN, not just
	whether it is defined or not.
	* config/tic80.h (TARGET_FORMAT): Define to coff-tic80.
	(TARGET_BYTES_BIG_ENDIAN): Define to 0.

Thu Feb 13 14:40:16 1997  Doug Evans  <dje@canuck.cygnus.com>

	* write.c (write_relocs): Correct text in as_fatal error message,
	bfd_perform_relocation -> bfd_install_relocation.

Thu Feb 13 14:48:03 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* config/tc-m68k.c (LEX_TILDE): Define if TE_DELTA.
	* read.c (LEX_TILDE): Define if not defined.
	(lex_type): Use LEX_TILDE.
	* expr.c (get_symbol_end): Check first char with is_name_beginner,
	not is_part_of_name.

Thu Feb 13 11:40:58 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sparc.c (md_show_usage): Add missing backslash at end
	of continued line.

	* config/tc-mips.c (mips16_extended_frag): Correct base address
	for an extended PC relative instruction.
	(md_convert_frag): Likewise.

	* config/tc-mips.c (prev_nop_frag): New static variable.
	(prev_nop_frag_holds): New static variable.
	(prev_nop_frag_required): New static variable.
	(prev_nop_frag_since): New static variable.
	(append_insn): If we aren't reordering, and prev_nop_frag is not
	NULL, and we don't need any nops, then decrease the size of
	prev_nop_frag.  Don't insert nops because of instructions in
	noreorder sections.  Remember whether the previous instructions
	where in noreorder sections even when not reordering.
	(mips_no_prev_insn): Add preserver parameter.  Change all
	callers.  Refer prev_nop_frag variables when appropriate.
	(mips_emit_delays): Set up prev_nop_frag.
	(s_mipsset): Clear prev_nop_frag if reordering.

Wed Feb 12 14:36:29 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (append_insn): Remove useless code which
	handled swapping a mips16 jump with a mips16 instruction with a
	reloc.

	* config/tc-mips.c (md_parse_option): When debugging, set
	mips_optimize to 1, not 0.

	* config/tc-mips.c (mips16_ip): Handle an extend operand.

	* config/tc-mips.c (my_getExpression): In mips16 mode, if it looks
	like the expression was based on `.', adjust the value of the
	symbol.

	* config/tc-mips.c (append_insn): Warn about an attempt to put an
	extended instruction in a delay slot when not reordering.
	(md_convert_frag): Warn if an extended instruction appears in a
	delay slot.

	* config/tc-mips.c (mips_pseudo_table): Add "insn".
	(s_insn): New static function.
	* doc/c-mips.texi: Document .insn.

	* config/tc-mips.c (md_begin): Add the general registers to the
	symbol table.
	(mips16_ip): First parse the expression, and then see whether it
	came up with a register, rather than trying to first see whether
	we are looking at a register.

Tue Feb 11 15:13:39 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-tic80.c: Numerous changes and additions to flesh
	out functions that were previously just stubs, and fix some
	problems found using the new TIc80 testsuite cases.

Tue Feb 11 15:52:22 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips16_ip): Handle %gprel modifier.
	(md_apply_fix): Handle BFD_RELOC_MIPS16_GPREL.

	* config/tc-mips.c (append_insn): Output jump instruction as a
	pair of 2 byte instructions, rather than as a single 4 byte
	instruction.

Mon Feb 10 22:06:00 1997  Dawn Perchik  (dawn@cygnus.com)

	* itbl-ops.c, itbl-lex.l, itbl-parse.y, itbl-ops.h,
	config/itbl-mips.h: Add copyright message and fix indentation.

Mon Feb 10 18:09:00 1997  Dawn Perchik  (dawn@cygnus.com)

	* itbl-ops.c: New file.  Add support for dynamically read
	instruction registers, opcodes and formats.  Build internal table
	for new instructions and provide callbacks for assembler and
	disassembler.
	* itbl-lex.l, itbl-parse.y: Lex and yacc parsers for instruction
	spec table.
	* itbl-ops.h: New file.  Header file for itbl support.
	* config/itbl-mips.h: New file.  Mips specific definitions for
	itbl support.

Fri Feb  7 09:52:34 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (md_assemble): If a constant operand won't
	fit into the constant field of a relaxable operand, then it does
	not match.

Thu Feb  6 20:08:12 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (md_estimate_size_before_relax): Treat
	a jsr target in a different section just like a jsr to
	an undefined target.

Thu Feb  6 16:52:57 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_fix_adjustable): Don't adjust relocations
	against any mips16 symbols, not just externally visible ones.
	(md_apply_fix): Corresponding change.

Wed Feb  5 11:11:06 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips16_ip): Accept floating point registers in
	the operand of the exit instruction.

Tue Feb  4 14:12:39 1997  Ian Lance Taylor  <ian@cygnus.com>

	* symbols.c (resolve_symbol_value): If we leave an equated symbol
	as O_symbol, copy over the segment.

Mon Feb  3 12:35:54 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_apply_fix): If we aren't adjusting this
	fixup to be against the section symbol, adjust the value
	accordingly.

	* symbols.c (resolve_symbol_value): Don't change X_add_number for
	an equated symbol.
	* write.c (write_relocs): Avoid looping on equated symbols.
	Adjust fx_offset by X_add_number for each symbol.
	* config/obj-coff.c (do_relocs_for): Avoid looping on equated
	symbols.
	(fixup_segment): Add a loop to track down equated symbols and
	adjust fx_offset appropriately.

Fri Jan 31 15:21:02 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (md_relax_table): Add entries to allow
	jmp -> bra relaxing.
	(md_convert_frag): Handle jmp->bra relaxing.
	(md_assemble): Handle jmp->bra relaxing.
	(md_estimate_size_before_relax): Likewise.

Fri Jan 31 13:15:05 1997  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* config/tc-i386.c (i386_align_code): Add comments explaining the
	nop instructions.

Fri Jan 31 10:46:14 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sparc.c (enforce_aligned_data): New static variable.
	(sparc_cons_align): Don't do anything unless enforce_aligned_data
	is set.
	(md_longopts): Add "enforce-aligned-data".
	(md_show_usage): Mention --enforce-aligned-data.
	* doc/c-sparc.texi (Sparc-Aligned-Data): New node; document
	enforce-aligned-data.

	* config/tc-ppc.c (md_pseudo_table): If OBJ_XCOFF, add "long",
	"word", and "short".
	(ppc_xcoff_cons): New static function.

	* write.c (relax_segment): Give an error if a .space symbol is
	common or undefined.

	* read.c (read_a_source_file): Don't handle mri_pending_align if
	the handler is s_globl or s_ignore.

Thu Jan 30 11:46:59 1997  Fred Fish  <fnf@cygnus.com>

	* config/tc-d10v.c (find_opcode): Remove unused variable "numops".
	* config/tc-tic80.c: Many additions to previous placeholder file.
	* config/tc-tic80.h: Ditto.

Thu Jan 30 12:28:18 1997  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* config/tc-i386.c (i386_align_code): Improve the nop patterns.

Thu Jan 30 12:08:40 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_fix_adjustable): New function.
	* config/tc-mips.h (tc_fix_adjustable): Call mips_fix_adjustable.
	(mips_fix_adjustable): Declare.

	Ideas from Srinivas Addagarla <srinivas@cdotd.ernet.in>:
	* read.c (read_a_source_file): After doing an mri_pending_align,
	adjust the line_label if there is one.
	(s_space): Set mri_pending_align if an odd number of bytes were
	output.

Wed Jan 29 15:31:12 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.h (md_do_align): Add this hook to call
	d10v_cleanup() when a ".align" is detected.

	* config/tc-d10v.c (find_opcode): Correctly calculate
	branch displacement when .aligns are present.

Wed Jan 29 09:42:11 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (md_relax_table): Define.
	(md_convert_frag): Implement.
	(md_assemble): Handle relaxable operands/instructions correctly.
	(md_estimate_size_before_relax): Implement.
	* config/tc-mn10200.h (TC_GENERIC_RELAX_TABLE): Define.

Tue Jan 28 15:27:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (append_insn): Give an error for jumps to a
	misaligned address.
	(md_apply_fix): Make a branch to an odd address an error rather
	than a warning.

	* config/tc-mips.c (md_convert_frag): If the user explicitly
	requested an extended opcode, pass warn as true to mips16_immed.

	* config/tc-mips.c (mips16_ip): Handle a missing expression like
	an explicit 0, so that explicitly extended instructions work
	correctly.

Mon Jan 27 17:41:20 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (ecoff_build_symbols): Don't generate a local ECOFF
	symbol for a common symbol.

Wed Jan 22 10:39:39 1997  Doug Evans  <dje@canuck.cygnus.com>

	Patch presumed to have been checked in awhile ago but wasn't.
	Mon Nov 25 10:45:14 1996  Doug Evans  <dje@seba.cygnus.com>
	* write.c: Delete "ifndef md_relax_frag" around is_dnrange.
	(relax_segment, case rs_org): Move code inside braces.  Move locals
	target,after inside too.
	(relax_segment, case rs_machine_dependent): Guts moved to ...
	(relax_frag): New function.
	Call md_prepare_relax_scan if defined.

Mon Jan 20 10:56:47 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/tc-m68k.c (m68k_ip): Reject pc-relative addresses for the
	'p' operand specifier.

Mon Jan 20 10:39:36 1997  J.T. Conklin  <jtc@cygnus.com>

	* config/tc-m68k.c (HAVE_LONG_BRANCH): New macro, returns true for
	m68k family cpus which support long branch addressing modes.
	(m68k_ip, md_convert_frag_1, md_estimate_size_before_relax,
	md_create_long_jump): Use it.

Mon Jan 20 12:42:06 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_begin): Don't set SEC_ALLOC or SEC_LOAD for
	the .reginfo or .MIPS.options section if configured for an
	embedded target.

	* config/tc-mips.c (md_begin): Don't set interlocks for
	mips_4650.

Wed Jan 15 13:51:50 1997  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (read_a_source_file): Make sure the symbol ends with
	whitespace before checking whether the next character is '='.

Tue Jan 14 15:07:27 1997  Robert Lipe <robertl@dgii.com>

	* config/tc-i386.c (sco_id): Moved from here...
	* config/obj-elf.c (sco_id): ...to here.  Adding the identifier
	really is an SCO ELF specific thing, not just a SCO x86 specific
	thing.

Mon Jan 13 22:43:01 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (tic80-*-*): Don't require 'coff'.
	* configure: Regenerate.

Thu Jan  9 09:08:43 1997  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (emit_expr): Check for overflow of a negative value
	correctly.
	* write.c (fixup_segment): Likewise.
	* config/obj-coff.c (fixup_segment): Likewise.

	* config/tc-m68k.c (struct label_line): Define.
	(labels, current_label): New static variables.
	(md_assemble): Mark current_label as text, and clear it.
	(m68k_frob_label): New function.
	(m68k_flush_pending_output): New function.
	(m68k_frob_symbol): New function.
	* config/tc-m68k.h (tc_frob_label): Define.
	(md_flush_pending_output): Define.
	(tc_frob_symbol): Don't warn, just call m68k_frob_symbol.
	(tc_frob_coff_symbol): Likewise.

	* read.c (read_a_source_file): When defining a macro in MRI mode,
	don't add the symbol to the symbol table.

Tue Jan  7 11:21:42 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (tc_gen_reloc): Handle sym1-sym2 fixups
	here since fixup_segment doesn't (linkrelax is set).
	* config/tc-mn10200.c (tc_gen_reloc): Likewise.

Mon Jan  6 15:19:32 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (md_assemble): Tweak fx_offset for pc-relative
	relocs.

Fri Jan  3 16:47:08 1997  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (struct hppa_fix_struct): Tweak fx_r_field's type
	to avoid warnings with the native HP compiler.
	(fix_new_hppa): Similarly for the r_type argument.
	(pa_build_unwind_subspace, hppa_elf_mark_end_of_function): Enclose
	in an #if OBJ_ELF to keep gcc -Wall quiet.
	(md_apply_fix): Always initialize "result".

	* config/tc-mn10200.c (md_assemble): Generate relocations.

Fri Jan  3 18:17:23 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/tc-m68k.c (s_even): Adjust the alignment of the current
	section.

Fri Jan  3 17:10:33 1997  Richard Henderson  <rth@tamu.edu>

	* config/obj-elf.c (elf_file_symbol): When using ECOFF debugging,
	pass on the new file hook.

	* config/tc-alpha.c (alpha_fix_adjustable): Not quite the same as
	!alpha_force_relocation, as local LITERALs can be adjusted to be
	relative to the section.

Fri Jan  3 12:09:24 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (yank_symbols): If tc_frob_coff_symbol is
	defined, call it.
	* config/tc-m68k.h (tc_frob_symbol): Check whether text label is
	aligned to odd boundary.
	(tc_frob_coff_symbol): Define.

	* doc/as.texinfo (Set): Change parenthesized @xref to @pxref.

	* macro.c (macro_expand_body): In MRI mode, just copy a single &.

	* config/tc-m68k.c (m68k_ip): Call frag_grow before adding a
	PCINDEX frag.  From Ronald F. Guilmette <rfg@monkeys.com>.

	* config/tc-m68k.c (m68k_ip): Accept 'B' as a size for an
	immediate value.
	(md_assemble): If the size is 'B', set fx_signed.
	(md_apply_fix_2): Use fx_signed when checking for overflow.

	* write.h (struct fix): Add fx_signed field.
	* write.c (fix_new_internal): Initialize fx_no_overflow and
	fx_signed fields.
	(fixup_segment): Use fx_signed when checking for overflow.
	* config/obj-coff.c (fixup_segment): Check fx_no_overflow and
	fx_signed when checking for overflow.

Thu Jan  2 13:37:29 1997  Ian Lance Taylor  <ian@cygnus.com>

	* NOTES, NOTES.config: Removed.  These are rarely, if ever,
	updated, and all the useful information is in doc/internals.texi.

	Based on patch from Ronald F. Guilmette <rfg@monkeys.com>:
	* read.c (read_a_source_file): Check for conditional operators
	before doing an MRI pending alignment.
	* config/tc-m68k.h (m68k_conditional_pseudoop): Declare.
	(tc_conditional_pseudop): Define.
	* config/tc-m68k.c (m68k_conditional_pseudop): New function.
	* doc/internals.texi (CPU backend): Describe
	tc_conditional_pseudoop.

	Based on patch from Ronald F. Guilmette <rfg@monkeys.com>:
	* config/tc-m68k.c (m68k_rel32_from_cmdline): New static
	variable.
	(md_begin): Check m68k_rel32_from_cmdline before setting
	m68k_rel32.
	(m68k_mri_mode_change): Likewise.
	(md_longopts): Add --disp-size-default-16 and
	--disp-size-default-32.
	(md_parse_option): Handle new options.
	(md_show_usage): Mention new options.
	* doc/c-m68k.texi (M68K-Opts): Document new options.

	Based on patch from Ronald F. Guilmette <rfg@monkeys.com>:
	* config/tc-m68k.c (m68k_index_width_default): New static
	variable.
	(m68k_ip): Use m68k_index_width_default to set the size of a base
	register whose size was not given.
	(md_longopts): Add --base-size-default-16 and
	--base-size-default-32.
	(md_parse_option): Handle new options.
	(md_show_usage): Mention new options.
	* doc/c-m68k.texi (M68K-Opts): Document new options.

	* doc/c-mips.texi: Mention ISA level 4, and the -mips16 option.

	* configure.in: Recognize mips-*-linux* target.
	* configure: Rebuild.

	* config/tc-mips.c (load_register): Rewrite 64 bit handling to
	work if valueT is only 32 bits.

	* config/tc-mips.c: Throughout, check target_big_endian rather
	than byte_order.
	(byte_order): Remove.
	(mips_init_after_args): Remove.
	* config/tc-mips.h (LITTLE_ENDIAN, BIG_ENDIAN): Don't define.
	(mips_init_after_args): Don't declare.
	(tc_init_after_args): Don't define.

	* config/tc-mips.h (tc_frob_after_relocs): Define if
	OBJ_MAYBE_ELF.
	(mips_elf_final_processing): Likewise.
	(ELF_TC_SPECIAL_SECTIONS): Likewise.

Tue Dec 31 15:12:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-v850.c (md_assemble): If this is sst.{h,w} or
	sld.{h,w} and the operand is relocatable, adjust the adend by
	shifting it right one bit.

Tue Dec 31 12:56:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (read_a_source_file): Check mri_pending_align after
	checking for a macro.  From Ronald F. Guilmette
	<rfg@monkeys.com>.

	* Makefile.in (ALL_CFLAGS): Add -D_GNU_SOURCE.

	* config/tc-sparc.c (md_apply_fix3): Rename from md_apply_fix, and
	add segment argument.  If OBJ_ELF, treat a relocation against a
	symbol in a linkonce section like a relocation against an external
	symbol.
	* config/tc-sparc.h (MD_APPLY_FIX3): Define.

Mon Dec 30 11:35:40 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips16_macro): Add case for M_ABS.

Fri Dec 27 22:51:51 1996  Fred Fish  <fnf@cygnus.com>

	* NOTES.config (Implementation): as.h #define's "GAS" not "gas",
	includes config.h instead of host.h, tc.h instead of tp.h, and
	targ-env.h instead of target-environment.h.
	Also, obj-format.h includes targ-cpu.h instead of
	target-processor.h.
	* configure.in (case ${generic_target}): Add tic80-*-coff entry.
	* configure: Rebuild with autoconf.
	* config/obj-coff.h (coff/tic80.h): Include if TC_TIC80 defined.
	(TARGET_FORMAT): Define to "coff-tic80".
	* config/tc-tic80.c: New file for TIc80 support.
	* config/tc-tic80.h: New file for TIc80 support.

Fri Dec 27 11:42:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* doc/as.texinfo (M): Mention explicitly that -M changes macro
	handling.

Thu Dec 19 12:06:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (adjust_reloc_syms): If the fixup symbol has been
	equated to an undefined symbol, convert the fixup to being against
	the target symbol.  Remove obsolete code handling a special case
	for i386 PIC.

Wed Dec 18 22:54:39 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Use NewFolderRecursive for installation.

Wed Dec 18 16:00:42 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (do_assemble): Correct previous bug fix.

Wed Dec 18 15:27:40 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (md_assemble): Fix bug which caused
	second instruction in a line to be case sensitize.

Wed Dec 18 10:08:46 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (mn10200_insert_operand): Don't
	range check operands with MN10200_OPERAND_NOCHECK set.
	(check_operand): Likewise.

Tue Dec 17 10:59:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c: Undo part of last Friday's alignment changes.
	(md_begin): Always align the text section to a four byte
	boundary.
	(append_insn): Remove call to record_align.

	* config/tc-mips.c (insn_label): Remove.
	(struct insn_label_list): Define.
	(insn_labels, free_insn_labels): New static variables.
	(mips_clear_insn_labels): New static function.
	(append_insn): Mark all mips16 text labels, and make them odd.
	Handle all labels after emitting a nop, not just one.  Call
	mips_clear_insn_labels rather than just clearing insn_label.
	(mips_emit_delays): Add insns parameter, and use it to decide
	whether to mark mips16 labels.  Handle all labels, not just one.
	Force mips16 labels to be odd.  Change all callers.
	(mips16_immed): Don't check for an odd branch target.
	(md_apply_fix): Don't check mips16 mode for a branch reloc.
	(mips16_extended_frag): Ignore the low bit in a branch target.
	(md_convert_frag): Likewise.
	(mips_no_prev_insn): Call mips_clear_insn_labels rather than just
	clearing insn_label.
	(mips_align, mips_flush_pending_output, s_cons): Likewise.
	(s_float_cons, s_gpword): Likewise.
	(s_align): Use insn_labels rather than insn_label.
	(s_cons, s_float_cons, s_gpword): Likewise.
	(mips_frob_file_after_relocs): New function.
	(mips_define_label): Rewrite to add to insn_labels list.
	* config/tc-mips.h (tc_frob_file_after_relocs): Define.
	* ecoff.c (ecoff_build_symbols): If the size of a function comes
	out odd, increment it.

	* config/tc-mips.c (append_insn): Only update prev_insn when not
	reordering if place is NULL.

	* config/tc-mips.c (mips16_ip): Check for a missing expression
	when using the register indirect addressing mode.

Mon Dec 16 10:08:46 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c (mn10200_insert_operand): Don't
	check 24bit operands for overflow.
	(check_operand): Likewise.

Mon Dec 16 11:50:40 1996  Ian Lance Taylor  <ian@cygnus.com>

	* doc/as.texinfo (Section): Document how to use the .section
	pseudo-op for COFF and ELF.

Sun Dec 15 15:26:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (adjust_reloc_syms): Fix linkonce check for ELF.

Sat Dec 14 22:37:27 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (prev_insn_reloc_type): New static variable.
	(RELAX_MIPS16_ENCODE): Add dslot and jal_dslot arguments, and
	store them.  Adjust other RELAX_MIPS16 macros.
	(RELAX_MIPS16_DSLOT): Define.
	(RELAX_MIPS16_JAL_DSLOT): Define.
	(append_insn): Pass new arguments to RELAX_MIPS16_ENCODE.  Correct
	handling of whether previous instruction has a fixup.  Set
	prev_insn_reloc_type.
	(mips_no_prev_insn): Clear prev_insn_reloc_type.
	(mips16_extended_frag): Use the right base address for a PC
	relative add or load.
	(md_convert_frag): Likewise.  If a PC relative add or load is
	used, record the alignment for the section.

Fri Dec 13 13:00:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (adjust_reloc_syms): Don't reduce a reloc against a
	linkonce section into a reloc against the section symbol.

	* config/tc-mips.c (mips16_macro): Remove nop instructions after
	branch instructions.

	* config/tc-mips.c (md_begin): If configured for an embedded ELF
	system, don't set the section alignment to 2**4.
	(s_change_sec): Likewise.
	(append_insn): Call record_alignment for the section.
	(md_section_align): Don't align the section size for an embedded
	ELF system.

Thu Dec 12 16:40:47 1996  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (adjust_reloc_syms): Make sure that symbols are
	resolved; expression symbols may have been skipped.
	* config/obj-coff.c (fixup_segment): Likewise.

Thu Dec 12 15:18:21 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_suffix): Move @plt to
	BFD_RELOC_24_PLT_PCREL relocation.
	(md_apply_fix3): Support BFD_RELOC_24_PLT_PCREL.

Tue Dec 10 13:51:55 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (write_2_short): Remove code that called
	parallel_ok() when the programmer specified parallel instructions.

Tue Dec 10 12:23:19 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (md_assemble): Update to handle endianness
	issues correctly.

	* config/tc-mn10200.c (md_assemble): Opcode 0x0 is valid!
	* config/tc-mn10300.c (md_assemble): Likewise.

Tue Dec 10 11:37:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (append_insn): Make sure there is enough room
	in a frag after a mips16 instruction to switch it with a jump
	instruction.

	* config/tc-mips.c (mips16_extended_frag): Give an error for an
	attempt to use a non absolute symbol in an extending frag.

Mon Dec  9 16:48:20 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10200.c: Flesh out assembler support for MN10200.
	* config/tc-mn10200.h: Likewise.

Mon Dec  9 17:09:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* app.c (do_scrub_chars): At the end of a C comment, pass space to
	UNGET rather than PUT.  Set old_state before setting state to -2.

	* config/tc-mips.c (mips16_extended_frag): Avoid an infinite loop
	when extending because the value is exactly maxtiny + 1.

	* config/tc-mips.c (RELAX_MIPS16_ENCODE): Add small and ext
	arguments, and store them.  Adjust other RELAX_MIPS16 macros.
	(RELAX_MIPS16_USER_SMALL): Define.
	(RELAX_MIPS16_USER_EXT): Define.
	(mips16_small, mips16_ext): New static variables.
	(append_insn): Pass mips16_small and mips16_ext to
	RELAX_MIPS16_ENCODE.
	(mips16_ip): Set mips16_small and mips16_ext.
	(mips16_immed): Don't check mips16_autoextend.
	(mips16_extended_frag): Check USER_SMALL and USER_EXT.

	* write.c (write_relocs): Print an error for an out of range
	fixup, rather than calling abort.

	* as.c (main): Unlink the output file if there are errors while
	generating the fixups.

Fri Dec  6 18:48:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips16_extended_frag): Don't call
	S_GET_VALUE.
	(md_convert_frag): Call resolve_symbol_value before calling
	S_GET_VALUE, and don't add in the frag address.

	* config/tc-mips.c (mips16_immed): Add file and line parameters,
	and use them when reporting errors.  Change all callers.

Fri Dec  6 15:36:32 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c: Fix various gcc -Wall warnings.
	Remove '$' prefixing for registers.

Fri Dec  6 00:55:48 1996  Martin  <hunt@cygnus.com>

	* config/tc-d10v.c (md_assemble): Check to see if prev_seg
	is initialized before using it.
	(d10v_cleanup): No longer uses its argument, so make it void.

	* config/tc-d10v.h (d10v_cleanup): Change prototype.

Thu Dec  5 11:03:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (fixup_segment): Don't discard the symbol for a PC
	relative fixup to an absolute symbol.

Wed Dec  4 15:42:41 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (md_assemble, d10v_cleanup): Fix bug
	with multiple sections.

Wed Dec  4 13:00:07 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_longopts): Rename mips-16 to mips16, and
	no-mips-16 to no-mips16.
	(s_mipsset): Accept .set mips16 and .set nomips16.

Wed Dec  4 10:35:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_suffix): Take expressionS pointer
	argument, and check for +/- constant following the suffix, folding
	it into the expression.
	(ppc_elf_cons): Change ppc_elf_suffix calls.
	(md_assemble): Ditto.
	(shlib): Replace boolean mrelocatable with enumeration shlib.
	(md_parse_option): Discriminate between PIC style shared libraries
	and -mrelocatable.
	(ppc_elf_validate_fix): Don't report warnings for PIC style shared
	libraries.

Tue Dec  3 23:18:29 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.h ({tc,ppc}_comment_chars): Define, so that we can
	change the comment characters.

	* config/tc-ppc.c (comment_chars): Delete in favor of
	tc_comment_chars.
	(ppc_{eabi,solaris}_comment_chars): Eabi and Solaris versions of
	comment chars.
	(ppc_comment_chars): Select appropriate comment chars by default.
	(msolaris): New flag for -m{,no-}solaris.
	(md_parse_option): Recognize -K pic.  Add support for
	-m{,no-}solaris.
	(md_show_usage): Update.
	(md_begin): Do not set ELF flags if Solaris.
	(ppc_elf_suffix): @local sets R_PPC_LOCAL24PC relocation.
	(md_apply_fix3): Add support for R_PPC_LOCAL24PC.

Mon Dec  2 13:48:57 1996  Ian Lance Taylor  <ian@cygnus.com>

	* as.c (main): Correct handling of flag_always_generate_output.

Sun Dec  1 21:46:05 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (tc_gen_reloc): Get the addend from
	fx_offset, not fx_addnumber.

	* config/tc-mn10300.h (tc_fix_adjustable): Don't do any
	reloc adjustments.

Sat Nov 30 17:34:48 1996  Eliot Dresselhaus  <eliot@wally.edc.com>

	* config/tc-i386.c: Correct misspelling: balenced to balanced.

Wed Nov 27 13:25:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_section_align): Check for an alignment of
	4, not an alignment of 16.  Corrects August 7 patch.

Tue Nov 26 10:33:16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure, conf.in: Rebuild with autoconf 2.12.

	* config/tc-ppc.c (ppc_elf_lcomm): Don't give an error if no
	alignment is specified.

	Add support for mips16 (16 bit MIPS implementation):
	* config/tc-mips.c: Extensive additions for mips16 support, not
	listed here.
	(RELAX_OLD, RELAX_NEW): Use only 7 bits each.
	(insn_uses_reg): Change last parameter to an enum.
	* config/tc-mips.h (LOCAL_LABELS_DOLLAR): Define as 0.
	(md_relax_frag): Define as mips_relax_frag.
	(mips_relax_frag): Declare.
	(struct mips_cl_insn): Add use_extend and extend fields.
	(tc_fix_adjustable): Define.
	* config/obj-elf.h (S_GET_OTHER): Define.
	(S_SET_OTHER): Define.

Mon Nov 25 18:02:29 1996  J.T. Conklin  <jtc@beauty.cygnus.com>

	* config/tc-m68k.c (m68k_ip): Implement cases for new <, >, m, n,
	o and p operand specifiers.

Mon Nov 25 10:45:14 1996  Doug Evans  <dje@seba.cygnus.com>

	* write.c: Delete "ifndef md_relax_frag" around is_dnrange.
	(relax_segment, case rs_org): Move code inside braces.  Move locals
	target,after inside too.
	(relax_segment, case rs_machine_dependent): Guts moved to ...
	(relax_frag): New function.
	Call md_prepare_relax_scan if defined.
	* config/tc-m68k.h (md_prepare_relax_scan): Renamed from
	M68K_AIM_KLUDGE.

Mon Nov 25 08:49:36 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (address_registers): Use '$' as register
	prefix instead of '%'.
	(data_registers, other_registers, md_assemble): Likewise.

	* config/tc-mn10300.c (address_registers): Use '%' prefix for regs.
	(data_registers, other_registers, md_assemble): Likewise.

	* config/tc-mn10300.c (md_assemble): Correctly determine the
	correct location and type for each relocation.
	(md_pcrel_from): Simplify.

Fri Nov 22 15:42:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.c (md_convert_frag): Improve warning when branch is
	converted into branch around branch.

Thu Nov 21 11:56:11 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.h (DIFF_EXPR_OK): Don't define this.
	(tc_fix_adjustable): Don't adjust relocs against weak symbols or
	pc-relative relocs.
	* config/tc-mn10300.c (md_begin): Set linkrelax.
	(md_assemble): Create fixups as needed.
	(md_apply_fix3): Gut.  It shouldn't ever get called anymore.

Tue Nov 19 17:48:06 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-d10v.c (parallel_ok): When automatically converting
	serial ops to parallel, do not consider a branch as the first
	instruction.

Tue Nov 19 13:35:22 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (md_assemble): Handle MN10300_OPERAND_REG_LIST.

Mon Nov 18 15:26:55 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (mn10300_insert_operand): Provide prototype
	via PARAMS.
	(check_operand): Likewise.

Mon Nov 18 15:22:28 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-d10v.c (parallel_ok): Branch and link instructions
	modify r13.
	(write_2_short): Call parallel_ok to check whether two short
	instructions the user requested execute in parallel, can be
	executed that way.

Thu Nov 14 11:17:49 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (write_2_short): Fix bug that wouldn't
	allow a branch and link in parallel with an exe instruction.

Fri Nov  8 13:55:03 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* doc/c-d10v.texi: Add info on @word modifier.

Wed Nov  6 13:46:07 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (mn10300_insert_operand): MN10300_OPERAND_SPLIT
	operands are assumed to be 32bits.  Use "bits" field to hold the
	number of bits in the main instruction word for MN10300_OPERAND_SPLIT.
	(mn10300_check_operand): MN10300_OPERAND_SPLIT operands are assumed
	to be 32bits.

	* config/tc-mn10300.c (mn10300_insert_operand): Shift low part
	of a MN10300_OPERAND_SPLIT operand by operand->shift.

	* config/tc-mn10300.c (mn10300_insert_operand): Handle
	MN10300_OPERAND_SPLIT.

Tue Nov  5 13:30:40 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (md_assemble): Insert operands into
	the extension part of the instruction if necessary.
	(mn10300_insert_operand): Accept pointer to extension word
	argument.  Make insn a pointer argument too.  Return type
	is now void.  All callers changed.

Mon Nov  4 12:53:40 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (mn10300_insert_operand): Handle
	repeated register operands.

Fri Nov  1 10:42:49 1996  Ian Lance Taylor  <ian@cygnus.com>

	* doc/as.texinfo: Added section on reporting bugs.

	* config/tc-alpha.c: Change uses of void * to PTR.  Change the
	alpha_macro emit field to expect a const argument, and change the
	arg field to be const.  Fix some spacing to follow the GNU
	standard.

Fri Nov  1 10:32:03 1996  Richard Henderson  <rth@tamu.edu>

	* config/tc-alpha.c (md_parse_option): Add knowledge of 21164pc
	(pca56) and 21264 (ev6) cpus.
	(md_apply_fix): Private relocation types are now negative.
	(alpha_force_relocation): Likewise.
	(tc_gen_reloc): Likewise.
	(emit_insn): Likewise.
	(emit_ldXu): Do the right thing when the hardware can do byte insns.
	(emit_stX): Likewise.
	(emit_sextX): Likewise.

Thu Oct 31 16:33:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (do_relocs_for): Call resolve_symbol_value on
	a symbol found in a reloc.

	* symbols.c (resolve_symbol_value): Improve the error message if
	an undefined symbol is used in an expression.

Wed Oct 30 20:15:35 1996  Ian Lance Taylor  <ian@cygnus.com>

	* doc/internals.texi: Rewrite, and add a lot of documentation.
	* doc/Makefile.in (internals.info): New target.

Wed Oct 30 14:55:57 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.h (tc_fix_adjustable): Don't adjust relocs
	against weak symbols.

Tue Oct 29 12:28:16 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_assemble): Don't lose for relaxable
	addresses like .+6.

	* config/tc-v850.c (md_convert_frag): Make sure we insert the
	fixup at the right address within the frag.

	* config/tc-v850.c (md_convert_frag): Don't set fragP->fr_fix
	to an absolute value, instead increment it as needed.

	* config/tc-v850.h (TC_GENERIC_RELAX_TABLE): Define.
	* config/tc-v850.c: Fix some indention problems.
	(md_relax_table): Define for D9->D99 branch displacement
	relaxing.
	(md_convert_frag): Do something useful instead of aborting.
	(md_estimate_size_before_relax): Likewise.
	(md_assemble): Note if the matching instruction has a relaxable
	operand.  If it does, allocate frag with frag_var and don't
	do any fixups.

Mon Oct 28 10:48:40 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.h (md_cleanup): New function.  This is needed to
	write out any buffered instructions when a ".end" is found.

Mon Oct 28 10:43:45 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* read.c (read_a_source_file): New hook md_cleanup().

Fri Oct 25 00:01:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (fix_new_exp): Use make_expr_symbol to build an
	expression symbol for a complex fixup.

Thu Oct 24 14:31:04 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (v850_reloc_prefix): Several disgusting
	hacks to improve parsing of complex hi, lo, zda, etc
	expressions.
	(md_assemble): Don't demand and eat a trailing ')' after finding
	a v850 relocation prefix.  Sign extend the constant in a
	BFD_RELOC_LO16 expression.  Do eat a trailing ')' after a complete
	operand.
	(parse_cons_expression_v850): Don't eat a trailing ')' after
	finding a v850 relocation prefix.

	* config/tc-v850.h (TC_PARSE_CONS_EXPRESSION): Define.
	(TC_CONS_FIX_NEW): Likewise.
	* config/tc-v850.c (parse_cons_expression_v850): New function.
	(cons_fix_new_v850): Likewise.

	* config/tc-v850.h (tc_fix_adjustable): Don't adjust TDA relocs.

Wed Oct 23 18:20:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (md_apply_fix3): Give a better warning message
	for an unknown relocation type.

Wed Oct 23 16:21:28 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_pseudo_table): Add .word; allocates
	4 bytes of space.

Tue Oct 22 22:01:25 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_assemble): Handle TDAOFF relocs
	differently for movea & sst/sld insns.

Tue Oct 22 17:09:32 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-d10v.c (parallel_ok): Don't allow illegal combinations
	of instructions.

Tue Oct 22 11:28:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* obj.h (struct format_ops): Add frob_file_after_relocs field.
	* config/obj-multi.h (obj_frob_file_after_relocs): Define.
	* config/obj-ecoff.c (ecoff_format_ops): Initialize new
	frob_file_after_relocs field.
	* config/obj-elf.c (elf_format_ops): Likewise.
	* config/tc-mips.c: Undefine obj_frob_file_after_relocs before
	including obj-elf.h.

Mon Oct 21 11:38:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (cons_fix_new_mips): Only treat 8 byte reloc
	specially if not ELF.
	(md_apply_fix): Handle BFD_RELOC_64.
	(tc_gen_reloc): Handle BFD_RELOC_64.

	* config/tc-i386.c (md_apply_fix3): Don't increment value for a PC
	relative reloc when BFD_ASSEMBLER and OBJ_AOUT (more ugly gas
	reloc hacking).

	* config/obj-aout.h (S_IS_DEFINE): non BFD_ASSEMBLER version:
	Don't check S_GET_OTHER.

Fri Oct 18 14:06:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_ip): Accept an odd floating point
	register with l.s or s.s.

	* config/obj-aout.c (obj_pseudo_table): Use obj_aout_type for
	.type pseudo-op.
	(obj_aout_type): New static function.

Thu Oct 17 17:55:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in ($(OBJS)): Depend upon libiberty.h.

Wed Oct 16 11:28:31 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (v850_reloc_prefix): Recognize zdaoff, tdaoff
	and sdaoff expressions.

	* write.c (fixup_segment): Don't add symbol value to addend if
	TC_V850 and OBJ_ELF.
	* config/tc-v850.h (tc_fix_adjustable): Don't adjust any
	pc-relative fixups.

	* config/tc-v850.c (md_pcrel_from): Undo yesterday's changes.
	(md_pcrel_from_section): Likewise.
	* config/tc-v850.h (MD_PCREL_FROM_SECTION): Likewise.

Tue Oct 15 23:19:00 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_pcrel_from): Delete unused function.
	(md_pcrel_from_section): New function.
	* config/tc-v850.h (MD_PCREL_FROM_SECTION): Define.

Mon Oct 14 13:59:12 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (load_register): Add cast to offsetT when using
	a constant with &~.

Mon Oct 14 11:24:28 1996  Richard Henderson  <rth@tamu.edu>

	* config/obj-elf.c (elf_frob_file): Move ECOFF debug processing to ...
	(elf_frob_file_after_relocs): ... here.  New function.
	* config/obj-elf.h (obj_from_file_after_relocs): New macro.
	* write.c (write_object_file): Call *frob_after_relocs after the
	call to write_relocs.

	* config/tc-alpha.c: Use new BFD_RELOC_ALPHA_ELF_LITERAL reloc.

	* config/tc-alpha.c (load_expression): Don't SET_VALUE on the section
	symbol, as this messes up linking.  Instead, expand the recursive call
	inline and change up the appropriate bits to get the 0x8000 offset
	in the reloc addend.

Thu Oct 10 17:30:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sparc.h (tc_fix_adjustable): Permit the difference of
	two symbols in the same segment to be adjusted.

	* configure.in: Don't get confused by CPU-VENDOR-linux-gnu.
	* configure: Rebuild.

Thu Oct 10 17:22:18 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_insert_operand): Change most warnings into
	errors.
	(ppc_elf_validate_fix): Ditto.
	(md_assemble): Ditto.
	(ppc_tc): Ditto.
	(ppc_pe_section): Ditto.
	(ppc_frob_symbol): Ditto.

Thu Oct 10 12:05:45 1996  Jeffrey A Law  (law@cygnus.com)

	* config/mn10300.c (md_assemble): Pass an extra shift count
	to mn10300_insert_operand based on the opcode format.
	(mn10300_insert_operand): Accept and use extra shift count
	parameter.

	* config/tc-mn10300.c (md_assemble): Use FMT_* macros for
	formats rather than hard-coded constants.

	* config/tc-mn10300.c (md_assemble): Format D5 instructions
	are 7 bytes long.  Write out instructions in big-endian format.

Tue Oct  8 14:56:15 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.c (md_assemble): Tweak further so
	that all instructions are parsed correctly.

Tue Oct  8 13:02:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* as.h: Include libiberty.h.
	(xmalloc, xrealloc): Don't declare.
	* as.c: Don't include libiberty.h.
	* expr.c, read.c, stabs.c, config/obj-coff.c: Likewise.
	* config/tc-mips.c: Likewise.
	* messages.c: Likewise.
	(xstrerror): Don't declare.
	* xmalloc.c: Remove.

Mon Oct  7 16:53:23 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10300.h (pre_defined_registers) Remove.
	(system_registers, cc_names): Likewise.
	(address_registers, data_registers, other_registers): New register
	arrays.
	(register_name, system_register_name, cc_name): Remove.
	(mn10300_reloc_prefix): Likewise.
	(data_register_name): New function.
	(address_register_name, other_register_name): Likewise.
	(md_assemble): Rough cut at parsing operands.  Remove lots of
	unwanted code.
	(md_apply_fix3): Disable for now.

Mon Oct  7 11:38:34 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/tc-m68k.c (select_control_regs): New function, extracted
	out of m68k_init_after_args.
	(m68k_init_after_args): Use it.
	(mri_chip): Use it here as well to update set of allowed control
	regs for movec.

Mon Oct  7 11:24:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-elf.c (elf_begin): New function.
	(obj_elf_section): Add the section symbol to the symbol table.
	* config/obj-elf.h (obj_begin): Define.
	(elf_begin): Declare.
	* as.c (perform_an_assembly_pass): Call obj_begin if it is
	defined.

Fri Oct  4 18:37:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (fixup_segment): Subtract the section address
	from a PC relative reloc if TC_M68K.

Thu Oct  3 15:15:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sparc.c (md_pseudo_table): Make .uahalf, .uaword, and
	.uaxword available even if not OBJ_ELF.
	(md_atof): Remove unused local variable wordP.

Thu Oct  3 00:16:50 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-mn10x00.c, config/tc-mn10x00.h: New files
	for Matsushita MN10x00 support.
	* configure.in: Recognize mn10x00-*-*
	* configure: Rebuilt.

Wed Oct  2 15:54:03 1996  Klaus Kaempf  <kkaempf@progis.de>

	* config/obj-evax.h: move openvms definitions from here to tc-alpha.c.
	* config/tc-alpha.c: add support for vms_case_hack like in vax/vms.
	(load_expression): track clobbering of base reg before jmp/jsr.
	(s_alpha_file): pass case_hack flags and source filename via
	symbol table to bfd.
	* config/tc-alpha.h (TC_CONS_FIX_NEW): define

Tue Oct  1 16:16:01 1996  Joel Sherrill  <joel@oarcorp.com>

	* configure.in (mips-*-rtems*): New target, like mips-*-elf*.
	* configure: Rebuild.

Tue Oct  1 12:37:48 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (s_macro): Warn if a macro has the same name as a
	pseudo-op.
	(s_space): In m68k MRI mode, align to a word boundary.
	* macro.c (define_macro): Add namep parameter.  Change all
	callers.
	* macro.h (define_macro): Update declaration.

	* as.c (show_usage): Print bug report address.
	(parse_args): Change version printing to match current GNU
	standards.
	* gasp.c (show_usage): Print bug report address.
	(main): Change version printing to match current GNU standards.

	* config/tc-m68k.c (init_table): Correct access control unit
	register numbers.  From Ken Rose <rose@netcom.com>.

	* config/tc-alpha.c: Add some static function prototypes.
	(alpha_macros): Move to top of file.  Make static.
	(alpha_num_macros): Move to top of file.

Tue Oct  1 09:36:19 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* config/tc-v850.h:  Define LOCAL_LABEL to recognise _.L_* symbols
	generated by DWARF.

Sat Sep 28 03:38:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* listing.c (list_symbol_table): Remove bogus code in BFD64 case,
	and just call sprintf_vma.

Thu Sep 26 16:04:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* expr.c (expr): Change >>= to >> (fix typo).  (From meissner).

Tue Sep 24 19:05:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (float_cons): Call md_flush_pending_output if it is
	defined.

Tue Sep 24 12:22:18 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (md_operand): Created.  Allows operands to
	start with '#'.
	* config/tc-d10v.h (md_operand): Undefined.

Mon Sep 23 12:13:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (add_fix): Treat a width of '3' like 'B'.
	(md_assemble): A fixup width of '3' means a 1 byte reloc.

Thu Sep 19 12:21:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (fixup_segment): Don't adjust PC relative
	reloc for the i960 for a reloc in the same section.  This undoes
	one of the two changes made Aug 19.

Wed Sep 18 12:11:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (obj_coff_endef): Both versions: Move C_STAT
	symbols to the position of the debugging information.

Mon Sep 16 11:41:40 1996  Ian Lance Taylor  <ian@cygnus.com>

	* expr.c (expr): Always use unsigned right shifts for >>.

Thu Sep 12 10:25:45 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-arm.c (md_apply_fix3): Update two thumb instruction
	slots when processing BL fixups.

	* config/tc-arm.c (output_inst): Ensure Thumb BL fixup is marked
	on the first half of the instruction.

Wed Sep 11 00:09:35 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (ecoff_stab): Create an expression symbol for a complex
	stabs expression, rather than giving an error.

	* ecoff.c (ecoff_new_file): Don't do anything if we are still in
	the same file.

Tue Sep 10 11:45:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (append_insn): Fill in the value for a constant
	jump, rather than creating a reloc.

Mon Sep  9 10:57:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (append_insn): Don't swap an instruction which
	sets a condition code with an instruction which uses a condition
	code.
	(mips_ip): In cases 'N' and 'M', look for $fccN rather than an
	immediate value.

	* config/tc-mips.c (md_begin): Recognize r5000 for cpu.
	(mips_ip): Give a better error message if the ISA level is wrong.
	(md_parse_option): Recognize -mcpu=[v][r]5000.

Sat Sep  7 13:25:55 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-mips.c (COUNT_TOP_ZEROES): Added macro to count
	leading zeroes.
	(load_register): Ensure hi32 bits are not lost during lo32bit
	processing. Fix shift offset that was overflowing into the next
	instruction field. Add code to generate shorter sequences for
	constants with a single contiguous seqeuence of ones.

Fri Sep  6 17:07:12 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (d10v_dot_word): New function to support
	"@word" with the word pseudo-op.
	(md_apply_fix3): Cleanup and changes to support correct sizes
	for 16 and 18-bit relocs.

Fri Sep  6 16:00:29 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure.in (sparc-*-aout): Set `em'.
	* configure: Regenerated.
	* config/te-sparcaout.h: New file.
	* config/tc-sparc.h (TARGET_BYTES_BIG_ENDIAN): Define.
	Ifdef TE_SPARCOUT define TARGET_FORMAT and SPARC_BIENDIAN.
	* config/tc-sparc.c (INSN_BIG_ENDIAN): New macro.
	(SPECIAL_CASE_{SETSW,SETX}): Define.
	({NOP,OR,FMOVS,SETHI,SLLX,SRA}_INSN): Define.
	(md_begin): Delete setting of `target_big_endian'.
	(output_insn): New function.
	(md_assemble): Rewrite.  Add `setx' support.
	(sparc_ip): Handle `0' operand char.  Recognize setuw, setsw, setx
	special cases.
	(md_atof): Add little endian support.
	(md_number_to_chars): Likewise.
	(md_apply_fix): Likewise.
	(md_longopts): Recognize -EL,-EB ifdef SPARC_BIENDIAN.
	(md_parse_option): Likewise.
	(md_show_usage): Print -EL, -EB ifdef SPARC_BIENDIAN.

Thu Sep  5 13:40:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (ecoff_new_file): New function.
	* ecoff.h (ecoff_new_file): Declare.
	* config/obj-ecoff.h (obj_app_file): Define.

Thu Sep  5 13:39:25 1996  Richard Henderson  <rth@tamu.edu>

	* config/tc-alpha.c (load_expression): Bias the .lit8 section
	symbol by 32k so that our 16-bit signed offset can address the
	entire chunk.  Reported by <matt@lkg.dec.com>.

Wed Sep  4 10:23:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (load_register): Remove unused variable tmp.

Wed Sep  4 11:24:29 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-mips.c (load_register): Remove unnecessary code that
	was causing the high 32bits of 64bit constants to be lost.

Tue Sep  3 13:52:56 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Added changes to support function
	pointers and "@word" syntax.

Tue Sep  3 11:57:18 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c: Remove commented out and #if 0'd code.
	(v850_reloc_prefix): Provide prototype.
	(postfix, get_reloc, build_insn): Remove prototypes for nonexistant
	functions.
	(md_begin, md_assemble, md_apply_fix3): Remove unused variables.
	(md_assemble): Add default to case statement.

Sat Aug 31 16:03:00 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_assemble): Compute size of the instrction
	from the opcode.

	* config/tc-v850.c (md_apply_fix3): Do simple byte, short and
	word fixups too.

Fri Aug 30 23:50:08 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_apply_fix3): Use little endian get/put
	routines to fetch/store the updated instruction from/to memory.
	(v850_insert_operand): If the operand has a specialized insert
	routine, call it.

Fri Aug 30 18:35:26 1996  J.T. Conklin  <jtc@hippo.cygnus.com>

	* config/tc-v850.c (reg_name_search): Align calling convention to
	be like identical function found in tc-ppc.c.
	(get_reloc): Removed.
	(v850_reloc_prefix): New function, parse lo(), hi() and hi0().
	(md_assemble): emit fixups.
	(md_pcrel_from): renamed from md_pcrel_from_section, emit proper
	displacement.
	(md_apply_fix3): handle fixups/relocs.
	* config/tc-v850.h (MD_PCREL_FROM_SECTION): Removed definition.

Fri Aug 30 18:12:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	Add SH ELF support.
	* configure.in (sh-*-elf*): New target.
	* config/tc-sh.h (TARGET_ARCH): Define.
	(WORKING_DOT_WORD): Define.
	(TC_COFF_FIX2RTYPE): Only define if OBJ_COFF.
	(BFD_ARCH, COFF_MAGIC, TC_COUNT_RELOC): Likewise.
	(TC_RELOC_MANGLE, tc_coff_symbol_emit_hook): Likewise.
	(DO_NOT_STRIP, NEED_FX_R_TYPE, TC_KEEP_FX_OFFSET): Likewise.
	(TC_COFF_SIZEMACHDEP, tc_frob_file): Likewise.
	(SUB_SEGMENT_ALIGN): Likewise.
	(RELOC_32): Don't define.
	(tc_frob_file_before_adjust): Define if BFD_ASSEMBLER.
	(target_big_endian): Declare if OBJ_ELF.
	(TARGET_FORMAT): Define if OBJ_ELF.
	* config/tc-sh.c: Use BFD reloc codes instead of SH COFF reloc
	numbers throughout.
	(tc_crawl_symbol_chain): Only define if OBJ_COFF.
	(tc_headers_hook, tc_coff_sizemachdep): Likewise.
	(struct sh_count_relocs): Define.
	(sh_count_relocs): New static function, broken out of
	sh_frob_file.  Add BFD_ASSEMBLER code.
	(sh_frob_section): Likewise.
	(sh_frob_file): Call sh_frob_section.
	(md_convert_frag): If BFD_ASSEMBLER, change type of headers, and
	call section_symbol rather than seg_info (seg)->dot.
	(md_section_align): Add OBJ_ELF version.
	(SWITCH_TABLE_CONS): Define.
	(SWITCH_TABLE): Use SWITCH_TABLE_CONS.
	(md_apply_fix): Change parameter types if BFD_ASSEMBLER.  Only
	handle fx_r_type == 0 if not BFD_ASSEMBLER.  Return 0 if
	BFD_ASSEMBLER.
	(struct reloc_map): Define if not BFD_ASSEMBLER.
	(coff_reloc_map): Likewise.
	(sh_coff_reloc_mangle): Use coff_reloc_map to convert fx_r_type.
	(tc_gen_reloc): New function if BFD_ASSEMBLER.
	* write.c (write_relocs): Ifdef out fx_where test which triggers
	inappropriately for SH ELF.
	(write_object_file): Call tc_frob_file_before_adjust and
	obj_frob_file_before_adjust if they are defined.

	* write.c (write_object_file): Use BFD_RELOC_16, not
	BFD_RELOC_NONE, when calling fix_new_exp for a broken word.

	* read.c (emit_expr): Fix conversion of byte count to BFD reloc
	code.

Fri Aug 30 14:47:38 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (find_opcode): Fix problem with calculating
	branch sizes in across sections.

Fri Aug 30 00:44:13 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-850.c (md_assemble): Handle hi() correctly.  Handle
	hi0() too.

Wed Aug 28 23:11:08 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_begin): Deal with end of opcode
	table marker.

Wed Aug 28 19:20:04 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (find_opcode): Fix a bug which could generate
	the wrong opcode for cases like st2w where there are many forms
	of the same instruction.

Tue Aug 27 13:53:22 1996  Ian Lance Taylor  <ian@cygnus.com>

	* expr.c (operand): If md_parse_name is defined, call it before
	calling symbol_find_or_make.
	* config/tc-ppc.h (md_parse_name): Define.
	(ppc_parse_name): Declare.
	* config/tc-ppc.c (reg_name_search): Add regs and regcount
	parameters.
	(register_name): Update call to reg_name_search.
	(cr_operand): New static variable.
	(cr_names): New static const array.
	(ppc_parse_name): New function.
	(md_assemble): If PPC_OPERAND_CR is set in the operand flags, set
	cr_operand before calling expression.

Tue Aug 27 09:05:50 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (tc_gen_reloc): Add new argument to
	hppa_gen_reloc_type call.

Mon Aug 26 18:24:51 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Fixed ".word".  Fixed problem with range checking
	on addresses.  Improved error messages.
	* doc/c-d10v.texi: Added docs for register pairs.

Mon Aug 26 13:39:27 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (parallel_ok): Fix bug in parallel
	checking code.

Mon Aug 26 14:38:22 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (init_file): Initialize fMerge to 1.
	(add_file): Restore old file merging code, but only merge files if
	fMerge is set.
	(ecoff_directive_loc): Clear fMerge field of current file.
	(ecoff_generate_asm_lineno): Likewise.

Fri Aug 23 11:40:47 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* doc/c-d10v.texi: Fix typo.

Fri Aug 23 10:41:32 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-v850.c (md_assemble): Correct bit masking for
	hi and lo expressions.

	* config/tc-v850.c (md_assemble): Rough cut at demanding
	"ep" or "r30" in sst and sld instructions.
	(md_apply_fix3): Don't abort.  Just warn that we don't
	have relocs yet.

	* config/tc-v850.c (CC_NAME_CNT): Define.
	(cc_name): New function.
	(md_assemble): Handle V850_OPERAND_CC correctly.

	* config/tc-v850.c (md_assemble): Don't forget to initialize
	"insn"!

	* config/tc-v850.c (reg_name_search): Generalize to search
	any given register table.
	(register_name): Pass appropriate table and size to reg_name_search.
	(system_register_name): New function.
	(SYSREG_NAME_CNT): Define.
	(md_assemble): Handle operands which are system registers.

	* config/tc-v850.c (md_assemble): If we find a register, but the
	opcode doesn't want a register, then we don't have a match.
	(md_assemble): Get size of the instruction from the opcode table.

Thu Aug 22 10:20:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Set and substitute HLDENV.
	* configure: Rebuild.
	* Makefile.in (HLDENV): New variable.
	(as.new): Use $(HLDENV).

	* ecoff.c (ecoff_directive_endef): Avoid a division by zero error
	if an array dimension is not known.

Thu Aug 22 10:50:00 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Fix a reloc bug caused by my last change.
	* doc/c-d10v.texi: Cleanup.

Tue Aug 20 15:15:16 1996  J.T. Conklin  <jtc@hippo.cygnus.com>

	* config/tc-v850.c: New file.
	* config/tc-v850.h: New file.
	* configure (v850-*-elf): New target.
	* configure.in (v850-*-elf): New target.

Wed Aug 21 15:50:54 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* doc/c-d10v.texi: New file.
	* doc/all.texi: Added D10V stuff.
	* doc/as.texinfo: Added D10V stuff.

Tue Aug 20 14:10:02 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: All references to defined symbols should
	now use the optimal instruction.  .float and .double now work.

Mon Aug 19 14:41:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (fixup_segment): Adjust PC relative reloc by
	section address for the i960 as is done for the i386.

Thu Aug 15 16:37:59 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Add wildcards for config matching, add mips-*-*
	case, forward-include bfd/elf-bfd.h.

Thu Aug 15 13:24:30 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Add additional information to the opcode
	table to help determinine which instructions can be done
	in parallel.

Thu Aug 15 17:01:31 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-arm.c: Major changes to add Thumb support, with lots
	of change input from <rearnsha@armltd.co.uk>.
	Reverted to INSN_SIZE macro, rather than insn_size variable.
	(insns): Added ARM "bx" instruction support.
	(tinsns): Added Thumb instruction definition structure.
	(arm_tops_hsh): Added hash structure for Thumb opcodes.
	(md_pseudo_table): Added ".arm", ".thumb" and ".code" pseudo-ops.
	(opcode_select,s_arm,s_thumb,s_code): Added.
	(decode_shift): Allow upper-case RRX.
	(do_ldst): Simpler halfword support.
	(do_ldmstm): Improved.
	(reg_list, do_bx, thumb_reg, thumb_add_sub, thumb_shift,
	thumb_mov_compare, thumb_load_store, do_t_arit, do_t_add,
	do_t_asr, do_t_branch, do_t_bx, do_t_compare, do_t_ldmstm,
	do_t_ldrb, do_t_ldrh, do_t_lds, do_t_lsl, do_t_lsr, do_t_mov,
	do_t_push_pop, do_t_str, do_t_strb, do_t_strh, do_t_sub, do_t_swi,
	do_t_adr): Added.
	(md_apply_fix3): Add support for BFD_RELOC_ARM_THUMB_* relocations.
	(md_parse_option): Add support for -mthumb.
	(md_show_usage): Updated to reflect new command line option.
	(arm_data_in_code, arm_canonicalize_symbol_name): Added.
	* config/tc-arm.h: Provide TC_FIX_TYPE to allow private ARM
	fragment information to be held.

Thu Aug 15 16:12:00 1996  Richard Earnshaw (rearnsha@armltd.co.uk)

	* config/tc-arm.c (md_apply_fix3): Also set fixP->fx_done if fx_addsy is
	non-null, but is a constant.
	(fix_new_arm): Call make_expr_symbol to make the expression symbol
	so that error reporting will work correctly.

Wed Aug 14 10:37:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.c (tc_i386_fix_adjustable): Don't adjust relocs
	against weak symbols.

Tue Aug 13 17:39:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.h (TC_FORCE_RELOCTION): Define if OBJ_XCOFF.
	(ppc_force_relocation): Declare if OBJ_XCOFF.
	* config/tc-ppc.c (ppc_force_relocation): New function if
	OBJ_XCOFF.

Mon Aug 12 16:49:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.h (BYTE_ORDER): Don't define.  No longer used.

Fri Aug  9 17:48:28 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Fix problem with relocs.

Fri Aug  9 14:16:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.c (sh_do_align): If not BFD_ASSEMBLER, always align
	with nops if not in data_section or bss_section.

Thu Aug  8 12:32:56 1996  Klaus Kaempf  <kkaempf@progis.de>

	Add support for openVMS/Alpha.
	* as.h (PRINTF_LIKE): Don't define if VMS, for now.
	* config/obj-evax.c: New file.
	* config/obj-evax.h: New file.
	* config/tc-alpha.c: Add support for EVAX format if OBJ_EVAX is
	defined.
	* config/tc-alpha.h: Add support for EVAX format if OBJ_EVAX is
	defined.  Add case for bfd_target_evax_flavour.
	* config/vms-a-conf.h: New file.
	* conf-a-gas.com: New file.
	* configure.in: Add target alpha-*-*vms*.
	* configure: Rebuild.
	* makefile.vms: New file.
	* read.c (s_lcomm): Align bss_seg on 8 byte boundary if OBJ_EVAX.
	Don't call ffs on openVMS/Alpha.

Wed Aug  7 14:19:03 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* configure.in: Make GAS_CHECK_DECL_NEEDED include <string.h> or
	<strings.h> if they exist.  Call GAS_CHECK_DECL_NEEDED on strstr
	and sbrk.
	* acconfig.h (NEED_DECLARATION_STRSTR): New macro.
	(NEED_DECLARATION_SBRK): New macro.
	* configure, conf.in: Rebuild.
	* as.h: Only include <strings.h> if HAVE_STRINGS_H.
	(strstr): Declare if NEED_DECLARATION_STRSTR.
	* as.c: If HAVE_SBRK and NEED_DECLARATION_SBRK, declare sbrk.

Wed Aug  7 11:50:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* symbols.c (resolve_symbol_value): Handle addition or subtraction
	by a constant before entering the main switch.  Reject attempts to
	apply an arithmetic function to non-absolute symbols, except for
	the special case of subtraction of two symbols in the same
	section.

	* config/tc-mips.c (md_section_align): Do align if OBJ_ELF, but
	not to more than a 16 byte boundary.

	* config/tc-i386.c (tc_gen_reloc): Accept all relocs; remove
	#ifndef OBJ_ELF lines.  From Eric Valette <valette@crf.canon.fr>.
	(tc_gen_reloc): If out of memory call as_fatal rather than
	assert.  If no howto found, call as_bad_where rather than
	as_fatal.  Change the error message slightly.  Set howto to a
	non-NULL value in order to keep going.

Tue Aug  6 12:58:03 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Added code to support 32-bit fixups for stabs.

Tue Aug  6 11:15:26 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-h8300.c (get_specific): New operand "size" derived
	from ".b", ".w" and ".l" extensions.  All callers changed.  If
	the base instruction has no operands, then use the size to
	determine which specific instruction to use.

Mon Aug  5 14:21:10 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i960.c (mem_fmt): Call parse_expr before emit.

Fri Aug  2 11:23:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_section_align): Don't change addr if
	OBJ_ELF.

Thu Aug  1 23:51:52 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c: Revert yesterday's changes.

Wed Jul 31 14:46:11 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Disable range checking on 16-bit values.

Wed Jul 31 16:27:19 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Set ok_arch for every instruction,
	not just the ones that don't match.

Wed Jul 31 11:45:15 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Fixed bugs in short relocs and range checking.

Wed Jul 31 15:41:42 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-arm.c: Changed INSN_SIZE to variable insn_size, as
	pre-cursor to adding Thumb support. Also added cpu_variant flag
	information to each of the asm_flg structures.
	(md_parse_option): Updated ARM7 parsing to allow 't' for
	thumb/halfword support, aswell as 'm' for long multiply.
	(md_show_usage): Updated help message.
	(md_assemble): Check that instruction flags are applicated to the
	current cpu variant.
	(md_apply_fix3, tc_gen_reloc): Add BFD_RELOC_ARM_OFFSET_IMM8 and
	BFD_RELOC_ARM_HWLITERAL relocation support for new halfword and
	signextension instructions.
	(do_ldst): Generate halfword and signextension variants if
	mnemonic flags match.
	(ldst_extend): Do not allow shifts in the offset field of halfword
	or signextension instructions.
	(validate_offset_imm): Provide check on halfword and signextension
	immediate range.
	(add_to_lit_pool): Merge identical literal pool values.

Tue Jul 30 14:28:23 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (selector_table): Add 'E' selector.
	(cons_fix_new_hppa): Don't coke on e_esel.
	(tc_gen_reloc, SOM version): Handle R_COMP2 when used
	to help generate exception handling tables.
	(md_apply_fix): Don't try to apply fixups with an e_esel
	selector.
	(hppa_fix_adjustable): Fixups with e_esel selectors
	are not adjustable.

Tue Jul 30 15:51:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sparc.c (md_pseudo_table): Add 2byte, 4byte, and 8byte
	pseudo-ops.

Fri Jul 26 11:43:03 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Added lots of error checking.  Added hacks
	to support accumulator shifts.

Fri Jul 26 11:56:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* symbols.c (S_SET_EXTERNAL): Let .weak override.
	(S_CLEAR_EXTERNAL): Likewise.
	(S_SET_WEAK): Remove error; just let .weak override.

Thu Jul 25 15:22:51 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (md_assemble): Now handles multiline
	instructions.

Thu Jul 25 12:03:33 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Fix packaging bug. Added range checking.
	Added kludge for divs instruction.  Fixed minor problem with
	multiple text sections.
	* config/tc-d10v.h (d10v_cleanup): Change prototype.

Tue Jul 23 10:49:36 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c (md_apply_fix3): Fix all instruction
	addresses to be right-shifted by 2.

Mon Jul 22 11:32:36 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: Many changes to get relocs working.
	(register_name): No longer creates a symbol for register names.
	(pre_defined_registers): moved to opcodes/d10v-opc.c.
	(d10v_insert_operand): Now works correctly for either container.
	* config/tc-d10v.h (d10v_cleanup): Declare.

Mon Jul 22 14:01:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (tc_gen_reloc): BFD_RELOC_PCREL_HI16_S and
	BFD_RELOC_PCREL_LO16 are expected to be PC relative.

Mon Jul 22 12:46:55 1996  Richard Henderson  <rth@tamu.edu>

	* config/tc-alpha.c: Patches to track current minimum alignment to reduce
	the number of fragments created with frag_align.
	(alpha_current_align): New static variable.
	(s_alpha_text): Reset alignment to 0.
	(s_alpha_data, s_alpha_rdata, s_alpha_sdata): Likewise.
	(s_alpha_stringer, s_alpha_space): New functions.
	(s_alpha_cons, alpha_flush_pending_output): Remove functions.
	(alpha_cons_align): New function to replace both of them.
	(emit_insn): Only align if alpha_current_align is less than 2;
	reset alpha_current_align to 2.
	(s_alpha_gprel32): Likewise.
	(s_alpha_section): New function.  Basically duplicate the other
	alpha section change hooks.  Only define for ELF.
	(s_alpha_float_cons): Simplify alignment handling.
	(md_pseudo_table): Only define "rdata" and "sdata" if OBJ_ECOFF.
	If OBJ_ELF, define "section", "section.s", "sect", and "sect.s".
	Don't define the s_alpha_cons pseudo-ops.  Do define
	s_alpha_stringer and s_alpha_space pseudo-ops.
	(alpha_align): Skip if less than current default alignment.  Set
	default alignment.
	* config/tc-alpha.h (md_flush_pending_output): Remove.
	(md_cons_align): Add.

	* config/tc-alpha.c: Add oodles of function description comments.
	(md_bignum_to_chars): Remove; there are no callers.
	(md_show_usage): Mention some more variants.

Thu Jul 18 15:54:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	From Andrew Gierth <ANDREWG@microlise.co.uk>:
	* configure.in (sparc-*-sysv4*): New target.
	* configure: Rebuild.

	* config/tc-sparc.c (md_pseudo_table): Change uahalf, uaword, and
	uaxword to use s_uacons.
	(sparc_no_align_cons): New static variable.
	(s_uacons): New static function.
	(sparc_cons_align): If sparc_no_align_cons is set, just clear it
	and return.

	* config/tc-sparc.c (s_common): Remove unused label allocate_bss.

	* configure.in: Add mips-*-irix6* target.  Handle Irix 6 like Irix
	5 with regard to shared libraries.
	* configure: Rebuild.

	* config/tc-m68k.c (m68k_ip): Use the correct length when
	allocating space for the unsupported architecture error message.

Thu Jul 18 12:57:10 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (d10v-*-*): Allow d10v-*-*, don't require d10v-*-elf*.

Wed Jul 17 14:25:13 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/tc-d10v.c: New file.
	* config/tc-d10v.h: New file.
	* configure (d10v-*-elf): New target.
	* configure.in (d10v-*-elf): New target.

Fri Jul 12 20:54:19 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (md_parse_option): Recognize -K PIC.

Wed Jul 10 12:39:08 1996  Richard Henderson  <rth@tamu.edu>

	* config/tc-alpha.c (alpha_align): Change fill parameter
	to a pointer.  Take NULL as 0 or nop depending on section.  Change
	all callers.
	(s_alpha_align): Rename local variables.

	* doc/as.texinfo (.align): Document action of omitted
	fill parameter.

Wed Jul 10 00:23:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (md_apply_fix3): Give a useful error message
	when an unsupported PC relative reloc is seen, rather than calling
	abort.

	* app.c (do_scrub_chars): Remove not_cpp_line local variable.
	Instead, check state when '#' comment is seen.

Mon Jul  8 14:11:49 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_regmask_frag): Only define if OBJ_ELF or
	OBJ_MAYBE_ELF.
	(tc_gen_reloc): If fixup was changed to be PC relative, change
	reloc type accordingly.  Use name of reloc in error message.

	* as.h: Don't define const or volatile.
	* flonum.h: Don't define const.

	* config/tc-m68k.c (tc_gen_reloc): Change the code appropriately
	if fx_pcrel is set.  Correct setting the addend case in the
	OBJ_ELF case (from Andreas Schwab
	<schwab@issan.informatik.uni-dortmund.de>).
	(md_show_usage): Correct -mfc5200 to -m5200.

Fri Jul  5 10:32:58 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* doc/c-m68k.texi: Document -m5200 flag.
	* doc/as.texinfo: Likewise.

	* config/tc-m68k.c (m68k_ip): The coldfire does not support 8x
	scale factor.

Fri Jul  5 11:07:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	* symbols.c (S_SET_EXTERNAL): Change as_warn to as_bad.
	(S_CLEAR_EXTERNAL, S_SET_WEAK): Likewise.

Thu Jul  4 11:59:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (VERSION): Set to cygnus-2.7.1.

	* Released binutils 2.7.

Thu Jul  4 10:11:33 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-mips.c (mips_ip): Only perform range check when
	dealing with O_constant expressions.

Wed Jul  3 15:02:21 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* m68k-parse.h (m68k_register): Add new coldfile control
	registers.

	* config/tc-m68k.c (mcf5200_control_regs): New variable,
	array of control registers for the coldfire.
	(cpu_of_arch): Added mcf5200.
	(archs): Added mcf5200.
	(init_table): Add new control registers.
	(m68k_ip): Added support for new control registers.
	(m68k_init_after_args): Likewise.

	* config/tc-m68k.c (md_show_usage): Add -m5200 to usage text.

Wed Jul  3 16:05:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.h (is_it_end_of_statement): Declare.
	* read.c (is_it_end_of_statement): Remove declaration.

	* config/tc-ppc.c (ppc_elf_suffix): Correct parenthesization of ||
	within &&.
	(md_assemble): Fix handling of @l with an unsigned constant.  Add
	default case to reloc switch.

	* config/tc-i386.h (AOUT_MACHTYPE): Define as 0 if TE_386BSD.

	Based on patches from Tom Quiggle <quiggle@sgi.com>:
	* ecoff.c (last_lineno): New static variable.
	(add_procedure): Set last_lineno.
	(ecoff_directive_loc): Likewise.
	(ecoff_generate_asm_lineno): Likewise.
	(ecoff_fix_loc): New function.
	* ecoff.h (ecoff_fix_loc): Declare.
	* config/tc-mips.c (append_insn): When inserting nops, and using
	ECOFF debugging, call ecoff_fix_loc.

Tue Jul  2 23:02:12 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-h8300.c (build_bytes): If an operand type is
	marked as SRC_IN_DST retrieve it from the "destination" op.

Sat Jun 29 13:38:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in (arm-*-riscix*): Set emulation to riscix.
	* configure: Rebuild.
	* config/te-riscix.h: New file to define TE_RISCIX.

	* config/tc-sh.h (SUB_SEGMENT_ALIGN): Define.

Fri Jun 28 15:14:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (config.status): Just run config.status as other
	tools do.

Fri Jun 28 11:09:38 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in (TARGET_OS): Add definition to conf.

Thu Jun 27 20:39:40 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-mips.c (append_insn): Parenthesize
	cop_interlocks expressions.

Thu Jun 27 12:18:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* listing.c (listing_print): Close the listing file if it is not
	stdout.  Close the other files opened for the listing.

	* config/tc-sparc.h (md_cons_align): Define.
	(sparc_cons_align): Declare.
	(HANDLE_ALIGN): Define.
	(sparc_handle_align): Declare.
	* config/tc-sparc.c (sparc_cons_align): New function.
	(sparc_handle_align): New function.
	* read.c (cons_worker): Call md_cons_align if it is defined.

	* as.h (struct frag): Add fr_file and fr_line fields.
	* frags.c (frag_new): Set fr_file and fr_line.
	(frag_var): Likewise.
	(frag_variant): Likewise.

	* as.h (struct frag): Remove unused align_mask and align_offset
	fields.

	* listing.c (calc_hex): Offset by fr_fix when examining fr_var.
	From <uddeborg@carmen.se>.

Wed Jun 26 13:21:34 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in (mips-*-osf*): New target.
	* configure: Rebuild.

	* config/tc-m68k.c: Add 68ec060 as a synonym for 68060.

Wed Jun 26 16:23:08 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-mips.c: Added cop_interlocks, to avoid NOP insertion
	between co-processor comparisons and branches for the VR4300.

Mon Jun 24 18:02:50 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir,
	INSTALL_PROGRAM, INSTALL_DATA): Use autoconf-set values.
	(docdir): Removed.
	* configure.in (AC_PREREQ): autoconf 2.5 or higher.
	* doc/Makefile.in (bindir, libdir, datadir, mandir, infodir,
	includedir): Use autoconf set values.
	(docdir): Removed.

Mon Jun 24 11:58:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* listing.c (listing_eject): Don't do anything if listing is 0.
	(listing_list): Likewise.
	(listing_source_line): Likewise.
	(listing_title): Don't save title if listing is 0.
	(listing_source_file): Check listing rather than listing_tail.

	* configure.in: On alpha*-*-osf*, link against libbfd.a if not
	using shared libraries.
	* configure: Rebuild.

Fri Jun 21 18:22:23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_ip): In case 'i'/'j', don't require an
	absolute expression if a relocation type was specified.

Fri Jun 21 17:40:16 1996  Joel Sherrill  <joel@merlin.gcs.redstone.army.mil>

	* configure.in: Add support for *-*-rtems* configurations.
	* configure: Rebuild.

Fri Jun 21 16:01:18 1996  Richard Henderson  <rth@tamu.edu>

	* configure.in: Add alpha-*-linuxecoff* target.  Use elf for
	alpha-*-linux* target.  Force bfd_gas for alpha-*.  Require
	opcodes library for alpha.
	* configure: Rebuild with autoconf 2.10.
	* config/tc-alpha.c: Substantial rewrite to add ELF support and
	use new opcode table.
	* config/tc-alpha.h (md_undefined_symbol): Don't define.
	(LOCAL_LABEL): Define differently if OBJ_ELF.
	(FAKE_LABEL_NAME): Define if OBJ_ELF.
	* config/alpha-opcode.h: Remove.
	* config/obj-elf.h: If TC_ALPHA, define ECOFF_DEBUGGING.
	* Makefile.in (TARG_CPU_DEP_alpha): Depend upon
	include/opcode/alpha.h rather than config/alpha-opcode.h.

Thu Jun 20 19:10:28 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-aout.c (obj_emit_relocations): Give an error if the
	relocation symbol was not resolved.
	* config/obj-coff.c (do_relocs_for): Likewise.

	* write.c (adjust_reloc_syms): Refetch the symbol section after
	calling S_GET_VALUE, since it may have changed.

	* expr.c (struct expr_symbol_line): Define.
	(expr_symbol_lines): New static variable.
	(make_expr_symbol): Add entry to expr_symbol_lines.
	(expr_symbol_where): New function.
	* expr.h: Use extern on function declarations.
	(expr_symbol_where): Declare.
	* symbols.c (resolve_symbol_value): Try to use expr_symbol_where
	rather than printing the meaningless name of an expression
	symbol.

Thu Jun 20 15:57:41 1996  Ken Raeburn  <raeburn@cygnus.com>

	* config/tc-i386.c (md_number_to_chars): Deleted.
	* config/tc-i386.h (md_number_to_chars): New macro.

	* config/tc-alpha.c (build_operate_n, build_mem): Moved earlier in
	the file.
	(load_symbol_address, load_expression): Use build_mem.
	(build_operate): New function.
	(emit_addq_r): Use it.

	Wed Mar 13 22:14:14 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* symbols.c (colon):  #if VMS, use S_SET_OTHER to store `const_flag'.

	Tue Mar  5 14:31:45 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* config/tc-vax.h (NOP_OPCODE): Define.

	Sun Feb  4 21:01:03 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.h (S_IS_COMMON): Define.
	(S_IS_LOCAL): Check for \002 as well as \001.
	(LONGWORD_ALIGNMENT): New macro.
	(SUB_SEGMENT_ALIGN): Use it.

	Fri Jan 26 17:44:09 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* config/vms-conf.h: Reconcile with conf.in.

Wed Jun 19 11:31:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (is_dnrange): Only define if TC_GENERIC_RELAX_TABLE is
	defined.

	* doc/as.texinfo: Document that any number of hex digits can
	follow \x.

	* as.c (struct defsym_list): Define.
	(defsyms): New static variable.
	(parse_args): Just put --defsym arguments on defsyms list, rather
	than defining them.
	(main): Define defsyms after output file is created.

	* config/tc-m68k.c (m68k_ip): Reject PRE and POST indexing mode on
	cpu32.  From Eric Norum <Eric.Norum@usask.ca>.

	* config/tc-mips.c (mips_ip): In cases 'I', 'i', and 'j', set
	insn_error rather than calling check_absolute_expr.

	* as.c (emulation_name): Remove unused static variable.
	(default_emul_bfd_name): Add return NULL to avoid warning.
	* ecoff.c (ecoff_stab): Remove unused variables name and
	name_end.
	* frags.c (frag_new): Remove unused variable tmp.
	* hash.c (hash_grow): Parenthesize + within <<.
	(hash_print_statistics): Use %lu, not %d, to print unsigned
	long variables.
	* messages.c: Include "libiberty.h".
	(fprint_value): Add cast to avoid printf warning.
	(sprint_value): Likewise.
	* read.c: Include "ecoff.h".
	(emit_expr): Add casts to avoid printf warnings.
	* read.h: Use extern for function declarations.
	(pop_insert): Declare.
	* stabs.c: Include "ecoff.h".
	* subsegs.c (subseg_set_rest): Remove unused variables tmp,
	former_last_fragP, and new_fragP.
	* subsegs.h (subsegs_print_statistics): Declare.
	* symbols.c (debug_verify_symchain): Change macro to discard
	arguments.
	* write.c (dump_section_relocs): Likewise.
	* write.h: Use extern for function declarations.
	(write_print_statistics): Declare.
	* config/e-mipsecoff.c (mipsecoff_bfd_name): Return NULL to avoid
	warning.
	* config/e-mipself.c (mipself_bfd_name): Likewise.
	* config/obj-elf.h (elf_ecoff_set_ext): Declare.

	* config/tc-sparc.h (TC_RELOC_RTSYM_LOC_FIXUP): If OBJ_ELF, always
	emit relocations against external symbols.

	* config/tc-alpha.c (tc_gen_reloc): Output a sensible error
	message if bfd_reloc_type_lookup fails, rather than calling
	assert.

	* config/tc-alpha.c (alpha_force_relocation): Add
	BFD_RELOC_12_PCREL to switch.

Tue Jun 18 20:29:57 1996  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-i386.h (LOCAL_LABEL,FAKE_LABEL_NAME): Use defaults for
	TE_PE (Lfoo, not .Lfoo).

Tue Jun 18 17:13:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (s_fill): Don't warn about a zero repeat count.

	* config/tc-mips.c (mips_ip): Don't warn about using AT as a
	coprocessor register.

	* config/tc-i386.c (md_assemble): When checking the size of a
	register to set the size of an instruction, do a bitwise and with
	Reg8 and Reg16 rather than requiring the type to be exactly Reg8
	or Reg16.

Tue Jun 18 13:19:51 1996  Jeffrey A. Law  <law@rtl.cygnus.com>

	* config/tc-h8300.c (parse_reg): Tweak error messages.
	(build_bytes): Likewise.
	(skip_colonthing): Handle :32 suffix.
	(get_specific): Promote L_24 to L_32 if it makes a match.
	Don't always promote L_8 to L_16.
	(do_a_fix_imm): Clean up L_32 and L_24 handling.

	* config/tc-h8300.c (Smode): New variable.
	(h8300hmode): Turn off Hmode.
	(h8300smode): New function.  Turn on Smode and Hmode.
	(md_pseudo_table): New ".h8300s" pseudo-op.
	(parse_reg): Handle "exr" register.
	(get_operand): Handle bizarre syntax for "stm.l" and "ldm.l".
	Handle "mach" and "machl" operands for ldmac.
	(get_specific): Handle "stm.l" and "ldm.l".
	(build_bytes): Handle "stm.l" and "ldm.l"; handle MACREG operands.
	* config/tc-h8300.h (COFF_MAGIC): Handle H8/S magic number.
	(Smode): Declare.

Mon Jun 17 15:50:53 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* doc/as.texinfo: Reorder chapter of machine dependent options so
	that it is sorted by chip name.

	* doc/as.texinfo: Use consistant spelling of Vax.
	* doc/c-vax.texi: Likewise.

Mon Jun 17 11:26:56 1996  Jeffrey A. Law  <law@rtl.cygnus.com>

	* config/tc-hppa.c (md_pseudo_table): Add ".begin_try" and ".end_try"
	pseudo ops.
	(tc_gen_reloc, SOM version): Handle R_BEGIN_TRY and R_END_TRY.
	(md_apply_fix): Likewise.
	(pa_try): New function.
	(hppa_force_relocation): Force relocs for BEGIN_TRY and END_TRY.

Sun Jun 16 22:57:47 1996  Jeffrey A. Law  <law@rtl.cygnus.com>

	* config/tc-hppa.c (md_pseudo_table): Add ".level" pseudo op.
	(pa_level): New function.

Fri Jun 14 20:06:44 1996  Ian Lance Taylor  <ian@cygnus.com>

	* listing.c (listing_newline): Don't do anything if listing is 0.

Thu Jun 13 17:50:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	* subsegs.c (section_symbol): If symbol_table_frozen is set, call
	symbol_create, not symbol_new.

Wed Jun 12 14:10:44 1996  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (adjust_reloc_syms): Don't set sy_used_in_reloc for an
	absolute symbol unless TC_FORCE_RELOCATION returns true.

	* config/obj-coff.c (previous_file_symbol): Remove BFD_ASSEMBLER
	version.
	(c_dot_file_symbol): BFD_ASSEMBLER version: Don't set the value of
	the symbol to a pointer.  Don't set previous_file_symbol.
	Simplify symbol list rearrangement.
	(coff_frob_symbol): Don't do anything with C_FILE symbols.
	(coff_adjust_symtab): Don't check previous_file_symbol.

Mon Jun 10 14:52:29 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_lcomm): New function for .lcomm
	directive.
	(md_pseudo_table): Add ppc_elf_lcomm.

Mon Jun 10 11:45:51 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Accept ABSL for 'O', so that `bfextu
	d0{24:1},d0' works without an immediate prefix on the bit numbers.
	(md_begin): Add digits to alt_notend_table.
	(md_parse_option): Make s a const pointer.

	* config/tc-sparc.c (md_pseudo_table): Add "empty".
	(s_empty): New static function.

	* config/obj-coff.c (struct filename_list): Only define if not
	BFD_ASSEMBLER.
	(filename_list_head, filename_list_tail): Likewise.
	(c_section_symbol): Remove unused BFD_ASSEMBLER version.
	(obj_coff_endef, BFD_ASSEMBLER version): Don't set the debugging
	flag for C_MOS, C_MOE, C_MOU, or C_EOS symbols, since they should
	have a section of N_ABS rather than N_DEBUG.  If we do a merge,
	remove the new symbol from the list.
	(obj_coff_endef, both versions): Call tag_insert even if there is
	an old symbol with the same name, if the old symbol does not
	happen to be a tag.
	(coff_frob_symbol): Check SF_GET_TAG, C_EOF, and C_FILE outside of
	the SF_GET_DEBUG condition.  Don't call SA_SET_SYM_ENDNDX with a
	symbol that will be moved to the end of the symbol list.
	(coff_adjust_section_syms): Always call section_symbol for .text,
	.data, and .bss.
	(coff_frob_section): Likewise.  Also, remove unused variable
	strname.

	* config/tc-ns32k.c (convert_iif): Call frag_grow rather than
	manipulating frags directly.
	(md_number_to_field): Adjust mem_ptr correctly if ENDIAN is
	defined.

	* app.c (do_scrub_chars): If '/' is LINE_COMMENT_START, check
	whether the next character is '*' before checking whether we are
	at the start of a line.  Permit LINE_COMMENT_START to start a
	comment in state 1 (seen some whitespace) as well, to match the
	documentation.

	* gasp.c (do_align): Permit a fill value for .align.

Wed Jun  5 17:09:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (next_char_of_string): Warn if a newline is seen in the
	middle of a string.  Call bump_line_counters when appropriate.

Wed Jun  5 17:08:36 1996  Richard Henderson  <rth@tamu.edu>

	* symbols.c (colon): Use LOCAL_LABEL.

Tue Jun  4 10:55:16 1996  Tom Tromey  <tromey@csk3.cygnus.com>

	* Makefile.in (install): Don't check to see if tooldir exists.
	Make $(tooldir) and $(tooldir)/bin.

Tue Jun  4 10:14:53 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/ppc-sol.mt (TDEFINES): Don't turn on -mregnames by
	default.

Mon Jun  3 11:34:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_ip): Don't call as_warn if we are setting
	insn_error.  Don't put the string "ERROR" in insn_error.  Set
	insn_error rather than calling as_warn for an unsupported opcode.

Sat Jun  1 21:51:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_parse_option): Check for a 64 bit format
	before permitting -64.
	* output-file.c (output_file_create): Remove duplicate
	bfd_perror.

Fri May 31 01:08:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_begin): If -64, create a .MIPS.options
	section rather than a .reginfo section.
	(mips_elf_final_processing): If -64, write out 64 bit RegInfo
	information.

	* config/tc-mips.c (load_register): If mips_isa < 3, permit a 32
	bit value with the high bit set.

Thu May 30 19:00:19 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (s_lcomm): Set section flags for .sbss section.

	* config/tc-mips.c (mips_64): New static variable.
	(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.

Thu May 30 10:36:19 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (comment_chars): Make '!' a comment character
	for Solaris compatibility.

	* stabs.c (s_stab_generic): Under PowerPC Solaris, convert a
	.stabd with 4 arguments into a .stabn.

Wed May 29 16:43:16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (macro): When passing X_add_number to
	macro_build, cast it to int first.

Tue May 28 13:29:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-z8k.c (md_apply_fix): Handle fx_r_type of 0, as
	created by emit_expr.

	* symbols.c (symbol_create): If bfd_make_empty_symbol fails, call
	as_perror rather than assert.

Fri May 24 18:24:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_ip): Mark sections created to hold
	floating point information as read only.

Fri May 24 12:07:54 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* config/tc-ppc.c (ppc_set_cpu): Change defaults to match AIX.

Thu May 23 17:34:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* read.c (potable): Add .skip as a synonym for .space.

	* stabs.c (s_stab_generic): For PowerPC ELF, allow .stabd to take
	4 arguments, providing the 4th argument is 0, to allow
	compatibility with the Solaris assembler.

Thu May 16 15:51:48 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.h (struct sh_segment_info_type): Define.
	(TC_SEGMENT_INFO_TYPE): Define.
	(sh_frob_label): Declare.
	(tc_frob_label): Define.
	(sh_flush_pending_output): Declare.
	(md_flush_pending_output): Define.
	* config/tc-sh.c (md_assemble): If relaxing, emit a R_SH_CODE
	reloc before the instruction if necessary.
	(sh_frob_label): New function.
	(sh_flush_pending_output): New function.
	(sh_coff_frob_file): Ignore ALIGN, CODE, DATA, and LABEL relocs
	when looking for the reloc for the target of .uses.
	(md_convert_frag): Fix printf format (%0xlx to 0x%lx).
	(sh_force_relocation): Force CODE, DATA, and LABEL relocs to be
	emitted.
	(md_apply_fix): Ignore CODE, DATA, and LABEL relocs.
	(sh_coff_reloc_mangle): Force CODE, DATA, and LABEL relocs to use
	the absolute symbol.

	* subsegs.h (segment_info_type): Add tc_segment_info_data field if
	TC_SEGMENT_INFO_TYPE is defined.

Wed May 15 12:23:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.c (md_assemble): Make sure the opcode suffix
	matches the register size.

Wed May 15 08:33:37 1996  Jeffrey A Law  (law@cygnus.com)

	* config/obj-coff.c (count_entries_in_chain): Ignore Fixups with
	fx_done set.
	(do_relocs_for): Likewise.
	(fixup_segment): Don't just quit if linkrelax is set.  Try to
	apply non pc-relative sym1-sym2 fixups, even if linkrelax is
	nonzero.

Fri May 10 14:16:59 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_validate_fix): Allow GOT and section
	relative relocations with -mrelocatable.  Also allow unfixed
	relocs in .ex_shared.

Tue May  7 11:24:10 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (yank_symbols): Check that FNAME_OFFSET is
	non-zero before assuming this is a long file name.
	(w_strings): Likewise.
	(c_dot_file_symbol): Set FNAME_OFFSET to 1 for a long file name.

	* config/obj-coff.c (w_strings): Move declaration of i inside
	#ifdef block which uses it.

Tue May  7 00:49:58 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-h8300.c (do_a_fix_imm): Rename last argument to
	"relaxmode".  Output relocs which identify various relaxing
	possibilities for mov.[bwl] instructions.
	(build_bytes): Pass in a relaxing mode to do_a_fix_imm.

Mon May  6 15:26:28 1996  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-arm.h (TC_HANDLES_FX_DONE): Define.
	(MD_APPLY_FIX3): Define.
	* config/tc-arm.c (my_get_expression): Only watch for bad segments
	if OBJ_AOUT.
	(md_apply_fix3): Renamed from md_apply_fix.
	If pcrel reloc and symbol is in different section, undo effects
	of md_pcrel_from.

Sat May  4 12:49:35 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (hppa_fix_adjustable): Don't adjust
	any reloc with an LR% or RR% field selector for SOM.

Sat May  4 11:26:19 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in: Add subsegs.h to appropriate TARG_CPU_DEP_*
	variables.

Fri May  3 17:58:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (coff_frob_symbol): Don't merge a symbol with
	SF_GET_STATICS set.
	(yank_symbols): Likewise.

Wed May  1 13:38:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* subsegs.h (segment_info_type): If MANY_SEGMENTS and not
	BFD_ASSEMBLER, add name field.
	* config/obj-coff.c: Include "libiberty.h".
	(coff_header_append): Handle long section names.
	(crawl_symbols): Just use the name field for the symbol name,
	without worrying about null byte termination.
	(w_strings): Handle long section names.
	(write_object_file): Likewise.  Also, use the name field, rather
	than scnhdr.s_name.
	(obj_coff_add_segment): Permit long section names.
	(obj_coff_init_stab_section): Use the name field, rather than
	scnhdr.s_name.
	(adjust_stab_section): Likewise.
	* config/te-pe.h (COFF_LONG_SECTION_NAMES): Define.

	* config/tc-i960.c (brtab_emit): Don't set fx_im_disp field.
	(mem_fmt): Likewise.
	(md_apply_fix): Don't check fx_im_disp field.

Thu Apr 25 11:39:51 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add * after sparc*-*-vxworks.
	* configure: Rebuild.

	* app.c (do_scrub_begin): If tc_comment_chars is not defined,
	define it to comment_chars.  Use tc_comment_chars rather than
	comment_chars.
	(do_scrub_chars): Use tc_comment_chars rather than comment_chars.
	* config/tc-m68k.h (tc_comment_chars): Define.
	(m68k_comment_chars): Declare.
	* config/tc-m68k.c (m68k_comment_chars): Rename from
	comment_chars.  Change into a pointer rather than an array.
	(md_longopts): Add "bitwise-or".
	(md_parse_option): Handle OPTION_BITWISE_OR.
	(md_show_usage): Mention --bitwise-or.
	* doc/c-m68k.texi: Document --bitwise-or.

Wed Apr 24 11:28:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Prevent attempts to use long offsets
	in 68000 mode.

	* config/obj-coff.c (obj_coff_section): BFD_ASSEMBLER version:
	call demand_empty_rest_of_line.  Non BFD_ASSEMBLER version:
	correct handling of input line pointer, and call
	demand_empty_rest_of_line.

Mon Apr 22 18:02:37 1996  Doug Evans  <dje@blues.cygnus.com>

	* config/tc-sparc.c (in_bitfield_range): New static function.
	(sparc_ip): New cases X,Y.  Use SPARC_OPCODE_ARCH_V9_P.
	(md_apply_fix, cases BFD_RELOC_32_PCREL_S2,
	BFD_RELOC_SPARC_{WDISP16,WDISP19}): Fix undefined code.
	(md_apply_fix): New cases BFD_RELOC_SPARC_[56].
	(tc_gen_reloc): New cases BFD_RELOC_SPARC_[56].

Thu Apr 18 18:58:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c: BFD_ASSEMBLER:
	(coff_last_bf): New static variable.
	(coff_frob_symbol): Set endndx of a .bf symbol.
	Non BFD_ASSEMBLER:
	(obj_coff_endef): Call SF_SET_PROCESS on a .bf symbol.
	(last_bfP): New static variable.
	(yank_symbols): Set endndx of a .bf symbol.

Thu Apr 18 11:53:58 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (md_parse_option): Add support for Solaris's -le
	and -s options.  Add -be for good measure.

Wed Apr 17 12:31:01 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (s_space): Support non-constant fill value.  Handle fill
	value correctly for a size other than 1.

Tue Apr 16 15:17:40 1996  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-arm.c (my_get_float_expression): Update call to
	gen_to_words, X_PRECISION changed from 6 to 5.

Tue Apr 16 10:25:42 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (register_name,reg_name_search): Move register
	name lookup from PE specific code to all targets.  Add support for
	-mregnames/-mno-regnames to control whether register names are
	expanded or not.
	(md_assemble): Call register_name for all platforms.
	(md_parse_option): Add support for -mregnames/-mno-regnames.

	* configure.in (powerpcle*-*-solaris): Add support.
	(powerpc*-*-linux): Ditto.
	* configure: Regenerate.

	* config/ppc-sol.mt: New config file for PowerPC Solaris.

Mon Apr 15 12:26:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_frob_file): Permit multiple %hi relocs to
	be associated with a single %lo reloc.

	* config/tc-mips.c (load_address): Cast X_add_number to valueT
	before comparing against MAX_GPREL_OFFSET, so that negative
	numbers are handled correctly.
	(macro): Likewise.

Thu Apr 11 12:39:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sparc.c (last_insn): New static variable.
	(md_assemble): Warn about putting floating point branches in a
	delay slot.  If architecture is less than v9, insert NOP
	instructions between floating point instructions and floating
	point branches.  (The SunOS assembler does both these operations.)
	Save the last instruction opcode.
	(sparc_ip): Add pinsn parameter.  Change caller.

	* config/tc-m68k.c (md_estimate_size_before_relax): Correct check
	for byte jump to next instruction to skip empty frags.

Wed Apr 10 16:48:12 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-alpha.c (alpha_ip): If we are going to call emit_add64
	for addq with a 16 bit signed value, just emit a lda instruction
	instead.

Wed Apr 10 14:34:49 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-h8300.c (do_a_fix_imm): Don't cut off high bits
	of a 32bit operand.

Mon Apr  8 14:42:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Permit --enable-shared to specify a list of
	directories.
	* configure: Rebuild.

Fri Apr  5 17:01:35 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-h8300.c (get_specific): Remove some #if 0 code.
	(build_bytes): Remove all ABSMOV related code; it's unnecessary.

Fri Apr  5 15:13:10 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/atof-ieee.c: Fix handling of denormalized extended
	precision numbers and overflow/underflow detection.
	(MAX_PRECISION, X_PRECISION, P_PRECISION): Changed from 6 to 5, to
	not include the 16 bit gap in the m68k extended precision format.

Fri Apr  5 14:29:23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add i386-*-freebsdelf* target; from John Polstra
	<jdp@polstra.com>.
	* configure: Rebuild.

Fri Apr  5 18:39:28 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-mips.c: Allow non-zero offsets from .sdata symbols to
	be accessed using the $gp register.
	* config/tc-mips.h (MAX_GPREL_OFFSET): Added.

Wed Apr  3 10:56:14 1996  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-sparc.c (sparc_md_end): Set bfd machine number to
	bfd_mach_sparc_sparclet if current_architecture is sparclet.

Mon Apr  1 16:55:44 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (get_line_sb): Bump line counters based on
	input_line_pointer[-1], not *input_line_pointer.  Don't bother to
	call LISTING_NEWLINE.
	(s_macro): Don't call demand_empty_rest_of_line.
	* app.c (do_scrub_chars): When handling C style comments, unget
	ch2 rather than ch.

Fri Mar 29 16:15:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.h (enum linkonce_type): Define.
	(s_linkonce): Declare.
	* read.c (potable): Add "linkonce".
	(s_linkonce): New function.
	* subsegs.h (segment_info_type): Add linkonce field to
	MANY_SEGMENTS && ! BFD_ASSEMBLER section.
	* config/obj-coff.h (obj_handle_link_once): Define if TE_PE.
	(obj_coff_pe_handle_link_once): Declare if TE_PE.
	* config/obj-coff.c: If TE_PE and not BFD_ASSEMBLER, #include
	"coff/pe.h".
	(obj_coff_pe_handle_link_once): New function, defined if TE_PE.
	(c_section_symbol): If TE_PE, set the x_comdat field in the aux
	entry based on the linkonce field in segment_info.
	* doc/as.texinfo: Document .linkonce.

Fri Mar 29 11:31:27 1996  J.T. Conklin  (jtc@lisa.cygnus.com)

	* doc/as.1: Changed to be recognized by catman -w on Solaris.

Thu Mar 28 15:27:47 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (s_stab_generic): Call the listing functions before
	doing the rest of the processing, which may involve freeing the
	string.  Pass string, not string + stroff, to OBJ_PROCESS_STAB in
	SEPARATE_STAB_SECTIONS case.

	* config/tc-hppa.c: Remove nested comment.
	(tc_gen_reloc): Move label done inside the ifdef in which it is
	used.
	(md_apply_fix): Pass pointers to correct types to libhppa.h
	functions.  Always return a value.

	* config/tc-mips.h (tc_frob_file): Define.
	(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.

Thu Mar 28 11:47:59 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure.in (sparc-*-solaris2*): Renamed from sparc*-*-solaris2*.
	* configure: Regenerated.

Tue Mar 26 18:19:12 1996  Ian Lance Taylor  <ian@cygnus.com>

	* as.c (main): Call bfd_set_error_program_name.

Fri Mar 22 11:13:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* as.h (strdup): Don't declare.
	* stabs.c: Include libiberty.h
	(get_stab_string_offset): Use xstrdup rather than strdup.
	(s_stab_generic): Likewise.
	* as.c (parse_args): Likewise.
	* read.c (s_mri_sect): Likewise.

	* gasp.c (change_base): Recognize \(...) construct documented to
	pass through enclosed characters literally through to the output.
	(process_assigns): Likewise.  Also, be more careful to avoid
	looking past the end of the buffer.

Thu Mar 21 13:18:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.c (md_parse_option): If OBJ_ELF, ignore -k for
	FreeBSD compatibility.  From John Polstra <jdp@polstra.com>.

Wed Mar 20 18:13:32 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* doc/as.texinfo, doc/c-i960.texi: Fix typos.

Wed Mar 20 17:05:16 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* config/alpha-opcode.h: Added cvtst instruction.

Mon Mar 18 13:12:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (ecoff_stab): Don't try to make a symbol out of the stab
	string.  Extract the addend from the result of expression.

Fri Mar 15 17:10:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* app.c (do_scrub_chars): If whitespace is seen in state 11, and
	LABELS_WITHOUT_COLONS is not defined, and we are not in m68k MRI
	mode, change the state to 3 rather than 1.

Thu Mar 14 18:18:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.h (C_REGISTER_SECTION): Change from 20 to 50, to
	correspond to 11 March change.

Thu Mar 14 15:27:10 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-h8300.c (build_bytes, MEMIND case): Generate
	an R_MEM_INDIRECT reloc rather than R_RELBYTE.

Tue Mar 12 12:21:10 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Rebuild with autoconf 2.8.

Mon Mar 11 18:57:12 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/atof-ieee.c (gen_to_words): Improve handling of
	X_PRECISION numbers.  Based on patches from Andreas Schwab
	<schwab@issan.informatik.uni-dortmund.de>.

Mon Mar 11 09:59:53 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* as.h (SEG_NORMAL, SEG_LIST): Bump segment limit from 10 to 40.
	(SEG_LAST): New.
	* subsegs.c (MANY_SEGMENTS): Increase segment limit.
	* config/obj-coff.c (seg_N_TYPE, seg_info_off_by_4): Likewise.
	(do_relocs_for, w_symbols, obj_coff_add_segment, do_linenos_for,
	crawl_symbols, coff_header_append): Loop to SEG_LAST rather than
	SEG_E9.

Thu Mar  7 15:17:39 1996  Doug Evans  <dje@charmed.cygnus.com>

	* config/tc-sparc.c (sparc_ip): Handle operand char 'O' (neg reg).

Thu Mar  7 09:19:15 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (SUBSEG_MILLI): Define.
	(pa_def_subspaces): Add $MILLICODE$.
	(pa_spaces_begin): Set section flags for $MILLICODE$.

Wed Mar  6 14:11:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-elf.c (obj_elf_section): Only SEC_LOAD if the type is
	not SHT_NOBITS.  Don't tamper with flags based on type if a
	special section was found (revert Feb 29 change).

	* config/tc-sh.c (sh_do_align): Only align using the nop pattern
	if aligning to a longword boundary or greater.

Tue Mar  5 15:10:43 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* config/tc-sh.c (sh_do_align): Pass 1 not 2 to frag_align.

Mon Mar  4 20:50:57 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* configure.in (i386-*-cygwin32): Don't use bfd_gas.
	* configure: Regenerated.

Mon Mar  4 10:13:06 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c: Add default definitions for R_N0SEL and
	R_N1SEL since they're not defined for old versions of hpux.

	* config/tc-hppa.c (tc_gen_reloc): Fix typo in R_COMP2 code.
	Set "sym_ptr_ptr" and "addend" fields to dummy values for
	R_N0SEL and R_N1SEL.

Fri Mar  1 10:20:52 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* flonum-konst.c: Add two more constants for 1e+-2048 and
	1e+-4096, and correct the other constants.

	* symbols.c (resolve_symbol_value): Handle O_logical_not.

Thu Feb 29 13:58:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/obj-elf.c (obj_elf_section): Allow predefined section
	types to set the nobits type.  Avoid a shadowed declaration.

Wed Feb 28 15:38:56 1996  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (hppa_fix_adjustable): For SOM, don't
	reduce relocs using e_nlrsel field selectors.

	* write.c (fix_new_exp): Don't use #elif.  Some compilers
	don't handle it.

	* config/tc-hppa.c (selector_table): Add "n", "nl", and "nlr" to
	the selector table.
	(pa_chk_field_selector): Handle new field selectors for SOM.

Tue Feb 27 14:42:27 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in (m68k-*-linux*aout*, m68k-*-linux*): New targets.
	* configure: Rebuild.
	* config/te-linux.h (LOCAL_LABELS_FB): Define.
	* config/tc-m68k.h (TARGET_FORMAT) [TE_LINUX]: Define to
	"a.out-m68k-linux".
	* config/tc-m68k.c (comment_chars): Don't include '#' if TE_LINUX
	is defined.

Mon Feb 26 18:58:58 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Update to handle shared library support.

Mon Feb 26 10:34:10 1996  Doug Evans  <dje@charmed.cygnus.com>

	* config/tc-sparc.c (sparc_ip): Print all architectures that support
	the insn on mismatch.

Fri Feb 23 21:44:39 1996  Rob Savoye  <rob@chinadoll.cygnus.com>

	* configure.in: Add support for a29-coff.
	* configure: Rebuild.

Thu Feb 22 16:39:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.c (sh_coff_frob_file): Don't consider the address
	of the section when looking for the R_SH_USES fixup, because the
	frag addresses have not yet been adjusted.

	* gdbinit.in: Set a breakpoint on as_warn_where.

	* config/tc-mips.c (macro): Add missing arguments to macro_build
	omitted in last change.  From Jim Wilson <wilson@cygnus.com>.

Wed Feb 21 17:00:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-h8300.c (tc_reloc_mangle): Change reloc based on size
	if it is TC_CONS_RELOC.  Set a size of 4 to R_RELLONG.

Wed Feb 21 09:25:39 1996  Doug Evans  <dje@charmed.cygnus.com>

	* config/tc-sparc.c (sparc_ip): Recognize %asr0 for v8.

Tue Feb 20 21:48:03 1996  Doug Evans  <dje@charmed.cygnus.com>

	* config/tc-sparc.c (parse_keyword_arg): Accept leading '%'.
	(sparc_ip): Accept %asr[1..31] for v8 and %asr[%16..31] for v9.
	Recognize [uU] format args as sparclet cpregs.

Tue Feb 20 22:25:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.c (sh_handle_align): Don't emit R_SH_ALIGN relocs
	in bss_section.

Mon Feb 19 14:16:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sparc.h (TC_RELOC_RTSYM_LOC_FIXUP): Check S_IS_WEAK as
	well as S_IS_EXTERNAL.
	(tc_fix_adjustable): Likewise.
	* config/tc-sparc.c (md_apply_fix): In OBJ_ELF case, check for
	S_IS_WEAK as well as S_IS_EXTERNAL when deciding whether to return
	early.
	(tc_gen_reloc): Check S_IS_WEAK as wel as S_IS_EXTERNAL when
	deciding whether to convert BFD_RELOC_32_PCREL_S2 if PIC.

Mon Feb 19 02:15:57 1996  Doug Evans  <dje@charmed.cygnus.com>

	* config/tc-sparc.c (max_architecture): Change to sparclite for
	32 bit arch.
	(default_compatible): Delete.
	(sparc_ffs): New function.
	(md_begin): Only call SPARC_OPCODE_CONFLICT_P once.
	(sparc_ip): Rewrite architecture match and bump logic.

Sun Feb 18 15:03:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Check for 'do not mix' from native linker before
	trying to use -rpath.
	* configure: Rebuild.

Fri Feb 16 16:53:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.h (SF_ADJ_LNNOPTR): Define (non BFD_ASSEMBLER).
	(SF_GET_ADJ_LNNOPTR): Define (non BFD_ASSEMBLER).
	(SF_SET_ADJ_LNNOPTR): Define (non BFD_ASSEMBLER).
	* config/obj-coff.c (obj_coff_endef): Set ADJ_LNNOPTR when LNNOPTR
	is set.
	(w_symbols): If ADJ_LNNOPTR is set, add the section lnnoptr field
	to the symbol lnnoptr field, to get the correct file offset.

Thu Feb 15 14:48:38 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/obj-elf.c (elf_frob_symbol): On the PowerPC, force all
	symbols that are not function, file, or section symbols to be
	object types.

Thu Feb 15 11:20:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Set and substitute RPATH_ENVVAR.
	* configure: Rebuild.
	* Makefile.in (RPATH_ENVVAR): New variable.
	(check): Use $(RPATH_ENVVAR) rather than LD_LIBRARY_PATH.

	* configure.in: Accept i686.  From H.J. Lu <hjl@zoom.com>: i386
	doesn't need opcodes.  If configuring shared, opcodes needs bfd.
	* configure: Rebuild.

Wed Feb 14 16:33:12 1996  Martin Anantharaman  <martin@mail.imech.uni-duisburg.de>

	* read.c (s_mri_sect): Don't return '\0' in type.  Set all
	appropriate flags in BFD section.

	* configure.in (m68k-*-psos*): New target.
	* configure: Rebuild.
	* config/te-psos.h: New file.
	* config/tc-m68k.c (comment_chars): Don't include '#' if TE_PSOS
	is defined.

Wed Feb 14 13:43:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	From Alan Modra <alan@spri.levels.unisa.edu.au>:
	* configure.in: Remove duplicate setting of cpu_type.  Check
	whether opcodes library is required for on all targets, not just
	primary one.
	* configure: Rebuild.

	* config/tc-mips.c (mips_big_got): New static variable.
	(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.

Wed Feb 14 11:22:27 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/tc-m68k.c (m68k_ip) [operand kind '#']: When fixing
	the byte relocation, point it to the low byte of the word.

Tue Feb 13 15:31:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Set HDLFLAGS for *-*-hpux with --enable-shared.
	* configure: Rebuild.

Mon Feb 12 15:53:46 1996  Doug Evans  <dje@charmed.cygnus.com>

	* configure.in: Recognize any sparc* cpu.
	* configure: Regenerated.

Mon Feb 12 15:41:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (potable): Add "mri" and ".mri".
	(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.

	* app.c (do_scrub_chars): In MRI mode, don't treat '#' as a
	comment character.

Mon Feb 12 15:16:29 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	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)'.

Mon Feb 12 10:07:33 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* ecoff.c (ecoff_directive_weakext): Fixed so that whitespace
	*really* is permissible before the comma.

Mon Feb 12 00:12:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.c (sh_do_align): Align to a 2 byte boundary before
	inserting nop instructions.

Fri Feb  9 10:54:19 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/te-aux.h: Change include of aux.h to aux-coff.h.

Thu Feb  8 20:02:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i960.c (tc_coff_symbol_emit_hook): Correct storage
	class setting for a CALLNAME symbol in COFF.

	* read.c (potable): Pass negative numbers for new .balign[wl] and
	.p2align[wl] pseudo-ops.
	(s_align_bytes): Treat a negative argument as specifying the fill
	length.
	(s_align_ptwo): Likewise.

Wed Feb  7 14:12:03 1996  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (potable): Add balignw, balignl, p2alignw, and p2alignl.
	(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.

	* config/tc-sh.h (sh_do_align): Declare.
	(md_do_align): Define.
	* config/tc-sh.c (sh_do_align): New function.

	* ecoff.c (ecoff_build_lineno): Don't try to store the address
	difference if the next address is before the current one.

	* config/tc-m68k.c (struct m68k_cpu): Add alias field.
	(archs): Initialize new field.
	(m68k_ip): Don't list alias names when listing CPUs which support
	an instruction.

	* as.c (main): Call parse_args before read_begin.
	* 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.

	* configure.in: Check for --enable-shared.  If linking against
	shared BFD and opcodes, fix library name on SunOS, and try to set
	-rpath reasonably.
	* configure: Rebuild.

Tue Feb  6 15:16:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* as.h (flag_m68k_mri): Declare.
	* as.c (parse_args): If TC_M68K, set flag_m68k_mri for -M.
	* Many files: For MRI syntax that is specific to the m68k MRI
	assembler, check flag_m68k_mri rather than flag_mri or
	MRI_MODE_NEEDS_PSEUDO_DOT.

Mon Feb  5 16:29:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i960.c (ARCH_HX): Define.
	(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.

	Support for building bfd and opcodes as shared libraries, based on
	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.

Fri Feb  2 17:41:53 1996  Michael Meissner  <meissner@wogglebug.tiac.net>

	* config/tc-ppc.h (ELF_TC_SPECIAL_SECTIONS): Make .sdata2, .sbss2,
	.PPC.EMB.sdata0, and .PPC.EMB.sbss0 sections all default to
	read-only, not read/write.

Fri Feb  2 14:09:25 1996  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* Makefile.in (INSTALL_XFORM): Remove -e.

Fri Feb  2 12:32:15 1996  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (write_relocs): Use S_IS_DEFINED and S_IS_COMMON rather
	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.

Thu Feb  1 15:34:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-aout.h (S_IS_LOCAL): Check for \002 as well as \001.
	* config/obj-bout.h (S_IS_LOCAL): Likewise.

	* configure.in: Make sure we only add m68k-parse.o to
	${extra_objects} once, no matter how many m68k targets have been
	enabled.
	* configure: Rebuild.

Wed Jan 31 18:31:46 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* configure.in (i386-*-cygwin32, ppc-*-cygwin32): New.
	* configure: Rebuild.

Wed Jan 31 14:03:17 1996  Richard Henderson  <rth@tamu.edu>

	* config/tc-m68k.c (md_pseudo_table): Add "extend" and "ldouble".
	* doc/c-m68k.texi: Document .extend and .ldouble.

	* 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.

Wed Jan 31 12:24:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.h (S_IS_LOCAL): Check for \002 as well as \001.

	* config/tc-mips.c (s_mips_globl): Set BSF_OBJECT if it is not
	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.

Tue Jan 30 12:35:24 1996  Ken Raeburn  <raeburn@cygnus.com>

	* config/tc-i960.c (parse_memop): In MRI mode, don't use implicit
	scaling of index.

	* expr.c (operand): Accept 0x hex constants in MRI mode if not on
	m68k.

Mon Jan 29 12:21:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-elf.c (obj_elf_type): Set BSF_OBJECT flag for a type
	of object.  From Ronald F. Guilmette <rfg@monkeys.com>.

	* ecoff.c (localsym_t): Add addend field.
	(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.

Fri Jan 26 19:28:52 1996  Kim Knuttila  <krk@cygnus.com>

	* config/tc-ppc.c (md_assemble): Ignore overflow on
	BFD_RELOC_16_GOTOFF and BFD_RELOC_PPC_TOC16.

Fri Jan 26 16:14:17 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (md_apply_fix3): SDA21 relocations are now 4
	bytes in size, so offset appropriately in big endian mode when
	writing the bottom 2 bytes.

Thu Jan 25 20:26:23 1996  Doug Evans  <dje@charmed.cygnus.com>

	* config/tc-sparc.c (default_compatible): New static local.
	(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.

Thu Jan 25 12:21:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	SCO ELF support from Robert Lipe <robertl@arnet.com>:
	* 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.

Thu Jan 25 03:10:53 1996  Doug Evans  <dje@charmed.cygnus.com>

	* config/tc-sparc.c (initial_architecture,can_bump_v9_p): Deleted.
	({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.

Wed Jan 24 22:11:03 1996  Doug Evans  <dje@charmed.cygnus.com>

	* Makefile.in (RUNTEST): Fix reference to $${srcdir}.

Mon Jan 22 09:21:36 1996  Doug Evans  <dje@charmed.cygnus.com>

	* config/tc-sparc.h (TARGET_FORMAT): Use #ifdef SPARC_ARCH64 instead of
	#ifdef sparcv9 when choosing value.
	(ENV64): Delete.
	(md_end): Define.
	(sparc_md_end): Declare.
	* config/tc-sparc.c (SPARC_V9): Renamed from sparcv9.
	(initial_architecture): New static local.
	(can_bump_v9_p): Likewise.
	(NO_V9): Delete all occurrences.
	(sparc_md_end): New function.
	(sparc_ip): New local v9_arg_p.  Rework fp reg number test.
	Don't bump architecture to v9 unless can_bump_v9_p set.
	(md_parse_option): -A<arch> passed, set can_bump_v9_p accordingly.
	* configure.in (sparc64 target cpu): Don't set obj_format here.
	(SPARC_V9): Renamed from sparcv9.
	(sparc64-*-elf*): Define SPARC_ARCH64.
	* configure: Regenerated.
	* acconfig.h (SPARC_V9): Renamed from sparcv9.
	(SPARC_ARCH64): Add.
	* conf.in: Regenerated.
	* config/vmsconf.h: Update.

Mon Jan 22 17:24:47 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/tc-mips.c (load_register): Optimise "dli" loads.
	(md_show_usage): add "-mcpu=vr4100" to help text.

Mon Jan 22 11:53:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* symbols.c (resolve_symbol_value): If a symbol is equated to an
	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.

	* config/tc-ppc.c (ppc_csect): An unnamed csect is storage class
	XMC_PR.

Mon Jan 22 10:59:48 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/obj-elf.c (elf/ppc.h): Include elf/ppc.h if target
	computer is PowerPC.

	* config/tc-ppc.c (md_apply_fix3): Add more embedded relocations.

	* config/tc-ppc.h (ELF_TC_SPECIAL_SECTIONS): Add sections
	mentioned in the eabi.

Thu Jan 18 17:58:19 1996  Kim Knuttila  <krk@cygnus.com>

	* config/tc-ppc.c (ppc_reldata): Changed alignement on reldata_section
	* config/tc-ppc.c (ppc_pdata): Changed the alignment on pdata_section

Mon Jan 15 17:43:42 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (mapping): Add more relocation suffixes.

Sun Jan 14 21:29:36 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_validate_fix): Allow .gcc_except_table
	as a section it is ok to have unadorned -mrelocatable pointers in.

Sat Jan 13 11:09:08 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_section*): Wrap these functions inside
	#ifdef OBJ_ELF.

Fri Jan 12 15:32:07 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/obj-elf.c (obj_elf_section): Add hooks so machine
	dependent section attributes can be handled.

	* config/tc-ppc.h: (md_elf_section_{letter,type,word,flags}): New
	macros to add support for exclude section flag and ordered section
	type.

	* config/tc-ppc.c (ppc_elf_section_{letter,type,word,flags}): New
	functions to add support for exclude section flag and ordered
	section type.

Fri Jan 12 12:04:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* subsegs.c (section_symbol): Don't try to look up the section
	symbol in the hash table.  It should be possible to have a symbol
	with the same name as a section, but no connection to it.

	* read.c (cons_worker): Only call mri_comment_end from flag_mri.
	From James Carlson <carlson@xylogics.com>.

	* expr.c (operand): Skip whitespace after a close parenthesis.
	From James Carlson <carlson@xylogics.com>.

Tue Jan  2 12:43:23 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* config/tc-sh.c (md_apply_fix): Call as_bad_where instead of
	as_warn_where for relocation overflow.
	(parse_reg): Accept register name only if next character is
	not alphanumeric.

For older changes see ChangeLog-9295

Copyright (C) 1996-1997 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
