Sat Dec 30 23:42:51 1995  Jeffrey A Law  (law@cygnus.com)

	* ecoff.c (ecoff_stab): Simplify.  Correctly handle sym + offset
	addresses for static variables.

Thu Dec 21 12:54:32 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (mapping): Make @got give a real GOT relocation,
	and xgot give the old toc16 relocation.
	(md_apply_fix3): Support all GOT relocations.

Wed Dec 20 14:57:17 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (load_address): Correctly handle a constant in
	SVR4_PIC case.  From Richard Kenner <kenner@vlsi1.ultra.nyu.edu>.

Fri Dec 15 14:25:07 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config/tc-sh.c (parse_reg): Recognize SH3 registers.
	(get_specific): Handle A_SSR, A_SPC and A_REG_B.
	(build_Mbytes): Handle REG_B.

Fri Dec 15 16:07:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (ecoff_build_aux): Use new bfd_big_endian macro.

Fri Dec 15 12:11:48 1995  Raymond Jou  <rjou@mexican.cygnus.com>

	* mpw-make.sed: If linking, edit ALL_CFLAGS to CFLAGS.

Thu Dec 14 15:09:52 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (write_object_file): Set the s_align field to
	the number of bytes, rather than to the power of 2.

Tue Dec 12 12:19:37 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (DISTCLEAN_HERE): New variable.
	(distclean): Use it.
	(maintainer-clean): Depend upon clean-here rather than clean,
	distclean, and clean-info.  Run make maintainer-clean in doc.
	Remove files listed in DISTCLEAN_HERE.
	* doc/Makefile.in (maintainer-clean realclean): Split out from
	distclean.  Depend upon clean-info and distclean.

Mon Dec 11 16:23:51 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mac-as.r: Fix copyright and version strings.
	(cfrg): Use PROG_NAME instead of literal name.

Mon Dec 11 14:14:08 1995  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (read_a_source_file): If tc_unrecognized_line is defined,
	call it.
	* config/tc-a29k.h (tc_unrecognized_line): Define.
	* config/tc-a29k.c (a29k_unrecognized_line): New function.
	(md_operand): Handle a29k style local dollar labels.

Wed Dec  6 17:52:52 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-multi.h: If OBJ_MAYBE_ELF, define OBJ_SYMFIELD_TYPE.

Tue Dec  5 13:26:34 1995  Ken Raeburn  <raeburn@cygnus.com>

	* read.c (s_fill): If md_flush_pending_output is defined, call
	it.

Mon Dec  4 15:10:53 1995  Ken Raeburn  <raeburn@cygnus.com>

	* config/obj-coff.c (size_section, fill_section, fixup_mdeps):
	Treat rs_align_code like rs_align.

Sun Dec  3 16:46:54 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* config/tc-arm.c (cp_address_required_here): Set pre_inc when
	converting an absolute address into a PC-relative one.

Fri Dec  1 11:57:56 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Don't always use te-generic.h for emulation.
	(powerpc-apple-macos): Use emulation te-macos.h.
	* mpw-make.sed (install, install-only): Edit in Mac-specific
	install procedure.

Fri Dec  1 10:59:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Improve message about unsupported ELF targets.
	* configure: Rebuild.

	* config/tc-m88k.c (m88k_do_align): Correct check for whether fill
	pattern is zero.  From Manfred Hollstein.

Thu Nov 30 13:25:49 1995  Kim Knuttila  <krk@cygnus.com>

	* config/tc-ppc.c (ppc_pe_section): To get the alignment right for
	the various idata sections, we check the name on the .section pseudo.

Thu Nov 30 11:23:42 1995  Manfred Hollstein KS/EF4A 60/1F/110 #40283  <manfred@lts.sel.alcatel.de>

	* config/obj-coff.c (fixup_segment): If TC_M88K is defined, do not
	add section's paddr to add_number; compatibility to native as and
	ld forbids.

Wed Nov 29 23:14:27 1995  Ken Raeburn  <raeburn@cygnus.com>

	* configure.in: Treat m68k-sysv4 like m68k-elf, not m68k-sysv3.

	* hash.c (struct hash_entry): Moved here...
	* hash.h (struct hash_entry): ...from here.

	* config/obj-elf.c (elf_frob_symbol): Don't free and clear sy_obj
	if it's already known to be null.

Wed Nov 29 13:00:20 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (md_apply_fix3): Don't adjust the value for 32
	bit relocs converted to PC relative relocs.  This turned out to
	add the offset from the beginning of .text twice.

Tue Nov 28 10:42:36 1995  Ken Raeburn  <raeburn@cygnus.com>

	* stabs.c (s_stab_generic): In 's' case, free string from
	obstack.

	* config/obj-elf.h (ELF_TARGET_SYMBOL_FIELDS): Remove unused field
	sy_name_offset.
	* config/obj-multi.h (ELF_TARGET_SYMBOL_FIELDS) [OBJ_MAYBE_ELF]:
	Ditto.

	* subsegs.h (segment_info_type): Make bitfields unsigned.

	* expr.h (struct expressionS): Make X_op and X_unsigned bitfields,
	and move them together.  On most systems this will reduce the
	structure size by one word.
	(operatorT): Define O_max.
	* expr.c (expr_begin): Verify that X_op is wide enough to hold
	O_max.

	* read.c (pop_insert): Print error returned by hash table
	insertion code.

	* as.c (dump_statistics): Split out from main; dump some hash
	table stats and target-specific stats.
	(start_time): No longer automatic to main.
	(main): Set file-level start_time and call dump_statistics at
	exit.  Exit by calling xexit.
	(show_usage): Make --statistics description less specific.
	* subsegs.c (subsegs_print_statistics): New function.
	* write.c (write_print_statistics): New function.
	(n_fixups): New static variable.
	(fix_new_internal): Increment it.
	* read.c (read_print_statistics): New function.
	* read.h (read_print_statistics): Declare.
	* symbols.c (symbol_print_statistics): New function.
	* symbols.h (symbol_print_statistics): Declare.
	* hash.c (hash_print_statistics): New function.
	* hash.h (hash_print_statistics): Declare.
	* config/tc-i386.c (i386_print_statistics): New function.
	* config/tc-i386.h (i386_print_statistics): Declare.
	(tc_print_statistics): New macro.
	* messages.c (as_fatal, as_assert, as_abort): Use xexit, not
	exit.

	* hash.c (DELETED): Rewrite to use a valid but unique address.
	(START_POWER): Reduce to 10.
	(enum stat_enum): New enumerator, replacing STAT_* index macros.
	Add new values for counting strcmp calls.
	(GROW_FACTOR): New macro.
	(hash_grow): Use GROW_FACTOR.  Rewrite for quick returns instead
	of nesting blocks.
	(FULL_VALUE): New macro.  Use 1/4 of table size instead of 1/2.
	(hash_new): Use FULL_VALUE.
	(struct hash_control): Definition moved here.
	(hash_code): Don't mask to low bits.
	(hash_ask): Mask returned hash code here.  Check hash value before
	calling strcmp; count strcmp calls.
	* hash.h (struct hash_control): Declare, don't define, here.
	(HASH_STATLENGTH): Deleted.
	(struct hash_entry): Add field for hash code.
	(hash_say, hash_apply): Don't declare.

	* hash.c (destroy): Return void.
	(applicatee): Ditto.
	(main): Fix declarations.
	(hash_apply): Return void.  Argument `function' returns void.  Put
	inside "#ifdef TEST".
	(hash_say): Define only if TEST is defined.
	* hash.h (hash_apply, hash_say): Declarations deleted.

Mon Nov 27 13:18:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Rebuild with autoconf 2.7.

Tue Nov 21 18:39:01 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aclocal.m4 (AC_PROG_CC): Remove local definition.
	* configure: Rebuild with autoconf 2.6.

Mon Nov 20 17:26:00 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (ppc_debug_name_section_size): Remove.
	(ppc_stabx): Don't increment ppc_debug_name_section_size.
	(ppc_bc): Likewise.
	(ppc_frob_file): Remove.
	* config/tc-ppc.h (tc_frob_file): Don't define.
	(ppc_frob_file): Don't declare.

Mon Nov 20 13:37:05 1995  Ken Raeburn  <raeburn@cygnus.com>

	* Makefile.in (TARG_CPU_DEP_alpha): Mention alpha-opcode.h.
	* config/alpha-opcode.h: Include one-operand variants of jmp and
	jsr.

	* config/te-delt88.h: Renamed from te-delta88.h, to avoid conflict
	with te-delta.h in 8.3 file systems.
	* configure.in: Adjusted.

Thu Nov 16 12:49:38 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (s_err): Remove; just use the one in read.c.

	* config/m68k-parse.y (yylex): In MRI mode, '@' can start an octal
	number.
	* expr.c (operand): Handle MRI suffixes after unadorned 0.

Thu Nov 16 00:21:44 1995  Ken Raeburn  <raeburn@cygnus.com>

	Version 2.6 released.
	* Makefile.in (VERSION): Updated to 2.6.

	* config/obj-coff.c (write_object_file): Change use of md_do_align
	to pass a pointer rather than a fill value, to match other uses.

Wed Nov 15 03:52:00 1995  Ken Raeburn  <raeburn@cygnus.com>

	* config/tc-ns32k.h (TC_FIX_TYPE): Add missing semicolon.

	* as.c (main): Move md_end call to just after call to
	perform_an_assembly_pass.  Delete cpu-specific code here.
	* config/tc-i960.h (md_end): New macro, calls brtab_emit.
	* config/tc-arm.c (md_end): Unused function deleted.
	* config/tc-ns32k.c (md_end): Ditto.

	* config/tc-i386.c (i386_align_code): New function, moved here
	from HANDLE_ALIGN macro.
	* config/tc-i386.h (HANDLE_ALIGN): Call it.

	Mon Jul 31 14:53:19 1995  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* config/tc-i386.h (md_do_align): cast fill and 0x90 to char
	before comparing

	Mon May  1 10:91:49 1995  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* config/tc-i386.h (md_do_align):  Make ".align n,0x90" generate
	multi-byte nops to avoid changing gcc.  The necessary gcc change
	might break old assemblers.

	Sat Apr 22 20:53:05 1995  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* config/tc-i386.h (md_do_align, HANDLE_ALIGN):  Add macros to
	generate optimal multi-byte nop instructions for ".align n"
	".align n,0x90", and aligns requiring more than 15 bytes of
	padding still generate multiple 0x90's as before.

Mon Nov 13 17:40:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (s_mri_until): Call pop_mri_control.

Mon Nov 13 20:39:06 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.in (ppc-*-macos*, ppc-*-mpw*): New configurations.
	* configure: Update.
	* mpw-make.sed: Reorder commands to make sed happier.
	* config/te-macos.h: New file.
	* config/tc-ppc.h (TARGET_FORMAT): Set correctly for PowerMac.

Sun Nov 12 21:14:56 1995  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (pa_ip): Fix off-by-2 bug in length check for
	conditional branches.
	(md_apply_fix): Likewise.

Thu Nov  9 16:14:01 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-a29k.c (md_apply_fix): Warn if an attempt is made to
	generate a reloc which the linker will not handle correctly.  Fix
	overflow checking--R_IREL is 18 bits, not 17.

Wed Nov  8 19:59:36 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (fixup_segment): Don't subtract md_pcrel_from
	from a PC relative reloc if TC_A29K.

	* config/tc-a29k.c (line_separator_chars): Restore '@'.  Existing
	code depends upon it.

	* config/tc-a29k.c (md_operand): Handle $float, $double, and
	$extend.  Based on code from Eric Freudenthal
	<freudenthal@nyu.edu>.
	* config/tc-a29k.h (LEX_DOLLAR): Define.
	* read.c (LEX_DOLLAR): Define if not defined.
	(lex_type): Use LEX_DOLLAR.

Wed Nov  8 16:38:14 1995  Eric Freudenthal <freudenthal@nyu.edu>

	* configure.in (a29k-nyu-sym1): New target, just like other a29k
	targets.

Wed Nov  8 11:38:48 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (c_dot_file_symbol): Cast xmalloc return.

Tue Nov  7 09:14:35 1995  Kim Knuttila  <krk@cygnus.com>

	* config/tc-ppc.c (md_apply_fix3): Added BFD_RELOC_RVA. Currently
	used only by "dlltool.c".

Mon Nov  6 18:51:26 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-alpha.c: Undefine inline if not __GNUC__.
	(md_pseudo_table): Don't define "extern".

Sat Nov  4 00:51:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (ppc_biei): Force symbol into text_section.

	* config/tc-ppc.c (md_show_usage): Put backslash at end of line.

Fri Nov  3 13:02:59 1995  Ian Lance Taylor  <ian@cygnus.com>

	* macro.c (macro_expand_body): Don't warn about == with a
	nonexistent parameter, in case it is in a comment field.

	* as.c (main): On TC_A29K, call macro_init with macro_alternate
	set to 1.
	* macro.c (get_any_string): Don't keep quotes if macro_strip_at is
	set, even if macro_alternate is set.
	(get_apost_token): If macro_strip_at, only skip kind if it is '@'.
	(sub_actual): If macro_strip_at, and kind is '@', don't look up
	the token unless it ended in '@'.
	* config/tc-a29k.c (line_separator_chars): Remove '@'.
	* doc/c-a29k.texi: Document macro usage on A29K.

Thu Nov  2 23:07:57 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Handle new 'W' place, meaning a
	signed word.
	(install_operand): Likewise.

	* config/obj-elf.c (ecoff_debug_pseudo_table): Add "extern".

Wed Nov  1 15:17:02 1995  Manfred Hollstein KS/EF4A 60/1F/110 #40283  <manfred@lts.sel.alcatel.de>

	* configure.in (m88k-motorola-sysv*): New target.
	* configure: Rebuild.
	* config/te-delta88.h: New file.
	* config/obj-coff.c (write_object_file): Use md_do_align if it is
	defined.
	* config/tc-m88k.h (SUB_SEGMENT_ALIGN): Define.
	(md_do_align): Define.
	* config/tc-m88k.c: Include "subsegs.h".
	(m88k_do_align): New function.

	* config/te-delta.h (STRIP_UNDERSCORE): Don't define.
	(COFF_NOLOAD_PROBLEM): Define.
	(LOCAL_LABELS_DOLLAR, LOCAL_LABELS_FB): Define.

Wed Nov  1 16:07:43 1995  Ken Raeburn  <raeburn@cygnus.com>

	* config/tc-i386.c (md_assemble): For a jump instruction with
	non-constant target, require 7 available bytes in the current
	frag, not 6.

Tue Oct 31 15:37:16 1995  Fred Fish  <fnf@rtl.cygnus.com>

	* config/obj-elf.h: Include bfd/elf-bfd.h rather than
	bfd/libelf.h.

Tue Oct 31 16:34:28 1995  David Mosberger-Tang  <davidm@azstarnet.com>

	* configure.in (alpha-*-linux*): Use ecoff.
	* configure: Rebuild.
	* ecoff.c (ecoff_directive_extern): New function.
	(ecoff_directive_weakext): New function.
	(ecoff_build_symbols): Handle weak symbols.
	(ecoff_setup_ext): Likewise.
	(ecoff_frob_symbol): Warn about weak common symbols.
	* ecoff.h (ecoff_directive_extern): Declare.
	(ecoff_directive_weakext): Declare.
	* symbols.c (S_IS_WEAK): New function.
	* symbols.h (S_IS_WEAK): Declare.
	* config/obj-ecoff.c (obj_pseudo_table): Add "extern" and
	"weakext".
	* config/tc-mips.c (mips_pseudo_table): Remove "extern".
	(s_extern): Remove.

Tue Oct 31 13:29:08 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (ppc_lglobl): Do the right thing.

	* config/tc-ppc.c (ppc_bb): Call SF_SET_PROCESS.
	(ppc_eb): Likewise.  Set the storage class to C_BLOCK, not C_FCN.
	(ppc_frob_symbol): Don't change C_BLOCK symbols to C_HIDEXT.
	* config/obj-coff.c (coff_frob_symbol): Don't call
	SA_SET_SYM_ENDNDX with the current symbol; call it with the next
	one.  If OBJ_XCOFF, try to figure out whether the symbol is going
	to be dropped.

	* config/tc-ppc.c (md_pseudo_table): Add "bc" and "ec".
	(ppc_stab_symbol): New static variable.
	(ppc_change_csect): Check that ppc_toc_csect is not NULL.
	(ppc_stabx): Set ppc_stab_symbol around call to symbol_make.  Set
	sy_tc.real_name to the stab string.
	(ppc_bc, ppc_ec): New static functions.
	(ppc_canonicalize_symbol_name): If ppc_stab_symbol is set, don't
	do anything.
	(ppc_symbol_new_hook): If ppc_stab_symbol is set, don't look for a
	suffix.
	(ppc_frob_symbol): Set BSF_NOT_AT_END for symbols with csect aux
	entries.

	* input-scrub.c (input_scrub_push): Reset sb_index.

Mon Oct 30 17:52:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* listing.c (listing_newline): Don't create a frag in the absolute
	section.

Sat Oct 28 01:02:05 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (md_pseudo_table): Add "data" and "text".
	(ppc_csect): Move most of the code to ppc_change_csect, and call
	it.
	(ppc_change_csect): New static function, taken from ppc_csect.
	(ppc_section): New static function.
	(ppc_saw_abs): New static varable.
	(ppc_frob_symbol): Create aux entry for absolute symbols.  Warn if
	a symbol has no csect.
	(ppc_adjust_symtab): New function.
	* config/tc-ppc.h (tc_adjust_symtab): Define if OBJ_XCOFF.
	(ppc_adjust_symtab): Declare if OBJ_XCOFF.

	* write.c (write_object_file): If tc_adjust_symtab is defined,
	call it just before the call to obj_adjust_symtab.

	* symbols.c (symbol_find_or_make): Change name to be const.
	* symbols.h (symbol_find_or_make): Update declaration.

Thu Oct 26 19:18:27 1995  Ken Raeburn  <raeburn@cygnus.com>

	* doc/as.texinfo (Align): Mention SH.
	* doc/c-m68k.texi (M68K-Directives, .even): Describe behavior, not
	.align value.
	* doc/c-z8k.texi (Z8000 Directives, global): Fix minor typo.
	(Z8000 Directives, even): Don't give numeric align value, instead
	explain behavior.

Thu Oct 26 11:45:03 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* config/tc-arm.c (do_ldst): Assemble ldr/str r0, [r1] as a
	pre-increment instruction.

Wed Oct 25 11:59:24 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* Makefile.in (diststuff):  Also make info.
	(maintainer-clean realclean):  Also make clean-info.

Tue Oct 24 15:21:33 1995  Jeffrey A Law  (law@cygnus.com)

	* config/tc-hppa.c (md_pseudo_table): Add new ".nsubspa" opcode.
	(pa_subspace): For ".nsubspa", always create a new subspace
	with the given attributes, even if one already exists with the
	same name.

Tue Oct 24 14:50:38 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.h (TC_FORCE_RELOCATION_SECTION): Rename from
	TC_FORCE_RELOCATION, taking an additional section argument.  If
	the section of the target symbol is not the same as the current
	section, always force the relocation to be used.
	(MD_PCREL_FROM_SECTION): New macro to call md_pcrel_from_section.

	* config/tc-ppc.c (md_pcrel_from_section): Rename from the
	md_pcrel_from function, taking an additional section argument.
	Invoke TC_FORCE_RELOCATION_SECTION instead of TC_FORCE_RELOCATION.

	* write.c (TC_FORCE_RELOCATION_SECTION): Define in terms of the
	older TC_FORCE_RELOCATION if not defined.
	(MD_PCREL_FROM_SECTION): If not defined, invoke md_pcrel_from.
	(fixup_segment): Use MD_PCREL_FROM_SECTION instead of
	md_pcrel_from, and TC_FORCE_RELOCATION_SECTION instead of
	TC_FORCE_RELOCATION.

Mon Oct 23 16:20:04 1995  Ken Raeburn  <raeburn@cygnus.com>

	* input-scrub.c (as_where): Set name to null pointer if we don't
	have a file name.
	* messages.c (identify): Only print filename if non-null.
	(as_show_where): Ditto, for line number too.
	(as_warn_internal, as_bad_internal): Ditto.

	* input-file.c (input_file_open): If the input file can't be
	opened, consider it an error.

Mon Oct 23 11:15:44 1995  James G. Smith  <jsmith@pasanda.cygnus.co.uk>

	* config/tc-mips.c: Added mips_4100 control, and support for
	accepting the 4100 as a MIPS architecture variant (md_begin,
	macro_build, mips_ip, md_parse_option). Adding suitable
	command-line OPTIONs, and updating the help text (md_show_usage).

Wed Oct 18 13:20:32 1995  Ken Raeburn  <raeburn@cygnus.com>

	* subsegs.c (subseg_begin): Only set absolute_frchain.fix_* when
	BFD_ASSEMBLER is defined.

	* Use one active frag and one obstack per frag chain:
	* frags.c (frags): Variable deleted.
	(frag_alloc): New function.
	(frag_grow, frag_more, frag_variant, frag_now_fix,
	frag_append_1_char): Refer to frchain_now->frch_obstack instead of
	frags variable.
	(frag_new): Ditto.  Verify that frch_last and frag_now match on
	entry and exit, and that old frag_now has non-zero type.  Replace
	"know" uses with "assert".  Use frag_alloc instead of mucking with
	obstack alignment.
	* frags.h (frags): Declaration deleted.
	* subsegs.h (struct frchain): Add new field frch_frag_now.
	* subsegs.c (frchains, dummy_frag, absolute_frchain): New static
	variables.
	(subsegs_begin): Initialize frchains obstack.  Under gcc, don't
	give it any stricter alignment than frchainS structures need.  Do
	not initialize frags obstack.  Set frag_now to point to
	dummy_obstack.  Initialize absolute_frchain.
	(subseg_set_rest): Save and restore frag_now in frch_frag_now
	field of frchainS.  Don't create new frags on section switch, and
	use frag_alloc when creating a new frag chain.  For absolute
	section, set frchain_now to absolute_frchain.  Verify that
	frch_last and frag_now match on entry and exit.  Initialize
	per-chain obstack, and under gcc, set required alignment to that
	needed by fragS structure.

	* write.c (chain_frchains_together_1): Verify fr_type is nonzero.

	* stabs.c (get_stab_string_offset): Only copy input string if a
	fresh copy is needed, not if the section already exists.
	(s_stab_generic): Cache stab section name to bypass lookups, since
	usually it will match.  Could be made faster still by changing the
	memory allocation rules.
	(s_xstab): Cache section name to bypass repeated string
	allocation.

	* frags.c (frag_new): Deleted register declarations.

	* listing.c (frag_now): Don't declare.

	* as.c (chunksize): New variable.
	(debug_memory): New variable.
	(main): If debug_memory is set, reduce chunksize and
	_bfd_chunksize.
	* as.h (chunksize): Declare it.
	* read.c (read_begin): Use it.

	* config/tc-alpha.c (md_shortopts): Include 'g'.
	(md_parse_option): Ignore it.

	* Makefile.in (distclean): Remove Makefile and config.status from
	testsuite directory.
	(clean-here): Don't delete testsuite.  Instead, delete only the
	files within it that would be generated by running tests.

	* config/tc-hppa.c (hppa_elf_mark_end_of_function): Call
	frag_now_fix instead of accessing obstack info directly.
	* config/tc-arm.c (s_ltorg): Ditto.
	(md_assemble): Ditto.

	* config/tc-i386.c (md_assemble): Call frag_grow instead of
	obstack_room.

Wed Oct 18 12:22:59 1995  Ken Raeburn  <raeburn@cygnus.com>

	* stabs.c (aout_process_stab): Insert debug symbol into symbol
	chain after parsing value expression, if any, to avoid separating
	continued .stabs lines.

Mon Oct 16 10:56:41 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (mips_elf_pseudo_table): Remove.
	(mips_pop_insert): Don't call pop_insert on mips_elf_pseudo_table.

Mon Oct 16 07:07:37 1995  Michael Meissner  <meissner@wogglebug.tiac.net>

	* config/tc-ppc.c (md_begin): Use new flags PPC_OPCODE_COMMON for
	-mcom support and PPC_OPCODE_ANY for -many.
	(md_parse_option): Ditto.
	(ppc_arch): Ditto.
	(md_begin): For duplicate instructions, print all duplicates
	before aborting.

Sun Oct 15 22:06:14 1995  Michael Meissner  <meissner@cygnus.com>

	* config/tc-ppc.c (md_parse_option): Support for -mcom to turn on
	common mode operation.
	(md_show_usage): Add -mcom to usage message.

Fri Oct 13 13:32:45 1995  steve chamberlain  <sac@slash.cygnus.com>

	* expr.c (op_rank): Add O_symbol_rva.
	* expr.h (operatorT): Add O_symbol_rva.
	* read.c (cons_worker): Set O_symbol_rva when necessary.
	* write.c (fix_new_exp): Understand O_symbol_rva.

Tue Oct 10 11:34:14 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c: Correct s_cons arguments.  From Michael
	Joosten <joost@ori.cadlab.de>.

Mon Oct  9 19:59:53 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (ppc_macro): Make count unsigned.
	(ppc_biei): Set segment to now_seg and value to coff_n_line_nos.
	(ppc_frob_symbol): Handle C_BINCL and C_EINCL symbols by setting
	the fix_line field.
	* config/obj-coff.c (coff_n_line_nos): Rename from n_line_nos, and
	make non-static.  Change all users.
	* config/obj-coff.h (coff_n_line_nos): Declare.

Fri Oct  6 16:24:27 1995  Ken Raeburn  <raeburn@cygnus.com>

	Mon Sep 25 22:49:32 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in (AC_ARG_WITH(bfd-assembler)): Fix help message.

	* config/obj-elf.c (obj_elf_common): Convert specified byte
	alignment to power of two.  Set size of local bss symbol.

	* config/tc-m68k.c (tc_gen_reloc): Fix typo in variable name.

Fri Oct  6 15:22:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* sb.c, macro.c: Decide whether to include <string.h> or
	<strings.h> just as as.h does.

Fri Oct  6 09:55:33 1995  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (site.exp): Fix setting of $srcdir.

	* config/tc-arm.c (md_atof): Fix little-endian output.
	* config/tc-arm.h (ARM_BI_ENDIAN): Move definition so defined for
	all coff targets.

Thu Oct  5 20:17:30 1995  Ken Raeburn  <raeburn@cygnus.com>

	* doc/as.texinfo: Split out the NS32k family documentation,
	despite its being commented out for now.
	* doc/c-ns32k.texi: New file.

	* sb.c, macro.c: Include string.h.

	* Makefile.in (comparison): Only check *.o; we don't care if
	timestamps inserted by the native linker differ.

	* config/tc-alpha.c (alpha_align): Only fill with a no-op pattern
	if alignment stricter than 4 bytes is requested; in that case,
	align to a 4-byte boundary first.

	Thu Sep 28 19:35:27 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.c (VMS_RSYM_Parse): eliminate "might be used
	uninitialized" warning for `Max_Source_Offset'.

Wed Oct  4 16:17:02 1995  Kim Knuttila  <krk@cygnus.com>

	* config/tc-ppc.c (parse_toc_entry): New function to parse [toc]
	qualifiers and detect errors if present.
	(md_assemble): Add call to parse_toc_entry. Also added some support
	for the [tocv] qualifier.
	(ppc_pe_tocd): New function to support data in the toc section.

Wed Oct  4 14:03:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (ppc_frob_symbol): Don't create an aux entry for
	an absolute symbol.

Tue Oct  3 12:18:19 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (isword): Accept all values from -65536 to
	+65535,	so ~VAL will not be rejected.

	* cond.c (s_endif): Call demand_empty_rest_of_line.  In MRI mode,
	skip characters after the pseudo-op.
	(s_else): Likewise.
	* read.c (get_line_sb): Don't look past buffer_limit.
	(s_include): In MRI mode, skip characters after the file name.

Mon Oct  2 16:15:27 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/m68k-parse.y (m68k_reg_parse): In MRI mode, permit
	periods in register names.

Sat Sep 30 23:03:31 1995  Jeff Law  (law@hurl.cygnus.com)

	* config/tc-hppa.c (hppa_fix_adjustable): DP relative relocs
	are not adjustable in SOM to avoid confusing the optimizing
	linker.

Fri Sep 29 15:18:08 1995  Ian Lance Taylor  <ian@cygnus.com>

	Add some support for i960 MRI compatibility mode.
	* config/tc-i960.c (md_pseudo_table): Add endian.
	(get_args): Don't discard a space between alphanumeric characters.
	(get_cdisp): Change text_section to now_seg.
	(s_endian): New static function.
	* config/tc-i960.h (MRI_MODE_NEEDS_PSEUDO_DOT): Define.
	* expr.h (operatorT): Add O_logical_not, O_logical_and, and
	O_logical_or.
	* expr.c (operand): Treat '!' as logical not operator.  If
	TC_I960, in MRI mode permit `sizeof secname' and `startof
	secname'.
	(op_rank): Bump values by 2 to make room for && and ||.  Add
	entries for !, &&, and ||.
	(expr_begin): Only do MRI changes if TC_M68K.
	(operator): Recognize || and &&.
	(expr): Handle new operatorT values.
	* symbols.c (resolve_symbol_value): Handle new operatorT values.
	(print_expr_1): Likewise.
	* read.c (potable): Add debug, err, irep, irepc, print, purgem,
	and rep.
	(read_a_source_file): Handle MRI_MODE_NEEDS_PSEUDO_DOT.
	(mri_comment_field): Only handle weird comments if TC_M68K.
	(s_err): New function.
	(s_org): Only punt in MRI mode if TC_M68K.
	(s_mri_sect): Write TC_I960 version.
	(s_print, s_purgem): New functions.
	* read.h (s_err, s_print, s_purgem): Declare.
	* cond.c (s_ifeqs): Implement.
	(ignore_input): Handle MRI_MODE_NEEDS_PSEUDO_DOT.
	* macro.c (macro_strip_at): New static variable.
	(macro_init): Add strip_at parameter.
	(do_formals): If macro_strip_at, change NARG to $NARG.
	(define_macro): Skip a comma after the macro name.
	(get_apost_token): Skip character if macro_strip_at, even if
	macro_mri.
	(macro_expand_body): If macro_strip_at, don't recognize parameters
	in strings unless they are preceded by an '@'.  If macro_strip_at,
	pass '@' as strip character to sub_actual.  If macro_strip_at,
	strip '@' characters.
	(macro_expand): If macro_strip_at, change NARG to $NARG.
	(delete_macro): New function.
	(expand_irp): Skip leading and trailing '"' characters if irpc.
	* macro.h (macro_init): Mention new strip_at parameter.
	(delete_macro): Declare.
	* as.c (main): If TC_I960, pass flag_mri to macro_init as
	strip_at; otherwise, pass 0.
	* gasp.c (process_pseudo_op): Pass 0 to macro_init as strip_at.
	(main): Likewise.
	* doc/as.texinfo: Document i960 MRI mode.

	* as.c (show_usage): Mention --defsym.

Thu Sep 28 19:25:04 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Translate "powerpc" into "ppc", remove gen of
	VERSION, move gen of "conf" here from makefile.
	* mpw-make.sed: New file, sed commands to translate Unix makefile
	into MPW syntax.
	* mpw-make.in: Remove.
	* mac-as.r: New file, Mac resource file.
	* as.h (inline): Don't decide about defining if __MWERKS__,
	remove redundant conditional and definition.

	* stabs.c (s_stab_generic): Fix syntax for OBJ_PROCESS_STAB.

Thu Sep 28 15:43:15 1995  Kim Knuttila  <krk@nellie>

	* config/tc-ppc.c (md_apply_fix3): Removed some TE_PE specific
	manipulations, since I can't prove they're needed.
	(md_begin): Removed init_regtable, insert_reg, and the call points.
	(register_name): New function. Parses a register name, if appropriate.
	(md_assemble): Added call to register_name to handle symbolic names.
	(ppc_pe_section): Removed all duplicate IMAGE defines, and include
	coff/pe.h instead.

Thu Sep 28 12:09:19 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.h (tc_fix_adjustable): Define.
	(ppc_pe_fix_adjustable): Declare.
	* config/tc-ppc.c (ppc_pe_fix_adjustable): New function.

Thu Sep 28 01:11:58 1995  Doug Evans  <dje@deneb.cygnus.com>

	* config/tc-arm.h (TARGET_FORMAT): Define for arm-coff.

Wed Sep 27 12:53:58 1995  Ian Lance Taylor  <ian@cygnus.com>

	* symbols.c (S_IS_LOCAL): All symbols in reg_section are local.

	* config/tc-ppc.h (OBJ_XCOFF): Define if OBJ_COFF and not TE_PE.
	Change OBJ_COFF checks to check OBJ_XCOFF instead.
	(TARGET_FORMAT): Fully parenthesize.
	(LEX_QM): Define if TE_PE.
	* config/tc-ppc.c: Replace OBJ_COFF by OBJ_XCOFF throughout.
	Remove checks of TE_PE within #ifdef OBJ_XCOFF sections.
	(init_regtable): Make i unsigned.
	(ppc_set_current_section): Rename from setCurrentSection.  Change
	all callers.
	(ppc_arch): Return after as_fatal to avoid gcc warning.
	(md_assemble): Only declare reloc if OBJ_ELF.  Add default to
	switch on fixups[i].reloc to avoid gcc warning.
	(IMAGE_SGN_LNK_OTHER): Fix nested comment.
	(ppc_pe_function): Don't call ppc_canonicalize_symbol_name.
	(ppc_frob_symbol): Remove TE_PE section checks.
	(md_estimate_size_before_relax): Return after abort to avoid gcc
	warning.
	(md_apply_fix3): Add BFD_RELOC_16_GOT_PCREL to switch.
	* read.c (LEX_QM): Define as 0 if not defined.
	(lex_type): Use LEX_QM for '?'.

	* configure.in: No need to check whether ${cpu_type} is powerpc;
	it never will be.
	* configure: Rebuild.

Wed Sep 27 11:33:38 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (md_apply_fix3): Remove Sep 26 changes to this
	function, keeping other Sep. 26 changes.

Wed Sep 27 10:29:13 1995  Kim Knuttila  <krk@nellie>

	* configure (emulations): Added support for ppcle-*-[pe|winnt]
	(target_frag): Removed an extraneous PPC definition.
	* configure.in (emulations): Same
	* config/tc-ppc.h:
	* config/tc-ppc.c (md_pseudo_table): Base support for new or altered
	pseudo ops - <previous, pdata, ydata, reldata, rdata, ualong, znop,
	section, comm, function> There will be more.
	(pre_defined_registers): Predefined reg table to name registers, etc
	(md_begin): Setup reg table initialization
	(md_assemble): Initial [toc]x(rtoc) support
	(ppc_frob_label): Removed some xcoff specific processing from TE_PE
	(ppc_frob_symbol): Removed some xcoff specific processing from TE_PE
	Added support for more predefined sections
	(ppc_frob_section): Removed some xcoff specific processing from TE_PE
	(ppc_fix_adjustable): Removed from TE_PE mainline
	(md_apply_fix3): For TE_PE toc entries, we don't need to mess
	with fx_addnumber. Removed for the time being.
	(lots): Put back missing assignments to ppc_current_csect.

Tue Sep 26 14:57:59 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_suffix): Support all of the V.4
	relocations.
	(ppc_elf_cons): Remove restriction that @ suffixes must be done
	with .long.  Add error if relocation does not fit in the number of
	bytes provided.
	(md_assemble): For absolute branches, map PC relative relocations
	back into an equivalent absolute relocation.
	(md_pcrel_from): If TC_FORCE_RELOCATION is true, relocation offset
	is 0, not segment start.
	(md_apply_fix3): Don't bother writing addend into the instruction,
	since it is ignored, given that we use RELA relocations for ELF.

	* config/tc-ppc.h (TC_FORCE_RELOCATION): Define to force all
	branch prediction relocations to always be emitted.

Mon Sep 25 16:08:43 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_suffix): Lower case reloc before
	testing.
	(md_assemble): Be more robust in terms of relocations.
	(md_apply_fix3): Allow 14 bit relocs to be emitted for external
	symbols in addition to 26 bit relocs.  Properly insert 26/14 bit
	reloc value fields into the instruction stream.

Mon Sep 25 00:23:16 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-arm.c (md_atof): Output little endian constants in
	little endian mode.

	* config/obj-coff.c (obj_coff_section): Pass &type, not type,
	s_mri_sect.

	* configure.in: Fix typo: fmt-elf to fmt=elf.

Fri Sep 22 16:34:46 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_suffix): Rewrite to use a table of
	strings and relocations they represent.  Add @br{,n}taken for
	branch taken/not taken support.
	(md_apply_fix3): Add BFD_RELOC_PPC_B16_BR{,N}TAKEN support.

Thu Sep 21 21:10:17 1995  Michael Meissner  <meissner@cygnus.com>

	* config/tc-ppc.c (md_parse_option): -mrelocatable-lib now only
	sets EF_PPC_RELOCATABLE_LIB and not also EF_PPC_RELOCATABLE.

Thu Sep 21 16:30:56 1995  Ian Lance Taylor  <ian@cygnus.com>

	* subsegs.c (subseg_set): Permit SEG_ABSOLUTE in know expression.
	* expr.c (expr): Account for new operatorT values in know
	expression.

	* write.c (fixup_segment): Clear fixp->fx_subsy if the relocation
	is fully resolved.

Thu Sep 21 14:11:49 1995  Michael Meissner  <meissner@cygnus.com>

	* config/tc-ppc.c (ppc_flags): New variable to hold the flag bits
	to set in the ELF header.
	(md_parse_option): Add support for -mrelocatable-lib.  Make both
	-mrelocatable and -mrelocatable-lib set ppc_flags.
	(md_begin): Set ELF flags with ppc_flags.

Wed Sep 20 13:01:52 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (maintainer-clean): New target, synonym for
	realclean.  Add GNU standard maintainer-clean echos.
	* doc/Makefile.in (maintainer-clean): New target, synonym for
	realclean.

Tue Sep 19 11:31:31 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_ip): Reject immediate operands for '%'.

	* config/tc-m68k.c (m68k_ip): Reject immediate operands for '|'.
	Replace 'P' with '0', '1', and '2'.

	* config/tc-m68k.c (parse_mri_control_operand): Change leftstop
	and rightstop to not be const.
	(parse_mri_control_expression): Likewise.
	(build_mri_control_operand): Likewise.  Use m68k_ip_op to examine
	the operand, not m68k_reg_parse.
	(s_mri_if): In MRI mode, stop at the first '*'.
	(s_mri_while): Likewise.
	(s_mri_else): In MRI mode, ignore trailing characters.
	(s_mri_endi, s_mri_break, s_mri_next, s_mri_for): Likewise.
	(s_mri_endf, s_mri_repeat, s_mri_until, s_mri_endw): Likewise.
	* config/m68k-parse.y: Revert yesterday's change.
	* config/m68k-parse.h: Revert yesterday's change.

Mon Sep 18 15:22:28 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (parse_mri_control_operand): Change leftstart
	and rightstart to not be const.
	(parse_mri_control_expression): Likewise.
	(build_mri_control_operand): Likewise.  If the left side of the
	comparison is a register, and the right side is not, swap the two
	sides.
	* config/m68k-parse.y (m68k_reg_parse): Make globally visible.
	* config/m68k-parse.h (m68k_reg_parse): Declare.

	* read.c (mri_comment_field): New function.
	(mri_comment_end): New function.
	(s_align_bytes): Use mri_comment_field.
	(s_align_ptwo, s_comm, s_mri_common, s_fail, s_globl): Likewise.
	(s_float_space, s_struct): Likewise.
	(s_space): Use mri_comment_field rather than doing it by hand.
	(cons_worker, equals): Likewise.
	(s_end): Ignore comments starting with '*' or '!'.
	* read.h (mri_comment_field): Declare.
	(mri_comment_end): Declare.
	* cond.c (s_if): Use mri_comment_field.
	* config/tc-m68k.c (s_chip, s_reg): Likewise.

	* write.c (fixup_segment): Handle ABS-sym in -sym case rather than
	sym-sym case.
	* config/obj-coff.c (fixup_segment): Likewise.  Permit negative
	symbols if TC_M68K.
	* config/tc-m68k.c (tc_coff_fix2rtype): If fx_tcbit is set, return
	R_RELLONG_NEG.
	(tc_gen_reloc): If fx_tcbit is set, abort.
	(md_apply_fix_2): For a negative reloc, move fx_subsy to fx_addsy,
	and set fx_tcbit.

	* config/tc-m68k.c (s_reg): Ignore comment field in MRI mode.

Mon Sep 18 14:44:04 1995  Arne H. Juul  <arnej@pvv.unit.no>

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

Sun Sep 17 22:17:43 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Set endian to little for mips-*-ultrix*.
	* configure: Rebuild.

Fri Sep 15 13:16:55 1995  Ian Lance Taylor  <ian@cygnus.com>

	* expr.c (current_location): New static function.  Handle magic
	symbol `.'; in absolute section, return a constant.
	(operand): Call current_location for '.' and '$', instead of doing
	it inline.  In MRI mode, call current_location for '*'.

Fri Sep 15 21:39:29 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-m68k.c: Change some "CONST" references to "const".

Fri Sep 15 17:27:41 1995  Ken Raeburn  <raeburn@cygnus.com>

	Tue Sep 12 17:08:23 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.c (VMS_stab_parse): simplify first loop;
	use S_GET_NAME/modify/S_SET_NAME sequence instead of abusing
	S_GET_NAME when updating symbol name.
	(local_symbols_DST): first prefix/postfix typo from July 21st.
	[plus comment reformatting --kr]

Wed Sep 13 12:33:03 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (EXPECT): New variable.
	(CHECKFLAGS): Remove.
	(site.exp): New target.
	(check): Rewrite to invoke runtest directly, rather than recurring
	down into testsuite.
	(clean-here): Remove testsuite directory.
	(clean, distclean): Don't recur into testsuite.
	* configure.in: Don't call AC_CONFIG_SUBDIRS(testsuite).
	* configure: Rebuild.

	* write.c (relax_and_size_seg): Change to the segment we are
	relaxing, in case md_convert_frag, called by cvt_frag_to_fill,
	wants to call fix_new.
	* config/tc-m68k.c (m68k_ip): Permit PC relative code if the
	segment of the symbol is the current segment, not just in
	text_section.
	(md_convert_frag_1): Don't call subseg_change.
	(md_estimate_size_before_relax): Likewise.

Tue Sep 12 10:36:40 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-arm.c (md_atof): Fix debugging printf, and leave it
	out by default.

Mon Sep 11 11:39:11 1995  Ian Lance Taylor  <ian@cygnus.com>

	* doc/configure.in: Remove unused file.

	* app.c (do_scrub_chars): Grab all available spaces at start of
	line before preserving a single space.  Remove state == 0 test
	which will never succeed.
	* macro.c (macro_expand_body): Delete local variables from the
	formal hash table.
	(macro_expand): In MRI mode, stop when whitespace is seen in the
	argument list.

	* sb.c: Include "libiberty.h".
	* macro.c: Likewise.  Also include <stdlib.h> if it exists.

Fri Sep  8 00:27:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* app.c (do_scrub_chars): In MRI mode, keep a space before a
	possible comment character.
	* config/tc-m68k.c (m68k_ip): In MRI mode, ignore anything after
	an instruction which takes no operands.

	* Makefile.in (install): Don't install gasp in $(tooldir).

	* config/tc-mips.c (macro): Handle a non zero base register for
	M_U{L,S}{D,W,H}_A.

	* gasp.c (show_usage): Put program_name argument in first fprintf,
	not second.

Thu Sep  7 12:33:58 1995  Ian Lance Taylor  <ian@cygnus.com>

	* expr.c (operand): Handle 08 and 09 in MRI mode.
	* macro.c (ISSEP): Remove duplicated `"' character.
	(get_any_string): Copy some characters for which ISSEP is true:
	';', '>', '(', ')'.  Otherwise we can get in an infinite loop.
	* read.c (s_space): In MRI mode, the expressions stop at the first
	unquoted space.
	(cons_worker): In MRI mode, restore the terminating character at
	the end of the function.

	* read.c (cons_worker): Don't use #elif; old compilers don't
	support it.

Wed Sep  6 21:13:06 1995  Ian Lance Taylor  <ian@cygnus.com>

	* app.c (do_scrub_chars): In MRI mode, silently end quoted strings
	at newline characters.  In MRI mode, always keep spaces in the
	operands field.  In MRI mode, treat a line comment character as a
	regular comment character following a space.
	* cond.c (ignore_input): Use strncasecmp rather than strncmp when
	looking for special pseudo-ops.
	* read.c (cons_worker): In MRI mode, the expressions stop at the
	first unquoted space.
	(equals): Likewise.

Wed Sep  6 15:03:53 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* config/tc-sh.c (get_operands): Read third arg if it exists.
	Otherwise, clear it.
	(get_specific, case F_FR0): Add.

Wed Sep  6 15:03:53 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* config/tc-sh.c (get_specific): Delete arg_to_test.
	(md_assemble): Increase operand array from 2 to 3.

Tue Sep  5 16:47:36 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* config/tc-mips.c: Remove CYGNUS LOCAL comments.
	(md_begin): Use 0/1 instead of TRUE/FALSE.
	(md_show_usage): Break up long format string for the benefit
	of lame compilers.
	* config/tc-m68k.c (md_show_usage): Ditto.
	* gasp.c (show_usage): Ditto.
	* macro.c (check_macro): Cast result of hash_find.

Tue Sep  5 14:46:38 1995  Ken Raeburn  <raeburn@cygnus.com>

	* configure.in: When testing for a free() declaration in system
	header files, cast the address to a function pointer, not to an
	integer.

	* write.c (fix_new_internal): Call TC_INIT_FIX_DATA if TC_FIX_TYPE
	is defined.  Don't initialize fx_bsr.  Verify that fx_size field
	is wide enough to hold stored value.
	* write.h (struct fix): Change tc_fix_data to type TC_FIX_TYPE if
	that is defined, otherwise omit it.  Delete fx_bsr.  Change
	fx_size to unsigned char.
	* config/tc-i960.h (TC_FIX_TYPE, fx_bsr, TC_INIT_FIX_DATA): New
	macros.
	* config/tc-ns32k.h (TC_FIX_TYPE, fx_bsr, TC_INIT_FIX_DATA): New
	macros.
	* config/tc-hppa.h (TC_FIX_TYPE): Define as PTR.

	* config/tc-i860.c (md_apply_fix): Delete code for checking
	fx_im_disp, and for handling non-zero values, since it never gets
	set after being initialized to zero.

	* write.h (struct fix): Make fx_im_disp always 2 bits, since the
	only tc-* files actually using it need that much.

	NS32K changes from Ian Dall:
	* configure.in: Treat ns32k-pc532-ux* like ns32k-pc532-mach*, and
	ns32k-pc532-lites* like ns32k-pc532-netbsd*.
	* config/tc-ns32k.h (LOCAL_LABELS_FB): Define to 1.

Fri Sep  1 17:02:15 1995  steve chamberlain  <sac@slash.cygnus.com>

	* write.c (fixup_segment): Get TC_FORCE_RELOCATION up the
	right way!

Fri Sep  1 08:20:19 1995  James G. Smith  <jsmith@beauty.cygnus.com>

	* config/tc-mips.c (md_parse_option, md_begin, md_show_usage):
	Add support for "-mcpu=vr4300" as processor identifier.

Thu Aug 31 16:41:06 1995  steve chamberlain  <sac@slash.cygnus.com>

	* write.c (fixup_segment): Remove change of 29th.
	* config/tc-{i386,arm}.h (TC_FORCE_RELOCATION): Keep RVA relocs.

Tue Aug 29 19:42:58 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/tc-m68k.c (m68k_ip) [case POST/PRE/BASE]: Fix typo when
	looking at outer displacement.  Don't set the postindex bit if the
	index suppress bit is set (for memory indirect addressing mode).

Thu Aug 31 06:49:37 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-arm.c (tc_gen_reloc): Delete duplicated code.

Wed Aug 30 23:51:57 1995  Ian Lance Taylor  <ian@cygnus.com>

	* app.c (do_scrub_chars): Free saved_input when the from buffer
	exactly fills the to buffer.

Wed Aug 30 13:46:39 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-sparc.c (parse_keyword_arg, parse_const_expr_arg): New fns.
	(sparc_ip): Call them for asi, membar, and prefetch parsing.

Tue Aug 29 15:45:37 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-sparc.c (membar_masks): Deleted.
	(sparc_ip): Clean up ASI and membar support.

Tue Aug 29 13:20:27 1995  steve chamberlain  <sac@slash.cygnus.com>

	* read.c (potable): Rva is new entry.
	(cons_worker): New, split from cons.  Handles rva.
	(cons, s_rva): Call cons_worker.
	* read.h (s_rva): New declaration.
	* write.c (fixup_segment): Don't throw away rva relocs.
	* config/tc-arm.c (md_apply_fix, tc_gen_reloc): Handle RVA.
	* config/tc-i386.c (tc_coff_fix2type): Handle RVA.
	* config/tc-i386.h (TC_COUNT_RELOC): Remember RVAs.
	(TC_RVA_RELOC): New definition.

Sun Aug 27 17:41:05 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-arm.c (do_swi): Allow optional leading '#'.

Sat Aug 26 17:24:20 1995  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-m68k.c (comment_chars): If TE_DELTA is defined,
	include '#'.
	* config/tc-m68k.h (NO_PSEUDO_DOT): Define if TE_DELTA is
	defined.

	* config/te-delta.h: Include obj-format.h.
	* config/te-sco386.h: Likewise.
	* config/te-sysv32.h: Likewise.

	* app.c (scrub_file): Remove.
	(scrub_from_file, scrub_to_file): Remove.
	(scrub_string, scrub_last_string): Remove.
	(scrub_from_string, scrub_to_string): Remove.
	(saved_input, saved_input_len): New static variables.
	(struct app_saved): Remove scrub_string, scrub_last_string, and
	scrub_file fields.  Add saved_input and saved_input_len fields.
	(app_push): Adjust saved fields for changes in struct app_save.
	Initialize state and saved_input.
	(app_pop): Adjust saved fields for changes in struct app_save.
	(do_scrub_chars): Rename from do_scrub_next_char and rewrite to
	process a buffer at a time rather than a character at a time.
	(main, as_warn): Remove obsolete testing code.
	* as.h (do_scrub_next_char): Don't declare.
	(do_scrub_chars): Declare.
	(scrub_from_file, scrub_from_string): Don't declare.
	(scrub_to_file, scrub_to_string): Don't declare.
	* input-file.c (input_file_get): New static function.
	(input_file_give_next_buffer): Call do_scrub_chars rather than
	do_scrub_next_char.
	* read.c (scrub_string, scrub_string_end): New static variables.
	(scrub_from_string): New static function.
	(read_a_source_file): Call do_scrub_chars rather than
	do_scrub_next_char.

Thu Aug 24 18:50:19 1995  Ian Lance Taylor  (ian@cygnus.com)

	* gasp.c (as_abort): New function.
	* sb.c (sb_build): Revert yesterday's patch.

	* Makefile.in (gasp.new): Depend upon ../libiberty/libiberty.a.
	Just link against libiberty, not against $(LIBS).

Wed Aug 23 15:18:20 1995  Ian Lance Taylor  (ian@cygnus.com)

	* sb.c (sb_build): Undefine abort before calling it, since gasp
	does not provide as_abort.

Wed Aug 23 10:40:41 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (set_target_endian): New static to say whether
	we've initialized target_big_endian or not.
	(md_parse_option): Set set_target_endian if we set the variable
	target_big_endian.
	(md_begin): Only set target_big_endian if !set_target_endian.

Tue Aug 22 03:00:33 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	Sat Aug 19 18:08:16 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.h (DST_S_C_SRC_SETREC_W, DST_S_C_SRC_DEFLINES_B):
	New macros.
	* config/obj-vms.c (VMS_TBT_Line_PC_Correlation,
	VMS_TBT_Source_Lines): Make traceback info be robust enough to
	handle huge source files.
	(VMS_TBT_Source_File): Reorganize the native- vs cross-assembly
	support so that actual object file output is clearer.
	(VMS_TBT_Source_File: Fab, Nam, Date_Xab, File_Header_Xab):
	Replace static variables with automatic ones.

	Sat Aug 12 20:18:15 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.c (Module_Name): new file scope variable.
	(VMS_TBT_Module_Begin): use it instead of local variable.
	(Write_VMS_MHD_Records): ditto; assign its value here.
	(Write_VMS_EOM_Record): second argument has type valueT.
	(VMS_Initialized_Data_Size):  simplify search loop; return
	type is offsetT; second argument is unsigned.

	Sat Jun 17 19:05:25 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* messages.c (as_perror): Use xstrerror instead of strerror.

Mon Aug 21 13:57:20 1995  Ian Lance Taylor  <ian@cygnus.com>

	* as.c (parse_args): Accept --defsym SYM=VALUE.
	* doc/as.texinfo, doc/as.1: Document --defsym.

	* read.c (read_a_source_file): In MRI mode, don't end the
	statement inside a quotation.
	(s_space): Don't warn about a zero repeat count in MRI mode.
	* config/tc-m68k.c (crack_operand): In MRI mode, don't count
	parentheses inside quotes.
	(md_assemble): In MRI mode, anything after the operands field is a
	comment.
	(parse_mri_control_operand): Adjust start and stop to remove
	spaces.
	(s_mri_for): Likewise.

	* cond.c (s_ifdef): Restore the character after the symbol name,
	in case it is a newline.
	(s_if): If ignoring the current tree, don't try to parse the
	expression.

	* app.c (do_scrub_next_char): If LEX_IS_STRINGQUOTE or
	LEX_IS_ONECHAR_QUOTE is seen in	state 10, preserve one space.

	* doc/as.texinfo: Document irp, irpc, macro, and rept. MRI mode
	now supports macros, ifc, ifnc, irp, irpc, rept, and endr, without
	using gasp.

	Add support for macros.
	* as.c: Include sb.h and macro.h.
	(max_macro_next): New global variable.
	(main): Call macro_init.
	(macro_expr): New static function.
	* as.h (max_macro_nest): Declare.
	* read.c (line_label): Rename from mri_line_label.  Change all
	uses.
	(potable): Add exitm, irp, irpc, macro, mexit, rept.
	(read_a_source_file): Always clear line_label at the start of a
	line, not just when flag_mri or LABELS_WITHOUT_COLONS.  Fix
	MRI/LABELS_WITHOUT_COLONS handling.  In MRI mode, permit label:
	equ val.  Set line_label when calling colon.  In MRI mode, a
	leading '.' does not imply a pseudo-op.  Check for macro expansion
	before calling md_assemble.
	(s_irp): New function.
	(get_line_sb): New static function.
	(s_macro): New function.
	(s_mexit): New function.
	(s_rept): New function.
	* read.h (line_label): Rename from mri_line_label.
	(s_irp, s_rept): Declare.
	(s_macro, s_mexit): Declare.
	* input-scrub.c: Include sb.h.
	(sb_index, from_sb): New static variables.
	(macro_nest): New static variable.
	(struct input_save): Add sb_index and from_sb fields.  Change
	next_saved_file field to be struct input_save *.
	(next_saved_file): Changed to be struct input_save *.
	(input_scrub_push): Change to return type struct input_save *.
	Save sb_index and from_sb.
	(input_scrub_pop): Change parameter type to struct input_save *.
	Restore sb_index and from_sb.
	(input_scrub_include_sb): New function.
	(input_scrub_next_buffer): Handle reading from from_sb.
	(bump_line_counters): Only increment lines if not using from_sb.
	* config/tc-m68k.c (opt_table): Add nest.
	(opt_nest): New static function.
	* gasp.c: Include sb.h and macro.h.  Move all sb related functions
	and definitions to sb.h and sb.c.  Move all macro related
	functions and definitions to macro.h and macro.c.
	* sb.h, sb.c: New files, extracted from gasp.c.
	* macro.h, macro.c: Likewise.
	* Makefile.in (OBJS): Add sb.o and macro.o
	(GASPOBJS): Define.
	(gasp.new): Depend upon $(GASPOBJS).  Use $(GASPOBJS) to link.
	(TARG_CPU_DEP_m68k): Depend upon subsegs.h.
	(gasp.o): Depend upon sb.h and macro.h.
	(sb.o): New target.
	(macro.o): New target.
	(as.o): Depend upon sb.h and macro.h.
	(input-scrub.o): Depend upon sb.h.
	(read.o): Depend upon sb.h and macro.h.

	* cond.c (get_mri_string): New static function.
	(s_ifc): New function.
	* read.c (potable): Add ifc and ifnc.
	* read.h (s_ifc): Declare.

	* app.c (do_scrub_begin): In MRI mode, set lex of ' to
	LEX_IS_STRINGQUOTE.

Mon Aug 21 13:41:33 1995  Michael Meissner  <meissner@cygnus.com>

	* config/tc-ppc.c (md_assemble): Allow @HA, @L, and @H suffixes on
	constant expressions.

Sun Aug 20 15:54:37 1995  Jim Wilson  <wilson@cygnus.com>

	* config/tc-arm.c (md_reloc_size): Add const to declaration.

Fri Aug 18 10:58:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (s_include): In MRI mode, don't expect quotes around the
	file name.
	* listing.c (listing_title): Don't require the title to be quoted.

	* gasp.c (include_print_where_line): Always subtract 1 from
	linecount before printing it.
	(process_file): In MRI mode, lines beginning with '*' or '!' are
	comments.
	(do_reg): In MRI mode, don't require parentheses.
	(do_include): In MRI mode, don't requires quotes.  If the file can
	not be found in the include path, try opening it in the current
	directory.  Print the file name correctly in the error message.
	(chartype_init): In MRI mode, set FIRSTBIT for '.'.
	(main): Set comment_char to ';' when entering MRI mode.

	* config/tc-m68k.c: Include subsegs.h.
	(m68k_ip): Pass 64 rather than -1 to add_Fix in 'B' 'B' case.
	(md_pcrel_from): If fx_pcrel_adjust is 64, use -1 instead.

	* config/tc-sparc.h (tc_fix_adjustable): For OBJ_AOUT case, adjust
	BFD_RELOC_16 and BFD_RELOC_32 relocs.

Wed Aug 16 14:48:44 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	* as.h (alloca): Use void* declaration on HP/UX.

Wed Aug 16 12:49:17 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sparc.c (tc_gen_reloc): If PIC, only change PCREL_S2
	to WPLT30 for an undefined or external symbol.  Don't consider
	PC10 or PC22 to be a PC relative reloc when choosing between
	fx_addnumber and fx_offset.

	* config/tc-z8k.c (md_number_to_chars): Don't do it here, call
	number_to_chars_bigendian.
	* config/tc-z8k.h (TARGET_BYTES_BIG_ENDIAN): Define.

	* expr.c (operand): Add support for .startof. and .sizeof. by
	using magic symbol names which the linker will recognize
	specially.
	* doc/as.texinfo: Take out note that .startof. and .sizeof. are
	not supported.

Tue Aug 15 15:08:49 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (md_pseudo_table): Add MRI structured control
	directives: if, if.b, if.w, if.l, else, else.s, else.l, endi,
	break, break.s, break.l, next, next.s, next.l, for, for.b, for.w,
	for.l, endf, repeat, until, until.b, until.w, until.l, while,
	while.b, while.w, while.l, endw.
	(enum mri_control_type): Define.
	(struct mri_control_info): Define.
	(mri_control_stack): New static variable.
	(mri_control_index): New static variable.
	(mri_control_label): New static function.
	(push_mri_control, pop_mri_control): New static functions.
	(parse_mri_condition): New static function.
	(parse_mri_control_operand): New static function.
	(swap_mri_condition, reverse_mri_condition): New static functions.
	(build_mri_control_operand): New static function.
	(parse_mri_control_expression): New static function.
	(s_mri_if, s_mri_else, s_mri_endi): New static functions.
	(s_mri_break, s_mri_next): New static functions.
	(s_mri_for, s_mri_endf): New static functions.
	(s_mri_repeat, s_mri_until): New static functions.
	(s_mri_while, s_mri_endw): New static functions.
	* gasp.c (mrikinfo): Remove IF.
	* expr.c (get_symbol_end): Accept \001 as part of a name.

	* symbols.c (colon): Change parameter to const char *.
	* symbols.h (colon): Update declaration.

Mon Aug 14 20:51:56 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	* write.c (write_contents): Always do it the BFD_FAST_SECTION_FILL
	way.  Reformat and reindent that code to GNU standards.
	(BFD_FAST_SECTION_FILL): Don't define.

Mon Aug 14 14:08:07 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_apply_fix): Don't try to apply BEGIN_BRTAB
	or END_BRTAB fixups.

Mon Aug 14 15:45:07 1995  Ian Lance Taylor  <ian@cygnus.com>

	* gasp.c (do_align, get_any_string): Mark as static.
	(do_assigna, do_assignc, new_file): Likewise.

	* config/tc-m68k.c (s_reg): Rename local op to rop to avoid
	confusion with macro op.

	* gasp.c (strip_comments): Comment out; it's not used.
	(do_end): Add parameter.  In MRI mode, print it out.
	(do_irp): New static function.
	(sub_actual): Change parameter m to formal_hash, changing type
	from macro_entryh * to hash_table *.
	(macro_expand_body): New static function, broken out of
	macro_expand.
	(macro_expand): Call macro_expand_body.
	(K_*): Fully parenthesize.
	(K_IRP, K_IRPC): Define.
	(mrikinfo): Add IRP and IRPC.
	(process_pseudo_op): In MRI mode, print out END pseudo-op.  Pass
	line to do_end.  Handle K_IRP and K_IRPC.

	* config/tc-m68k.c (s_opt): Reset *input_line_pointer even if we
	don't do anything with the option.

Sun Aug 13 17:03:58 1995  Ian Lance Taylor  <ian@cygnus.com>

	* frags.c (frag_align): Handle absolute_section.
	* write.c (record_alignment): Likewise.

	* config/tc-mips.c (macro_build): Skip insns with an inappropriate
	ISA level.

Sun Aug 13 00:35:02 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_pseudo_table): Add entries for
	"begin_brtab" and "end_brtab" pseudo-ops.
	(pa_brtab): New function.
	(tc_gen_reloc, SOM version): Handle R_BEGIN_BRTAB and R_END_BRTAB.
	(hppa_force_relocation): Force relocations for BRTAB fixups
	when OBJ_SOM is defined.

Fri Aug 11 20:34:05 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	* Makefile.in (TE_OBJS): Add empty definition.

Fri Aug 11 19:16:08 1995  Ian Lance Taylor  <ian@cygnus.com>

	* gasp.c (change_base): Don't treat ' specially in MRI mode.
	(process_file): Don't warn about missing END in MRI mode.
	(do_if): New static function.
	(get_mri_string, do_ifc): New static functions.
	(buffer_and_nest): Treat MRI mode like alternate syntax mode.
	(do_aendr): Change error message in MRI mode.
	(do_arepeat): Use REPT/ENDR in MRI mode.
	(do_formals): In MRI mode, add special NARG formal.
	(macro_expand): Various changes for MRI mode: permit a qualifier
	on the macro name; set special NARG formal; permit unnamed
	positional arguments; use && to concatenate named parameters;
	permit \d to specify an unnamed parameter; permit named parameters
	to not start with \; use == to see if a parameter exists.
	(getstring): In MRI mode, allow <> to quote a string.
	(K_IFEQ, K_IFNE, K_IFLT, K_IFLE, K_IFGE, K_IFGT): Define.
	(K_IFC, K_IFNC): Define.
	(struct keyword): Name structure used in kinfo array.
	(mrikinfo): New static array.
	(process_pseudo_op): Don't require leading '.' in MRI mode.
	Handle new MRI pseudo-op definitions.
	(add_keyword): New static function, broken out of process_init.
	(process_init): Use add_keyword.  In MRI mode, add mrikinfo table.
	(long_options): Add "mri".
	(show_usage): Mention -M/--mri.
	(main): Call process_init after processing arguments.  Handle -M.
	* doc/gasp.texi: Document -M/--mri.

	* gasp.c: Include ansidecl.h.  Make all local functions static.
	Add prototypes for all static functions.
	(mri): New global variable.
	(sb_add_char): Change parameter c from char to int.
	(sb_add_string): Make parameter s into a const pointer.
	(sb_add_buffer): Likewise.
	(checkconst): Change parameter op from char to int.
	(exp_get_abs): Make parameter emsg into a const pointer.
	(do_res): Change parameter type from char to int.
	(buffer_and_nest): Make parameters from and to into const
	pointers.
	(do_sdata): Change parameter type from char to int.
	(new_file): Make parameter name into a const pointer.
	(do_define): Make parameter string into a const pointer.

	* config/tc-h8300.c (md_number_to_chars): Don't do it here, call
	number_to_chars_bigendian.
	* config/tc-h8300.h (TARGET_BYTES_BIG_ENDIAN): Define.

Fri Aug 11 13:23:56 1995  Michael Meissner  <meissner@cygnus.com>

	* write.h (struct fix): Add new field fx_no_overflow.

	* write.c (fixup_segment): If fx_no_overflow is non-zero, don't
	complain if the addend is too large.

	* config/tc-ppc.c (md_assemble): Set fx_no_overflow if the half
	word relocations BFD_RELOC_{LO16,HI16,HI16_S}.

Thu Aug 10 20:56:38 1995  Ken Raeburn  <raeburn@cygnus.com>

	* read.c (s_mri_sect) [BFD_ASSEMBLER]: Fix typos in choosing and
	setting section flags.

Thu Aug 10 00:38:11 1995  Ian Lance Taylor  <ian@cygnus.com>

	* doc/as.texinfo: Add documentation for MRI compatibility mode.
	* doc/as.1: Likewise.

	* config/tc-m68k.c (m68k_ip): When recognizing '#', use isbyte and
	iword rather than expr8 and expr16.  When recognizing 'M', use
	issbyte rather than expr8.  When recognizing 'Q' and 't', just
	check for O_constant rather than using expr8.
	* config/m68k-parse.h (expr8, expr16): Don't define.
	* Makefile.in (m68k-parse.o): Depend upon m68k-parse.h, not
	m68k-parse.y.

	* read.c (potable): Add spc, ttl, xcom, xref.
	(s_mri_sect): New function.
	* read.h (s_mri_sect): Declare.
	* config/obj-coff.c (obj_coff_section) (both versions): In MRI
	mode, call s_mri_sect.
	(obj_pseudo_table): Add sect.s and section.s.  Move sect outside
	of ifndef BFD_ASSEMBLER.
	* config/obj-elf.c (elf_pseudo_table): Add section.s, sect,
	sect.s.
	(obj_elf_section): In MRI mode, call s_mri_sect.
	* config/tc-m68k.c (md_pseudo_table): Add restore, save.
	(struct save_opts): Define.
	(save_stack): New static variable.
	(s_save, s_restore): New static functions.

	* read.c (s_set): Remove unused local ptr.
	(hex_float): Check target_big_endian.
	(equals): Remove unused local p.

	* config/tc-a29k.h (TARGET_BYTES_BIG_ENDIAN): Define.
	* config/tc-h8500.h (TARGET_BYTES_BIG_ENDIAN): Define.
	* config/tc-hppa.h (TARGET_BYTES_BIG_ENDIAN): Define.
	* config/tc-i860.h (TARGET_BYTES_BIG_ENDIAN): Define.
	* config/tc-m68k.h (TARGET_BYTES_BIG_ENDIAN): Define.
	* config/tc-m88k.h (TARGET_BYTES_BIG_ENDIAN): Define.
	* config/tc-tahoe.h (TARGET_BYTES_BIG_ENDIAN): Define.
	* config/tc-sh.c (little): Set target_big_endian.
	(md_begin): Likewise.
	(md_parse_option): Likewise.
	(build_relax): Check target_big_endian rather than shl.
	(build_Mytes, md_atof): Likewise.
	(md_convert_frag, md_apply_fix): Likewise.
	(md_number_to_chars): Likewise.

Wed Aug  9 10:51:48 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (m68k_abspcadd): New static variable.
	(m68k_quick): New static variable.
	(m68k_rel32): New static variable.
	(md_pseudo_table): Add opt and reg.
	(m68k_ip): Permit absolute symbols in 'l'/'L' recognition.  Check
	m68k_quick in 'M' and 'Q' recognition.  Check m68k_abspcadd in
	DISP handling.  Check m68k_rel32 in BASE/POST/PRE handling.
	(md_begin): In MRI mode, initialize m68k_abspcadd and m68k_rel32.
	In MRI mode, change unsized branch aliases to be variable sized.
	(struct opt_action): Define.
	(opt_table): Define.
	(s_opt): New static function.
	(skip_to_comma): New static function.
	(opt_chip): New static function.
	(opt_list): New static function.
	(opt_list_symbols): New static function.
	(s_reg): New static function.
	* as.h (flag_keep_locals): Change from unsigned char to int.
	(flag_no_warnings): Likewise.

	* read.c (mri_line_label): Make non-static.
	(potable): Add nopage, page, plen.
	(s_org): Error if in MRI mode.
	* read.h (mri_line_label): Declare.
	* listing.c (listing_nopage): New function.
	* listing.h (listing_nopage): Declare.

	* symbols.c (symbol_begin): Set sy_frag of abs_symbol to
	&zero_address_frag.

	* write.c (adjust_reloc_syms): Check that symbol is not NULL
	before checking sy_mri_common.
	(fixup_segment): Likewise.
	* config/obj-coff.c (fixup_segment): Likewise.

	* read.c (abs_section_offset): New global variable.
	(potable): Add offset, struct.
	(do_org): New static function; handle changing the origin in the
	absolute section.
	(s_org): Use do_org.
	(s_set): Likewise.
	(equals): Likewise.
	(s_space): In absolute_section, just increase abs_section_offset.
	(s_struct): New function.
	(emit_expr): Handle absolute_section specially.
	* read.h (abs_section_offset): Declare.
	(s_struct): Declare.
	* frags.c (frag_more): Warn if in absolute_section.
	(frag_now_fix): In absolute_section, return abs_section_offset.
	* subsegs.c (subseg_change): If switching to absolute_section,
	just set now_seg and now_subseg.
	(subseg_set_rest): Special handling when switching to or from
	absolute_section.

	* config/tc-m68k.c (m68k_float_copnum): New static variable.
	(md_pseudo_table): Add fopt and mask2.
	(m68k_ip): Use m68k_float_copnum, not COPNUM, when setting
	coprocessor register to use.  In case 'I' when checking operands,
	correct coprocessor register numbers.  In case 'I' when setting
	operands, don't add 1.
	(s_fopt): New static function.
	* config/m68k-parse.h (COPNUM): Don't define.

	* read.c (potable): Add ifeq, ifge, ifgt, ifle, iflt, ifne.
	Change if to pass O_ne to s_if.
	(read_a_source_file): Don't define an label without a colon if
	ignore_input returns true.
	* cond.c (s_if): Treat argument as an operatorT describing how to
	compare the argument against zero.
	(ignore_input): Don't require an initial dot in MRI mode, or if
	NO_PSEUDO_DOT is defined.

	* read.c (potable): Add dcb, dcb.b, dcb.d, dcb.l, dcb.s, dcb.w,
	dcb.x, ds.d, ds.p, ds.s, ds.x, elsec, endc, fail, format, llen,
	noformat.
	(read_a_source_file): If pseudo-op handler is s_end, quit
	immediately.
	(s_end): New function.
	(s_fail): New function.
	(s_float_space): New function.
	(hex_float): New static function.
	(float_cons): Use hex_float.
	* read.h (s_fail): Declare.
	(s_float_space): Declare.
	* cond.c (s_end): Remove.
	* listing.c (listing_psize): Treat argument as indicating whether
	a height is expected.

	* read.c (mri_pending_align): New static variable.
	(read_a_source_file): Handle mri_pending_align.
	(cons): Set mri_pending_align if appropriate.

	* configure.in: Move random special target handling before
	possible break.
	* configure: Rebuild.

Tue Aug  8 23:41:25 1995  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* configure.in: Consistently use ${target_cpu_type} rather than
	${cpu_type} after the loop.
	* configure: Rebuild.
	* Makefile.in (targ-cpu.o): Use @target_cpu_type@ rather than
	@cpu_type@.

Tue Aug  8 17:27:17 1995  Ken Raeburn  <raeburn@cygnus.com>

	* expr.h (operatorT): Remove comma after last enumerator value.

	* config/obj-vms.c: Some whitespace cleanup from Pat Rankin.

	* as.h (alloca): If __STDC__, declare void* instead of char*.

	Wed Aug  2 18:54:37 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.c (Flush_VMS_Object_Record_Buffer,
	Close_VMS_Object_File): Reorganize the `#if !VMS' cross-assmebler
	support code.
	(Close_VMS_Object_File): Call Set_VMS_Object_File_Record to flush
	output buffer--just in case--before closing the file.

Tue Aug  8 13:07:05 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (archs): Add 68ec000, 68hc000, 68hc001,
	68ec020, 68ec030, 68ec040, and 68330.
	(md_pseudo_table): Add chip and comline.
	(m68k_init_after_args): Use strcasecmp when comparing default_cpu
	against architectures.
	(mri_chip, s_chip): New static functions.

	* struc-symbol.h (struct symbol): Add sy_mri_common bit.
	* read.h (mri_comon_symbol): Declare.
	(s_mri_common): Declare.
	* read.c (mri_line_label): New static variable.
	(mri_common_symbol): New global variable.
	(potable): Add "common" and "common.s".
	(read_a_source_file): In MRI mode, set mri_line_label for a label
	at the start of a line.
	(s_mri_common): New function.
	(s_space): Handle mri_common_symbol.
	* symbols.c (colon): Change return value from void to symbolS *,
	and return new symbol.  If mri_common_symbol is set, attach the
	new symbol to it.
	(resolve_symbol_value): Handle an sy_mri_common symbol.
	* symbols.h (colon): Change return value in declaration.
	* subsegs.c (subseg_set_rest): Clear mri_common_symbol.
	(subseg_set (both versions)): Likewise.
	* frags.c (frag_more): Warn if mri_common_symbol is not NULL.
	* write.c (adjust_reloc_syms): Skip sy_mri_common symbols.
	(write_object_file): Discard sy_mri_common symbols.
	(fixup_segment): Change relocations against sy_mri_common symbols
	to be against the common symbol itself.
	* config/obj-coff.c (yank_symbols): Discard sy_mri_common symbols.
	(fixup_segment): Change relocations against sy_mri_common symbols
	to be against the common symbol itself.
	* config/obj-aout.c (obj_crawl_symbol_chain): Discard
	sy_mri_common symbols.

	* doc/c-m68k.texi: Add documentation for CPU specific options, and
	for Motorola syntax.

	* config/m68k-parse.y (motorola_operand): For (%pc), set mode to
	DISP, not BASE.

Tue Aug  8 02:31:38 1995  Ken Raeburn  <raeburn@cygnus.com>

	* write.c (relax_align): Add extra padding for linkrelax only if
	LINKER_RELAXING_SHRINKS_ONLY is defined.
	* config/tc-i960.h (LINKER_RELAXING_SHRINKS_ONLY): Define it.
	* doc/internals.texi (Relaxation): Write up some stuff on linker
	relaxing and LINKER_RELAXING_SHRINKS_ONLY.

Mon Aug  7 17:18:10 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/m68k-parse.y: New file: bison grammar for m68k operands,
	including support for Motorola syntax.
	* config/m68k-parse.h: New file; definitions shared between
	m68k-parse.y and tc-m68k.c.
	* config/tc-m68k.c: Include m68k-parse.h.
	(enum operand_type): Move to m68k-parse.h, where it is named
	m68k_operand_type.  Rename all uses.  Rearrange somewhat.  Add
	FPREG.  Rename AOFF to DISP.  Rename AINDX to BASE.  Rename APODX
	to POST.  Rename APRDX to PRE.  Remove AMIND.  Rename MSCR to
	CONTROL.  Remove DINDR.
	(struct m68k_exp): Move to m68k-parse.h.  Remove e_beg, e_end and
	e_seg fields.  Rename e_exp to exp.  Rename e_siz to size, and
	change type to enum m68k_size.  Change all uses.
	(enum _register): Move to m68k-parse.h, where it is named
	m68k_register.  Rename all uses.  Add ZDATA0-7 and ZADDR0-7.
	(struct m68k_op): Move to m68k-parse.h.  Change all fields.
	(seg): Don't define.
	(add_exp): Remove.
	(FAIL, OK): Remove.
	(m68k_reg_parse): Move to m68k-parse.y, and rewrite.
	(SKIP_WHITE, SKIP_W): Remove.
	(try_moto_index, try_index): Remove.
	(m68k_ip_op): Move to m68k-parse.y, and rewrite to use grammar.
	(main): Remove obsolete test function.
	(m68k_ip): Extensive changes to use new grammar.
	(get_regs): Remove.
	(crack_operand): m68k_ip_op now returns 0 on success.
	(init_table): Add ssp, zd0-7 and za0-7.
	(md_assemble): Make er const.  Correct loop over operands when
	looking for error message.
	(md_begin): Set alt_notend_table for '(' and '@'.
	(get_num): Expression is already parsed.  Don't set seg.
	* configure.in: If cpu_type is m68k, put m68k-parse.o in
	extra-objects.
	* configure: Rebuild.
	* Makefile.in (DISTSTUFF): Add m68k-parse.c.
	(BISON): Use ../bison/bison if it exists.
	(BISONFLAGS): Define as empty.
	(TARG_CPU_DEP_m68k): Depend upon $(srcdir)/config/m68k-parse.h.
	(m68k-parse.c, m68k-parse.o): New targets.

Mon Aug  7 02:54:20 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-sh.c (parse_reg): Handle new FP registers.
	(get_specific): Handle new operand types.

Fri Aug  4 12:29:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* expr.c (op_encoding): Make non-const.  Don't set '"' to
	O_bit_not.
	(expr_begin): Set op_encoding['"'] in MRI mode.

Wed Aug  2 18:39:43 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c: Remove BREAK_UP_BIG_DECL stuff.
	(struct m68k_incant): Change m_operands field to be const.
	(struct m68k_it): Change args field to be const.
	(m68k_ip): Change local variable s to be const.
	(opcode_ptr): Remove.
	(md_begin): Use m68k_numopcodes, not numopcodes.  Use
	m68k_opcodes, not removed opcode_ptr.  Use m68k_numaliases, not
	numaliases.

Tue Aug  1 17:35:26 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-m68k.c (init_table): Add "control", "status", "iaddr",
	"sfcr", and "dfcr" as synonyms for existing entries.
	(md_begin): In MRI mode, force flag_reg_prefix_optional to 1.
	(md_parse_option): Removed unused locals i and arch.  Change type
	of arch (another one) to unsigned long.
	(tc_coff_sizemachdep): Add return after abort to avoid warning.

	Initial support for MRI style labels and expressions.
	* as.h (flag_mri): Declare/define.
	* as.c (show_usage): Mention -M and its synonym --mri.
	(parse_args): Add 'M' to std_shortopts.  Add "mri" to
	std_longopts.  Set flag_mri if -M is seen.
	(main): Call parse_args before input_scrub_begin.  Call
	expr_begin.
	* app.c (do_scrub_begin): Don't set lex for '"' or '\'' in MRI
	mode.  Do set lex for ';', '*', and '!' in MRI mode.
	(do_scrub_next_char): Remove MRI ifdef in LEX_IS_WHITESPACE case.
	In MRI mode, keep spaces between labels and colons.  Remove MRI
	ifndef around LEX_IS_ONECHAR_QUOTE case.  In MRI mode, don't use
	'!' or '*' as comment characters even if they are in
	comment_chars.
	* read.h (lex_type): No longer const.
	* read.c: Include libiberty.h.
	(lex_type): No longer const.
	(read_begin): In MRI mode, set lex_type of '?' to 3.
	(potable): Add dc, dc.b, dc.d, dc.l, dc.s, dc.w, dc.x, ds, ds.b,
	ds.l, ds.w, and xdef.
	(read_a_source_file): Change LABELS_WITHOUT_COLON ifdef to check
	for MRI mode at runtime rather than compile time.  Handle the EQU
	pseudo-op in MRI mode.  Remove bogus MRI ifdef around done_pseudo.
	Change NO_PSEUDO_DOT ifdef to also take effect for MRI mode at
	runtime.
	(cons): In MRI mode, always call parse_mri_cons rather than
	TC_PARSE_CONS_EXPRESSION.
	(parse_mri_cons): Always compile, not just when MRI is defined.
	Call TC_PARSE_CONS_EXPRESSION, not expression, when the input is
	not a string constant.  Handle A and E modifiers.
	(float_cons): Accept :xxxx, where the x's are hex digits.
	* expr.h (operatorT): Add O_eq, O_ne, O_lt, O_le, O_ge, O_gt.
	(expr_begin): Declare.
	* expr.c (integer_constant): In MRI mode, if the base was not
	specified, look for a suffix on the number to set the base.
	(mri_char_constant): New static function.
	(operand): Remove MRI ifdef.  In MRI mode, do various things: Pass
	0 as the base when calling integer_constant if there was no
	prefix.  Check for a hex constant suffix if when a leading '0' is
	seen.  Don't accept 0x or 0b as a prefix.  Check for E'chars' and
	A'chars'.  Handle MRI character constants.  Treat '"' as the
	unary bitwise not operator.  Treat $ as the program counter, or as
	the prefix for a hex constant.  Treat % as the prefix for a binary
	constant and @ as the prefix for an octal constant.  Treat : as
	the prefix for a hex constant.
	(op_encoding): Set '"' to O_bit_not, '<' to O_lt, and '>' to O_gt.
	(op_rank): No longer const.  Change rank values.
	(expr_begin): New function.
	(operator): New static function.
	(expr): Use operator.  Don't bother to mention the operator in
	warnings.  Remove bogus #if 0 code.  Handle new operatorT values.
	* atof-generic.c (atof_generic): In MRI mode, accept underscores
	around the exponent in floating point numbers.
	* symbols.h (symbols_case_sensitive): Declare.
	* symbols.c (symbols_case_sensitive): New global variable.
	(symbol_create): Check symbols_case_sensitive.
	(symbol_find_base): Likewise.
	(resolve_symbol_value): Handle new operatorT values.
	(print_expr_1): Likewise.
	(S_IS_LOCAL): In MRI mode, names beginning with two '?' characters
	are local.

Tue Aug  1 11:35:18 1995  steve chamberlain  <sac@slash.cygnus.com>

	* config/tc-sh.c (md_convert_frag): Make some error messages
	more explict.

Mon Jul 31 21:40:47 1995  Ken Raeburn  <raeburn@cygnus.com>

	Sat Jul 29 18:55:23 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.c (COPY_SHORT, COPY_LONG, PUT_SHORT, PUT_LONG):
	Make expansion be safe for use in expressions.
	(PUT_COUNTED_STRING): Bracket expansion with `do {...} while (0)'
	rather than just `{...}'.

Mon Jul 31 18:19:26 1995  steve chamberlain  <sac@slash.cygnus.com>

	* gasp.c (main): Parse -I option.
	(do_include): Look through include list.
	* gasp.c (change_base): Don't modify numbers in strings.

Mon Jul 31 12:16:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.h (SUB_SEGMENT_ALIGN): Define.  From Niclas
	Andersson <nican@ida.liu.se>.

Thu Jul 27 20:47:12 1995  Ken Raeburn  <raeburn@cygnus.com>

	* config/obj-coff.c (fixup_segment): Don't do further pcrel
	processing after converting difference of two symbols in the
	same segment.  From Jim Wilson.

	* configure.in (i386-*-linuxoldld): Add as synonym for
	i386-*-linux*aout*.  From Fred Fish.
	* configure: Regenerated.

Thu Jul 27 16:14:56 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.c (enum ps_type {ps_TEXT,ps_DATA,ps_COMMON,
	ps_CONST}): New constants.
	(VMS_Psect_Spec): Use them instead of literal strings.
	(vms_write_object_file, global_symbol_directory): Adjust callers.

Wed Jul 26 18:31:35 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.c (const_flag): Change from char to unsigned char.
	* config/obj-vms.h (const_flag): Ditto.
	(struct nlist): Replace union n_un and n_un.{n_name,n_next,n_strx}
	fields with just n_name; delete field n_value; change n_other from
	char to unsigned char and n_desc from short to int; insert explicit
	padding for alignment.

Mon Jul 24 20:06:17 1995  Ken Raeburn  <raeburn@cygnus.com>

	* subsegs.h (struct seg_info_trash): Make bitfield types valid.

	* config/obj-coff.c (fixup_segment): Local add_number should not
	be declared register since its address is taken for
	MD_APPLY_FIX3.

	Fri Jul 21 15:28:18 1995  Pat Rankin  <rankin@eql.caltech.edu>

	Split huge vms_write_object_file routine into managable pieces.

	* config/obj-vms.c (vms_fixup_text_section, synthesize_data_segment,
	vms_fixup_data_section, global_symbol_directory, local_symbols_DST,
	vms_build_DST): New routines.
	(vms_write_object_file): Call them.
	(struct vms_obj_state): New file scope variable used by the above.

Mon Jul 24 14:10:24 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sh.c (md_pseudo_table): Add "uses".
	(s_uses): New static function.
	(sh_coff_frob_file): New function.
	(md_convert_frag): Call subseg_change before calling fix_new.
	(sh_handle_align): New function.
	(SWITCH_TABLE): Define.
	(sh_force_relocation): New function.
	(md_apply_fix): Handle R_SH_USES, R_SH_COUNT and R_SH_ALIGN.
	(sh_coff_reloc_mangle): Likewise.  Also handle switch table
	entries.
	* config/tc-sh.h (HANDLE_ALIGN): Define.
	(sh_handle_align): Declare.
	(TC_FORCE_RELOCATION): Define.
	(sh_force_relocation): Declare.
	(TC_COUNT_RELOC): Simplify; rely on TC_FORCE_RELOCATION instead.
	(tc_frob_file): Define.
	(sh_coff_frob_file): Declare.
	* config/obj-coff.c (write_object_file): Call tc_frob_file if it
	is defined.
	(fixup_mdeps): Call HANDLE_ALIGN if it is defined.
	(TC_FORCE_RELOCATION): Define if not defined.
	(fixup_segment): Use TC_FORCE_RELOCATION to decide whether to
	clear the symbol fields of fixP.

Fri Jul 21 22:38:00 1995  Michael Meissner  <meissner@cygnus.com>

	* config/tc-ppc.c (ppc_elf_suffix): Add support for R_PPC_SDAREL
	relocation.
	(md_apply_fix3): Ditto.

Thu Jul 20 13:00:56 1995  Ken Raeburn  <raeburn@cygnus.com>

	* config/tc-m68k.c (md_convert_frag): Rename argument seg to sec,
	since seg is a macro name in this file.

	* configure.in (arm-*-riscix*): Don't set emulation.

Wed Jul 19 16:08:29 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/obj-coff.h (TE_PE): Delete.
	* config/tc-arm.h (BYTE_ORDER): Delete.
	(TARGET_FORMAT): Provide value for OBJ_COFF and TE_PE.
	(ARM_BI_ENDIAN): Define if OBJ_COFF and TE_PE.
	* config/tc-arm.c (byte_order): Delete.
	(md_number_to_chars): Reference target_big_endian, not byte_order.
	(md_chars_to_number): Likewise.
	(md_longopts): Add -EB/-EL if ARM_BI_ENDIAN.
	(md_parse_options): Recognize -EB/-EL.
	(md_show_usage): List -EB/-EL.

Wed Jul 19 11:49:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* gasp.c (process_assigns): Use toupper before comparing against
	upper case letter.
	(whatcond): Likewise.

	* config/tc-sh.c (sh_relax): Rename from relax, and make global.
	Renamed all uses.
	(insert): Pass a size of 2, not 4.
	(build_relax): Remove unused len variable.
	(md_show_usage): Mention -little option.
	(md_convert_frag): Add segT argument.  Rewrite to generate relocs
	rather than to generate complete instructions here.
	(md_apply_fix): Adjust and clarify R_SH_PCRELIMM8BY4 case for
	changes in insert and md_pcrel_from.  Add cases for R_SH_PCDISP
	and R_SH_PCDISP8BY2.
	(md_pcrel_from): Don't subtract 1, add 2.
	(tc_coff_fix2rtype): Remove.
	(sh_coff_reloc_mangle): New function.
	* config/tc-sh.h (TC_COFF_FIX2RTYPE): Just return fx_r_type.
	(sh_relax): Declare.
	(TC_COUNT_RELOC): If relaxing, count PC relative relocs.
	(TC_RELOC_MANGLE): Define.
	(sh_coff_reloc_mangle): Declare.
	(tc_coff_sizemachdep): Declare.
	* tc.h (md_convert_frag): Add segT parameter to non BFD_ASSEMBLER
	declaration.
	* write.c (cvt_frag_to_fill): Add sec argument to non
	BFD_ASSEMBLER version.  Pass it to md_convert_frag.
	(write_object_file): Pass SEG_TEXT to cvs_frag_to_fill.
	* config/obj-coff.c (do_relocs_for): Pass segment info to
	TC_RELOC_MANGLE.
	(fixup_mdeps): Pass segment type to md_convert_frag.
	* config/tc-a29k.c (md_convert_frag): Add segT argument.
	* config/tc-h8300.c (md_convert_frag): Likewise.
	* config/tc-h8500.c (md_convert_frag): Likewise.
	* config/tc-i386.c (md_convert_frag): Likewise.
	* config/tc-i860.c (md_convert_frag): Likewise.
	* config/tc-i960.c (md_convert_frag): Likewise.
	* config/tc-m68k.c (md_convert_frag): Likewise.
	* config/tc-m88k.h (md_convert_frag): Likewise.
	* config/tc-ns32k.c (md_convert_frag): Likewise.
	* config/tc-tahoe.c (md_convert_frag): Likewise.
	* config/tc-vax.c (md_convert_frag): Likewise.
	* config/tc-w65.c (md_convert_frag): Likewise.
	* config/tc-z8k.c (md_convert_frag): Likewise.
	* config/tc-h8300.h (TC_RELOC_MANGLE): Add segment argument.
	* config/tc-h8500.h (TC_RELOC_MANGLE): Likewise.
	* config/tc-w65.h (TC_RELOC_MANGLE): Likewise.
	* config/tc-z8k.h (TC_RELOC_MANGLE): Likewise.

Mon Jul 17 15:02:54 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* config/obj-vms.c (Current_Routine, Text_Psect): Delete as file
	scope variables.
	(Define_Routine, Define_Local_Symbols): Take Current_Routine and
	Text_Psect as arguments.
	(VMS_DBG_Define_Routine): Delete.
	(VMS_TBT_Block_End): Change `Size' argument from int to valueT.
	(vms_write_object_file: text and data fixup loops): Difference
	of two symbols has type offsetT rather than int; convert with
	md_number_to_chars before passing to VMS_Store_Immediate_Data.
	(vms_write_object_file: debug symbol loop): Call Define_Routine
	instead of VMS_DBG_Define_Routine.

Sat Jul 15 00:01:35 1995  Michael Meissner  <meissner@cygnus.com>

	* config/tc-ppc.c (ppc_elf_suffix): Add @fixup so that the
	compiler can mark which relocs not to complain about with
	-mrelocatable.
	(ppc_elf_validate_fix): Add .fixup to sections not to complain
	about, and also don't complain for BFD_RELOC_CTOR relocations in
	writable non-code segments.
	(md_apply_fix): Treat BFD_RELOC_CTOR just like BFD_RELOC_32.

Fri Jul 14 19:54:28 1995  Ian Lance Taylor  <ian@cygnus.com>

	Add support for SPARC SunOS PIC:
	* config/tc-sparc.h (sparc_pic_code): Always declare, not just
	when OBJ_ELF.
	(TC_RELOC_RTSYM_LOC_FIXUP): Define when OBJ_AOUT.
	(tc_fix_adjustable): New definition for OBJ_AOUT.
	* config/tc-sparc.c (sparc_pic_code): Always define, not just when
	OBJ_ELF.
	(md_apply_fix): Adjust reloc addend for OBJ_AOUT and PIC.  In
	BFD_RELOC_32_PCREL_S2 case, don't increment val for an external
	symbol when PIC.
	(tc_gen_reloc): Generate different PIC relocs when OBJ_AOUT, as
	well as when OBJ_ELF.
	(md_shortopts): If OBJ_AOUT, include `k'.
	(md_parse_option): If OBJ_AOUT, handle 'k'.
	(md_show_usage): Mention -k if OBJ_AOUT, and -KPIC if OBJ_ELF.
	(md_pcrel_from): Don't add in size for an external symbol when
	PIC.

Thu Jul 13 21:16:43 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.h (UNDEFINED_DIFFERENCE_OK): Define for SOM.
	* write.c (adjust_reloc_syms): Set sy_used_in_reloc for both
	symbols in a fixup where a defined symbol is subtracted from an
	undefined symbol (when UNDEFINED_DIFFERENCE_OK is defined).
	(fixup_segment): Do nothing for the difference of two symbols if
	UNDEFINED_DIFFERENCE_OK is defined.

Wed Jul 12 23:33:40 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (fixup_segment): Support MD_APPLY_FIX3.

Wed Jul 12 01:12:12 1995  Ken Raeburn  <raeburn@kr-pc.cygnus.com>

	* write.c (fix_new): Use int, not short int, for argument type.
	(fix_new_exp): Ditto.

	* configure.in (arm-*-riscix*): Don't set emulations.

	* config/tc-mips.c (NO_ECOFF_DEBUGGING): Define if ECOFF_DEBUGGING
	wasn't previously defined.
	(s_extern): Don't set ecoff_extern_size if NO_ECOFF_DEBUGGING.
	(nopic_need_relax): Don't check it if NO_ECOFF_DEBUGGING.
	(macro_build) [!USE_STDARG]: Don't use variadic prototype.
	(mips_local_label) [NO_ECOFF_DEBUGGING]: Don't preserve potential
	ECOFF debugging symbols.

	* emul.h (struct emulation): Use unsigned, not unsigned char, for
	bitfields.
	* obj.h (struct format_ops): Likewise.

	* config/tc-arm.c (symbol_make_empty) [BFD_ASSEMBLER]: Set
	udata.p, not udata.

Tue Jul 11 14:30:19 1995  Ian Lance Taylor  <ian@cygnus.com>

	* doc/c-mips.texi: Document -m4010 and -mno-4010.

Tue Jul 11 14:28:55 1995  Jeff Spiegel  <jeffs@lsil.com>

	* config/tc-mips.c (mips_4010): New static variable.
	(interlocks): New static variable.
	(md_begin): Check for a cpu of "r4010".  Set mips_4010 correctly.
	If mips_4650 or mips_4010, set interlocks.
	(append_insn): Check interlocks, not mips_4650.
	(mips_emit_delays): Likewise.
	(mips_ip): Only permit INSN_4010 instructions if mips_4010.
	(md_longopts): Add "m4010" and "no-m4010".
	(md_parse_option): Accept -mcpu=r4010.  Handle -m4010 and
	-no-m4010.
	(md_show_usage): Document -m4010 and -no-m4010.

Tue Jul 11 13:22:50 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (struct efdr): Add new field fake.
	(init_file): Initialize fake.
	(add_file): Add new parameter fake.  Change all callers.
	(ecoff_build_debug): Don't warn about a missing .end for a fake
	file.

Mon Jul 10 16:01:31 1995  Ken Raeburn  <raeburn@cygnus.com>

	* doc/as.texinfo: Split out most cpu chapters...
	* doc/c-*.texi: ...to here.

	* read.c (po_hash): Now static.

Mon Jul 10 13:47:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	Based on patches from H.J. Lu <hjl@nynexst.com>:
	* config/tc-i386.c (md_apply_fix3): Rename from md_apply_fix1.
	Accept pointer to value and segment.  Fix OBJ_ELF PCREL case to
	handle global defined symbols correctly.
	(md_apply_fix): Remove both versions.
	* config/tc-i386.h (MD_APPLY_FIX3): Define.

	* configure.in: When switching on ${cpu}, use ${cpu}, not
	$[target_cpu}, in default case.
	* configure: Rebuild.

Sat Jul  8 13:27:55 1995  Ian Lance Taylor  <ian@cygnus.com>

	* write.c (fixup_segment): Call resolve_symbol_value on
	sub_symbolP, in case it isn't in the symbol table.

Fri Jul  7 11:17:27 1995  Ian Lance Taylor  <ian@cygnus.com>

	* read.c (s_lcomm): For .lcomm 1, set align to 0, not 1.

	* config/obj-coff.c (coff_frob_symbol): If SF_GET_FUNCTION, set
	BSF_FUNCTION.
	(symbol_globalP, symbol_global_lastP): New global variables.
	(yank_symbols): Sort defined global symbols to the end, just
	before the undefined symbols.
	(glue_symbols): Add two arguments, and use them instead of
	referring directly to global variables.
	(crawl_symbols): Call glue_symbols twice, once for defined globals
	and once for undefined.  Add corresponding know calls.

	* app.c (do_scrub_next_char): Always accept \v.  Don't make it
	conditional on BACKSLASH_V.
	* read.c (next_char_of_string): Likewise.
	* config/obj-bout.h (BACKSLASH_V): Don't define.
	* config/tc-mips.h (BACKSLASH_V): Don't define.

	Add SPARC ELF PIC support.
	* write.c (fixup_segment): Pass fixP to TC_RELOC_RTSYM_LOC_FIXUP,
	not fixP->fx_r_type.
	* config/tc-sparc.c (sparc_pic_code): New global variable.
	(md_apply_fix): If generating PIC, adjust fx_addnumber for any non
	PC relative reloc.
	(tc_gen_reloc): If generating PIC, adjust various reloc types.
	Remove fx_pcrel assert, since it is no longer true.
	(md_parse_option): Handle -K PIC.
	* config/tc-sparc.h (sparc_pic_code): Declare if OBJ_ELF.
	(TC_RELOC_RTSYM_LOC_FIXUP): Define if OBJ_ELF.
	(tc_fix_adjustable): Don't adjust PC relative relocs if PIC.
	* config/tc-i386.h (TC_RELOC_RTSYM_LOC_FIXUP): Take a fixp, not a
	reloc type.

	* Makefile.in (Makefile): Add dependency on conf.in, so that conf
	is rebuilt when conf.in changes.

Thu Jul  6 16:49:38 1995  Ken Raeburn  <raeburn@cygnus.com>

	* All files: Updated FSF address.

Thu Jul  6 16:30:34 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* ecoff.c (add_file): Don't collapse multiple .file commands into
	a single file structure.
	(ecoff_build_lineno): Set ilineBase to sum of previous file's
	ilineBase and cline.

Thu Jul  6 12:54:27 1995  Ian Lance Taylor  <ian@cygnus.com>

	Patches from Jerry Blakely <gerry_blakley@wellfleet.com>:
	* as.c (listing_filename): New static variable.
	(show_usage): Mention -a=file.
	(parse_args): Support = option of -a to set name of listing file.
	(main): Pass listing_filename to listing_print.
	* listing.c (list_file): New static variable.
	(various): Replace printf with fprintf to list_file.
	(listing_print): If name argument is not NULL, open it as
	list_file.
	* doc/as.texinfo, doc/as.1: Document -a=file.

	* config/tc-sparc.c (s_reserve): Don't permit redefinition, even
	if the symbol was already in bss_section.  Fix warning message.

	* listing.c (struct file_info_struct): Rename end_pending field to
	at_end.
	(file_info): Initialize at_end, not end_pending.
	(buffer_line): If at_end set, just return immediately.  Don't
	worry about end_pending cases.  Set at_end when EOF is read.
	(print_source): Check at_end, not end_pending.
	(listing_listing): Likewise.

	* config/tc-alpha.h (alpha_do_align): Don't declare.
	(md_do_align): Don't define.
	(tc_frob_label): Define.
	(alpha_define_label): Declare.
	(md_flush_pending_output): Define.
	(alpha_flush_pending_output): Declare.
	* config/tc-alpha.c (insn_label): New static variable.
	(auto_align): New static variable.
	(md_pseudo_table): Add cases for .text, .data, .align, .byte,
	.hword, .int, .long, .octa, .quad, .short, .word, .double, .float,
	and .single.  Change .t_floating, .s_floating, .f_floating,
	.g_floating, and .d_floating to use s_alpha_float_cons rather than
	float_cons.
	(s_alpha_text, s_alpha_data): New static functions.
	(s_rdata, s_sdata): Clear insn_label and set auto_align.
	(s_gprel32): If auto_align, align.  Clear insn_label.
	(emit_insn): Clear insn_label.
	(s_alpha_align): New static function.
	(alpha_align): Make static.  Take label argument.
	(alpha_flush_pending_output): New static function.
	(s_alpha_cons, s_alpha_float_cons): New static functions.
	(alpha_define_label): New function.

Wed Jul  5 22:49:31 1995  Ken Raeburn  <raeburn@cygnus.com>

	* conf.in: Regenerate with autoreconf.

	Mon Jul  3 19:47:53 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.h (vms_resolve_symbol_redef): Use full prototype.
	(vms_check_for_special_label, tc_frob_label): Move them to group
	with other prototypes.
	[WANT_VMS_OBJ_DEFS]: Only define the many OBJ_x, DBG_x, and DST_x
	macros when this is defined.
	* config/obj-vms.c: Fully prototype all local functions.
	[symbolS, fragS]: Use consistently instead of their struct tags.
	[WANT_VMS_OBJ_DEFS]: Define this.
	(s_const): Make definition correctly match actual usage.
	(VMS_stab_parse): Make `expected_type' arg be int rather than char.
	(get_VMS_time_on_unix): Define as `static void'.
	(hash_string): Make definition match actual usage; argument is
	`char const *' rather than `unsigned char *'.
	(VMS_Case_Hack_Symbol, VMS_Modify_Psect_Attributes, VMS_Psect_Spec,
	VMS_Global_Symbol_Spec): Declare string args as `const char *'.
	[IS_GXX_VTABLE]: New macro.
	(vms_write_object_file: GSD loop): Use it.
	(vms_write_object_file: data segment): Reorganize `fill' loop.

Wed Jul  5 12:01:49 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-sparc.c (md_shortopts): Add "K:" if OBJ_ELF.
	(md_parse_option): If OBJ_ELF, check for -K.  Die if -K PIC, since
	PIC code is not currently supported.

	* as.c (parse_args): Change std_shortopts to be an array rather
	than a constant string.  Only include 'K' if WORKING_DOT_WORD is
	not defined.  Only check for 'K' in that case as well.
	* as.h (flag_warn_displacement): Only declare if WORKING_DOT_WORD
	is not defined.

	* conf.in: Add undef of HAVE_SBRK.

	* config/obj-coff.c (obj_coff_line): Call listing_source_line, in
	both BFD_ASSEMBLER and non BFD_ASSEMBLER versions of the function.

	* symbols.c (S_SET_EXTERNAL): Warn if symbol is weak.
	(S_CLEAR_EXTERNAL): Likewise.
	(S_SET_WEAK): Warn if symbol is global.

	* config/obj-aout.c (obj_aout_frob_symbol): Warn about an attempt
	to put an undefined symbol into a set.

	* Makefile.in: Remove @configure_input@; it's not needed in
	files named Makefile.

	* config/tc-m88k.c (md_pseudo_table): Add ".set" so that the
	explicit pseudo-op works, while continuing to treat "set" as an
	instruction.

	* ecoff.c (ecoff_debugging_seen): New global variable.
	(ecoff_directive_def): Set ecoff_debugging_seen.
	(ecoff_stab): Likewise.
	* ecoff.h: Make idempotent.
	(ecoff_debugging_seen): Declare.
	* config/tc-mips.c: Include ecoff.h.
	(mips_debug): New static variable.
	(s_stringer, s_mips_space): Remove unneeded declarations.
	(md_parse_option): In case 'g', set mips_debug to debugging level.
	(mips_local_label): New function.
	* config/tc-mips.h (LOCAL_LABEL): Call mips_local_label.
	(mips_local_label): Declare.

Wed Jul  5 00:59:22 1995  Fred Fish  (fnf@cygnus.com)

	* as.c (main):  Only use sbrk when HAVE_SBRK defined.
	* configure.in:  Add test for sbrk.
	* configure:  Regenerate using autoconf 2.4.

Mon Jul  3 15:58:16 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.h (MAX_RELOC_EXPANSION): Bump to 6.
	* config/tc-hppa.c (tc_gen_reloc, SOM version): Handle
	relocations for the difference of two (possibly external)
	symbols.
	(hppa_fix_adjustable): For SOM, reject reductions involving
	the difference of two symbols.
	(hppa_force_relocation): Force relocations for expressions
	involving the difference of two symbols.

Mon Jul  3 14:22:59 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* configure[.in] (i386-*-win32): New host and target.

Thu Jun 29 17:25:43 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	Support for long filenames non-bfd coff.
	* config/obj-coff.c (filename_list_head, filename_list_tail): New.
	(yank_symbols): Notice and record filenames which are too long.
	(w_strings): Write out filename strings.
	(c_dot_file_symbols): Put long filenames onto list.

Wed Jun 28 17:33:13 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* config/obj-coff.c (fixup_segment): PE doesn't use
	the strange common symbol format that other 386s formats
	do.
	* config/tc-i386.c (md_begin): If LEX_AT defined then
	'@' is in the set of identifiers.
	(i386_operand): If LEX_AT, then don't look for @goto stuff.
	* config/te-pe.h: Define LEX_AT.

Wed Jun 28 17:49:59 1995  Ken Raeburn  <raeburn@cygnus.com>

	* doc/as.texinfo (H8/500 Floating Point): Indicate that IEEE FP
	numbers are for the standard emulation code.
	(SH Floating Point): Ditto.
	(Overview): Describe new --emulation option for MIPS.
	* doc/*.m4: Deleted.

Thu Jun 22 19:26:25 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Sun May  7 11:53:41 MDT 1995  Bryan Ford  <baford@cs.utah.edu>

	* configure.in: Added i386-*-moss* target.

Thu Jun 22 14:41:23 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* write.c (write_object_file): Cast decode_local_label_name
	argument to char * to avoid warning.

Wed Jun 21 18:07:59 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Changes from Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>:
	* config/tc-m68k.c (insword): Increment the frag offsets.
	(struct m68k_it): Add reloc[].pcrel_fix field to hold pc-rel
	fixup.
	(add_fix): Accept additional parameter, the pc-rel fixup. All
	callers changed.  Fix offset address if width == 'b'.
	(m68k_ip) [case AINDX]: Allow explicit size spec.  Don't make the
	outer displacement pc-relative.
	(md_pcrel_from): Make it relative to the first extension word of
	the operand.
	(opcode_ptr): Make it a macro if DO_BREAK_UP_BIG_DECL is
	undefined.
	(md_convert_frag_1): Don't reference fragP->fr_opcode[2..].
	(md_estimate_size_before_relax) [case TAB (FBRANCH, SZ_UNDEF)]:
	Turn on long bit.
	(m68k_ip) [case 'C']: Don't set set long bit, set it in the opcode
	table.
	(md_estimate_size_before_relax) [case TAB (PCINDEX, SZ_UNDEF)]:
	Variable part increases by four, not six.
	* write.c (fixup_segment) [TC_M68K]: Don't do further pcrel
	processing after converting difference of two symbols in the
	same segment.

	* write.c (fixup_segment): Don't conditionalize the pcrel fix on
	TC_M68K.

	* config/tc-sparc.c (sparc_ip, case 'A'): If ASI is not a "#"
	value, don't shift it an extra time.

Wed Jun 21 14:18:37 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* gasp.c (do_print, do_form, buffer_and_nest): Use case insensitive
	string compares.

Tue Jun 20 14:55:02 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/obj-coff.c (write_object_file): Cast time() argument to
	time_t *.

Tue Jun 20 12:00:53 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_build_unwind_subspace): Fix typo in last
	change.

Mon Jun 19 15:27:17 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_build_unwind_subspace): Zero out memory
	from frag_more calls.

Thu Jun 15 16:53:37 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* config/obj-coff.c: Don't use "bfd/" when including libbfd.h
	and libcoff.h.
	(fill_section): Call PROGRESS.
	* Makefile.in (INCLUDES): Add bfd srcdir.

	* mpw-config.in: Add bfd_gas flag and set for each config.
	(i386-unknown-go32, m68k-unknown-coff): Recognize.
	* mpw-make.in (HACK_O_RAMA, OBJ_COFF_OMIT_TIMESTAMP): Add to
	config.h.

Thu Jun 15 10:04:26 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-arm.h (LOCAL_LABEL): Prepend '.' if not OBJ_AOUT.
	(FAKE_LABEL_NAME): Likewise.

Mon Jun 12 22:25:39 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_ip): Check for invalid register in single
	precision fmpyadd and fmpysub instructions.

Thu Jun  8 19:33:02 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.c (myname): Delete all references.
	(VMS_stab_parse, Write_VMS_MHD_Records, VMS_Case_Hack_Symbol):
	Replace printf calls with as_tsktsk.
	(PUT_LONG, PUT_SHORT): Use COPY_LONG, COPY_SHORT.
	(VMS_Store_Immediate_Data): Move second buffer capacity check
	below bottom of loop; first check at top suffices for loop itself.
	(find_file): Remove redundant pointer checks in first two loops;
	replace third loop with pointer to last list element determined
	in first loop.

Tue Jun  6 13:53:06 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-sparc.c (sparc_ip): Handle defined absolute symbols as
	ASI values.

	* config/obj-vms.c (vms_write_object_file, case N_DATA): Use
	strcmp against FAKE_LABEL_NAME instead of checking third
	character.  (Suggested by Pat Rankin.)

Mon Jun  5 20:10:46 1995  Pat Rankin  (rankin@eql.caltech.edu)

	Add support for N_ABS and N_ABS|N_EXT type symbols.

	* config/obj-vms.h (LSY_S_M_{DEF,REL}, ENV_S_M_{DEF,NESTED}):
	New macros for local symbols (from <lsydef.h> and <envdef.h>).
	* config/obj-vms.c (Current_Environment): New file-scope variable.
	(VMS_Local_Environment_Setup): New routine.
	(GBLSYM_LCL): New macro.
	(VMS_Global_Symbol_Spec): Handle local symbols too.
	(VMS_Psect_Spec): Set GLOBALVALUE_BIT for absolute symbols.
	(VMS_Emit_Globalvalues): Handle local and global absolute symbols.
	(VMS_Store_PIC_Symbol_Reference): Ditto.
	(vms_write_object_file: GSD symbol loop): Ditto.

Mon Jun  5 16:10:40 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* config/tc-arm.h (LOCAL_LABELS_FB): Define.

Mon Jun  5 02:17:58 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	* configure.in (i386-*-gnu*): Always use GNU ELF config.

Wed May 31 17:49:18 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.c (obj_crawl_symbol_chain): Update *symbolPP
	in `else' clause when removing a symbol.  Also, revise comments
	to match the code.
	(vms_write_object_file (GSD symbol loop, case N_DATA)): Never
	output symbol definitions for local numeric labels.

Tue May 30 18:29:10 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* configure.in (architecture variants, cases armeb and arm*): Remove
	spaces round assignment to endian.

Tue May 30 12:31:31 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* write.c (write_object_file): Check for undefined local dollar
	and fb labels.

	* symbols.c (decode_local_label_name): Extract instance number
	from the correct location.

Sat May 27 21:28:49 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config/te-dpx2.h: Include obj-format.h.
	(COFF_MAGIC): Renamed from FILE_HEADER_MAGIC.

Wed May 24 13:45:32 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* configure, configure.in, config/obj-coff.c, config/obj-coff.h:
	Add support for ARM pe

Tue May 23 17:00:32 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/tc-sparc.c (tc_gen_reloc): Handle BFD_RELOC_SPARC_WDISP16
	and BFD_RELOC_SPARC_WDISP19.

Tue May 23 19:18:33 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* as.c (parse_args) [! USE_EMULATIONS]: Always print an error
	message.

	* doc/internals.texi: Document obj_app_file and
	TARGET_BYTES_BIG_ENDIAN.

Mon May 22 20:03:23 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* ecoff.c (ecoff_stab): Add extra leading argument, for 4 May
	change.
	* ecoff.h (ecoff_stab): Fix declaration.
	* obj.h (format_ops.process_stab): Include prototype.
	* config/obj-elf.h (OBJ_PROCESS_STAB): Pass through seg argument.
	* config/obj-ecoff.h (OBJ_PROCESS_STAB): Ditto.

	* config/e-mipself.c (mipself): New emulation mode, doesn't change
	endianness from configured default.
	* config/e-mipsecoff.c (mipsecoff): Ditto.
	* configure.in (mips ecoff/elf targets): Include them.
	* as.c (mipself, mipsecoff): Declare.

	* as.c (emulation_name): New variable.
	(select_emulation_mode): Set emulation_name.  Don't change argv.
	(parse_args): Handle --emulation; complain if the supplied name
	isn't what select_emulation_name came up with.

Sun May 21 21:36:17 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c: Reverse changes from Dec. 19th which
	changed the way unwinds were built for ELF.  Rely on relocation
	symbol reductions to avoid placing the end of function marker
	symbols into the object file's symbol table.

Sat May 20 12:31:36 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	Added improved VMS support from Pat Rankin:

	Fri 19 May 16:51:40 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.h (AOUT_STABS): Define.

	* config/obj-vms.c (fpush, rpush): New routines.
	(push): Replaced by the above.
	(find_symbol): Slight reorganization to expose tail recursion.

	Fri Mar 17 18:40:36 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* Makefile.in (VMS_OTHER_OBJS):  delete this.
	* vmsconf.sh (make-gas.com):  build ../libiberty/liberty.olb
	first if necessary; link gas against it.

Fri May 19 16:37:39 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* gasp.c (istrue): Correctly test for string inequality.

Thu May 18 04:25:11 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)

	* config/tc-arm.c (CP_T_{Pre,UD,WB}): Define, bits in co-processor
	instructions.
	([ls]fm_flags): Correct error in bitmasks.
	(cp_address_required_here): Delete second parameter, FLAGS.  All
	callers changed.  Remove all dead code referring to FLAGS.  If
	address is just "[Reg]" then convert into a PRE-INCREMENT UP format.
	(do_fp_ldmstm): Handle full-descending and empty-ascending stack
	formats explicitly.

	* config/tc-arm.c (internalError): Define.
	(ARM_{1,2,250,3,6,7,7DM,ANY,2UP,ALL,3UP,6UP,LONGMUL}): Define processor
	variants.
	(FPU_{CORE,FPA10,FPA11,NONE,ALL,MEMMULTI}): Define floating point
	variants.
	({CPU,FPU}_DEFAULT): Define.
	(cpu_variant): New variable.
	(asm_flg): Change more_flags to flag_bits.
	Add prototypes for new functions.
	(FLAG_{S,P,B,T,ED,FD,FA,EA,IB,IA,DB,DA,L}): Delete.
	(s_flag[], ldst_flags[], byte_flag[], cmp_flags[], ldm_flags[],
	 stm_flags[], lfm_flags[], sfm_flags[], round_flags[], except_flags[],
	 cplong_flag[]): New variables.
	(asm_opcode, insns[]): New format, add version support.
	(arm_flg_hsh): Delete.
	(do_mul, do_mla): Remove "Warning" from warning messages.
	(do_arit): Simplify.
	(do_swap): Make error message more appropriate.
	(md_begin): Build hash tables starting at first entry in tables.
	(md_number_to_chars): Cope with big/little-endian selection.
	(md_chars_to_number): New function.
	(md_apply_fix): Rewrite to make endian independent.
	(tc_gen_reloc): Better error messages.
	(md_assemble): Reject opcodes forbidden by the currently selected cpu
	variant.  Rewrite handling code for instruction flags.
	(md_shortopts): Add option "m:".
	(md_parse_option): Get the desired cpu/fpu variant.

	From: David Taylor (dtaylor@armltd.co.uk)
	* configure.in (architecture variants): Check for "armeb" and "arm*",
	set endianness accordingly.
	* read.c (read_a_source_file): New hooks md_start_line_hook and
	md_after_pass_hook.
	* config/arm-{big,lit}.mt: New files
	* config/tc-arm.h ({LITTLE,BIG}_ENDIAN, BYTE_ORDER): Define.
	(TARGET_FORMAT): Select depending on endianness and emulation and
	object format.
	(md_after_pass_hook, md_start_line_hook): Define.
	* config/tc-arm.c: Include subsegs.h, symbols.h and listing.h.
	(shift[]): Add uppper case equivalents.
	(CP_T_[XY], TRANS_BIT): Define.
	(conds[]): Delete initial NULL entry, add "lo" entry as synonym for
	"cc".
	(LONGEST_FLAG, flags[]): Delete.
	(arm_psr): New structure.
	(psrs[]): New variable.
	(PSR_ALL): Define.
	(LONGEST_INST): Bump to 5.
	(LITERAL_MASK, COND_MASK, OPCODE_MASK, DATA_OP_SHIFT): Define.
	(OPCODE_{AND,EOR,SUB,RSB,ADD,ADC,SBC,RSC,TST,TEQ,CMP,CMN,ORR,MOV,BIC,
	 MVN}): Define.
	(insns[]): Add smull, umull, smlal, umlal, ldfm, stfm, msr and mrs
	instructions.  Add nop and adr pseudo ops.
	(reg_table): Add APCS register name variants.
	(arm_psr_hsh): New hash table.
	(md_pseudo_table): Add "ltorg", "pool", "extend", "ldouble" and
	"packed".
	(MAX_LITERAL_POOL_SIZE): Define.
	(struct literalS): New structure.
	(literals, next_literal_pool_place, lit_pool_num, current_poolP): New
	variables.
	(add_to_lit_pool, symbol_locate, symbol_make_empty): New functions.
	(validate_immediate): Return FAIL on failure.
	(s_ltorg): New function.
	(psr_required_here, psrf_required_here): New functions.
	(cp_address_required_here): New parameter, flag, all callers changed.
	If flag is non-zero, restrict the legal addressing modes.
	(do_nop, do_mrs, do_msr, do_mull): New functions.
	(negate_data_op): New function.
	(data_op2): accept #x,y meaning x rotated right by y, but only when
	suitable constants.  If immediate is not legal, try changing the
	opcode.
	(do_adr): New function.
	(do_ldst): accept "ldr reg, =expr".  Put expr in the pool if it can't
	be done as an immediate.
	(do_fp_ldst): Use CP_T_[XY], not immediate values.
	(do_fp_ldmstm): New function.
	(arm_psr_parse): New function.
	(output_inst): Use INSN_SIZE in call to md_number_to_chars.
	(md_assemble): Add hack so that "Label instruction" causes alignment of
	the label.
	(arm_after_pass_hook, arm_start_line_hook, arm_frob_symbol): New
	functions.

Wed May 17 05:25:16 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (md_show_usage): Add \'s at end of lines in
	strings for non-GCC compilers.

Tue May 16 19:36:00 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/obj-ecoff.c (ecoff_pop_insert): New function.
	(ecoff_format_ops): Use it.
	(obj_ecoff_frob_symbol): Now static.

Wed May 17 00:59:12 1995  Andrew Cagney - aka Noid  <cagney@highland.com.au>

	* config/tc-ppc.c (md_begin): Was assuming that an instruction was
	bigendian and hence 16bit relocs withing instructions would
	ALWAYS be at addresses i+2-i+3.  In LE mode it is i+0-i+1.

Tue May 16 16:29:58 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/obj-multi.h (obj_frob_symbol, obj_frob_file, S_GET_SIZE,
	S_SET_SIZE, S_GET_ALIGN, S_SET_ALIGN, obj_copy_symbol_attributes,
	OBJ_PROCESS_STAB): New macros.
	* config/tc-mips.c: Protect against redefining them also when
	including obj-elf.h.  Test only OBJ_ELF for including elf/mips.h.
	(mips_init_after_args): New function.  Set byte_order here.
	(md_parse_option): Not here.
	(byte_order): Don't bother initializing.
	* config/tc-mips.h (mips_init_after_args): Declare.
	(tc_init_after_args): New macro.

	* read.c (s_lcomm): Do ELF/ECOFF test at run time, not compile
	time.

Fri May 12 14:17:47 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	Initial support for PE object files.
	* configure.in, configure (i386-*-pe, i386-*-*nt): Add.
	* config/obj-coff.c (fixup_segment): Cope with PE wierdness.
	* config/obj-coff.h (TE_PE): New target format.

Thu May 11 14:58:21 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/obj-elf.c (NEED_ECOFF_DEBUG): Define if ECOFF_DEBUGGING
	was defined by header files.  Test in preprocessor conditionals
	instead of ECOFF_DEBUGGING.
	(ecoff_debug_pseudo_table): Make empty if NEED_ECOFF_DEBUG is not
	defined.
	(obj_read_begin_hook, obj_symbol_new_hook, elf_frob_symbol,
	elf_frob_file): Only call ecoff routines if NEED_ECOFF_DEBUG is
	defined.
	(elf_ecoff_set_ext, elf_get_extr, elf_set_index): Define only if
	NEED_ECOFF_DEBUG is defined.
	(elf_format_ops): Reference elf_ecoff_set_ext only if
	NEED_ECOFF_DEBUG.

Wed May 10 18:09:12 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (OBJS): Include @extra_objects@.
	(obj-elf.o, obj-ecoff.o, e-mipself.o, e-mipsecoff.o): New rules
	for building these independently.
	* emul-target.h, config/e-mipself.c, config/e-mipsecoff.c: New
	files.

	* acconfig.h (DEFAULT_EMULATION, EMULATIONS, USE_EMULATIONS,
	OBJ_MAYBE_*, I386COFF, M68KCOFF, M88KCOFF): New macros.
	* aclocal.m4 (GAS_UNIQ): New macro.

	* as.c (emulations, n_emulations) [USE_EMULATIONS]: New variable.
	(select_emulation_mode, default_emul_bfd_name, common_emul_init)
	[USE_EMULATIONS]: New functions.
	(main) [USE_EMULATIONS]: Call select_emulation_mode before other
	initialization.
	* emul.h: New file.
	* as.h [USE_EMULATIONS]: Include it.

	* configure.in: Handle enable-targets option.  Iterate over target
	list, building up a list of object file formats and emulation
	configurations.  (Only supports emulations for MIPS CPU so far.)
	If multiple formats are needed, set obj_format to multi and add
	format config files to extra_files.  If emulation modes are
	needed, add the relevant files to extra_files.

	* configure.in: Define I386COFF, M68KCOFF, M88KCOFF for those
	configurations.

	* ecoff.c (ecoff_generate_asm_lineno): Filename argument now
	points to const.
	* ecoff.h (ecoff_generate_asm_lineno): Updated declaration.

	* obj.h (obj_read_begin_hook): Don't declare function if it's
	already a macro.

	* read.c (s_space, cons, stringer): If md_flush_pending_output is
	defined, call it on entry.
	* config/obj-elf.c (obj_elf_section): If md_flush_pending_output
	is defined, call it on entry.  If md_elf_section_change_hook is
	defined, call it before returning normally.

	* read.h (target_big_endian): Declare.

	* obj.h (struct format_ops): Added new function pointer fields
	ecoff_set_ext, read_begin_hook, symbol_new_hook.
	(ecoff_format_ops, elf_format_ops): Declare.
	* config/obj-elf.c (elf_s_get_size, elf_s_set_size,
	elf_s_get_align, elf_s_set_align, elf_copy_symbol_attributes,
	elf_sec_sym_ok_for_reloc): New functions.
	(elf_format_ops): New variable.
	(elf_frob_symbol): Now takes additional int* argument.
	* config/obj-elf.h (elf_frob_symbol): Update declaration.
	(elf_pop_insert): Declare.
	(obj_pop_insert): Define to call elf_pop_insert.
	* config/obj-ecoff.c (ecoff_sec_sym_ok_for_reloc,
	obj_ecoff_frob_symbol): New functions.
	(ecoff_format_ops): New variable.

	* config/te-generic.h: If OBJ_HEADER is defined, use it as the
	filename to include in place of obj-format.h.
	* config/te-multi.h: New file, copied from te-generic.h.
	* config/obj-elf.c (OBJ_HEADER): Define it to "obj-elf.h".
	* config/obj-ecoff.c (OBJ_HEADER): Define it to "obj-ecoff.h".

	* config/obj-elf.c (ECOFF_DEBUGGING): Default to 0.
	(obj_read_begin_hook, obj_symbol_new_hook, elf_frob_symbol,
	elf_frob_file): Test it at run time.
	(obj_ecoff_set_ext, elf_get_extr, elf_set_index): Define
	unconditionally.
	(elf_pseudo_table): Renamed from obj_pseudo_table, now static.
	(ecoff_debug_pseudo_table): Split off into separate table.  Define
	it unconditionally.
	(elf_pop_insert): New function.
	* config/obj-elf.h (elf_pop_insert): Declare.
	(obj_pop_insert): New macro.
	(obj_ecoff_set_ext) [!OBJ_MAYBE_ELF]: Define to elf_ecoff_set_ext.
	* config/obj-ecoff.h (obj_ecoff_set_ext): Define to ecoff_set_ext.

	* config/tc-mips.h: Protect against multiple inclusions.
	(mips_pop_insert): Declare.
	(md_pop_insert): Call it.

	* config/tc-mips.c: If OBJ_MAYBE_ELF is defined, include
	obj-elf.h, but preserve OUTPUT_FLAVOR and protect some other
	macros from redefinition.
	(ECOFF_DEBUGGING): Default to 0.  All references changed to
	run-time tests or made unconditional.
	(s_stringer, s_mips_space, s_elf_section): Deleted.
	(md_pseudo_table): Don't refer to them.  Split table into three
	sections, for MIPS, non-ECOFF_DEBUGGING, and ELF.
	(mips_pop_insert): New function.
	(mips_flush_pending_output): New function.
	(mips_enable_auto_align): New function.
	* config/tc-mips.h (mips_pop_insert): Declare.
	(md_pop_insert): New macro.
	(mips_flush_pending_output): Declare.
	(md_flush_pending_output): New macro.
	(mips_enable_auto_align): Declare.
	(md_elf_section_change_hook): New macro, calls
	mips_enable_auto_align.

Tue May  9 17:07:41 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: Add little endian PowerPC support.
	* configure: Rebuild with autoconf.
	* config/ppc-big.mt: New file for big endian PowerPC systems.
	* config/ppc-lit.mt: New file for little endian PowerPC systems.

	* config/tc-ppc.h (target_big_endian): Declare.
	(TARGET_FORMAT): Deal with little and big endian ELF variants.
	(TARGET_BYTES_BIG_ENDIAN): Define as 1, not empty.

	* config/tc-ppc.c (ppc_big_endian): Delete variable, use
	target_big_endian instead.
	(md_parse_option): Parse -mlittle and -mlittle-endian to use
	little endian support.  Parse -mbig and -mbig-endian to use big
	endian support.
	(md_show_usage): Update to reflect current switches.
	(ppc_set_cpu): Recognize powerpcle as little endian PowerPC.  Use
	as_fatal, not abort if unknown machine.

Tue May  9 10:58:41 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_apply_fix): Cast *valp to an integer when
	comparing against signed values.
	(hppa_force_relocation): Make "distance" an integer.

Tue May  9 00:47:03 1995  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* obj.h (struct format_ops) [BFD_ASSEMBLER]: New type.
	(this_format) [BFD_ASSEMBLER]: Declare new variable, if not
	already defined as a macro.

Mon May  8 21:44:13 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* subsegs.h (seg_info): Provide dummy version for
	non-BFD_ASSEMBLER, non-MANY_SEGMENTS configuration.  It should
	never get invoked, but this is easier than conditionalizing some
	of the uses.
	(struct seg_info_trash): Dummy type used by above to make code
	compile.

Fri May  5 14:47:13 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/obj-coff.h (SEPARATE_STAB_SECTIONS): Define to 1, not
	empty.
	* config/obj-elf.h (SEPARATE_STAB_SECTIONS): Ditto.
	* config/obj-som.h (SEPARATE_STAB_SECTIONS): Ditto.

Thu May  4 19:26:55 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* stabs.c (get_stab_string_offset): Always define.  If
	SEPARATE_STAB_SECTIONS isn't set, abort.
	(SEPARATE_STAB_SECTIONS): Default to zero.
	(aout_process_stab): New function, split out from s_stab_generic.
	(OBJ_PROCESS_STAB) [AOUT_STABS]: Define to call aout_process_stab,
	if not already defined.
	(s_stab_generic): Test SEPARATE_STAB_SECTIONS at run time.  If
	it's not set, and OBJ_PROCESS_STAB isn't defined, abort.  Always
	pass six arguments to OBJ_PROCESS_STAB.
	* read.h (get_stab_string_offset): Declare unconditionally.
	* config/obj-aout.h (AOUT_STABS): Define.
	* config/obj-bout.h (AOUT_STABS): Define.
	* config/obj-ecoff.h (OBJ_PROCESS_STAB): Add new first argument,
	ignored.
	* config/obj-elf.h (OBJ_PROCESS_STAB) [ECOFF_DEBUGGING]: Ditto.

	* config/obj-ecoff.h (ECOFF_DEBUGGING): Define to 1, not empty.
	* config/obj-elf.h (ECOFF_DEBUGGING): Ditto.  Test value, not
	whether it's defined.

Wed May  3 21:38:20 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* as.h (LOCAL_LABELS_DOLLAR, LOCAL_LABELS_FB): If not already
	defined, define them to zero.
	* config/tc-*.h, config/te-*.h: If defining them, define them to
	be 1 instead of empty.
	* expr.c (integer_constant, operand): Test them at run time
	instead of compile time.
	* read.c (read_a_source_file): Ditto.
	* symbols.c (colon): Ditto.
	(dollar_*, define_dollar_label, fb_*): Define unconditionally.
	* symbols.h (dollar_*, define_dollar_label, fb_*): Declare
	unconditionally.

Wed May  3 13:08:53 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_apply_fix): Do nothing for an out of range
	PC relative call since those only occur in cases where the linker
	can fix them up.
	(hppa_force_relocation): Force relocations for out of range PC
	relative calls.

Tue May  2 16:34:47 1995  Jeff Law  (law@snake.cs.utah.edu)

	* configure (hppa*-*-lites*): Handle just like hppa*-*-*elf*.
	* configure.in: Likewise.

Tue May  2 11:22:00 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* read.c (pop_insert): New function.
	(pop_override_ok, pop_table_name): New variables.
	(md_pop_insert, obj_pop_insert): New macros.
	(pobegin): Use them.

	* config/tc-mips.c: Use USE_STDARG and USE_VARARGS instead of
	NO_STDARG &c.

	* read.c (target_big_endian): If TARGET_BYTES_BIG_ENDIAN is
	defined, initialize to 1.
	* config/tc-mips.c (mips_target_format): Changed to a function,
	checking flavor and byte order at run time.
	(md_parse_option, cases OPTION_EB and OPTION_EL): Set
	target_big_endian here.
	(md_begin): Not here.
	* config/tc-mips.h (mips_target_format): Adjust declaration.
	(TARGET_FORMAT): Call mips_target_format.

	* config/tc-mips.h (USE_GLOBAL_POINTER_OPT): Define in terms of
	OUTPUT_FLAVOR.
	* config/tc-mips.c (g_switch_value, g_switch_seen): Define
	unconditionally.
	(md_begin, mips_ip, md_parse_option, s_change_sec, s_option,
	s_abicalls, nopic_need_relax): Check USE_GLOBAL_POINTER_OPT at run
	time, instead of compiling conditionally on GPOPT.
	(GPOPT): Don't define.
	(md_shortopts): Always include -G.
	(RDATA_SECTION_NAME): Select at run time.
	(md_begin): Test for ELF format at run time instead of compile time.
	(mips_ip, s_change_sec): Ditto.
	(md_parse_option, cases OPTION_CALL_SHARED and OPTION_NON_SHARED):
	Ditto.
	(OPTION_CALL_SHARED, OPTION_NON_SHARED, mips_regmask_frag): Define
	unconditionally.

Tue May  2 00:17:04 1995  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* Makefile.in (TARG_CPU_DEP_*): New variables.
	(targ-cpu.o): Depend on one, selected by autoconf substitution,
	instead of TARG_CPU_DEPENDENTS.
	* configure.in: Substitute $cpu_type, $obj_format, $atof, and
	$emulation into Makefile.in.
	* config/h8300.mt: Deleted.
	* config/h8500.mt: Deleted.
	* config/i386coff.mt (TARG_CPU_DEPENDENTS): Deleted.
	* config/m68k.mt: Deleted.
	* config/m68kcoff.mt (TARG_CPU_DEPENDENTS): Deleted.
	* config/m88kcoff.mt (TARG_CPU_DEPENDENTS): Deleted.
	* config/mips-big.mt (TARG_CPU_DEPENDENTS): Deleted.
	* config/mips-lit.mt (TARG_CPU_DEPENDENTS): Deleted.
	* config/sh.mt: Deleted.
	* config/w65.mt: Deleted.
	* config/z8k.mt: Deleted.

	* config/te-dpx2.h (dpx2): Deleted unused macro.
	* config/te-generic.h (TE_GENERIC): Ditto.
	* config/te-go32.h (TE_GO32): Ditto.
	* config/te-hp300.h (TE_HP300): Ditto.
	* config/te-hppa.h (PA, _TE_PA_H): Ditto.
	* config/te-ic960.h (TE_IC960): Ditto.
	* config/te-nbsd532.h (TE_NETBSD532): Ditto.
	* config/te-pc532mach.h (TE_PC532MACH): Ditto.
	* config/te-ppcnw.h (TE_PPCNW): Ditto.
	* config/te-sco386.h (scounix): Ditto.

Mon May  1 15:59:56 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* read.c (s_app_file): If obj_app_file is defined, call it with
	string as argument.  Don't call c_dot_file_symbol or
	elf_file_symbol.
	* config/obj-coff.h (obj_app_file): Define as c_dot_file_symbol.
	* config/obj-elf.h (obj_app_file): Define as elf_file_symbol.

	* as.h (OUTPUT_FLAVOR): Don't define here.
	* config/obj-aout.h (OUTPUT_FLAVOR) [BFD_ASSEMBLER]: Define.
	* config/obj-bout.h (OUTPUT_FLAVOR): Define.
	* config/obj-coff.h (OUTPUT_FLAVOR) [BFD_ASSEMBLER]: Define.
	* config/obj-ecoff.h (OUTPUT_FLAVOR): Define.
	* config/obj-elf.h (OUTPUT_FLAVOR): Define.

Thu Apr 27 20:07:33 1995  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (RUNTEST): Use one in srcdir if present.
	(RUNTESTFLAGS): Define.

Wed Apr 26 15:54:10 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Support for more portable alignment handling in assembly code,
	based on patches from Bryan Ford <baford@schirf.cs.utah.edu>:
	* read.c (potable): Added balign and p2align, for aligning by
	bytes or powers of two independent of what ".align" does for a
	given target.
	* doc/as.texinfo: Document them.

Tue Apr 25 11:12:04 1995  Rob Savoye  <rob@thepub.cygnus.com>

	* configure, configure.in: Look for m68k-*-vxworks* rather than
	just m68k-wrs-vxworks so gas can be configured for
	m68k-vxworks5.1.

Fri Apr 21 15:19:06 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-sh.c (md_apply_fix): If fx_r_type is zero, handle
	fx_size of 1, and abort on unrecognized sizes.

	* config/tc-m68k.c (m68k_ip): Fix bug in last change regarding
	non-isvar case.

Sun Apr 16 01:52:52 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	* config/tc-m68k.h (md_relax_table, TC_GENERIC_RELAX_TABLE):
	Missed this one in 11 Apr changes.

	* config/tc-i386.h (TC_GENERIC_RELAX_TABLE): Fix typo.

Thu Apr 13 18:18:08 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-sh.c (md_convert_frag): Instead of aborting on large
	displacements, print an error message.  Don't invoke the code that
	followed the abort call until it's been verified.

	* config/tc-m68k.c (md_show_usage): Add 68060 to list.  Split cpu
	list into three lines.

Thu Apr 13 14:34:36 1995  Torbjorn Granlund  <tege@adder.cygnus.com>

	* config/tc-m68k.c (m68k_init_after_args): Test for m68360.
	(md_parse_option): Likewise.
	(md_show_usage): Mention m68360.
	* config/tc-m68k.h (TARGET_WORD_SIZE): Define.
	(TARGET_ARCH): Define.

	* expr.c (integer_constant): If TARGET_WORD_SIZE is defined,
	sign-extend appropriately.

Thu Apr 13 11:20:17 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_validate_fix): Properly use PARAMS to
	hide prototype from non-ANSI compilers, and don't use ANSI syntax
	for arguments.

Wed Apr 12 12:20:19 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in (TDEFINES): Put empty definition into
	makefile fragment.
	* mpw-make.in (xmalloc.c.o): Remove.
	(as.new): Depend on Version.r.
	(Version.r): Generate from version info.

	* mpw-make.in: Delete references to hex-value.c.

	* mpw-config.in: Add mapping from configs to object file formats,
	get VERSION from Makefile.in and add to mk.tmp.
	(mips-idt-ecoff) [TDEFINES]: Add TARGET_BYTES_BIG_ENDIAN.
	* mpw-make.in (VERSION, gC): Don't define.
	(ALL_CFLAGS): Remove -d flags.
	(config.h): Remove definition of MPW, add HAVE_STDARG_H,
	BFD_ASSEMBLER.

	* mpw-make.in (ALL_CFLAGS): Add definition of HAVE_STDARG_H,
	include of ::libiberty:.
	(config.h): Ifdef contents on GAS_VERSION.

	* mpw-make.in (as.c): Compile with C not gC.
	(config-stamp): Touch correctly.
	(install-only): New target.
	(install): Depend on all and install-only.

	* mpw-config.in: Parse target and use to generate forward includes
	to tc-, obj-, and atof- files, use te-generic.h for emulation.
	* mpw-make.in (VERSION): Define.
	(as.c): Compile with GCC.
	(TARG_OBJECTS, CLIBS): Define.
	(as.new): Use LDFLAGS, TARG_OBJECTS, CLIBS and EXTRALIBS in link
	command.
	(config.h, config-stamp): Build.

	* mpw-make.in (C, CFLAGS): Removed definitions.
	(ALL_CFLAGS): Define.
	Set default rule to use {CC} instead of {C}.

	* mpw-make.in (install): Moved here from mpw-build.in.
	* mpw-build.in: Removed, functionality in mpw-make.in

	* mpw-make.in (CFLAGS): Add more include paths.

	* mpw-config.in (varargs.h, sys/*.h): Don't create when
	configuring.
	* mpw-make.in (CFLAGS): Add -w flag.

	* mpw-make.in: Replace 8-bit chars with their names.

	* mpw-config.in: New file, MPW version of configure.in.
	* mpw-make.in: New file, MPW version of Makefile.in.

Tue Apr 11 01:42:36 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* configure.in: Require at least autoconf 2.3, because earlier
	versions lose on some AIX versions.
	* configure: Regenerated.

	* configure.in: Add m68k-*-elf.
	* config/tc-m68k.c (comment_chars) [OBJ_ELF]: Include '#'.
	(md_pseudo_table) [OBJ_ELF]: Ignore "swbeg".
	(md_begin): Set alt_notend_table['&'], so svr4-style immediate
	operands are accepted.
	(md_apply_fix): Argument VALP should point to valueT.
	(md_convert_frag): Argument SEC should be type segT.
	(md_shortopts) [OBJ_ELF]: Accept 'Q' with an argument.
	(md_parse_option): Ignore it.
	(md_convert_frag_1): Add in frag address for the symbol in the
	displacement calculation.
	* config/tc-m68k.h (TARGET_FORMAT) [OBJ_ELF]: Use "elf32-m68k".
	(TARGET_ARCH): Define.
	(REGISTER_PREFIX_OPTIONAL) [OBJ_ELF]: Default to 0.
	(LOCAL_LABEL, FAKE_LABEL_NAME, REGISTER_PREFIX_OPTIONAL): Handle
	these the same way for OBJ_ELF as for M68KCOFF.

	* gdbinit.in: Add breakpoint in as_abort.

	* write.c (cvt_frag_to_fill): If offset is less than zero,
	complain about it specifically, instead of reporting an assertion
	failure.
	(relax_segment): Complain about .org backwards, then ignore it.
	Do generic rs_machine_dependent relaxation only if
	TC_GENERIC_RELAX_TABLE is defined, and use its value for the base
	of the table.
	* tc.h (md_relax_table): Delete declaration.
	* as.h (struct relax_type): Add forward declaration for type.
	* config/tc-a29k.c: Deleted md_relax_table.
	* config/tc-{alpha,arm,h8300,hppa,i860,m88k,mips,ppc,sparc,z8k}.c:
	Ditto.
	* config/tc-{h8500,i386,i960,ns32k,sh,tahoe,vax,w65}.h: Declare
	md_relax_table here, and define TC_GENERIC_RELAX_TABLE to expand
	to md_relax_table.
	* config/tc-h8500.c (md_relax_table): No longer const.
	* config/tc-w65.c (md_relax_table): Ditto.
	* config/tc-sparc.c (md_short_jump_size, md_long_jump_size):
	Deleted.
	* doc/internals.texi: Describe TC_GENERIC_RELAX_TABLE and
	WORKING_DOT_WORD.  Mention md_*_jump_size (but description needs
	to be fleshed out later).  Note m68k PCINDEX mode has been checked
	in.

Mon Apr 10 15:57:42 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-mips.c (nopic_need_relax): New static function, split
	out from md_estimate_size_before_relax.
	(md_estimate_size_before_relax): Call it.
	(load_address, macro): In NO_PIC branches, if nopic_need_relax
	returns nonzero, don't attempt GP optimization.

	* config/tc-m68k.c (PCINDEX): New macro.
	(md_relax_table): No longer const.  Add PCINDEX entries.
	(m68k_ip): For AINDX with simple symbol operand, generate a
	PCINDEX frag if PC is used, or do normal non-AINDX processing for
	address register.
	(m68k_init_after_args): If cpu is 68000 or 68010, fix
	md_relax_table to prevent relaxation of PCINDEX/BYTE mode to
	SHORT, since they don't support that mode.
	(md_convert_frag_1, case PCLEA/LONG): Add 4 to offset, not 2.  Add
	support for new PCINDEX modes.
	(md_estimate_size_before_relax): Process PCINDEX/SZ_UNDEF mode.

	* config/tc-m68k.c (md_convert_frag_1, case PCLEA/SHORT): Add 2 to
	offset.
	(m68k_ip, case most punctuation/AOFF): If using PC, call add_frag
	using PCLEA.

	* config/tc-m68k.c: Don't explicitly include config.h.  Deleted a
	bunch of "#if 0" code and useless comments.
	(struct m68k_cpu): New type.
	(archs, n_archs): New variables, with single list of name/enum
	mapping and aliases.
	(m68k_ip): Delete the table here.
	(m68k_init_after_args): Use the new table here instead of
	open-coding it.
	(md_parse_option, case 'm'): Ditto.

	* doc/Makefile.in (Makefile): Fix rule for running config.status.
	(internals.dvi, internals.ps, internals.ps4): New targets, not
	built by default.

	* doc/internals.texi: Add loud disclaimer.  Refill to 79 columns,
	specify fill-column in local-variables section.  Change
	subheadings to subsections so they can be cross-referenced.
	Describe broken words, frags, frag chains, generic relaxation,
	relax table, m68k relaxation, m68k addressing modes, test suite
	code.  Add a few words about various file formats.

	* doc/as.texinfo (m68k): Recommend using `%' with registers as the
	normal case, instead of the exceptional case.

Thu Mar 30 14:38:47 1995  H.J. Lu (hjl@nynexst.com)

	* configure.in: Change linux to default to elf.  Using
	i[345]86-*-linuxaout will defaults to a.out.
	* configure: Rebuild.

Wed Mar 29 17:16:30 1995  Torbjorn Granlund  <tege@adder.cygnus.com>

	* config/tc-m68k.c (md_apply_fix_2): Cast negative offsets to offsetT
	(for hosting on 64 bit machines).

Tue Mar 21 16:53:27 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_show_usage): Mention -mips4 and -m4650.

Fri Mar 17 16:47:13 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* write.c (write_object_file): Add PROGRESS macros.

Fri Mar 17 12:40:34 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_comm): Make sure to always reset the frag
	and section for common symbols.

Thu Mar 16 17:26:18 1995  Michael Meissner  <meissner@cygnus.com>

	* config/tc-ppc.c (ppc_elf_validate_fix): Allow non PC relative
	pointers in the .ctors and .dtors section also when using the
	-mrelocatable option.
	(md_parse_option): Support -m403 as a PowerPC computer.
	(md_show_usage): Ditto.

Wed Mar 15 14:45:42 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (ecoff_build_debug): The cur_scope field of a fil_ptr
	may be NULL when given strange input.  Don't core dump.

Tue Mar 14 21:36:34 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (load_register): Don't use addiu for dli of an
	unsigned seemingly negative number.  Don't bother shifting a zero
	value.
	(mips_ip): For case 'j', if there are more alternatives, and the
	ISA level is at least 3, don't accept an unsigned seemingly
	negative number.

Tue Mar 14 19:16:43 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* read.c (s_app_line): Fix last patch to deal with a line number
	of 1.

Tue Mar 14 17:00:57 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_validate_fix): Use as_warn_where, not
	as_bad_where to give a warning instead of an error.

Mon Mar 13 17:03:46 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* config/tc-vax.c (md_assemble):  issue a warning if a constant
	is used as an operand where an immediate value is not allowed.

Fri Mar 10 19:21:19 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/obj-coff.c: Redo my 10 Jan change, but get it right this
	time. :-)
	(fixup_segment): If linkrelax is set, just return.
	(write_object_file): Don't treat h8300 and z8k specially with
	regard to fixups.
	* config/tc-h8300.c (md_begin): Set linkrelax.
	* config/tc-z8k.c (md_begin): Ditto.

Thu Mar  9 18:01:37 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/obj-coff.c (coff_header_append): Check return value of
	bfd_coff_swap_scnhdr_out.

Thu Mar  9 13:51:30 1995  Doug Evans  <dje@canuck.cygnus.com>

	Delete this patch, it breaks the h8300 assembler.
	Tue Jan 10 13:34:14 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>
	* config/obj-coff.c (write_object_file): Don't treat h8300 and z8k
	specially with regard to fixups.

Thu Mar  9 12:28:18 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (mrelocatable): Change type to boolean.
	(md_begin): Set the EF_PPC_RELOCATABLE if -mrelocatable.

Wed Mar  8 15:39:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_begin): Check for a cpu string of r8000 or
	r10000.  If mips_isa is 4, set the machine number to 8000.
	(append_insn): If mips_isa is at least 4, don't generate nops for
	coprocessor delays.  Check INSN_READ_FPR_R when setting
	mips_cprmask[1].
	(mips_emit_delays): If mips_isa is at least 4, don't generate nops
	for coprocessor delays.
	(mips_ip): Check for INSN_ISA4 instructions.  Handle new argument
	types 'h', 'R', 'N', and 'M'.
	(md_longopts): Accept "mips4".
	(md_parse_option): Handle -mips4, and -mcpu=10000 and -mcpu=8000.
	(s_mipsset): Permit .set mips4.

Wed Mar  8 09:36:05 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (ppc_elf_validate_fix): Allow .stab sections to
	have non PC relative relocations with -mrelocatable.

Wed Mar  8 02:57:53 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-m68k.c (opcode_ptr): Return pointer to const.
	(md_begin): Make hash table errors fatal.  Process opcode aliases
	after main opcode table.
	(md_apply_fix_2, case 4): Recode setting of lower_limit to avoid
	gcc warning.

Tue Mar  7 16:07:10 1995  Ian Lance Taylor  <ian@cygnus.com>

	* doc/as.texinfo: Add documentation for SPARC V9, from Doug Evans
	<dje@cygnus.com>.

Mon Mar  6 09:58:34 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c: Change all occurences of pa-89 with pa-11 to
	be consistent with current naming conventions.
	(md_begin): Set a default architecture and machine type.
	(pa_ip): If the current instruction specifies a newer machine type
	than the current machine type, then update the current machine
	type.
	(need_pa11_opcode): Likewise.

Sun Mar  5 19:38:09 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_ip, case 'z'): Don't lose argument
	relocation bits for absolute calls.

Fri Mar  3 17:41:50 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-h8300.* (md_operand): Change empty function to empty
	macro.

	* config/tc-h8300.c (build_bytes): Make H8/300-H warning message
	clearer.

	* write.c (write_contents): If bfd_set_section_contents fails,
	print a message and exit, instead of aborting.

Fri Mar  3 16:26:19 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* tc.h (md_apply_fix3): If MD_APPLY_FIX3 is defined, declare
	md_apply_fix3.

	* write.c (fixup_segment): If MD_APPLY_FIX3 is defined, call
	md_apply_fix3 with the normal 2 arguments and the current segment
	pointer instead of md_apply_fix.

	* config/tc-ppc.h (MD_APPLY_FIX3): Define.

	* config/tc-ppc.c (ppc_elf_validate_fix): Warn if -mrelocatable
	and a non PC relative relocation that isn't in the .got2 segment
	was performed.
	(md_apply_fix3): Rename from md_apply_fix and take segment pointer
	as third argument.  If ELF object format, call ppc_elf_validate_fix
	for normal relocations.
	(md_parse_option): If ELF object format, recognize the
	-mrelocatable switch.

Thu Mar  2 16:34:44 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.h (AOUT_MACHTYPE): Define as 100, not 0.

Tue Feb 28 18:29:27 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-arm.c, config/tc-arm.h (md_operand): Replaced empty
	function in .c file with empty macro in .h file.
	* config/tc-h8500.*, config/tc-hppa.*, config/tc-i386.*,
	config/tc-i860.*, config/tc-i960.*, config/tc-ns32k.*,
	config/tc-ppc.*, config/tc-sh.*, config/tc-sparc.*,
	config/tc-tahoe.*, config/tc-vax.*, config/tc-w65.*,
	config/tc-z8k.*: Ditto.
	* config/tc-m68k.*: Ditto.

	* config/tc-m68k.c (mote_pseudo_table): Removed dots from opcode
	names.

	* read.c (s_app_line): Ignore non-positive line numbers.

Tue Feb 28 15:34:14 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.c (tc_i386_fix_adjustable): Don't adjust PLT or
	GOT relocs either.

Mon Feb 27 13:03:41 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* configure.in: add a29k-*-vxworks configuration.

Fri Feb 24 14:41:15 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (load_register): Take dbl argument to determine
	handling of signed 32 bit values in 64 bit modes.  Change all
	callers.
	(macro): Handle M_DLI and M_DLA_AB.

Wed Feb 22 23:10:56 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_apply_fix): Don't subtract the value of the
	add symbol if it's a common symbol (the value of a common symbol
	is its size, not a value in the traditional sense).

Wed Feb 22 21:12:28 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (append_insn): If listing_prev_line is called,
	call frag_grow to make sure there is still room for a variant.

Fri Feb 17 14:50:08 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_pseudo_table): Add 2byte, 4byte and 8byte
	if OBJ_ELF.  From gary@Intrepid.COM (Gary Funck).

	* config/obj-elf.c (elf_frob_symbol): Warn if a symbol is both
	weak and common.
	* config/obj-aout.c (obj_aout_frob_symbol): Likewise.

Fri Feb 17 12:43:47 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (md_pseudo_table): Don't redefine byte under
	ELF.
	(ppc_elf_cons): Don't support @pcrel any more, since DIFF_EXPR_OK
	allows the normal expressions to generate it.
	(md_apply_fix): Convert BFD_RELOC_32 with pcrel bit set into
	BFD_RELOC_32_PCREL.  Abort if either BFD_RELOC_16 or BFD_RELOC_8
	need PC relative relocations.

	* config/tc-ppc.h (DIFF_EXPR_OK): Define to allow PC relative
	expressions to be handled.

Thu Feb 16 14:30:13 1995  Doug Evans  <dje@cygnus.com>

	* expr.c (operand): Move md_operand handling to default case
	(so it works).

Wed Feb 15 16:08:47 1995  Jason Molenda  <crash@cygnus.com>

	* config/tc-h8500.c (tc_coff_symbol_emit_hook): Add ignored
	parameter, to match prototype.

Wed Feb 15 15:07:00 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.c (md_pseudo_table): If ELF, go to ppc_elf_cons
	instead of cons.
	(md_show_usage): Show all of the PowerPc options.
	(ppc_elf_suffix): New function to recognize ELF suffixes that
	specify a relocation, such as @GOT.
	(ppc_elf_cons): Replacement for the standard cons function that
	knows about the ELF suffixes.
	(ppc_fixup): Add reloc field to hold non-standard relocation.
	(md_assemble): Handle ELF suffixes like @GOT.
	(md_create_short_jump): Dummy in case WORKING_DOT_WORD is not
	defined.
	(md_create_long_jump): Ditto.
	(md_short_jump_size): Ditto.
	(md_long_jump_size): Ditto.
	(md_apply_fix): Handle BFD_RELOC_32_PCREL, BFD_RELOC_LO16,
	BFD_RELOC_HI16, BFD_RELOC_HI16_S, BFD_RELOC_PPC_TOC16, and
	BFD_RELOC_16 relocations.  If relocation can not be found, print
	the decimal value of the relocation.

Wed Feb 15 11:46:02 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (md_apply_fix): Accept BFD_RELOC_16, for
	DWARF.  From gary@Intrepid.COM (Gary Funck).

	* config/tc-mips.c (macro): Handle M_U{L,S}D[_A] (unaligned double
	loads and stores).

	* config/tc-i386.c (tc_i386_fix_adjustable): Do adjust global
	symbols if OBJ_AOUT.

	* config/tc-mips.c (macro): Don't use the target register as a
	base register when building the address for M_L{W,D}{L,R}_AB.

Mon Feb 13 14:44:32 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (KT0, KT1): Define.
	(mips_ip): Recognize $kt0 and $kt1 as register names.

	* config/tc-sparc.h (tc_fix_adjustable): Define if OBJ_ELF.
	* config/tc-sparc.c (md_apply_fix): If OBJ_ELF, subtract out the
	value of a defined symbol; the value was added in by
	fixup_segment.  This was previously corrected, if the reloc was
	changed to be against a section symbol, in tc_gen_reloc.

Fri Feb 10 14:04:04 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.c (tc_i386_fix_adjustable): Use S_IS_EXTERN
	rather than !S_IS_LOCAL.

Thu Feb  9 18:16:34 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-i386.c (md_assemble): Adjust conditions for changing
	BFD_RELOC_32 to BFD_RELOC_386_GOTPC to handle a switch in frags.
	Patch originally from Rob Ryan <robr@cmu.edu>.

	* config/tc-i386.c: Include subsegs.h.
	(tc_i386_fix_adjustable): Declare return value.
	(i386_operand): Don't use an assignment directly as a condition.

Thu Feb  9 10:37:13 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_apply_fix): In some cases subtract the
	value of the add symbol from valp.  Offsets braindamage in the
	"machine independent" fixup_segment.

Wed Feb  8 18:51:23 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* messages.c (as_abort): New function.
	* as.h (as_abort): Declare it.
	(abort): New macro.

	Thu Jan 19 18:10:05 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* config/vms-conf.h (HAVE_UNISTD_H):  define it unconditionally.
	* config-gas.com:  test for availability of <unistd.h>; create a
	rudimentary one if necessary.

Tue Feb  7 13:34:46 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: Add powerpc-*-eabi support, which is the same as
	powerpc-*-elf.
	(configure): Rebuild with autoconf.

Mon Feb  6 03:37:00 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Changes from Bryan Ford <baford@schirf.cs.utah.edu> for i386
	16-bit and msdos support:
	* config/tc-i386.c (flag_16bit_code): New variable.
	(set_16bit_code_flag): New function.
	(md_pseudo_table): Added entries "code16" and "code32".
	(md_assemble): Ensure that correct data-size prefixes get emitted,
	based on the current mode.  Ensure that 32-bit addressing will
	always be done.  Move segment-prefix handling code.  (Why?)  Use
	16-bit jumps for 16-bit code, 32-bit jumps for 32-bit code.
	* config/tc-i386.h (MAX_PREFIXES): Bump to 5.
	(Data16, Data32): Define.
	* doc/as.texinfo (i386-16bit): New node.
	* configure.in (i386-*-msdos*): New target, using a.out format.
	* configure: Regenerated.

Thu Feb  2 15:21:24 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-m68k.c (cpu32_control_regs): New macro.
	(m68k_init_after_args): Use it, for cpu32 processors.

	Tue Jan 31 17:20:45 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.c (vms_tir_stack_psect):  new routine;
	(VMS_Set_Data, VMS_Set_Psect, VMS_Store_PIC_Symbol_Reference,
	VMS_TBT_Routine_Begin, VMS_TBT_Line_PC_Correlation):  use it;
	(VMS_Global_Symbol_Spec, VMS_Procedure_Entry_Pt):  treat
	Psect_Number as `unsigned'.

	Thu Jan 26 17:06:28 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.c:  performance tuning.
	(VMS_Symbol_type_list):  convert from single list head to small
	array of list heads;
	(SYMTYP_HASH):  new macro for accessing VMS_Symbol_type_list[];
	(find_symbol, setup_basic_type, VMS_typedef_parse):  use it;
	(VMS_RSYM_Parse):  move S_GET_VALUE() inside switch to avoid
	calling it for uninteresting cases.

Wed Feb  1 23:52:45 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_apply_fix): Go ahead and call
	hppa_field_adjust to get a new value for R_DATA_ONE_SYMBOL
	relocations in SOM.
	(hppa_fix_adjustable): Refine somewhat.

Fri Jan 27 21:29:53 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/tc-ppc.h (NO_STRING_ESCAPES): Don't define if we are
	using ELF.

Thu Jan 26 19:03:42 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-h8300.c (get_specific): Add parens around | inside &.
	(skip_colonthing): Set L_8 if ":8" is specified.

Thu Jan 26 18:38:01 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-ppc.c (md_begin): Permit mfdec to be duplicated on the
	601.  Check that the error return from hash_insert is "exists".

Thu Jan 26 11:35:33 1995  Michael Meissner  <meissner@cygnus.com>

	* configure: Add support for configuring powerpc-*-eabi.

	* config/tc-ppc.c (GOT_symbol): Define if object format is ELF.

	* config/tc-ppc.h (GLOBAL_OFFSET_TABLE_NAME): Define if object
	format is ELF and not defined to be "_GLOBAL_OFFSET_TABLE_".

Wed Jan 25 16:23:13 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* config/tc-sh.c (little): Add argument IGNORE to avoid
	compiler warnings.
	(md_pseudo_table): Add space for consistent formatting.
	(COND8_RANGE, COND12_RANGE): Delete unused macros.
	(COND8_F, COND8_M, COND12_F, COND12_M, UNCOND12_F, UNCOND12_M):
	Correct minimum and maximum branch offsets.  Add comments explaining
	why these numbers are correct.

Wed Jan 25 15:32:09 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* config/tc-ppc.c (md_parse_option): Accept mpwr2 as a synonym for
	mpwrx; mppc32, m603, and m604 as synonyms for mppc; and mppc64 and
	m620 for PowerPC64 mode.
	(ppc_symbol_new_hook): Add T0 as synonym for TC0 suffix.

Tue Jan 24 16:44:23 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-vax.c (vip): Introduce new ptr-to-const local variable
	for scanning operand string.

	Sat Jan 21 17:50:38 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* config/vax-inst.h (struct vop, fields `vop_warn', `vop_error'):
	make them pointers to const char;
	(struct vit, field `vit_error'):  ditto.
	* config/atof-vax.c (md_atof):  rename local `littlenum_pointer'
	to `littlenumP' to avoid shadowing file scope variable.
	* config/tc-vax.c (vip_begin, vip_op_defaults, vip_op_1):  make
	string arguments be pointers to const char;
	(vip):  make `alloperr' const char *;
	(vip_op): make `err' and `wrn' const char *; rename `access' to
	`access_mode' to avoid shadowing library function.
	* config/obj-vms.c (`symbol_name'):  make it const char *;
	(get_struct_name):  cast one use of `symbol_name' to char *
	[caller guarantees that it won't modify the pointer's target];
	(PUT_COUNTED_STRING):  use pointer to const char;
	(VMS_typedef_parse):  make `pnt2' const char *;
	(Write_VMS_MHD_Records):  make `cp' const char *;
	(VMS_Modify_Psect_Attributes, array `Attributes'):  make const,
	and make field `Name' pointer to const char;

	* as.h (`seg_name[]' declaration):  pointers to const char;
	(struct _pseudo_type, field `poc_name'):  pointer to const char.
	* subsegs.c (`seg_name[]' definition):  ditto;
	* hash.c (hash_ask):  rename argument `access' to `access_type'
	to avoid shadowing library function.
	* write.c (variable `the_object_file'):  move from file scope
	to block scope within write_object_file(); free it after use;
	(fixup_segment):  conditionally exclude it for OBJ_VMS.
	(cvt_frag_to_fill):  rename argument `headers' to `headersP'
	to avoid shadowing file scope variable.

Mon Jan 23 21:42:39 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_ip, case 'D'): Fix typo which caused
	miscompilation of "diag" instructions.

Mon Jan 23 15:51:41 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* configure: Regenerated.

	* config/tc-mips.c: Include libiberty.h.

Mon Jan 23 14:07:58 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-sh.h (tc_init_after_args): Don't define.
	* config/tc-sh.c (md_begin): Remove unused variable table.
	(md_assemble): Remove unused variable p.
	(md_convert_frag): Cast fr_address to unsigned long for printf.
	(md_apply_fix): Use as_warn_where rather than as_warn.
	(sh_init_after_args): Remove empty function.

	* configure.in (i386-*-gnu*elf*): New target.

Sat Jan 21 19:02:23 1995  Ian Lance Taylor  <ian@tweedledumb.cygnus.com>

	* hash.c (hash_ask): If we find the slot after wrapping around,
	break out of the loop.  Fixes bug in Jan 18 change.

Fri Jan 20 17:07:31 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* hash.c (hash_code): Undo last change.

Thu Jan 19 14:49:47 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-alpha.c (alpha_ip): Initialize local variables to keep
	gcc quiet.
	(gpdisp_hi16_howto): Don't use "const" with reloc_howto_type.
	(in_range_signed): Add parens around subtraction inside shift.
	* gasp.c (do_data): Initialize local variable "opname".
	(istrue): Provide a default case to set "res" and keep "gcc -Wall"
	quiet.
	* write.c (write_contents): Deleted unused variable.
	(print_symbol_value_1): Declare.
	* hash.c (hash_ask): Delete disabled non-strcmp version of the
	code, and automatic variables used only in those sections.
	* write.c (chain_frchains_together_1): Only define local variable
	"prev_fix" if BFD_ASSEMBLER.
	* flonum-konst.c (dummy1): Return void.
	* config/tc-vax.c (md_assemble): Remove two comparisons of
	unsigned numbers versus zero.
	* as.h (bcopy): If neither memcpy nor bcopy is defined as a macro,
	define to use memcpy.

	* config/tc-alpha.c, config/alpha-opcode.h: Revert 2 June changes.
	Turns out we never got the assignment done after all.

	Cleanup of VAX and VMS code, from Pat Rankin:
	* config/obj-vms.c: Changed exported function names to lower case.
	(Changed call sites in write.c.)  Declare VMS system function
	names used, conditional on actually being on VMS.  Changed many
	functions that returned no useful value to now be declared to
	return void.  Removed many unused variables.  Supply missing
	return statements or values.  Supply `default' case in switch
	statements.  Ensure local variables get initialized.
	* config/tc-vax.c: Minor changes to silence "gcc -Wall".
	* config/obj-vms.h, config/tc-vax.h: Added some missing
	declarations.

Wed Jan 18 13:49:26 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* atof-generic.c (flonum_print) [TRACE]: New function.
	(atof_generic) [TRACE]: Print multiplier before multiplication,
	and print multiplication result before and after copy.

	* flonum-mult.c (flonum_multip): Avoid sign extension problems
	around multiplication operation.

	* atof-generic.c (ASSUME_DECIMAL_MARK_IS_DOT): Define.
	(atof_generic) [ASSUME_DECIMAL_MARK_IS_DOT]: Check for '.'
	explicitly instead of calling strchr.

	* config/tc-sparc.c (sparc_ip): When scanning successive opcode
	table entries, check names for pointer equality before doing
	string comparisons.

	* hash.c (hash_ask): Call strcmp instead of expanding it inline.
	(hash_code): Replaced with a version from bfd.

	* config/obj-coff.c (write_object_file): If COFF_FLAGS isn't
	defined, default it to zero.

Wed Jan 18 12:16:07 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* write.c (fix_new_internal): Clear fx_bsr on those targets which
	use it.

	* expr.c (operand): Parenthesize && within ||.
	* listing.c (listing_newline): Likewise.
	(list_symbol_table): Use %lu to print sizeof.
	* symbols.c: Comment out unused function indent.
	(print_symbol_value_1): Cast pointer to unsigned long for printf.
	* config/obj-coff.c (do_relocs_for): Only declare symbol_ptr if it
	will be used.
	* config/tc-h8300.c (md_begin): Remove unused variable reg.
	(get_operand): Declare type of parameter direction.  Remove unused
	variable size.
	(get_specific): Fix comment to avoid nested comments.
	(check_operand): Cast X_add_number to unsigned long for printf.
	(build_bytes): Remove unused local variables output_ptr, part, and
	high.
	(build_bytes): Cast X_add_number to unsigned long for printf.
	(clever_message): Remove unused variable scan.
	(md_assemble): Remove unused variable i.
	(tc_coff_sizemachdep): Remove unused function.
	* config/tc-h8300.h (tc_reloc_mangle): Declare.

Tue Jan 17 10:58:06 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-mips.c (mips_4650): New static variable.
	(md_begin): Handle a cpu string of "4650".  If mips_4650 was not
	initialized, set it to 0.
	(append_insn): Don't insert nops around HI and LO on a 4650.
	(mips_emit_delays): Likewise.
	(mips_ip): Use INSN_ISA mask to check ISA of instruction.  Check
	for INSN_4650.
	(md_longopts): Add m4650 and no-m4650.
	(md_parse_option): Handle mips-cpu=4650.  Handle -m4650 and
	-no-m4650.
	* doc/as.texinfo: Document new MIPS options.

Sat Jan 14 23:48:13 1995  Steve Chamberlain  <sac@jonny>

	* config/tc-w65.c, config/tc-w65.h, config/w65.mt: Newfiles.
	* config/obj-coff.h: Cope with w65.
	* configure, configure.in: Recognize w65.

Thu Jan 12 17:56:24 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* app.c (do_scrub_next_char) [__GNUC__ && __OPTIMIZE__]: If `get'
	function is scrub_from_file, call scrub_from_file directly, and
	get gcc's inlining capability into the act.

	* Makefile.in (VMS_OTHER_OBJS): Add ../libiberty/hex.o.
	(OBJS): Delete hex-value.o.
	(REAL_SOURCES): Delete hex-value.c.
	(hex-value.o): Delete dependencies.
	* hex-value.c: Deleted.
	* as.c (main): Call hex_init.
	* expr.c, config/tc-mips.c: Include libiberty.h.  Replace
	hex_value array references with hex_* macros.

Wed Jan 11 17:51:38 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-h8300.h (COFF_FLAGS): Don't define.
	* config/tc-h8500.h (COFF_FLAGS), config/tc-sh.h (COFF_FLAGS),
	config/tc-z8k.h (COFF_FLAGS): Ditto.

	* config/obj-coff.c (KEEP_RELOC_INFO): Make sure it's always
	defined.

	* config/tc-m68k.c (m68k_ip, cases AOFF and AINDEX): Don't
	generate 68020 addressing modes for a 68000 processor.
	(md_estimate_size_before_relax, cases PCREL and PCLEA): Ditto.

Tue Jan 10 13:34:14 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/obj-coff.c (write_object_file): Don't treat h8300 and z8k
	specially with regard to fixups.

Mon Jan  9 16:22:28 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-mips.c (RELAX_RELOC1, RELAX_RELOC2): Cast values to
	bfd_vma before subtracting.

	* config/obj-coff.c (size_section): Handle rs_space like rs_fill,
	but make sure fr_symbol is null.
	(fill_section): Ditto.

Sun Jan  8 16:14:19 1995  Ian Lance Taylor  <ian@tweedledumb.cygnus.com>

	* config/tc-mips.c (mips_ip): Fix handling of floating point
	values when GPOPT is not defined.

Fri Jan  6 16:59:41 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* gasp.c: Include string.h.  Put config.h before other includes.

	* config/tc-alpha.c (alpha_ip): Delay calls to emit_add64 until
	after any remaining operands are also known to match.

Fri Dec 30 18:21:41 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* listing.c (list_symbol_table): Build a format string based on
	the size of the value to be printed, as long as "unsigned long" is
	at least as wide, after handling the special case of 4-byte
	values.

	* Makefile.in (dependencies): Make $(OBJS) depend on as.h and
	everything it includes.  Delete those files from per-file
	dependencies.

	* as.h (relax_substateT): Now defined to be unsigned int.
	(relax_stateT): Separate typedef from enum definition.
	(enum _relax_state): Reordered for better punctuation.  Added new
	values rs_align_code and rs_space.
	(lineno, struct lineno_struct): Unused, deleted.

	* as.h: No longer include assert.h.
	(as_assert): Declare.
	(assert): New definition, calls as_assert longer needed.
	(__PRETTY_FUNCTION__): Provide default for older versions of gcc.
	* messages.c (as_assert): New function.
	* gdbinit.in: Put a breakpoint there.

	* read.c (s_space): Rewrite to handle general expressions.
	Generate rs_space frags for non-constant values.
	* write.c (cvt_frag_to_fill): Treat rs_align_code and rs_space
	like rs_align and rs_org.  Verify that fr_offset is non-negative,
	and force frag type to rs_fill only after assertion checks.
	(relax_segment): Treat rs_align_code like rs_align.  Treat
	rs_space like rs_org in the first switch; in the second, force the
	operand to a constant, and use it for the growth size.

Wed Dec 28 20:57:37 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_subspace): For sections with the ZERO
	attribute, set the "bss" field in the appropriate seginfo structure.

Wed Dec 28 15:01:01 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* subsegs.h: Include obstack.h.

Tue Dec 27 18:16:04 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* as.h (struct frag): Enable align* components now.

Tue Dec 20 14:56:31 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* frags.c (frag_init): Call obstack_begin on `frags'.
	* subsegs.c (subsegs_begin): Don't do it here.
	* as.c (main): Call frag_init before subsegs_begin.

	* frags.c (frag_append_1_char): New function.
	* frags.h (frag_append_1_char): Declare it.
	(FRAG_APPEND_1_CHAR): Call it.  Old definition is commented out
	for now.

	* as.h (struct frag): Added (but commented out) new fields for
	tracking current alignment.
	(frag_now_fix): Changed macro to function declaration.
	* frags.c (frag_now_fix): Define function here.
	(frag_new): Use it instead of accessing `frags' directly.
	* frags.h (frags): Change comment to indicate it shouldn't be
	accessed directly.
	* subsegs.h (struct frchain): New field frch_obstack, intended to
	eventually replace global `frags' obstack.
	* subsegs.c (subseg_set_rest): Use frag_now_fix instead of
	accessing `frags' directly.  Initialize fields of new frchainS
	explicitly instead of with memset.
	* config/obj-coff.c (obj_coff_ln) [!BFD_ASSEMBLER]: Use
	frag_now_fix.
	* config/tc-mips.c (s_loc), config/obj-vms.c
	(vms_resolve_symbol_redef), symbols.c (colon): Likewise.

	* config/tc-m68k.c (md_apply_fix_2): Use offsetT and addressT
	instead of long and unsigned long.
	(md_apply_fix): Cast value before passing it.

	* config/obj-aout.h, config/obj-coff.c, config/obj-elf.h,
	config/obj-som.h, config/tc-h8500.c, config/tc-hppa.c,
	config/tc-hppa.h, config/tc-sh.c, config/tc-z8k.c: Don't rely on
	use of ".." when including header files.

	* config/obj-coff.c (fixup_segment): Reformat condition in an `if'
	statement.

	* Makefile.in (SUBDIR_INCLUDES): Deleted.

Tue Dec 20 13:40:36 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/obj-coff.h: Include bfd/libcoff.h, not libcoff.h.

Mon Dec 19 16:53:36 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-mips.c (load_register): Rewrite to handle O_big 64 bit
	constants.
	(mips_ip): Accept O_big constants in case 'I'.  Change case
	'i'/'j' to treat an O_big constant as an out of range value.

Mon Dec 19 14:15:07 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_subspace): Make sure SEC_HAS_CONTENTS is
	clear for a section with the "ZERO" attribute.

	* Reduce useless symbols for ELF in an attempt to make smaller
	objects and speed up the linker.
	* config/tc-hppa.c (struct call_info): Replace end_symbol field
	with a size field.
	(hppa_elf_mark_end_function): Delete unneeded function.
	(pa_build_unwind_subspace): For the 2nd unwind relocation, use
	the function symbol + function size instead of a special symbol
	for the end of the function.
	(process_exit): Compute the function size here.  Don't call
	hppa_elf_mark_end_of_function anymore.
	(pa_procend): Likewise.
	(hppa_fix_adjustable): Only reject 32bit relocations for SOM.
	(elf_hppa_final_processing): Simplify.

Mon Dec 19 13:49:07 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* configure.in: Recognize mips-sony-bsd and mips-dec-bsd, but
	reject other vendors until we can be sure we're consistent with
	bfd.

	* config/obj-vms.c (Create_VMS_Object_File): Instead of formatting
	a buffer to pass to `error', just call `as_fatal' directly.
	(VMS_Psect_Spec): Ditto.
	(VMS_TBT_Module_Begin, VMS_TBT_Source_File, gen1,
	VMS_typedef_parse, VMS_LSYM_Parse, VMS_Emit_Globalvalues): Call
	as_tsktsk instead of printf.
	(VMS_TBT_Module_Begin, VMS_TBT_Line_PC_Correlation,
	VMS_TBT_Source_File, VMS_TBT_Source_Lines,
	VMS_Store_Repeated_Data, VMS_Check_For_Main): Use explicit
	integers rather than sizeof expressions using basic integer types,
	in case host and target aren't the same.  Use memcpy or COPY_*
	macros instead of possibly unaligned word or longword assignment.

	* config/obj-vms.h (OBJ_SYMFIELD_TYPE): New macro.
	* config/obj-vms.c (VMS_Store_PIC_Symbol_Reference,
	VMS_Check_For_Main, VMS_write_object_file): Use sy_obj instead of
	forcing sy_number to hold a pointer.

Fri Dec 16 14:40:16 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-sh.c (md_begin): Don't fill in md_relax_table here.
	(md_relax_table): Use static initialization.

	* config/tc-h8300.c (parse_exp, get_operands, clever_message,
	md_assemble, tc_crawl_symbol_chain, md_undefined_symbol,
	tc_headers_hook, md_operand, md_number_to_chars): Don't use DEFUN.

	* Makefile.in (CHECKFLAGS): Don't pass AS_FOR_TARGET,
	CC_FOR_TARGET, OBJDUMP_FOR_TARGET, NM_FOR_TARGET; they're not
	used.
	(AS_FOR_TARGET, CC_FOR_TARGET, OBJDUMP, OBJDUMP_FOR_TARGET, NM,
	NM_FOR_TARGET): Don't define.
	(VMS_OTHER_OBJS): Add xmalloc.o and xexit.o from libiberty.
	(tooldir): Use exec_prefix, not libdir.

Fri Dec 16 11:07:10 1994  Stan Shebs  <shebs@andros.cygnus.com>

	* config/obj-coff.h: Include libcoff.h, not ../bfd/libcoff.h.

	* as.h: Include progress.h.
	* as.c (main): Call START_PROGRESS and END_PROGRESS.
	(main, perform_an_assembly_pass): Call PROGRESS.

Fri Dec 16 00:46:08 1994  Ian Lance Taylor  <ian@tweedledumb.cygnus.com>

	* write.c (adjust_reloc_syms): Use bfd_is_und_section and
	bfd_is_abs_section rather than comparing against &bfd_und_section
	and &bfd_abs_section.

Thu Dec 15 15:27:14 1994  Jim Wilson  <wilson@chestnut.cygnus.com>

	* config/tc-sh.c (md_begin): Use a local variable when
	initializing md_relax_table to avoid errors about modifying a
	const data structure.

Tue Dec 13 15:42:27 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-ppc.c (tc_gen_reloc): Remove OBJ_ELF hack which
	appears to no longer be needed.

Tue Dec 13 08:04:15 1994  Ian Lance Taylor  <ian@cygnus.com>

	* config/tc-mips.c (macro_build): Accept BFD_RELOC_PCREL* without
	requiring that the X_op_symbol be in the text_section.
	(macro): Change the test for a legal expression difference to
	correspond to changes in pseudo_set in read.c.

Fri Dec  9 21:04:17 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* write.c (write_relocs) [RELOC_EXPANSION_POSSIBLE]: Use
	bfd_install_relocation.

	* ecoff.c (ecoff_set_gp_prolog_size): If there is no current
	routine, just return.

	* config/tc-alpha.c (alpha_ip, case 'B', subcase 'c'): Use opcode
	value from pattern instead of assuming jsr.
	* config/alpha-opcode.h (jmp): Add a "1,Bc" form.

Thu Dec  8 17:48:25 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (NM_FOR_TARGET): Use ../binutils/nm.new, not just
	plain nm.

	* configure.in (ns32k-pc532-mach*): Select correct emulation.
	(mips-sony-bsd*): Use ecoff.
	(mips-*-gnu*): New target, using aout format, from Roland McGrath.
	* configure: Regenerated.

Tue Nov 29 13:58:10 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Use libiberty version of xmalloc:
	* Makefile.in (REAL_SOURCES): Delete xmalloc.c.
	(OBJS): Delete xmalloc.o.
	(xmalloc.o): Delete dependencies.
	* as.c (main): Call xmalloc_set_program_name once program name is
	known.

	* config/tc-alpha.c (in_range_signed, in_range_unsigned): New
	routines, split from in_range.
	(in_range): Deleted.  All calls changed to in_range_*signed.
	(create_lita_section): Macro deleted.  Single use expanded in
	place.
	(alpha_ip): Handle `t' and `8' operand types.
	(md_apply_fix): Handle BFD_RELOC_12_PCREL.  Print name of
	unhandled relocation types.
	* config/alpha-opcode.h: Added HALT and DRAINA.  Disabled MOVI,
	since it doesn't work, and isn't supported by the native
	assembler.

	* input-scrub.c: Change wording of a comment to avoid interference
	with Cygnus source-control tools.

	* as.h (errno) [NEED_DECLARATION_ERRNO]: Declare.

	* config/tc-m68k.c (init_table): List buscr and pcr control
	registers.
	(m68k_ip, case 'J'): Handle them.

	Delete signal handler code.  It's been disabled since March 1993
	without complaints.
	* as.c: Don't include signal.h.
	(got_sig): Unused function deleted, declaration deleted.
	(SIGTY): Macro deleted.
	(main): Deleted disabled code for establishing signal handler.

Mon Nov 28 11:37:35 1994  Doug Evans  <dje@canuck.cygnus.com>

	* app.c (do_scrub_next_char): Insert missing newline at end of file
	like warning says we do.

Mon Nov 28 00:11:15 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.h (pa_check_eof): Declare new extern function.
	(tc_frob_file): Define to call pa_check_eof.

	* config/tc-hppa.c (pa_check_current_space_and_subspace): New
	function to verify the current space and subspace are reasonable.
	Call for the appropriate pseudo-ops and before instruction parsing.
	(pa_check_eof): New function to verify enter/exit and proc/procend
	pairs match at EOF.
	(pa_code): Simplify.

	* config/obj-som.c: Delete #if 0 code.

Wed Nov 23 19:36:09 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* config/obj-coff.h (TARGET_FORMAT): Select between coff-shl and
	coff-sh.
	* config/sh.mh (TARG_CPU_DEPENDENTS): Get it right.
	* config/tc-sh.c  (little): New function.
	(md_parse_option): Notice new option.
	(build_relax, build_Mytes, md_atof, md_convert_frag, md_apply_fix):
	Cope with little endian data.
	* config/tc-sh.h (COFF_MAGIC, LISTING_HEADER): Endian dependent.

Wed Nov 23 10:54:38 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (tc_gen_reloc, ELF variant): Revert last
	change.  The real bug was in bfd/elfcode.h and has been fixed.

Tue Nov 22 23:31:20 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (tc_gen_reloc, ELF variant): Add section->vma
	to the relocation's offset.

Tue Nov 22 14:37:58 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* Makefile.in (INSTALL_XFORM): Fix typo.

Tue Nov 22 10:23:25 1994  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config/tc-alpha.c (s_alpha_set): Ignore the .set (no)move and
	  .set (no)volatile directives.

Tue Nov 15 21:44:13 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_subspace): Make sure to always reset
	current_subspace.
	(pa_text, pa_data): Likewise.

	* config/tc-hppa.c (pa_align): New function.  Aligns the current
	offset within the current subspace along with updating the
	alignment of the subspace itself.
	(pa_subspace): Default alignment to one byte rathern than zero
	bytes to avoid setting alignment to log2(0).
	(md_pseudo_table): Use pa_alignment for .align.

Tue Nov 15 15:24:45 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* messages.c (as_fatal): Always put a space after "fatal error:"
	when printing message.

Tue Nov 15 11:10:43 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.h (obj_frob_symbol): Delete.
	(tc_frob_symbol): Make definition conditional on OBJ_SOM or
	OBJ_ELF.  For ELF subtract out symbol->section->vma for non common
	symbols.

Wed Nov  9 14:53:03 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/te-delta.h: New file, derived from te-sysv32.h.

Wed Nov  9 11:52:44 1994  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-ppc.c (ppc_bf): Always set coff_line_base.

Mon Nov  7 01:58:49 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (VERSION): Bump to 2.5.3.

	* configure.in: Compare generic cpu name against "sparc", not
	"sparc*", since sparc variants should be changed to "sparc".
	* configure: Regenerated with autoconf 2.1.

	* config/tc-a29k.c (octal, toHex): Variables deleted.
	(isoctal): Macro deleted.
	(md_begin): Don't initialize them.
	(machine_ip, case 'P'/'A'): For absolute operand, generate an
	error message if it's out of range.
	(md_apply_fix, case RELOC_JUMPTARG): Check range for PC-relative
	jumps.
	(md_apply_fix): Delete code inside "#if 0".

Thu Nov  3 20:20:40 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/go32.mh: Unused file deleted.

	* read.c (get_absolute_expression): Indicate that the error may
	merely be that the expression can't currently be reduced.

Thu Nov  3 16:09:59 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* config/tc-m68k.h (TARGET_FORMAT): If TE_NetBSD define as
	  "a.out-m68k-netbsd".
	* config/tc-sparc.h (TARGET_FORMAT): If TE_NetBSD define as
	  "a.out-sparc-netbsd".

	* config/te-nbsd.h: New file, NetBSD target emulation
	* config/te-netbsd.h: Removed.
	* configure.in (i[345]86-*-netbsd*,m68*-*-netbsd*,sparc*-*-netbsd*):
	  Set bfd_gas.  Use nbsd emulation.

Thu Nov  3 17:44:47 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Changes from net 2.5.2 release branch:

	* configure.in: Put AC_DEFINE(sparcv9) on its own line, so that
	the shell variable settings associated with it are permanent.  For
	CPUs requiring bfd_gas=yes, select it based on CPU only, not
	individual target names.  Handle m68k-hp-hpux*, not just -hpux.

	* config/tc-z8k.c (tc_coff_symbol_emit_hook): Add dummy argument
	to match prototype in obj-coff.h.

	* configure.in: Skip tests for defining WANT_FOPEN_BIN and
	IBM_COMPILER_SUX.
	* acconfig.h: Deleted them.
	* configure, conf.in: Rebuild with autoconf 2.0.
	* config/go32.cfg, config/vms-conf.h: Updated.

	* config/tc-m68k.c (md_apply_fix_2, md_convert_frag_1): Always use
	IBM_COMPILER_SUX version of code, with comments indicating why.

	* listing.c (file_info): Use text mode when opening file for read.
	Use "r" directly, no macro.
	* input-file.c (input_file_open): Don't use FOPEN_RT, just use
	"r".
	* read.c (s_include): Ditto.
	* output-file.c (output_file_create): Try both "wb" and "w", don't
	bother with FOPEN_* macros.
	* as.h: Don't include fopen-*.h.

	* config/alpha-opcode.h: Make "ret" with no operands equivalent to
	"ret zero,(ra)", to match OSF1 and to be consistent with both
	one-operand forms.

	Patches from DJ Delorie:
	* as.h (alloca): undef alloca before defining it just in case
	* config/go32.cfg: new file for autoconf values
	* config/te-go32.h: new file
	* configure.bat: new for autoconf

	* config/tc-i386.c (md_assemble): Fix typo in GOTPC check; had =
	for ==.

	* configure.in: If target_frag doesn't exist, use /dev/null.

	* as.c (parse_args): For non-VMS systems, re-add `v' to
	std_shortopts.  Add "verbose" to list of long options.

	* write.c (adjust_reloc_syms): When generating an absolute section
	symbol as a placeholder, don't mark it as used in a relocation
	entry, here.

	* Makefile.in (comparison): Compare using makefile code from gcc,
	stripped down to discard subdir stuff and adapted to give a
	non-zero exit status if either file differs.

Thu Nov  3 15:43:02 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-mips.c (load_address): Fix RELAX_ENCODE arguments for
	NO_PIC case.

Tue Nov  1 16:10:59 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-mips.c (s_change_sec): If not GPOPT, don't permit
	switching to the readonly data section.

	* ecoff.c (ecoff_directive_type): Fix warning message.

Sun Oct 30 00:57:35 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_proc): Delete disabled code to put each
	proc in its own subspace, we're not going to use it.

Tue Oct 25 14:44:33 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-mips.c (macro): Ensure that mips2 case of M_LI_DD in
	.rdata does not become a variant frag.

	* config/tc-mips.c (mips_cpu): Initialize to -1.
	(md_begin): Don't mips_cpu if it was already set.
	(md_parse_option): For -mipsN, don't set mips_cpu if it was
	already set.  For -mcpu=, just set mips_cpu, not mips_isa.

Fri Oct 21 20:42:29 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-mips.c (md_pseudo_table): If OBJ_ELF, handle .section.
	(s_elf_section): New static function.
	* ecoff.c (ecoff_build_symbols): Don't abort if we don't recognize
	the section when setting the storage class; default to sc_Data.

Thu Oct 20 00:43:38 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_apply_fix): Set new_val to 8 for all
	fixups to branch instructions (not just pc-relative ones) which
	will generate SOM relocations.

Wed Oct 19 13:41:56 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-a29k.c: Include ctype.h with angle brackets.
	(define_some_regs): Add new special register names defined on the
	29040.
	(parse_operand): Add argument opt.  If non-zero, don't warn about
	a missing operand.
	(machine_ip): If handling argument type 'I', pass opt as non-zero
	to parse_operand.  Handle new optional operand type 'I'.
	(md_undefined_symbol): Handle special register names (srNN).

Tue Oct 18 00:45:24 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* write.c (renumber_sections): New static BFD_ASSEMBLER function.
	(write_object_file): Call it after removing gas created sections.

Mon Oct 17 18:06:05 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* symbols.c (symbol_create): Use udata.p, not just udata.
	* config/obj-elf.c (obj_ecoff_set_ext): Likewise.
	(elf_get_extr): Likewise.

	* read.c (read_a_source_file): The second argument to as_where is
	unsigned int *, not int *.

Mon Oct 17 02:26:32 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c: Eliminate all uses of fx_addnumber.
	(tc_gen_reloc): Simplify.  It's no longer necessary to set a
	reloc's addend field to zero for function symbols.
	(md_apply_fix): Simplify.  For fixups which will require a SOM
	reloc, just clear out the necessary bits in the output file.

Fri Oct 14 19:06:46 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (BISON): Use bison -y, not bison.

Thu Oct 13 19:22:54 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (VERSION): Updated to 2.5.
	(clean-here): Delete stamp-mk.com.
	(distclean): Delete .gdbinit.
	* Version 2.5 released.

Wed Oct 12 20:30:51 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/te-nbsd532.h: Renamed from te-netbsd532.h.
	* configure.in, configure: Adjusted.

Wed Oct 12 16:33:38 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* config/cplus-dem.c: Removed.  It isn't used.  Even if it was,
	  it's better to use the one in libiberty.

Wed Oct 12 18:48:39 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* symbols.c (resolve_symbol_value, case O_symbol): Undo last
	change; it breaks the rs6000 support, and doesn't seem to be
	needed.

Wed Oct 12 11:56:50 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* config/tc-i386.h,te-netbsd532.h (TARGET_FORMAT): Changed to
	  a.out-<arch>-netbsd to match corresponding changes in BFD.

Wed Oct 12 11:06:11 1994  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-ppc.c (ppc_fix_adjustable): Resolve symbol values
	rather than explicitly adding the frag address.
	* config/obj-coff.c (coff_frob_symbol): Add a zero entry to mark
	the end of the line numbers; this replaces the zero entry which
	used to be added by coff_add_linesym, removed Oct 7.
	(coff_adjust_section_syms): Ignore sections with no seginfo.

Wed Oct 12 01:41:37 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (bootstrap, bootstrap2, bootstrap3): Create a
	"stage" symlink to the appropriate stage* directory, and use it
	instead in the -B options.
	(comparison): Revert yesterday's change.

Tue Oct 11 16:48:11 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-sparc.c (tc_gen_reloc): For non-a.out relocations, if
	pc-relative, use fx_offset only, ignore address of relocation.

Tue Oct 11 15:24:00 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/tc-mips.c (mips_ip): Don't use S_IS_LOCAL when checking
	for an embedded PIC switch expression, since the definition of
	S_IS_LOCAL was changed.

Tue Oct 11 15:05:11 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* Makefile.in (comparison): When comparing as.new or gasp.new, try
	running the binary through sed to avoid differences due to
	"stage1" or "stage2" having been written into the binary.

Sat Oct  8 01:48:04 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	ELF symbol size handling, based on code from Eric Youngdale:
	* config/obj-elf.h (OBJ_SYMFIELD_TYPE): New macro.  Adds an
	expression pointer to the symbol structure, used for `size'
	expressions that couldn't be reduced to constants when initially
	processed.
	(elf_frob_symbol): Declare.
	(obj_frob_symbol): Call elf_frob_symbol always, rather than
	ecoff_frob_symbol only if ECOFF_DEBUGGING defined.
	* config/obj-elf.c (obj_symbol_new_hook): Deleted unused code.
	Clear sy_obj field.
	(obj_elf_size): Deleted unused code.  If size is non-reducible
	expression, allocate some storage for the sy_obj field and copy
	the expression.
	(elf_frob_symbol): New function.  Computes sizes, calls
	ecoff_frob_symbol if appropriate.

	* write.c (fixup_segment): For i386 elf and coff (for now), don't
	add in value of symbol from another defined section of the file.

Fri Oct  7 17:54:02 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/tc-m88k.h (TC_KEEP_FX_OFFSET): Define.
	* config/obj-coff.c (do_relocs_for): Test only TC_KEEP_FX_OFFSET,
	rather than both it and TC_M88K.
	(coff_adjust_section_syms): New function.
	(coff_frob_section): For non-empty sections, create aux entry for
	the section symbol, indicating the size.
	(n_line_nos): New variable.
	(add_lineno): Increment it.
	(coff_add_linesym): Increment n_line_nos, don't call add_lineno.
	(coff_frob_file): New function; map coff_adjust_section_syms over
	sections.
	(obj_coff_line): Only reset line_base for .bf symbols.
	* config/obj-coff.h (coff_adjust_section_syms, coff_frob_file):
	Declare.
	(obj_frob_file): New macro.

	* config/obj-coff.h (OBJ_COPY_SYMBOL_ATTRIBUTES): Renamed from
	obj_frob_forward_symbol, and rewritten for new parameter list.

	Mon Oct  3 21:02:38 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.h (S_IS_LOCAL): fix obsolete flagseen[] reference.

Wed Oct  5 11:49:26 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/obj-ecoff.c (obj_pseudo_table): Accept .esize and .etype
	as synonyms for .size and .type.

Wed Oct  5 00:08:10 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-coff.c (coff_frob_section): Remove assert about
	section alignment.
	* config/tc-sparc.c (md_section_align): Use section alignment, not
	xvec align_power_min field.

Fri Sep 30 19:05:20 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* vmsconf.sh (make-gas.com): handle DCL verification to enable
	sensible feedback to the user while gas is being built.

Fri Sep 30 16:23:31 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (DISTSTUFF): New variable, listing only make-gas.com
	for now.
	(diststuff): New target; builds DISTSTUFF.
	(realclean): Separate target, depend on clean and distclean, then
	delete DISTSTUFF.
	* make-gas.com: Deleted.

	* config/tc-i386.c (i386_validate_fix) [BFD_ASSEMBLER]: New
	function.  Converts reloc for "foo-GOT" to BFD_RELOC_386_GOTOFF
	reloc for "foo".
	(i386_operand): Don't look up section symbol for
	undefined_section.
	(reloc): Always permit return of 8- and 16-bit relocation types.
	Add a space after "pc-relative" in the error message.
	(tc_i386_fix_adjustable) [BFD_ASSEMBLER]: Reject
	BFD_RELOC_386_GOTOFF relocs.
	(i386_operand): For any GOTOFF reloc, convert it to a BFD_RELOC_32
	with a "foo-GOT" value.
	* config/tc-i386.h (i386_validate_fix): Declare it.
	(TC_VALIDATE_FIX): New macro -- call it.
	(NOP_OPCODE): Cast to `char' to avoid compiler warnings.

	* as.h: If __STDC__ is not defined and varargs.h is available, use
	it rather than stdarg.h.

	* write.h (struct fix): Added new bitfield fx_plt, for fixups
	referring to PLT entries.
	* write.c (fix_new_internal): Initialize fx_plt to zero.
	(adjust_reloc_syms): Re-fetch `sym' after top of reduction loop.
	Don't adjust fx_offset by frag address, since S_GET_VALUE now
	includes the frag address.
	(fixup_segment): Changed local var PCREL to type int, added PLT.
	If PC-relative fixup refers to a PLT entry for a symbol in the
	current section, don't reduce it.

	* write.c (adjust_reloc_syms):  Exit loop through a label.  If
	DEBUG5 is defined, print out each fixup before and after
	processing.
	(fixup_segment): If DEBUG5 is defined, print out each fixup before
	and after processing.
	(print_fixup): Added prototype.  Show address on first line.  Show
	fx_offset and fx_subsy.  [!BFD_ASSEMBLER]: Only show fx_r_type if
	NEED_FX_R_TYPE is defined.

	* symbols.c (print_symbol_value_1): Check S_IS_LOCAL, S_IS_EXTERN,
	S_IS_DEBUG, S_IS_DEFINED also.

Thu Sep 29 18:57:06 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (all): Depend on .gdbinit.
	(.gdbinit): Rebuild from gdbinit.in by running config.status.

	* gdbinit.in: Define new function "pf".  Fix doc on "pe" and "ps".

	* write.c (print_fixup): Print source location on first line.
	Show fx_r_type and fx_addsy fields.

Wed Sep 28 14:56:39 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* configure.in: Set bfd_gas for all sparc targets in one place,
	instead of separately for each.  Correctly handle user-supplied
	"--enable-bfd-gas" option.

	* gdbinit.in: Move "break abort" to end, in case gdb complains.

	* as.h (PRINTF_WHERE_LIKE, PRINT_LIKE) [USE_STDARG, !__GNUC__]:
	Use PARAMS macro.

	* symbols.c (resolve_symbol_value, case O_symbol): Don't do any
	processing if add_symbol is undefined or in expr_section.
	(resolve_symbol_value, case O_add): For symbol plus
	constant-valued symbol, convert to O_symbol and re-reduce.
	(S_GET_VALUE): If symbol needs resolving, resolve it.
	(indent_level): No longer static.
	(print_symbol_value_1): Don't print frag address if it matches
	zero_address_frag.  Don't print "resolving" if already resolved.
	Print segment name.  Don't call print_expr_1 on an undefined
	symbol.
	(print_expr_1): Fix whitespace before printing X_add_number.

	* expr.c (make_expr_symbol): No longer static.  Use symbol_create,
	not symbol_new, for symbols holding expression values.
	* expr.h (make_expr_symbol): Move declaration here.
	* write.c (fix_new_exp): Handle O_add by creating an
	expression-valued symbol, and calling fix_new_exp recursively.
	(adjust_reloc_syms): If a fixup's symbol value is a sum of an
	undefined symbol and a constant, fold the constant into the fixup,
	and refer to the undefined symbol directly.  Then process the
	fixup again from scratch.
	(write_object_file): Before calling adjust_reloc_syms, make a pass
	through the symbol list trying to resolve values.

	* write.c (print_fixup): New routine, for debugging.
	(write_relocs): Call bfd_install_relocation.  Deleted various
	hacks for working around problems with bfd_perform_relocation.

	* Makefile.in (VERSION): Update to 2.4.90.

Wed Sep 28 11:50:40 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* Makefile.in (gasp.o): Depends upon config.h.

	* config/tc-mips.c: Include subsegs.h.
	(md_apply_fix): If an unconditional b or bal overflows, and we are
	not assembling PIC code, replace it with a j or jal.

	* config/tc-mips.c (md_apply_fix): Correct branch overflow test.
	Use as_bad_where and as_warn_where rather than as_bad and as_warn.

Mon Sep 26 17:15:59 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* write.c (write_relocs): Add file name and line number to
	as_fatal calls.  Handle bfd_reloc_overflow case specifically when
	RELOC_EXPANSION_POSSIBLE.

Fri Sep 23 16:11:28 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* as.h (USE_STDARG, USE_VARARGS): Define one or neither of these
	here.  Use them for deciding which PRINTF*LIKE macro definitions
	to use.
	* messages.c: Use them, instead of NO_STDARG, NO_VARARGS.
	[!USE_STDARG && !USE_VARARGS] (va_alist, va_dcl, ...): Provide
	default definitions matching what we were doing before.
	(as_tsktsk): Remove the non-stdarg, non-varargs version, and
	always use the varargs form if not using stdarg.  It's safe to
	always use vfprintf, because libiberty will provide it if the
	native system doesn't.  Also, always make format be const.
	(as_warn, as_warn_where, as_bad, as_bad_where, as_fatal): Ditto.

Fri Sep 23 14:42:34 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-mips.c (load_register): Always use addiu when adding a
	constant to $zero--no need to use daddiu.
	(macro): Hack the -mips3 overflow tests to not fail when offsetT
	is only 32 bits.

	* symbols.h (copy_symbol_attributes): Declare.

Thu Sep 22 21:58:24 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* listing.c: Bugfixes based in part on patches from Paul
	Kranenburg.
	(listing_newline): Check filename as well as line number when
	deciding whether to record it.
	(list_symbol_table) [S_IS_REGISTER]: Check that S_IS_REGISTER is
	false (if defined) as well as checking for reg_section.
	(listing_listing): Iterate fetching lines while line number is too
	low, and we haven't run off the end of the input file.

	* config/vms-conf.h: Changed HAVE_DELETE to HAVE_REMOVE.

Thu Sep 22 13:39:10 1994  Kung Hsu  (kung@x1.cygnus.com)

	* ecoff.c (ecoff_generate_asm_lineno): check if
	current_stabs_filename is NULL before strcmp.
	* read.c (read_a_source_file): fix a bug in generate_asm_lineno
	checking.

Wed Sep 21 18:17:35 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config/ho-*.h: Now-unused files deleted.

	* symbols.c (copy_symbol_attributes): New function.  Copies BFD
	symbol flags and calls OBJ_COPY_SYMBOL_ATTRIBUTES.
	(resolve_symbol_value, case O_symbol): Call it, if X_add_number is
	zero.  Don't call obj_frob_forward_symbol.
	* read.c (pseudo_set): Call copy_symbol_attributes, but only if
	X_add_number is zero.
	* config/obj-elf.h (obj_frob_forward_symbol): Deleted.

	* config/tc-i960.c: Lots of whitespace, comment reformatting,
	using GNU indent.
	(strchr): Don't declare.
	[BFD_ASSEMBLER]: Don't compile md_convert_frag,
	md_estimate_size_before_relax, md_ri_to_chars,
	md_create_short_jump, md_create_long_jump.
	(brtab_emit): Use data_section, not SEG_DATA.

	Mon Sep 19 17:14:44 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* config/vms-conf.h: new file, manually derived from conf.in.
	* config-gas.com: use it, and eliminate obsolete "host.h".

Wed Sep 21 11:11:30 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-ppc.c (ppc_current_block): New static variable.
	(ppc_stabx): Set sy_tc.within of a C_STSYM symbol to
	ppc_current_block.  Don't move around any stab symbol, just those
	for common symbols.
	(ppc_bs): Set ppc_current_block.
	(ppc_es): Clear ppc_current_block.
	(ppc_frob_symbol): Set the value of a C_STSYM symbol to the offset
	from the csect of the enclosing block.

	* config/tc-mips.c (insns_since_cache_access): Remove.
	(append_insn): Remove setting of insns_since_cache_access, and
	special 4600 handling; it turns out not to be required.

Tue Sep 20 16:13:18 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-mips.c (md_shortopts): Remove E.
	(md_longopts): Add EB and EL.
	(md_parse_option): Handle -EB and -EL as separate options, rather
	than as a single -E option with an argument.

Mon Sep 19 12:42:05 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (hppa_fix_adjustable): Reject reductions
	involving global symbols too.

Mon Sep 19 12:12:46 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* as.h: Test NEED_DECLARATION_*, not NEED_*_DECLARATION.

	* configure.in: Test for remove, not delete.  Fix cross-assembler
	test.
	* as.h: Test HAVE_REMOVE, not HAVE_DELETE; define unlink to
	remove, not delete.

	* read.c (pseudo_set, case O_symbol): If
	OBJ_COPY_SYMBOL_ATTRIBUTES is defined, invoke it.
	[BFD_ASSEMBLER]: Copy BSF_FUNCTION setting too.
	* config/obj-elf.h (OBJ_COPY_SYMBOL_ATTRIBUTES): Define.

	Wed Aug 10 19:15:30 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.h (DSG_S_C_UBITU, DST_K_VFLAGS_DSC, DST_K_TS_ATOM,
	many others): new macros; values obtained from "DSTRECRDS.SDL".
	* config/obj-vms.h (various): use them.
	(USE_BITSTRING_DESCRIPTOR): new macro, for selecting bitfield
	representation (only enum bitfields can avoid being bitstrings).
	(bitfield_suffix, setup_basic_type): new routines.
	(VMS_typedef_parse): use them.  Now recognize bitfields of all
	integral types, not just type `int'.  Caveat:  the representation
	used for bitfields still does not work for objects placed in
	registers, and gcc's optimizer sometimes puts small structs there.

	Tue Jun 14 17:31:44 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* read.c (s_text) [#if OBJ_VMS]: clear the IN_DEFAULT_SECTION
	bit from const_flag.
	* config/obj-vms.h (IN_DEFAULT_SECTION): define this macro.
	(tc_frob_label): define this to call vms_check_for_special_label,
	and declare the latter.
	* config/obj-vms.c (vax_g_doubles): declare this file-scope
	variable.
	(const_flag): initialize to IN_DEFAULT_SECTION instead of 0.
	(vms_check_for_special_label): new routine (tc_frob_label).
	(VMS_TBT_Routine_End): don't bother checking for `gcc_compiled.'
	and `gcc2_compiled.' labels; they won't reach here any more.
	(VMS_typedef_parse) [case 'r']: for types `double' and `complex
	double', use `vax_g_doubles' flag to select type of double.
	(VMS_write_object_file) [traceback setup]: don't pass symbols
	with the IN_DEFAULT_SECTION attribute to the TBT_Routine_Begin
	and TBT_Routine_End functions.

	Mon Jun  6 20:52:20 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.c (VMS_TBT_Routine_End): cache the result of
	S_GET_VALUE() to avoid many repeated function calls.
	(VMS_Check_For_Main) [#if HACK_DEC_C_STARTUP]: capitalize
	_C$MAIN_ARGS in advance, in case -h3 (leave symbol name as-is)
	gets requested.  [All the HACK_DEC_C_STARTUP code appears to
	be obsolete; gcc does it automatically for vms target.  It's
	also misnamed, because it is for the "VAX C" run-time library,
	not the newer "DEC C" one which has much different startup code.]
	{various}: use `S_SET_xxx(symbol,new_value)' rather than
	`S_GET_xxx(symbol) = new_value'.

Mon Sep 19 12:05:03 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/obj-coff.c (c_dot_file_symbol): Use bfd_abs_section_ptr,
	not &bfd_abs_section.

Thu Sep 15 18:36:34 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* expr.c (clean_up_expression): Use addressT, not bfd_vma.

Tue Sep 13 20:05:47 1994  Jeff Law  (law@snake.cs.utah.edu)

	* expr.c (expr): Don't reduce the difference of two symbols in the
	same frag if the symbols are not in normal sections.

	* config/obj-som.h (S_SET_OTHER, S_SET_TYPE): Delete a.out crud.
	(S_SET_DESC, S_GET_OTHER, S_GET_TYPE, S_GET_DESC): Likewise.
	(obj_attach_unwind_info): Do not define.  Not needed anymore.
	* config/tc-hppa.c: Delete whitespace at EOL.
	(struct hppa_fix_struct): Delete fx_unwind field and all references.
	(fix_new_hppa): Last arg is now a pointer to an int.  Do not
	call obj_attach_unwind_info anymore.  For SOM R_ENTRY and R_EXIT
	fixups, store 32bits of unwind information in the fx_addnumber
	field of the fixup.
	(md_assemble, pa_entry, process_exit, pa_procend): For SOM R_ENTRY
	and R_EXIT fixups, pass a NULL pointer to fix_new_hppa, and a
	pointer to 32 bits of unwind info.
	(tc_gen_reloc): For SOM R_ENTRY and R_EXIT fixups, set the symbol
	pointer to the dummy symbol; set the addend field to fx_addnumber.
	(pa_comm, pa_equ, pa_type_args, pa_import): Use bfd_XXX_section_ptr
	rather than &bfd_XXX_section.

Tue Sep 13 21:15:36 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/tc-i386.c (md_apply_fix_1): For GOTPC relocs, decrement
	value by one; discard adjustments previously being made.  From
	Eric Youngdale.

	VMS- and Vax-related changes from Pat Rankin:
	* Makefile.in (VMS_OTHER_OBJS): add concat, getopt, and getopt1.
	* vmsconf.sh: no longer have make-gas.com echo text about needing
	to modify the gcc-vms driver when intending to use with gcc 1.x.
	* as.c (parse_options): suppress 'v' from std_short_options and
	eliminate VMS-specific conditional initialization;
	[default case]: check for '-v' if md_parse_options doesn't recognize
	an option;
	[default case, #if VMS]: check for filename argument when '-v' seen;
	[case 'v']: delete.
	* config/tc-vax.c (md_assemble): don't rely on `this_add_number'
	for O_big literal operands (double floats and long long ints);
	[VMS, md_shortopts]: add second colon after 'v';
	(md_parse_options) [VMS, case 'v']:  check for argument, so
	caller can handle `-v' w/o arg.

Tue Sep 13 16:45:08 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* config/obj-coff.c (do_relocs_for):  If TC_KEEP_FX_OFFSET
	is defined, put the tx_offset into the r_offset.
	* config/tc-sh.c (line_comment_chars): Add #
	(tc_reloc_mangle): Deleted.
	* config/tc-sh.h (TC_KEEP_FX_OFFSET): Define.
	(TC_RELOC_MANGLE): Delete.

Tue Sep 13 16:20:36 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* flonum-konst.c: Change preprocessor tests of HO_VMS to just VMS.
	* hex-value.c: Ditto.
	* config/obj-vms.c: Ditto.

	* config/tc-sparc.c (sparc_ip): Replace as_bad/exit sequence with
	a call to as_fatal.
	* config/tc-i860.c (i860_ip): Ditto.
	* config/tc-hppa.c (pa_ip): Ditto.
	* config/tc-alpha.c (alpha_ip): Ditto.
	* as.c (parse_args): Ditto.

	* config/tc-mips.c (mips_ip): Replace as_warn/exit sequence with a
	call to as_fatal.

	* write.c (write_contents): Use EXIT_FAILURE.
	* output-file.c (output_file_create, output_file_close,
	output_file_create, output_file_close): Ditto.
	* messages.c (as_fatal): Ditto.
	* config/obj-som.c (obj_som_version, obj_som_copyright): Ditto.
	* config/obj-ieee.c (write_object_file): Ditto.
	* config/obj-coff.c (write_object_file): Ditto.
	* config/tc-vax.c (main): Use EXIT_SUCCESS.
	* config/tc-m68k.c (main): Ditto.

	* hash.c (main): Pass a value to exit().

	* as.h (EXIT_SUCCESS, EXIT_FAILURE): Moved here.
	* as.c: ...from here.
	(parse_args): Use them always.
	(main): Use exit rather than return.

	* Makefile.in (*_FOR_TARGET, INSTALL_XFORM, install, uninstall):
	Rewrite handling of program_transform_name.

	* configure.in: Test for functions unlink and delete.
	* as.h: If unlink isn't available but delete is, define unlink to
	be delete.

	Update for autoconf 1.118:
	* gdbinit.in: New file, created from old .gdbinit.
	* .gdbinit: Deleted.
	* aclocal.m4 (GAS_GDBINIT): Deleted.
	* configure.in: Don't use it.  Instead, generate .gdbinit from
	gdbinit.in.  Don't substitute cpu_type, obj_format, emulation,
	atof.  Switched order of AC_LINK_FILES arguments.  Use AC_PREREQ
	to ensure that older versions of autoconf aren't used.
	* Makefile.in: Added @configure_input@ line.
	(configure): Deleted rule.

Tue Sep 13 12:08:20 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/obj-coff.c (fixup_segment): After handling the difference
	of two symbols from the same segment, set fx_subsy to NULL, to
	satisfy existing TC_COUNT_RELOC macros.

Tue Sep 13 01:47:08 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* aclocal.m4 (GAS_GDBINIT): New macro.
	* configure.in: Use it.
	* configure: Regenerated.

Mon Sep 12 20:56:38 1994  Ken Raeburn  (raeburn@kr-laptop.cygnus.com)

	* .gdbinit (pe, ps): Define new commands.
	* symbols.c (indent_level): New static variable.
	(indent, print_expr_1, print_symbol_value_1, print_symbol_value,
	print_expr): New functions.

	* Makefile.in (config-stamp): Add a "this file generated by make"
	message to config.h.

	PIC implementation for i386-linux, based on code from Eric
	Youngdale and Paul Kranenburg, with some work of my own:

	* write.c (fixup_segment): Test TC_RELOC_RTSYM_LOC_FIXUP on fixup
	before processing same-section pcrel relocations.
	(TC_RELOC_RTSYM_LOC_FIXUP): Default to 1.

	* expr.c (make_expr_symbol): If operator is O_symbol and
	X_add_number is zero, just return the symbol.  If operator is
	O_constant, resolve the symbol's value before returning.
	(operand): Permit use of "[]" for grouping.
	(clean_up_expression): For difference of two symbols in the same
	frag, add the difference of their offsets into X_add_number.
	(expr): Reduce difference of two symbols in same frag to their
	difference.

	* config/tc-i386.c (TC_RELOC): New macro.
	(struct _i386_insn): New field disp_reloc.
	(GOT_symbol): New variable.
	(operand_special_chars): Added square-brackets and at-sign.
	(reloc) [BFD_ASSEMBLER]: Added new argument OTHER; if it is not
	NO_RELOC, just return it.
	(reloc) [! BFD_ASSEMBLER]: Add third argument to dummy macro.
	(BFD_RELOC_386_PLT32, _GOT32, _GOTOFF) [! BFD_ASSEMBLER]: More
	dummy macros.
	(tc_i386_fix_adjustable): New function.  Returns zero if symbol in
	fixup is not local, to prevent relocations against externals from
	being dropped.
	(md_assemble): Initialize disp_reloc field to NO_RELOC.  Pass
	disp_reloc field to reloc() function, and use TC_RELOC to generate
	value to pass to fix_new_exp.
	(md_assemble): Change 32-bit reloc against GOT_symbol into a GOTPC
	reloc.
	(i386_operand): Initialize disp_reloc field to NO_RELOC.  Handle
	@GOTOFF, @PLT, @GOT operands.  For GOTOFF relocations with local
	symbols, force generation of the section symbol.
	(md_estimate_size_before_relax): If GOT_symbol exists, decide
	we're generating PIC code, and convert relocations against
	undefined symbols from PCREL to PLT32.
	(md_apply_fix_1) [OBJ_ELF]: Fix up values for dynamic-linking
	relocs.
	(md_undefined_symbol): Notice GLOBAL_OFFSET_TABLE_NAME and set
	and return GOT_symbol if it matches.
	(F, MAP): Move macro definitions outside function.
	(tc_gen_reloc): Only switch on size and pcrel if code wasn't
	already supplied as PLT32. GOT32, GOTOFF, or GOTPC.  Convert
	BFD_RELOC_32 using GOT_symbol into GOTPC.
	* config/tc-i386.h (TC_RELOC, tc_fix_adjustable,
	TC_RELOC_GLOBAL_OFFSET_TABLE, TC_RELOC_RTSYM_LOC_FIXUP): New
	macros.
	(NEED_FX_R_TYPE): Define.
	(LOCAL_LABEL): Accept ".X" prefix too.
	(GLOBAL_OFFSET_TABLE_NAME): Default to "_GLOBAL_OFFSET_TABLE_".

Mon Sep 12 17:51:39 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/obj-elf.c (obj_elf_type): Rewrite to accept syntax
	reportedly to be used on Irix 6.

	* config/tc-mips.c (md_pseudo_table): Handle .globl and .global.
	(s_mips_globl): New static function; needed for Irix 5 support.
	* ecoff.c (ecoff_build_symbols): If BSF_FUNCTION is set for an
	external symbol with no type, set the type to st_Proc rather than
	st_Global.  Don't set the index of an external st_Proc or
	st_StaticProc symbol unless it is also a local symbol.

	* read.c (read_a_source_file): The second argument to as_where is
	unsigned int *, not int *.

Thu Sep  8 17:18:24 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* config/obj-ecoff.h : Change names to  OBJ_GENERATE_ASM_LINENO,
	and generate_asm_lineno.
	* config/obj-elf.h : ditto.
	* read.h : ditto.
	* read.c (read_a_source_file): if no file when inst is read, set
	generate_asm_lineno to true.
	* ecoff.h : change name to generate_asm_lineno and add function
	ecoff_no_current_file.
	* ecoff.c : change name to generate_asm_lineno.
	* ecoff.c (ecoff_generate_asm_lineno) : new function, to generate
	ecoff style line for asm file.

Thu Sep  8 19:43:49 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/obj-coff.c (size_section): Do an fprintf to stderr rather
	than a printf.
	(fixup_segment): Use as_bad_where rather than as_bad.

Wed Sep  7 17:21:12 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* config/tc-{h8300,sh}.[ch] (tc_coff_symbol_emit): Function doing
	nothing becomes macro doing nothing.

Wed Sep  7 19:10:09 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (Makefile): Depend on config.status.
	(config.status): Run config.status from . instead of srcdir.

	* config/tc-i386.c (tc_gen_reloc): Use bfd_get_reloc_code_name to
	display the name of the relocation type that couldn't be handled.
	* config/tc-sparc.c (tc_gen_reloc): Likewise.
	* config/tc-alpha.c (tc_gen_reloc): Likewise.  Deleted abort call
	after call to as_fatal.

	* configure.in (i386-*-linux*): Don't set bfd_gas.

	* Makefile.in (CC_FOR_TARGET, NM_FOR_TARGET, OBJDUMP_FOR_TARGET,
	install, uninstall): Don't use "brokensed" hack any more, the new
	autoconf code should never let program_transform_name be empty.

	Update for autoconf beta 1.112:
	* aclocal.m4 (GAS_CHECK_DECL_NEEDED, GAS_WORKING_ASSERT): New
	macros.
	* configure.in: Use them.  Use AC_ARG_PROGRAM (now provided by
	autoconf) instead of my hacked-up AC_PROGRAM_TRANSFORM_NAME.  Move
	test for CROSS_COMPILE just before AC_FUNC_ALLOCA, and emit a
	message to try to ease confusion about autoconf's
	"cross-compiling" message.
	* acconfig.h (NEED_DECLARATION_MALLOC, NEED_DECLARATION_FREE,
	NEED_DECLARATION_ERRNO): Renamed from NEED_*_DECLARATION.
	* configure, conf.in: Regenerated.

Wed Sep  7 12:49:55 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* configure.in: Check ${host} and ${target} rather than
	${host_canon} and ${target_canon}.
	* configure: Likewise.

Tue Sep  6 11:42:38 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-mips.c (mips_cpu): New static variable.
	(insns_since_cache_access): New static variable.
	(md_begin): Set mips_cpu as well as mips_isa.
	(append_insn): If mips_cpu is 4600, require four nop instructions
	between an instruction which accesses the cache and certain CACHE
	instructions.  Keep track of the number of instructions seen since
	an instruction which accesses the cache.
	(md_parse_option): Set mips_cpu as well as mips_isa.

Mon Sep  5 07:09:00 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* doc/Makefile.in (VPATH): Define using @srcdir@.
	(prefix, program_transform_name, exec_prefix): Use autoconf style
	@-substitutions.

Sun Sep 04 17:58:10 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* config/ho-riscix.h, config/tc-arm.c, config/tc-arm.h: New files
	* configure.in: Recognize the arm.

Fri Sep  2 16:05:50 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ecoff.c (add_file): Don't try to generate line numbers if the
	symbol table has been frozen.

Thu Sep  1 19:48:01 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* aclocal.m4 (AC_PROG_CC): Use AC_DEFUN, and omit AC_PROVIDE.

	* configure.in: Handle user-specified bfd-assembler option with
	separate variable from preferred configuration, until the two are
	resolved.  Indicate bfd_gas=preferred for linux a.out.  Use
	AC_PROGRAM_TRANSFORM_NAME, for which a patch has been sent to djm.
	* Makefile.in (target_alias, program_transform_name): Define,
	using autoconf @-substitutions.

Wed Aug 31 17:43:06 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* atof-generic.c: Deleted alloca handling here.

	* Makefile.in (prefix, exec_prefix): Use @-subtitutions.

	* aclocal.m4 (AC_OUTPUT_LINKS): Deleted redefinition, since
	autoconf 1.109 has this fixed.
	* configure.in: Don't change quote characters around AC_MSG_ERROR
	invocation.  Don't use AC_HEADER_STDC, since it requires running a
	program.  Cache NEED_*_DECLARATION values.
	* configure, conf.in: Regenerated with a modified autoconf 1.109.

	* as.h (volatile): Don't test or define here; not needed.
	(alloca): Replace alloca-conf.h inclusion with code recommended in
	autoconf documentation.  Include config.h first.

Wed Aug 31 11:20:48 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/obj-coff.h (S_IS_DEFINED): Absolute symbols are defined
	also.

	* configure.in, configure: Initialize bfd_gas to no.

Tue Aug 30 19:31:14 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* as.h: Include alloca-conf.h from "libiberty", not
	"../libiberty".

Mon Aug 29 16:11:30 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-ppc.c (md_apply_fix): Don't generate a reloc when a
	symbol is used as an offset into a CSECT that is not a TOC.  These
	types of loads are generated by gcc -mminimal-toc.

Sun Aug 28 13:22:52 1994  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* as.h (flag_*): Added comments describing meanings of some of
	these variables.
	(struct frag): Add some comments about the ns32k-specific fields
	and why they're here.
	(SIZEOF_STRUCT_FRAG): Cast addresses to char*, not int.
	(flag_print_statistics): Declare.

	* as.c (parse_args): Set flag_print_statistics instead of
	statistics_flag.  Options array is now const.  Added new option
	"dump-config"; if specified, print TARGET_ALIAS, TARGET_CANONICAL,
	TARGET_CPU, TARGET_OBJ_FORMAT, and TARGET_FORMAT, if defined.
	(main): Change test to check flag_print_statistics.
	(statistics_flag): Deleted.

	* frags.c (frag_variant): Removed PCREL_ADJUST and BSR arguments.
	Always initialize them to zero.
	* frags.h (frag_variant): Fixed prototype.
	* config/tc-i960.c (get_cdisp): Don't pass the extra zero args.
	* config/tc-ns32k.c (convert_iif): Don't pass the arguments; cache
	the value of frag_now and fill in the fields later.

	* Makefile.in (distclean, realclean): Remove new
	configure-generated files.

Sat Aug 27 20:26:12 1994  Ken Raeburn  (raeburn@kr-laptop.cygnus.com)

	Conversion to autoconf:
	* acconfig.h, aclocal.m4: New files.
	* configure.in: Rewritten (except for some target-specific code)
	for autoconf.
	* conf.in, configure: New files, generated from the above.
	* Makefile.in: Changed magic sequence indicating insertion of
	makefile fragments.
	(VPATH, srcdir, CC, LIBS, OBJS dependencies): Use @-substitutions
	from configure.
	(LINKED_HEADERS): Deleted a.out.gnu.h, a.out.h, and host.h.
	(config.status, configure): Rewrite rules.
	(config-stamp): Depend on conf.  Skip variables that configure is
	now substituting itself.
	(*.o dependencies): Deleted host.h.
	(distclean, realclean): Don't delete host.h.
	* as.c: Don't include stdio.h, string.h, sys/types.h.  Include
	signal.h after as.h.
	* as.h: Include alloca-conf.h first.  Include ctype.h, string.h,
	strings.h, stdlib.h, unistd.h, sys/types.h, fopen-bin.h,
	fopen-same.h, as suggested by autoconf test results.
	[BROKEN_ASSERT]: Don't include assert.h.
	(strdup): Declare.
	(volatile, const): Define if not __STDC__ and not already defined.
	(malloc, realloc) [NEED_MALLOC_DECLARATION]: Declare.
	(free) [NEED_FREE_DECLARATION]: Declare.
	* gasp.c: Include config.h, stdlib.h (if HAVE_STDLIB_H).  Don't
	include host.h.
	(malloc) [NEED_MALLOC_DECLARATION]: Declare.
	* messages.c: Include as.h first.  Include errno.h only if
	HAVE_ERRNO_H.  If HAVE_VARARGS_H and not __STDC__, undefine
	HAVE_STDARG_H.  Set NO_STDARG and NO_VARARGS as appropriate.
	* doc/Makefile.in (srcdir, INSTALL, INSTALL_PROGRAM,
	INSTALL_DATA): Use autoconf @-substitutions.

	* input-file.c: Don't include assert.h here, 'cause as.h already
	includes it.

	* config/tc-alpha.c: Added various prototypes for static
	functions.
	(in_range): New function, tests whether a value can fit in an
	N-bit field.
	(build_mem, build_operate_n): New functions for constructing
	opcode values.
	(emit_sll_n, emit_ldah_num, emit_addq_r, emit_lda_n): New
	functions for emitting single instructions, no longer requiring a
	recursive call to md_assemble.
	(emit_add64): New function for expanding a REG:=REG+CONST
	operation into one or more instructions, to handle wide constants.
	(clear_insn): New variable.
	(md_begin): Fill it in with zeros and BFD_RELOC_NONE values.
	(alpha_ip): Use it to initialize local variable insns.
	(alpha_ip, label "immediate" and cases 'P', 'G'): Use emit_add64
	for calculations.

Fri Aug 26 14:46:15 1994  Ken Raeburn  (raeburn@kr-laptop.cygnus.com)

	* subsegs.c (section_symbol): Reverse still-wrong test of
	EMIT_SECTION_SYMBOLS.

	* write.c (BFD_FAST_SECTION_FILL): Always define.
	(write_contents): If fill_size is 1, use memset instead of looping
	calling memcpy.

Wed Aug 24 12:46:08 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-mips.h (LOCAL_LABEL): Define as 0, for compatibility
	with native MIPS assembler.
	* configure.in (mips-*-irix*): Don't set emulation.
	* config/te-irix.h: Remove.

	* ecoff.c (ecoff_symbol_new_hook): Don't add a new file if we
	haven't seen any input files yet.
	* config/tc-alpha.c (md_begin): Just call symbol_create, rather
	than calling symbol_new and then removing the symbol from the
	list.

	* as.c (main): Move a inside the #if 0 block which uses it.
	* ecoff.c (current_stabs_filename): Make const.
	* frags.h (frag_align_pattern): Declare.
	* gasp.c (new_file): Cast isp to long, and use %ld to print it.
	* config/tc-alpha.h (md_operand): Add cast to void.
	(alpha_do_align): Declare argument types.
	(tc_get_register): Declare.
	(alpha_frob_ecoff_data): Declare.
	* config/tc-alpha.c: Include <ctype.h>.
	(s_mask): Don't declare; does not exist.
	(line_comment_chars): Remove /* from descriptive comment.
	(tc_get_register): Remove unused local reg.
	(tc_gen_reloc): Don't bother to compare unsigned to zero.
	(s_base): Correct warning to actually print register number.
	(md_begin): Remove unused locals retval, lose, and i.
	(alpha_fix_adjustable): Move default case inside switch to avoid
	warning.
	(load_symbol_address): Remove unused locals reloc_addr, p, sym,
	and addend.
	(emit_byte_manip_r): Declare types for all arguments.
	(emit_extract_r, emit_insert_r, emit_mask_r): Likewise.
	(emit_sign_extend, emit_bis_r, s_proc): Likewise.
	(alpha_ip): Use sprint_value to print offsetT value.  Remove
	unused local size.  Remove unused label get_macro.
	(alpha_do_align): Make fill const.
	(md_apply_fix): Remove unused label check_zov.

	* configure.in: Recognize i586 as a synonym for i[34]86.

Tue Aug 23 12:32:14 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/obj-coff.c (c_line_new): Change line_number argument from
	unsigned short to int so that the type in the prototype matches
	the promoted type in the definition.
	(stack_delete): Comment out; not used.
	* config/obj-coff.h (tc_coff_symbol_emit_hook): Declare if not
	BFD_ASSEMBLER, not if BFD_ASSEMBLER.  Declare argument type.
	* config/tc-m68k.h (tc_coff_sizemachdep): Declare.
	* config/tc-m68k.c (tc_coff_symbol_emit_hook): Add ignored
	argument.

Tue Aug 16 01:48:20 1994  Jeff Law  (law@snake.cs.utah.edu)

	* gas/config/tc-hppa.c (pa_comm): Undo last change.  Set sy_frag for
	the common symbol to the zero address frag (the correct fix).

Tue Aug 16 01:48:20 1994  Jeff Law  (law@snake.cs.utah.edu)

	* gas/config/tc-hppa.c (pa_comm): Undo last change.  Set sy_frag for
	the common symbol to the zero address frag (the correct fix).

	* config/tc-hppa.c (pa_comm): Set sy_resolved for the common
	symbol.

Fri Aug 12 17:51:48 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-mips.c (md_begin): Drop "el" from the end of
	TARGET_CPU.  Check for mips64orion.

Tue Aug  9 19:43:45 1994  Stu Grossman  (grossman@cygnus.com)

	* configure.in:  Recognize ppc-*-netware.
	* config/te-ppcnw.h:  New file to support Power-PC/Netware
	configurations.  Currently, it just enables the use of backslash
	escapes in string directives.

Tue Aug  9 11:12:13 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-ppc.c (ppc_stabx): Call expression directly, rather
	than via pseudo_set.  If expression is a symbol, move stab symbol
	to just after symbol from expression.

	* ecoff.c (ecoff_build_procs): Don't force adr of first fdr to be
	zero.  Undoes change of June 4, 1993.

	* config/tc-mips.c (md_parse_option): Accept -mcpu=4400, 4600, and
	orion.

Mon Aug  8 16:28:08 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* as.h: Remove FOPEN_WB patch of Aug 6.
	* configure.in: Configure for ho-go32 correctly.
	* config/ho-go32.h: Fix copyright.

Mon Aug  8 11:59:51 1994  Jeff Law  (law@snake.cs.utah.edu)

	* gas/config/tc-hppa.c (md_pseudo_table): Delete redundant
	upper-case versions of the pseudo-ops.

Mon Aug  8 13:42:16 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-sparc.c (md_apply_fix): If we are going to generate a
	non PC relative reloc, don't put the addend in the object file.

Sat Aug  6 01:15:02 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* as.h: If FOPEN_WB is not defined, do the right thing in a go32
	environment.

Mon Jul 11 11:34:52 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* config/tc-h8300.c (pint): New function for handling varying
	size of int pseudo op.
	* doc/as.texinfo: Fix typo describing .h8300h pseduop.

Mon Aug  1 02:40:43 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (create_new_space): Initialize sd_subspaces
	field in the space chain.

	* config/tc-hppa.c (tc_gen_reloc): Cast return value from
	hppa_gen_reloc_type.

Thu Jul 28 15:45:37 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Check more carefully for
	conflicting architectures.
	(md_parse_option) [NO_V9]: Complain if v9 was selected.
	(md_show_usage): Derive architecture list in usage message from
	architecture_pname array.
	(cypress): Macro deleted.
	(op_hash): Don't initialize.
	(s_common): Use bfd_und_section_ptr instead of bfd_und_section.

	* config/tc-sparc.c (BSR): New function.
	(sparc_ip): Use it for right-shift operations of 32 bits or more.

	* config/tc-sparc.c (sparc_ip): Implement new operand type 'x'.

Tue Jul 26 18:21:24 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/obj-coff.h: Moved common includes and TARGET_FORMAT
	definitions together.
	(WORKING_DOT_WORD, WARN_SIGNED_OVERFLOW_WORD,
	OBJ_COFF_OMIT_OPTIONAL_HEADER, BFD_HEADERS, BFD) [!BFD_ASSEMBLER]:
	Moved these definitions to the start of the file, before the
	includes.
	(SYMBOLS_NEED_BACKPOINTERS, OBJ_COFF_MAX_AUXENTRIES): Always
	define these.
	(S_GET_ZEROES): Deleted.
	(S_SET_ZEROES): Moved to obj-coff.c.

	* config/obj-coff.c (obj_coff_* psuedo-op fns): Deleted
	forward declarations.
	(obj_pseudo_table): Moved to one version end of file,
	conditionalized internally.
	(stack typedef, stack_init, stack_delete, stack_push, stack_pop,
	tag_hash, tag_init, tag_insert, tag_find, tag_find_or_make): Moved
	to one combined version at top of file, unconditional.  Deleted
	forward declarations.
	(s_get_name): Moved one copy of declarations to start of file.
	(def_symbol_in_progress): Ditto.  Don't initialize.
	(S_SET_ZEROES): Moved here from obj-coff.h.
	(write_object_file): If TC_COFF_SET_MACHINE is defined, call it on
	the file headers.

	* config/obj-coff.c (seg_info_off_by_4): Now const and static.
	(SEG_INFO_FROM_SEG_NUMBER): Unused macro deleted.
	(previous_file_symbol, def_symbol_in_progress, symbol_externP,
	symbol_extern_lastP, last_functionP) [!BFD_ASSEMBLER]: Don't
	bother explicitly initializing to zero value.

	* config/obj-coff.c (fixup_segment) [TC_I960]: Use SF_GET_BALNAME
	and SF_GET_CALLNAME instead of the TC_S_IS_ versions.

	* config/tc-i960.h (TC_COFF_SET_MACHINE): New macro.  Calls
	tc_headers_hook.

	* config/tc-i960.c (targ_has_iclass): Use I_CX | I_CX2 where I_CX
	was used previously.
	(tc_headers_hook): If I_CX2 is found, set flags to F_I960CA.

	* config/tc-i960.c (po_hash): Declaration deleted.
	(next_object_file_charP): Ditto.
	(regnames, aregs, coj): Now const.
	(parse_memop): Static array def_scale now const.
	(md_begin): Cast away const when passing hash routines addresses
	of values in regnames or aregs.
	(md_longopts): Added "link-relax" and "no-relax" hyphenated forms.
	Continue to accept one-word forms.
	(struct tabentry, arch_tab): Moved to top level from inside
	md_parse_option.  Now const.
	(md_show_usage): Use arch_tab to generate usage message.  Print
	hyphenated forms of relax options.

	* config/tc-i960.h (DEFINE_I960_AOUT, TC_S_IS_*, TC_S_*_SYSPROC,
	TC_S_FORCE_TO_*): Moved from here...
	* config/tc-i960.c: ... to here.  Changed DEFINE_I960_AOUT stuff
	to test OBJ_AOUT and OBJ_BOUT directly.

	* config/tc-i960.h (CTRL, COBR, COJ, REG, MEM*, FBRA, CALLJ,
	M1-M3, REG_OPC, R_*, SFR, LIT, FP, OP, R, RS, RL, RSL, F,
	{R,F}{,L}{2,4}, M, SFR_OK, LIT_OK, FP_OK, REG_ALIGN, MEMOP, I_*):
	Macros deleted.

	* config/tc-i960.c (ARCH_JX): Define.
	(arch_tab): Include JX.
	(targ_has_sfr, targ_has_iclass): Handle JX.
	(tc_headers_hook): Set flags to F_I960JX for i960JX.

Fri Jul 15 15:36:51 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* subsegs.c (section_symbol): Had last change backwards.

Thu Jul 14 13:21:06 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/atof-ns32k.c: Deleted.

	* config/obj-aout.c (obj_aout_frob_symbol): Use
	bfd_ind_section_ptr and bfd_und_section_ptr.

	* subsegs.c (subseg_set_rest): Compare segT values directly,
	without casting to int first.

	* config/tc-ns32k.c (md_begin): Return value from hash_insert
	should be pointer to const.  Don't call exit explicitly after
	calling as_fatal; it won't return.
	(convert_iif): Make local variable j be pointer to bit_fixS, since
	that's how it's used.
	(encode_operand, case 'b'): Ignore sprintf return value.  Don't try
	converting freeptr to int and back.

	Merged in NS32K support update from Ian Dall (dall@hfrd.dsto.gov.au):

	* config/te-pc532mach.h: New file. pc532-mach target emulation.

	* config/te-netbsd532.h: New file. Netbsd532 target emulation.

	* config/tc-ns32k.h: Add definition of NOP_OPCODE.

	* config/tc-ns32k.h: Add prototype for fix_new_ns32k_exp.

	* config/tc-ns32k.h: Add BFD_ASSEMBLER support.

	* config/tc-ns32k.c (tc_gen_reloc): New function for BFD_ASSEMBLER.

	* config/tc-ns32k.c (fix_new_ns32k_exp): Get reloc type
	differently for BFD_ASSEMBLER.

	* config/tc-ns32k.c (md_estimate_size_before_relax): Get reloc
	type differently for BFD_ASSEMBLER.

	* config/tc-ns32k.c (md_create_long_jump): Size of opcode is one
	not 2.

	* config/tc-ns32k.c (md_convert_frag): Code for the BFD_ASSEMBLER
	case. Also use smart md_pcrel_adjust function.

	* config/tc-ns32k.c (md_apply_fix): Code for the BFD_ASSEMBLER
	case. Also use smart md_fix_pcrel_adjust function.

	* config/tc-ns32k.c (md_fix_pcrel_adjust): New function which can
	find offset from opcode to operand even if in another frag
	and in the presence of relaxing.

	* config/tc-ns32k.c (md_pcrel_adjust): New function which can
	find offset from opcode to operand even if in another frag
	and in the presence of relaxing.

	* config/tc-ns32k.c (md_number_to_disp): Check ranges properly.

	* config/tc-ns32k.c (md_atof): use atof_ieee instead of special
	atof_ns32k.

	* config/tc-ns32k.c (reloc): New (static) function for
	BFD_ASSEMBLER.

	* config/tc-ns32k.c (convert_iif): More correct pc relative code.
	md_relax must be able to find opcode address even if in another frag.

	* config/tc-ns32k.c: More extensive comments.

	* config/tc-ns32k.c (encode_operand): Support new operand classes I
	and Z. Drop Q.

	* config/tc-ns32k.c (fix_new_ns32k_exp): new function and
	corresponding prototype.

	* config/tc-ns32k.c: make 32532 default machine instead of 32032.

	* config/tc-ns32k.c: include opcode/ns32k.h after as.h

	* aout_gnu.h: r_disp needs to be 2 bits for TC_NS32K

	* write.h: fx_im_disp needs to be 2 bits big for TC_NS32K

	* write.c (relax_segment): Use TC_PCREL_ADJUST macro (if defined)
	instead of adding pcrel_adjust.

	* write.c (write_object_file): Adjust to_addr for the
	BROKEN_DOT_WORD feature for the BFD_ASSEMBLER case.

	* write.c (write_object_file): Use TC_CONS_FIX_NEW if it is defined.

	* write.c (write_contents): Add code (currently if
	BFD_FAST_SECTION_FILL is defined) to make large fills a lot faster.

	* configure.in: Remove ns32k from special FP list. All the ns32k
	series use ieee float.

	* configure.in: Add ns32k-pc532-mach and ns32k-pc532-netbsd targets

	* as.h: include expr.h before targ-env.h. Some target dependent file
	want to use expr structures.

Wed Jul 13 14:49:05 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-m68k.c (m68k_ip): Change rp to be a const pointer.
	(md_parse_option): Clear cpu field of current_architecture before
	setting a new cpu type.  Clear no_68881 for m68881 or m68882.
	Clear no_68851 for m68851.

Tue Jul 12 21:27:05 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/ho-sysv.h (realloc): Declare.

	* symbols.c (symbol_create): New function, most of the guts of the
	old symbol_new function.
	(symbol_new): Now just checks symbol_table_frozen, calls
	symbol_create, and enters the symbol into the symbol table.
	* subsegs.c (section_symbol): If EMIT_SECTION_SYMBOLS is not true,
	and the symbol table is frozen, call symbol_create instead of
	symbol_new.
	* symbols.h (symbol_create, symbol_table_frozen): Declare.

	* symbols.c (symbol_clear_list_pointers): Always a function now.
	* struc-symbol.h (symbol_clear_list_pointers): Deleted macro
	version.

	* symbols.c (debug_verify_symchain): New macro, defined to be
	verify_symbol_chain or a cast to void, depending on DEBUG_SYMS.
	(many functions): Invoke debug_verify_symchain unconditionally.

Tue Jul 12 12:06:42 1994  Kung Hsu  (kung@x1.cygnus.com)

	* config/obj-ecoff.h: change calling interface of
	OBJ_GENERATE_ASM_LINE_STAB.
	* config/obj-elf.h: ditto.
	* read.c (read_a_source_file): ditto.
	* ecoff.h: change calling interface of
	ecoff_generate_asm_line_stab.
	* ecoff.c (add_file): record of filename to handle case of include
	files, also change default built-in type from int to void for
	asm file.
	* ecoff.c (ecoff_generate_asm_line_stab): handle case of include
	files.

Mon Jul 11 17:20:23 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-mips.c (macro): In case M_LA_AB, SVR4_PIC, large
	constant, and case ldd_std, set mips_optimize to 2 temporarily to
	avoid inserting an unexpected nop instruction.

Sat Jul  9 00:05:12 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_build_lineno): Handle count correctly for last
	line number.

Fri Jul  8 15:22:07 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* gasp.c (process_pseudo_op): Pass right args to do do_aif.
	(get_any_string): New arg 'pretend_quote'.
	(get_and_process, do_formals, macro_expand, do_sdata,
	process_pseudo_op): Use new arg.

Fri Jul  8 12:23:44 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* config/obj-ecoff.h: define macro OBJ_GENERATE_ASM_LINE_STAB.
	* config/obj-elf.h: ditto.
	* read.c (read_a_source_file): generate line stabs for asm file.
	* read.h: add extern generate_asm_line_stab.
	* ecoff.h : add prototype for ecoff_generate_asm_line_stab().
	* ecoff.c (add_file): if there's no filename provided, set switch
	to generate line stabs for .s file.
	* ecoff.c (add_procedure): add stabs symbol for .ent directive.
	* ecoff.c (generate_ecoff_stab): creates an artificial stabs.
	* ecoff.c (generate_asm_line_stab): generate a artifitial label
	for each line and generate a stabn for the line.

Thu Jul  7 17:04:03 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* gasp.c (get_any_string): Cope with getting a string with an
	alternate base specifier.
	(do_aif, do_aelse): Only enable output if expression is true and previous
	level was on.
	(chartype_init):  Add BASEBIT chartype.
	(process_pseudo_op):  Notice nesteed AIFs.

Thu Jul  7 12:30:22 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* h8300.c (do_a_fix_imm): Code for 2 bit reloc type using in trapa
	insn.  (fix pr 5165, 5174)

Thu Jul  7 11:31:32 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (R_DLT_REL): If it isn't defined, then define
	to an appropriate value to avoid losing on old hpux systems.

	* config/tc-hppa.c (hppa_fix_adjustable): Reject reductions for
	symbols in DLT relative relocs.
	(tc_gen_reloc): Zero out the addend field for DLT relative relocs.

Wed Jul  6 01:07:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-ppc.c (ppc_tc): If not OBJ_COFF, force TOC entry to
	align to a four byte boundary.

Tue Jul  5 15:42:09 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/tc-alpha.c (load_expression): Handle 32-bit addends.
	(gpdisp_hi16_howto): Now points to const.
	(load_insn_table, alpha_ip): Fix uses of const.

	* doc/internals.texi: Updates to COFF description.  Added "@end
	defmac" as needed, and some extra heading and "@bye" so it'll
	format as a separate document.

Tue Jul  5 13:54:00 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/obj-elf.h (S_GET_ALIGN, S_SET_ALIGN): Define.
	* config/obj-elf.c (obj_elf_common): Set alignment of common
	symbol.
	* config/tc-sparc.c (s_common): If OBJ_ELF, set alignment of
	common symbol.

Mon Jul  4 18:29:43 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (is_complex): New macro.
	(cons_fix_new_hppa): "Handle" complex expressions.

Fri Jul  1 00:48:12 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-coff.c (write_object_file): Set s_align field from
	section_alignment array.

Thu Jun 30 15:05:28 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* write.c (write_object_file): Use bfd_com_section_ptr.
	* as.h (absolute_section, undefined_section): Use new BFD macros
	bfd_abs_section_ptr and bfd_und_section_ptr.

Thu Jun 30 14:36:37 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/tc-mips.c (macro): For M_LI_SS, decide how to handle it
	based on contents of imm_expr and offset_expr, rather than
	mips_pic.  For M_LI_DD, decide how to handle it based on segment
	name of offset_expr, rather than mips_pic.
	(mips_ip): If g_switch_value < 4, use immediate values for 'l'.
	If g_switch_value < 8, use .rdata rather than .lit for 'L'.

Wed Jun 29 17:30:46 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* as.c (show_usage): Break long string into shorter ones.
	(parse_args): Add -v, prints version id and continues.
	* config/tc-mips.c (md_show_usage): Break long string.

Mon Jun 27 09:47:16 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	*  config/tc-i386.c (md_parse_option): Handle "-V" and "-Q" if
	OBJ_ELF is defined.

Sun Jun 26 16:30:48 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* as.c (main) [HOST_SPECIAL_INIT]: New hook, for host-specific
	initialization.

Wed Jun 22 00:24:55 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.h (obj_frob_symbol): Define for OBJ_ELF.
	More gas/bfd lossage exposed by the new linker code.

Tue Jun 21 11:32:18 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* subsegs.c (subseg_change): Clear seginfo after allocating it.
	(subseg_get): Pass actual size of seginfo to memset.

	* subsegs.c (abs_seg_info, und_seg_info): Define if BFD_ASSEMBLER.
	(subseg_change): Store seg_info for bfd_abs_section_ptr in
	abs_seg_info, and store seg_info for bfd_und_section_ptr in
	und_seg_info.
	(subseg_get): Likewise.  Also, don't set output_section if it is
	already set.
	(seg_info): Define as function.
	* subsegs.h (seg_info): Declare as function rather than defining
	as macro.
	* write.c (relax_and_size_seg): Call seg_info rather than
	bfd_get_section_userdata.

Mon Jun 20 16:30:54 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* configure.in (ppc-*-elf*): New target, like -sysv4*.

	* expr.c (operand): If "0f" is followed by '\0', don't do eol
	checks.

Mon Jun 20 15:17:43 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ecoff.c (ecoff_build_aux): Call swap_tir_out and swap_rndx_out
	via backend pointer, not directly.

Fri Jun 17 18:05:06 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (config-stamp): Make sure there is at least one
	element in the for loop.

Fri Jun 17 11:01:04 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c: Misc trivial changes to make gcc -Wall happy.

	* config/tc-hppa.h (elf_hppa_final_processing): Declare.

Wed Jun 15 20:44:46 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* as.c (parse_args): Cast xmalloc return value.

	* Makefile.in (config-stamp): If $(defs) contains multiple words,
	emit a #define line for each.
	* configure.in: For sparc64 target, use sparc cpu files and add
	sparcv9 to extra_defs.  No longer treat sparc64-*-aout* specially.

	* config/tc-sparc.c (membar_masks): Now static and const.
	(md_show_usage) [!NO_V9]: Add -Av9 to usage message.
	(current_architecture) [sparcv9]: Initialize to v9.
	(md_begin) [sparcv9]: Don't bother changing it unconditionally
	here.
	(s_reserve): Don't pass unexpected argument to as_bad with
	bad-segment message.

	* as.h (bfd_alloc_by_size_t) [BFD_ASSEMBLER]: Declare.

	* config/atof-ieee.c (int_to_gen): Commented out unused routine.

	* config/tc-vax.c (md_assemble): Removed check of operand section.

	Fri Jun  3 17:25:08 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.h (DBG_S_C_COMPLX4, DBG_S_C_COMPLX8): define
	these new VMS symbol-type macros for `complex float' and
	`complex double' support.  Their values come from the existing
	DSC$K_DTYPE_FC and DSC$K_DTYPE_DC macros in <descrip.h>.
	(DBG_S_C_REAL8_G, DBG_S_C_COMPLX8_G): G_float versions of
	REAL8 and COMPLX8; not used yet, because gcc outputs the same
	.stabs for `double' regardless of whether `-mg' is used.
	* config/obj-vms.c (VMS_typedef_parse) [case 'r']: add entries
	for gcc2's predefined types "complex float", "complex double",
	and "complex long double" (identical to complex double).

Wed Jun 15 12:32:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-coff.c (coff_frob_symbol): Use C_STAT for the .text
	section symbol, not C_LABEL.

	* config/tc-mips.c (mips_ip): Permit a modifier in 'o' case, and
	permit non constant expressions in 'u' case.  Lets ``lui
	$8,%hi(foo); lw $8,%lo(foo)($8)'' work correctly.

Mon Jun 13 12:08:52 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-aout.c (obj_aout_frob_symbol): Warn about an attempt
	to put a common symbol in a set.

Sat Jun 11 16:41:21 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Add weak symbols as an extension to a.out.
	* read.c (pseudo_set): Only preserve external bit for OBJ_AOUT and
	OBJ_BOUT if not BFD_ASSEMBLER.
	* config/aout_gnu.h (N_WEAKU, N_WEAKA, N_WEAKT, N_WEAKD, N_WEAKB):
	Define as in ../include/aout/aout64.h.
	* config/obj-aout.h (OBJ_SYMFIELD_TYPE): If not BFD_ASSEMBLER,
	define as char.
	(S_GET_WEAK, S_SET_WEAK): Define if not BFD_ASSEMBLER.
	* config/obj-aout.c (obj_pseudo_table): Add "weak".
	(obj_emit_symbols): Adjust type of weak symbols.
	(obj_aout_weak): New static function.

Fri Jun 10 13:48:49 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-elf.c (obj_elf_section): Don't set any flags based on
	the type of a special section.

	* config/ho-sunos.h: Include <stdlib.h>.  Don't declare malloc,
	realloc, free, or atol.

Wed Jun  8 06:28:37 1994  Bill Cox  (bill@cygnus.com)

	* Makefile.in (check): Delete as.new dependency, so that
	regression test doesn't trigger an assembler build.

Tue Jun  7 13:33:18 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (mostlyclean, realclean): New targets.
	* doc/Makefile.in, testsuite/Makefile.in: Likewise.

Mon Jun  6 13:10:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (RDATA_SECTION_NAME): Define.
	(macro): Correct M_LI_SS SVR4_PIC/EMBEDDED_PIC case.  After M_LI_D
	or M_L_DOB or label dob, force a new frag to avoid getting
	confused in tc_gen_reloc.
	(mips_ip): Use RDATA_SECTION_NAME, not .rdata.
	(s_change_sec): Likewise.

Fri Jun  3 23:35:36 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* read.c (emit_expr): Use memset to zero out memory, rather than
	going through md_number_to_chars.  This permits handling symbolic
	arguments when the size is larger than sizeof (valueT), if
	TC_CONS_FIX_NEW is prepared to handle the case (as it is on MIPS).

Fri Jun  3 12:50:13 1994  David J. MacKenzie  (djm@rtl.cygnus.com)

	* as.c (show_usage), config/tc-alpha.c (md_show_usage),
	config/tc-mips.c (md_show_usage): Fix up messages.

	* as.h: Replace flagseen with separate variables.
	* as.c (parse_args): Set them.  Don't accept -1 option, or -v
	explicitly (it's a synonym for --version).
	* as.c, input-scrub.c, messages.c, read.c, symbols.c, write.c,
	config/obj-aout.c, config/obj-aout.h, config/obj-bout.c,
	config/obj-bout.h, config/obj-coff.c, config/obj-coff.h,
	config/obj-vms.c, config/tc-hppa.c, config/tc-i386.c,
	config/tc-i960.c, config/tc-m68k.c, config/tc-mips.c,
	config/tc-vax.c: Use the new flag variables instead of flagseen.
	* config/tc-vax.c [OBJ_VMS]: Recognize -+, -1, -v, and document in
	usage.

	* as.c (show_usage): Remove target specific messages;
	instead, call md_show_usage.
	(parse_args): Use getopt_long_only.  Take pointers to argc and
	argv.
	(main): Pass parse_args pointers.
	* as.h: Remove 3 variables that are redundant with flagseen.
	* as.c, messages.c: Change their users to use flagseen.
	Define getopt stuff.
	* tc.h: Update md_parse_option decl.  Add md_show_usage decl.
	* config/tc-*.c: Add md_shortopts, md_longopts,
	md_longopts_size, md_show_usage.  Change calling convention for
	md_parse_option.  Remove md_parse_long_option.
	* config/tc-ns32k.c: Rename `struct option' to `struct ns32k_option'.
	* config/tc-i386.h: Don't define md_parse_option.

Thu Jun  2 13:54:46 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* as.c (show_usage): New function.
	(parse_args): Code moved from main.
	Recognize --help and --version.
	* config/tc-ns32k.h: Define TC_NS32K.
	* doc/as.texinfo: Document all of the target-independent command
	line options.

Thu Jun  2 12:07:25 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* gasp.c (hash_new_table): Clear newly allocated table.

	* config/tc-m68k.c (enum _register): Add 68060 control registers
	BUSCR and PCR.
	(last_movec_reg): New macro.
	(m68000_control_regs, m68010_control_regs, m68020_control_regs,
	m68040_control_regs, m68060_control_regs): New arrays.
	(control_regs): New pointer.
	(m68k_ip): Use control_regs instead of testing CPU every time.
	Use last_movec_reg too.  In error messages, handle 68060, and
	print 68060 for mfloat, too.
	(m68k_init_after_args): Handle "68060".  Use m68040up for making
	m68851 choice.  Set control_regs.
	(md_parse_option): Handle "68060".
	* configure.in: Setting cpu_type, recognize m68060 too.

	* config/obj-coff.c (fixup_segment) [!BFD_ASSEMBLER]
	[DIFF_EXPR_OK]: Do conversion to pc-relative for difference, even
	if pcrel is already set.

	* read.c (potable): Add this_gcc_requires_the_gnu_assembler in all
	lower-case, in case we're ignoring case of opcodes in the input
	file.

	* doc/as.texinfo (.section): Document as unavailable for a.out
	type formats.

	* config/tc-alpha.c (machine): New variable.
	(load_insn): New macro.
	(load_insn_table): New function.
	(md_begin): Call load_insn_table, once for basic instructions and
	once for appropriate PAL instruction table.
	(md_parse_option): Set `machine' based on -m##### arguments.
	* config/alpha-opcode.h (alpha_pal21064_opcodes): Split out from
	alpha_opcodes.
	(alpha_pal21164_opcodes): New table.
	(NUM21064OPCODES, NUM21164OPCODES): New macros.

	* configure.in (target i386-*-netbsd0.8): Use 386bsd emulation.

	* doc/Makefile.in (install-info-gasp): Use $$dir when installing
	file.

Wed Jun  1 10:48:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_ip): Force floating point values to be
	aligned correctly.

Fri May 27 10:05:53 1994  Ken Raeburn  (raeburn@cygnus.com)

	Merged in changes from gas-2.3 net release:

	* Makefile.in (VERSION): Updated to cygnus-2.3.1.

	* config/obj-vms.c: Replaced unchecked uses of malloc with
	xmalloc.

	* listing.c (list_symbol_table): Only test BFD64, not
	BFD_ASSEMBLER too.

	* config/obj-coff.c (fixup_segment) [BFD_ASSEMBLER]
	[DIFF_EXPR_OK]: Don't check pcrel, just convert it.

	* config/obj-vms.c: Removed lots of extra semicolons after
	compound statements.
	(strchr): Don't declare here.

	* config/ho-vax.h (realloc): Declare.

	* config/ho-vms.h (strchr, strdup): Declare.

	* config/tc-sparc.c (md_parse_option) [OBJ_ELF]: Accept and ignore
	option `-q'.

	Wed May 18 20:50:35 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.h (DBG_S_C_SQUAD, DBG_S_C_UQUAD): define these
	new VMS symbol-type macros; signed and unsigned quadword integers,
	for `long long' support.  Their values come from the existing
	DSC$K_DTYPE_QU and DSC$K_DTYPE_Q macros in <descrip.h>.  The
	VMS debugger now recognizes `long long' variables correctly.
	* config/obj-vms.c (VMS_typedef_parse) [case 'r']: add entries
	for gcc2's predefined types "long double" (same as double, as
	per gcc's current state), "long long int", "long long unsigned
	int", and final `otherwise' case (to avoid uninitialized type
	and size fields).  [caveat:  predefined types "complex int",
	"complex float", "complex double", and "complex long double" are
	still missing.]

	* config/ho-vms.h (EXIT_FAILURE): define as 0x10000002 instead
	of 0, because the latter indicates success rather than failure
	when passed to `exit' or return from `main' compiled by gcc2.

	* config/obj-vms.c (array_suffix, generate_suffix): replace two
	hardcoded `0xa3's with macro DBG_S_C_ADVANCED_TYPE from obj-vms.h.
	(VMS_typedef_parse): eliminate redundant if-then-else when
	allocating new symbol entry and linking it to VMS_Symbol_type_list.

	Tue May 17 20:47:31 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* config/obj-vms.c (Write_VMS_MHD_Records): don't try to interpret
	the contents of the GAS_VERSION string when falling back to it for
	language processor identification.

	* make-gas.com, vmsconf.sh (ENVIRON): fix misspelling of
	`psect_attr' in linker options.

	Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)

	* configure.bat: update to latest makefile.in
	* config/te-go32.h: [new] go32's environment

Fri May 20 17:59:34 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* as.h: Don't declare parameters for strstr.

Thu May 19 15:40:13 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-sparc.c (md_section_align): Don't change the size if
	OBJ_ELF.

Wed May 18 13:08:07 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (install): Redirect ln output to /dev/null.  If ln
	fails on gasp, install gasp.new, not gasp.

Wed May 18 09:16:36 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_ip): Use R_HPPA_ABS_CALL, not R_HPPA for
	absolute calls.

Tue May 17 12:50:46 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_parse_fp_cmp_cond): Report an error
	on a partial completer match.

Mon May 16 12:03:49 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c: Change .hppa_unwind to .PARISC.unwind
	throughout code.
	(is_complex): Delete definition and support for complex relocation
	types.
	(tc_gen_reloc): Delete special unwind crud for ELF.  Simplify and
	rewrite ELF code based on 94-02-02 PA ELF draft spec.
	(pa_build_unwind_subspace): Use standard PARISC_DIR32 relocs for
	the unwind descriptors.

Fri May  6 14:13:15 1994  Steve Chamberlain  (sac@cygnus.com)

	* config/go32.mh: New makefile fragment for go32 crossing.
	* configure.in (host==go32): Use new fragment.

Fri May  6 14:35:58 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* gasp.c: Include libiberty.h.
	(main): Remove unused variable i.

	* config/tc-ppc.c (md_begin): When using -many, permit comparison
	instructions to appear multiple times in the opcode table.

Thu May  5 19:14:43 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (VERSION): Update to 2.2.90.

	* symbols.c (symbol_new) [BFD_ASSEMBLER]: Don't permit additions
	to the symbol table if it's already been set in the output bfd.
	(symbol_begin) [! EMIT_SECTION_SYMBOLS] [RELOC_REQUIRES_SYMBOL]:
	Don't use bfd_abs_section.symbol for gas absolute symbol.

	* doc/Makefile.in (distclean, clean-dvi, clean-info): Delete gasp
	files too.

Thu May  5 18:12:51 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_emit_delays): Make call to
	mips_no_prev_insn unconditional.

Thu May  5 17:25:38 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/obj-coff*.*: Merged coffbfd versions into coff versions,
	with a single "#ifdef BFD_ASSEMBLER" controlling most of it for
	now.  Deleted obj-coffbfd.* files.
	* configure.in: Always use obj-coff.* for COFF targets.

Wed May  4 13:34:11 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/te-dpx2.h (TARGET_FORMAT, REGISTER_PREFIX_OPTIONAL):
	Define.
	* configure.in (m68k-bull-sysv3*): Enable.

	* config/coff_gnu.h: Deleted.

Wed May  4 11:29:17 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-m68k.h (TARGET_FORMAT): If not TE_SUN3, define as
	"a.out-zero.big".

	* config/obj-coffbfd.c (fixup_segment): Make common symbol and PC
	relative adjustments when TE_LYNX is defined as well as when
	TC_I386 is defined.

Wed May  4 02:29:21 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* as.h (strstr): Restore declaration.
	(subseg_get) [BFD_ASSEMBLER]: Declare.

	* write.c (write_object_file): If obj_adjust_symtab is defined,
	invoke it.  Then call set_symtab, and finally invoke *_frob_file
	hooks.
	* config/obj-coff.c (coff_adjust_symtab): Renamed from
	coff_frob_file.
	* config/obj-coff.h (coff_adjust_symtab): Changed declaration
	accordingly.
	(obj_adjust_symtab): Macro also changed.

	* configure.in (i386-*-gnu*): New target, handled like i386-mach.

Tue May  3 21:04:16 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/obj-coff.h (TARGET_FORMAT) [TC_I960]: Select little
	endian version.

	* config/obj-coffbfd.h (TARGET_FORMAT) [TC_I960]: Ditto.

	* config/obj-coff.c (coff_frob_section): Round up the size of
	every section to a multiple of the alignment, so that BFD doesn't
	surprise us.

	Eliminate many simple differences between the two COFF back ends:

	* config/obj-coffbfd.c: Removed all uses of DEFUN and DEFUN_VOID.
	Made minor stylistic changes, deleted some register declarations.
	(stack_top): Deleted.
	(symbol_to_chars): Use absolute_section and reg_section instead of
	the corresponding SEG_* symbols.
	(obj_coff_endef, tag_find_or_make, fixup_segment): Likewise.
	(stack typedef, stack_init, stack_delete, stack_push, stack_pop):
	Moved to just after pseudo-op table.  All functions now static.
	(stack_delete): Removed declaration.
	(tag_init, tag_insert, tag_find_or_make, tag_find): Moved to just
	after stack functions.
	* config/obj-coffbfd.h: Reordered some declarations and macros.
	(stack_init, stack_delete, stack_push, stack_pop): Don't declare.
	(stack typedef): Deleted.
	(SYMBOLS_NEED_BACKPOINTERS): Always undef then define; don't test.
	(SYM_AUXENT): New macro.
	(SA_GET_*, SA_SET_*): Define in terms of SYM_AUXENT when feasible.
	(SF_GET_*, SF_SET_*): Define in terms of SF_GET when feasible.
	(SA_GET_SYM_TAGNDX, SA_GET_SYM_ENDNDX, SA_SET_SYM_TAGNDX,
	SA_SET_SYM_ENDNDX, object_headers typedef, data_section_header,
	text_section_header): Delete non-BFD_HEADERS versions, since we
	always define that symbol now.

	* config/obj-coff.c (stack_top): Deleted.
	(obj_coff_endef, obj_coff_dim, obj_coff_line, obj_coff_size,
	obj_coff_scl, obj_coff_tag, obj_coff_type, obj_coff_val): Change
	argument name from "ignored" to "ignore".
	(obj_coff_val): Use frag_now_fix.
	(obj_pseudo_table): Removed IGNORE_DEBUG version, since it doesn't
	get used.
	(stack typedef, stack_init, stack_delete, stack_push, stack_pop):
	Moved to just after pseudo-op table.  All functions now static.
	(tag_init, tag_insert, tag_find_or_make, tag_find): Moved to just
	after stack functions.
	* config/obj-coff.h: Reordered some declarations and macros.
	Protected against multiple inclusions.
	(stack_init, stack_delete, stack_push, stack_pop): Don't declare.
	(stack typedef): Deleted.
	(SYMBOLS_NEED_BACKPOINTERS): Always undef then define; don't test.
	(stdoutput): Deleted declaration.
	(TARGET_FORMAT) [TC_I386]: Don't define if already defined.

Mon May  2 17:09:24 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* subsegs.h (segment_info_type): Use fix_tail field even if
	BFD_ASSEMBLER.
	* subsegs.c (subseg_change): Initialize fix_tail field.
	(subseg_get): Likewise.
	* write.c (frags_chained): New static variable.
	(fix_new_internal): If frags_chained is set, use fix_root and
	fix_tail from seg_info (now_seg), rather than frchain_now.
	(chain_frchains_together_1): Set fix_tail field.
	(chain_frchains_together): Set frags_chained.

Thu Apr 28 01:39:15 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config/tc-mips.c (s_option): Only refer to g_switch_* variables
	if GPOPT is defined.
	(s_abicalls): Ditto.
	(md_apply_fix): Cast char* to unsigned char* to avoid pointer
	mismatch.

Wed Apr 27 11:06:32 1994  Steve Chamberlain  (sac@cygnus.com)

	* configure.in (i386-*-go32): Uses coff now.
	* gasp.c (main): Now takes -D on command line.
	(show_usage): Describe new options.

Tue Apr 26 17:10:30 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* listing.c (list_symbol_table): Print "NO DEFINED SYMBOLS" and
	"NO UNDEFINED SYMBOLS" if there aren't any, instead of displaying
	the header with an empty list.

	* config/obj-coffbfd.c (fill_section): Check COFF_NOLOAD_PROBLEM
	also before setting STYP_NOLOAD for .bss section.

	* config/tc-m68k.c (flag_reg_prefix_optional): New variable.
	Initialized to value of REGISTER_PREFIX_OPTIONAL, if defined, or
	zero.
	(m68k_reg_parse): If flag_reg_prefix_optional is set, permit
	register prefix to be absent.
	(m68k_ip_op): Accept `&' also for immediate constants.
	(insert_reg): Don't bother with (two!?) sanity checks of the
	symbol table when inserting each register.
	(m68k_parse_long_option): New function.  Set
	flag_reg_prefix_optional if "register-prefix-optional" is passed.
	* config/tc-m68k.h (REGISTER_PREFIX): Always define if not already
	defined.
	(OPTIONAL_REGISTER_PREFIX): Don't define.
	(REGISTER_PREFIX_OPTIONAL): If not already defined, define as zero
	or one depending on M68KCOFF.

	Some changes to help Apollo support, from troy@cbme.unsw.edu.au:
	* config/tc-m68k.c (DATA, ADDR, SP, FPREG, COPNUM, BAD, BAC):
	Define as macros instead of enumerators, since the Apollo compiler
	can't handle "enumVal1, enumVal2 = enumVal1" when defining an enum
	type.
	(make_pcrel_absolute) [NO_PCREL_RELOCS]: New function.
	(tc_coff_fix2rtype) [NO_PCREL_RELOCS]: Generate only R_RELBYTE,
	R_DIR16, and R_DIR32 relocs.
	* config/tc-m68k.h [TE_APOLLO] (COFF_MAGIC, COFF_AOUTHDR_MAGIC):
	Use Apollo versions.
	[TE_APOLLO] (OBJ_COFF_OMIT_OPTIONAL_HEADER): Undefine.  That is,
	do include the optional header for Apollo target.
	(COFF_MAGIC): Don't define as MC68MAGIC if it's already defined.

	* config/tc-m68k.h [TE_DELTA] (LEX_PCT): Define as 1, so that `%'
	can be used within a label name.

	* config/tc-m68k.h (m68k_init_after_args): Declare.
	(tc_init_after_args): Define as m68k_init_after_args.
	* config/tc-m68k.c (m68k_init_after_args): New function,
	containing one-shot code from md_assemble.  Added warning for
	combination of 68040 and 68851.
	(md_assemble): Startup-time code deleted.

Mon Apr 25 16:19:17 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* doc/Makefile.in (clean, distclean): Remove asconfig.texi.

Sun Apr 24 00:13:08 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_ip): 13 bit immediate constant (for break
	instruction) is unsigned.

Fri Apr 22 17:58:22 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-ecoff.c (ecoff_frob_file): Use bfd_ecoff_set_gp_value
	and bfd_ecoff_set_regmasks to set the GP value and the register
	masks, rather than using the now obsolete fake .reginfo section.

Fri Apr 22 15:17:06 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* listing.c (list_symbol_table): Don't print register symbols as
	undefined.

	* config/obj-coff.c (obj_symbol_new_hook): Don't need to strip
	underscores, since symbol_new will already have done it.
	* config/obj-coffbfd.c (obj_symbol_new_hook): Ditto.

	* as.c (main): If tc_init_after_args is defined, invoke it after
	all arguments have been processed.

	Some changes to help Apollo support, from troy@cbme.unsw.edu.au:
	* as.c (perform_an_assembly_pass) [TE_APOLLO]: Create .wtext
	section instead of .text.  Call create_target_segments.
	* read.c (demand_copy_string): No longer static.

Thu Apr 21 15:50:04 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (append_insn): Permit branches to be switched
	with the preceding instruction even if .set nobopt has been seen.
	.set nobopt actually controls whether to bring up an instruction
	from the branch target, which gas does not currently support.

Wed Apr 20 18:46:14 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/obj-coff.h, config/obj-coff.c: Deleted all code used only
	when BFD_ASSEMBLER is not defined, and all conditionals relating
	to such code.  No such targets remain.

	Fixes for stabs-in-coff:
	* config/obj-coff.c: Include subsegs.h.
	(coff_frob_section): New function.
	(obj_coff_init_stab_section): New function.
	* config/obj-coff.h (obj_coff_init_stab_section,
	coff_frob_section): Declare.
	(obj_frob_section): New macro; uses coff_frob_section.
	(INIT_STAB_SECTION): New macro; uses obj_coff_init_stab_section.

	* config/tc-sparc.c (md_section_align): Always round up to
	multiple of alignment power specified in bfd target vector.

	* gasp.c: Include ctype.h.

Mon Apr 18 21:08:01 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* doc/Makefile.in, doc/as.texinfo: Renamed asdoc-config.texi to
	asconfig.texi.

	* doc/Makefile.in (install-info-as, install-info-gasp): Get file
	names from source directory without pathname.

	* config/obj-vms.c (VMS_write_object_file): While looking for
	register mask, skip empty fill frags caused by enabling listing
	output.

	* config/ho-sysv.h: Include string.h.

	* doc/internals.texi: New (well, recently added) file.  Just added
	info on as_warn and friends.

Mon Apr 18 14:28:22 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_parse_space_stmt): Use the built-in
	defaults for defined, private, and spnum fields for the
	$TEXT$ and $PRIVATE$ spaces.  Do not clobber spnum.  Do
	not reset the segment if just updating a space.
	(pa_spaces_begin): Set BFD section flags for all built-in
	subspaces.

Fri Apr 15 10:51:51 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (first_proc_ptr): New static variable.
	(add_procedure): Set first_proc_ptr if it hasn't been set.
	(ecoff_build_lineno): If the first procedure does not start at
	address zero, insert a dummy line to compensate.

	* Makefile.in (bootstrap, bootstrap2, bootstrap3): Make gasp.new
	as well as as.new.

Thu Apr 14 15:12:36 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* expr.c (operand): Try to parse "0f" and "0b" sequences as
	floating point and binary numbers respectively; if it doesn't
	work, treat them as local labels.

	* Makefile.in: Make $(OBJS) depend on $(ALL_OBJ_DEPS).
	* configure.in: Set ALL_OBJ_DEPS in output Makefile.

	Based on suggestions from <BAILEY@hmivax.humgen.upenn.edu>
	(Charles Bailey):
	* vmsconf.sh: In generated file, get ".obj" suffix right, build
	source files from other directories into objects in the current
	directory, and specify PSECT attributes explicitly to linker.
	Also added missing label.
	* Makefile.in (stamp-mk.com): Reference new variable
	VMS_OTHER_OBJS for list of non-local object files, instead of
	listing them here.
	(VMS_OTHER_OBJS): New variable, added more libiberty files.
	* make-gas.com: Regenerated.

	* config/ho-vms.h (unlink): Define as delete.

	* config-gas.com: Fix quoting on TARGET_CANONICAL definition.
	Delete files before creating them.

Thu Apr 14 13:34:24 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (de-stage1, de-stage2, de-stage3): Use rm -f.

	* config/tc-mips.h (DIFF_EXPR_OK): Define.
	* config/tc-mips.c (macro_build): Permit BFD_RELOC_PCREL_LO16 for
	certain cases of 'i', 'j' and 'o'.  Change 'u' to take an
	argument, the reloc type.
	(load_register): Pass reloc type to macro_build for 'u'.
	(macro): Likewise.  For M_LA_AB permit a difference expression
	when generating embedded PIC code between an arbitrary symbol and
	a symbol in the .text section.
	(mips_force_relocation): Force BFD_RELOC_PCREL_HI16_S and
	BFD_RELOC_PCREL_LO16 to be emitted.
	(md_apply_fix): Check that most relocs are not PC relative.
	Handle BFD_RELOC_PCREL_HI16_S and BFD_RELOC_PCREL_LO16.
	(tc_gen_reloc): Change #error to as_fatal.  Handle
	BFD_RELOC_PCREL_LO16 and BFD_RELOC_PCREL_HI16_S.

Tue Apr 12 18:25:13 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* subsegs.c (subsegs_begin): Call memset with args in the correct
	order.
	(subseg_get): Clear newly allocated seginfo, set its pointer slots
	to NULL instead of 0.

Mon Apr 11 09:00:57 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_procend): Handle case where label was
	defined after the .proc directive.

	* config/tc-hppa.c (pa_procend): Give an error if we encounter a
	procend for a procedure without a name.

Thu Apr  7 14:28:30 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (macro): Pass NULL for expression argument to
	macro_build for nori case.
	(SWITCH_TABLE): Define.
	(mips_force_relocation): Force a relocation for a switch table
	entry.
	(md_apply_fix): Write switch table entry value into file.
	(tc_gen_reloc): Use BFD_RELOC_GPREL32 for a switch table entry,
	and set the addend to the difference between the reloc address and
	the subtrahend.

Thu Apr  7 10:38:18 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.h (elf_tc_symbol): Delete.  No longer used.
	(elf_tc_make_sections): Likewise.
	(hppa_tc_make_sections, hppa_tc_symbol): Delete extern decls.

	* config/tc-hppa.c (hppa_tc_make_sections): Delete function.
	(hppa_tc_symbol): Likewise.

	* config/obj-elf.c (elf_frob_file): Delete elf_tc_symbol and
	elf_tc_make_sections stuff.  It was there to support PA braindamage
	which has been fixed, and in the case of elf_tc_make_sections is
	redundant with elf_tc_final_processing.

Wed Apr  6 20:48:30 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* configure.in (hppa*-*-*elf*): Don't require "-hp-" for the
	manufacturer.

Tue Apr  5 15:48:03 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_ip): For case 'o', when generating
	embedded PIC code, accept the difference between two local symbols
	as being constant.
	(mips_force_relocation): Only force a reloc to be generated for a
	PC relative fixup.
	(md_apply_fix): For BFD_RELOC_32 and BFD_RELOC_LO16, put the fixup
	value into the file if the fixup will not generate a reloc.

Tue Apr  5 11:14:14 1994  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* config/tc-sparc.c (s_reserve): If section passed isn't bss,
	don't spew remainder of input file in error message.
	(tc_gen_reloc): If bfd_reloc_type_lookup returns null, print error
	message with reloc type and try to process remainder of file.

	* doc/Makefile.in (install-info-as, install-info-gasp): New
	targets, now explicitly checking $(srcdir) for info files.
	(install-info): Depend on both of them; do nothing more.

Mon Apr  4 17:06:04 1994  Jeffrey A. Law  (law@cygnus.com)

	* config/tc-hppa.c (tc_gen_reloc): Fix thinko in ELF version.

Mon Apr  4 12:39:23 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-ppc.c (ppc_insert_operand): Check PPC_OPERAND_SIGNED
	flag rather than signedp field.  Only permit extended range if
	PPC_OPERAND_SIGNOPT flag is set and assembling in 32 bit mode.
	Based on patch from David Edelsohn (edelsohn@npac.syr.edu).

	* config/tc-ppc.c (ppc_size): New static variable.
	(ppc_arch): Check for PPC_OPCODE_PPC before PPC_OPCODE_POWER.
	(md_begin): If an instruction has a size specific flag set, only
	add it if we are assembling that size.

Thu Mar 31 16:51:16 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-sparc.c (tc_gen_reloc): Add a gruesome hack to get
	cross section PC relative relocs right for COFF and ELF.

Mon Mar 28 14:38:23 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/obj-coff.h (SEPARATE_STAB_SECTIONS): Always define.
	(OBJ_PROCESS_STAB): Don't define.

Mon Mar 28 12:40:25 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-aout.c (obj_aout_frob_symbols): Don't let BFD clobber
	the type of symbol set symbols which happen to be in the absolute
	or undefined section.

Mon Mar 28 12:35:00 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* config/tc-ppc.c (md_parse_option): Add -mpwrx (POWER/2 aka
	RIOS2), -mpwr (POWER aka RIOS1), -mppc (PowerPC aka MPC603/604),
	and -many (all architectures).

Sun Mar 27 14:04:19 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (tc_gen_reloc): Set addend for relocation
	involving a function symbol which is not a plabel to zero.
	(md_apply_fix): Never pass a function symbol to field_adjust.

Fri Mar 25 17:35:49 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-aout.c (obj_aout_frob_symbol): If N_EXT is set for an
	N_INDR symbol, set BSF_EXPORT and clear BSF_LOCAL.

	* config/tc-mips.c (append_insn): If EMBEDDED_PIC, don't swap a
	branch with an instruction that uses $at, in case the branch is
	later expanded.
	(macro): If EMBEDDED_PIC, case M_JAL_A may use $at.
	(md_pcrel_from): If not OBJ_AOUT, return 4 for an undefined symbol
	to make it pcrel_offset.
	(tc_gen_reloc): If not OBJ_AOUT, set the reloc addend to
	reloc->address; another gruesome hack to get gas reloc handling to
	do the right thing.

Thu Mar 24 21:29:29 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/tc-alpha.c (alpha_ip): Only set GP prolog size if using
	PV register.
	(T12): New macro.
	(emit_insn): New function.
	(md_assemble): Call it.
	(alpha_force_relocation): Handle BFD_RELOC_26, for call_pal
	instructions.
	(lituse_pending): New variable.  Set by anything that generates a
	LITERAL reloc, cleared by anything that generates a LITUSE reloc,
	tested by code that might want to emit a LITUSE reloc.
	(emit_unaligned_io): New function.  Currently calls md_assemble,
	but it should eventually be converted to generate the insn itself
	and call emit_insn directly.
	(emit_load_unal, emit_store_unal, emit_byte_manip_r,
	emit_extract_r, emit_insert_r, emit_mask_r, emit_sign_extend,
	emit_bis_r): Likewise.
	(alpha_ip, case 'I'): Handle with BFD_RELOC_23.
	(alpha_ip, label get_macro): Don't emit the final instruction if
	the opcode is zero.
	(alpha_ip, case 'B', subcase 'd'): New case, for subword and
	unaligned memory access macros.
	(md_apply_fix): Handle BFD_RELOC_26.  Generate an error message if
	the value can't be resolved.

Wed Mar 23 16:06:08 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (md_parse_option): For -membedded-pic, force
	the -G value to 0x7fffffff.  For SVR4 PIC options, don't call
	bfd_set_gp_size here, it's done in md_begin.  Don't permit -G with
	-membedded-pic.
	(mips_force_relocation): New function.
	(md_apply_fix): Set fixP->fx_done appropriately.
	(s_change_sec): For EMBEDDED_PIC, change .data and .rdata to
	.sdata.
	* config/tc-mips.h (TC_FORCE_RELOCATION): Define.
	(mips_force_relocation): Declare.
	(TC_HANDLE_FX_DONE): Define.

Tue Mar 22 13:58:37 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (enum mips_pic_level): New enum.
	(mips_pic): Change from int to enum mips_pic_level.  Change all
	uses (0 becomes NO_PIC, 2 becomes SVR4_PIC).
	(load_address): Handle EMBEDDED_PIC.
	(macro): Handle EMBEDDED_PIC in all PIC cases.
	(md_parse_option): Accept -membedded-pic to use EMBEDDED_PIC.  If
	OBJ_ELF, accept -KPIC and -call_shared to use SVR4_PIC and accept
	-non_shared to use NO_PIC (this is how the Irix 5 assembler
	works).  Do not permit -G with SVR4_PIC.
	(s_abicalls): Warn if -G was used, and force -G 0.
	(tc_gen_reloc): Set reloc->addend to 0 for a PC relative reloc for
	anything but a.out, not just for ELF.  For ECOFF, don't generate a
	BFD_RELOC_16_PCREL_S2 reloc unless using EMBEDDED_PIC.

	* config/obj-ecoff.h (obj_sec_sym_ok_for_reloc): Define to be 1.

Sun Mar 20 16:31:55 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (create_new_space): Use ints, not chars as
	parameters to avoid losing when compiling with HP CC.
	(create_new_subspace, update_subspace, fix_new_hppa): Likewise.

Sun Mar 20 14:43:14 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (config-stamp): If `defs' is defined, emit a
	preprocessor directive to create a macro named by this value into
	config.new; don't explicitly go for BFD_ASSEMBLER.
	* configure.in: Define `defs', not `BFDDEF'.  Set it to
	MANY_SEGMENTS for any obj-coffbfd target.
	* config/obj-coffbfd.h (BFD_HEADERS, BFD): Define.
	* config/i386coff.mt (TDEFINES): Don't define BFD, MANY_SEGMENTS,
	or BFD_HEADERS.
	(LOCAL_LOADLIBES): Deleted.
	* config/m68kcoff.mt (TDEFINES): Don't define those macros.
	* config/m88kcoff.mt (TDEFINES): Ditto.
	* config/ebmon29k.mt: Deleted.
	* config/h8300hds.mt: Deleted.
	* config/ic960coff.mt: Deleted.
	* config/sparc.mt: Deleted.
	* config/h8300.mt (LOCAL_LOADLIBES, TDEFINES): Deleted.
	* config/h8500.mt (LOCAL_LOADLIBES, TDEFINES): Deleted.
	* config/sh.mt (LOCAL_LOADLIBES, TDEFINES): Deleted.
	* config/z8k.mt (LOCAL_LOADLIBES): Deleted.
	(TDEFINES): Don't define the coffbfd macros.

	* Makefile.in: Insert makefile fragments before OBJS definition.
	(OBJS): Add $(TE_OBJS).

	* config/obj-coff.c (obj_pseudo_table): Supply "section"
	unconditionally.

	* write.c (set_symtab): Define only if BFD_ASSEMBLER.

Sun Mar 20 12:06:05 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Makefile.in (STAGESTUFF): Add gasp.new.

Fri Mar 18 20:09:16 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* write.c (symbol_table_frozen): New variable, to be set after
	bfd_set_symtab is called.
	(dump_section_relocs): Note whether a symbol is a section symbol
	or not.
	(adjust_reloc_syms): For now, always supply an absolute symbol for
	fixups without symbols but not yet `done'.  Use section_symbol to
	get the symbol, instead of going directly for abs_symbol.
	(write_relocs) [DEBUG4]: Abort if any symbol referred to by a
	reloc is not a section symbol and is not in the symbol table.
	(set_symtab): New function, broken out from write_object_file.
	Counts symbol table instead of relying on an earlier count.
	(write_object_file): Call set_symtab, but do it after potentially
	invoking the *_frob_file macros.  Don't bother counting symbols.
	Call symbol_remove, instead of expanding it in place.  Moved the
	conditionalized `object_file_size' declaration down to
	conditionalized block where it's used.  When using the absolute
	symbol for a fixup without a symbol, set sy_used_in_reloc.
	(write_object_file) [BFD_ASSEMBLER]: Call section_symbol to get
	the correct symbol for the absolute section.

	* subsegs.c (section_symbol): Use symbol_new instead of
	symbol_make, since we may want it to go into the symbol table.
	Make the new symbol have internal linkage.  If
	obj_sec_sym_ok_for_reloc says it's okay, use the BFD section
	symbol with the newly created GAS symbol.
	(obj_sec_sym_ok_for_reloc): Default to always returning 0.
	* config/obj-aout.h (obj_sec_sym_ok_for_reloc) [BFD_ASSEMBLER]:
	New macro.
	* config/obj-elf.h (obj_sec_sym_ok_for_reloc): New macro.

	* config/tc-sparc.c: Include subsegs.h.
	(in_signed_range): New function.
	(sparc_ip): Use it.
	(sparc_ip, case 'i'): Use BFD_RELOC_SPARC13, not _BASE13.
	(sparc_ip, label "immediate"): Reject constants for pcrel
	instructions only if the relocation type indicates a "call"
	instruction and the offset is within range of a "jmpl %g0".  If
	it's not in range, use the absolute section symbol plus an offset.
	(md_apply_fix): Use in_signed_range.  Combined _SPARC13 and
	_BASE13 cases.
	(tc_gen_reloc): Permit BFD_RELOC_SPARC13.

	* config/ic960coff.mt (TDEFINES): Fixed typo (MANY_SECTIONS, not
	MANY_SEGMENTS).

	* configure.in: Eliminated all targets using obj-coff but not
	defining BFD_ASSEMBLER; I think all such targets that are
	supported will be matched by real CPU-OS combinations earlier in
	the case statement.
	(targets *-*-coff*, *-sysv*, *-*-sco*, *-*-sysv32): Deleted.  Made
	some comments about the dpx2 configuration, but left it disabled,
	since it couldn't be reached before.
	(target a29k-amd-ebmonold): Deleted.

Thu Mar 17 13:36:09 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_import): Correctly handle importing of an
	already defined symbol.

Wed Mar 16 17:11:37 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_ip): Only accept overly large values for
	the 'j' operand if there are no further alternatives for this
	instruction.

	* config/obj-coffbfd.c (adjust_stab_section): Initialize
	stabstrseg to SEG_UNKNOWN, not -1.  After loop, check whether it
	is not SEG_UNKNOWN rather than checking whether it is >= 0.

	* config/tc-mips.c (mips_align): Take new argument, label, and use
	it instead of global insn_label.
	(s_align, s_cons, s_float_cons, s_gpword): Save insn_label before
	call to mips_emit_delay and pass it to mips_align.

Wed Mar 16 11:54:12 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_equ): Handle both .reg and .equ correctly.

	* config/tc-hppa.c (pa_callinfo): Accept "millicode" as an
	argument to a .callinfo directive.  Don't loop forever on errors.

	* config/tc-hppa.c (pa_equ): Use pa_parse_number so that we can
	use pre-defined registers as arguments.

Mon Mar 14 14:29:45 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* write.c (write_object_file): Check both S_IS_LOCAL and
	S_IS_EXTERNAL when deciding whether to discard a symbol.

	* config-gas.com: Scan Makefile.in, not version.c, for current
	version number.  Delete all versions of temp files when finished
	with them.  Create config.h.

	* config/obj-vms.c (VMS_Initialized_Data_Size): Cache symbol
	values to reduce number of lookups with S_GET_VALUE.  Skip debug
	symbols to avoid "a really nasty bug".  (From Holger Teutsch,
	holger@botbso.rhein-main.de.)
	(VMS_write_object_file): For "__vt.*" symbols, set S_GET_OTHER
	field.  (Also from Holger Teutsch.)  Watch for a would-be register
	mask that spans frags.

	* config/obj-coffbfd.c (obj_coff_line): Set symbol lnno field with
	this_base, not line_base.  (Patch from Andreas Arens,
	ari@obelix.av.rwth-aachen.de.)

	* config/obj-aout.c (obj_crawl_symbol_chain): Retain symbols that
	look local if they're exported or undefined.  Used to be done for
	i960 only.

	* read.c (s_lcomm, s_comm): Print symbol name being redefined.
	Get it from the looked-up symbol, instead of using the string from
	the input stream, which is no longer null-terminated.
	(LEX_PCT): New macro, defaults to 0.
	(lex_type): Use it for `%'.

	* config/tc-vax.c (md_parse_option): Handle `-h#' option for VMS.
	(vip_op): Now static, and returns void.  Callers changed.  Added
	forward decl.
	(vip): Ditto.  Call as_fatal directly if a program bug is
	detected.
	(op_hash): Let default initialization suffice.

	* Makefile.in (literal.o): Provide dependencies.

	* configure.in: Set new makefile variable OPCODES_LIB.
	* Makefile.in (LIBS): Use it.

	* Makefile.in (make-gas.com, stamp-mk.com): New targets.
	* vmsconf.sh: New file.
	* make-gas.com: Regenerated from new script.

	* configure.in (sparc*-*-lynxos*): Handle any version number
	suffix after "lynxos".  Set emulation to lynx.

Mon Mar 14 11:30:49 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config/obj-coff.c (obj_coff_section): Delete declaration.

Fri Mar 11 22:25:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-ppc.c (md_pcrel_from): Return 0 for undefined ELF
	symbols.
	(ppc_is_toc_sym): Change .toc to .got.
	(md_apply_fix): Change handling of ELF relocs.
	(tc_gen_reloc): Likewise.

Fri Mar 11 17:42:20 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/obj-vms.c (Close_VMS_Object_File): Add comment pointing
	out some code that doesn't belong in this file.

	* config/obj-vms.h: Include aout/stab_gnu.h.
	(N_GSYM, ..., N_LENG): Deleted.
	(NO_RELOC): Undefine before defining as part of enum reloc_type.

	* config/tc-alpha.c: Add comment questioning need for all the
	characters in FLT_CHARS.

	* as.c (main) [OBJ_VMS]: Don't call output_file_close.

	* config/obj-ecoff.c (ecoff_frob_file): Set strict order for
	sections with recognized names, before computing VMA values.

Fri Mar 11 17:56:23 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_ip): Accept numbers between 0x8000 and
	0xffff for 'j' to be compatible with MIPS assembler.  These
	numbers are actually treated as negative.

Thu Mar 10 13:36:29 1994  Doug Evans  (dje@canuck.cygnus.com)

	* config/tc-sparc.h (LOCAL_LABEL): Local labels are .Lfoo.

Tue Mar  8 21:17:12 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/obj-coff.c: Minor formatting/stylistic changes, plus:
	(obj_coff_section): Declare.
	(obj_pseudo_table): Make it available only if MANY_SECTIONS.
	(obj_symbol_to_chars) [CROSS_COMPILE]: Some attemps to make this
	work.  It still doesn't.  It now fails to compile, instead of
	silently compiling to do nothing.
	* config/obj-coff.h (SEPARATE_STAB_SECTIONS): Define only if
	MANY_SECTIONS.
	(OBJ_PROCESS_STAB) [! MANY_SECTIONS]: New macro, just emits
	warning.

	Handle Alpha load-immediate-FP pseudo-instructions:
	* config/alpha-opcode.h (ldif, ldig, ldis, ldit): New patterns.
	* config/tc-alpha.c (lit8_sec, lit4_sec, lit8_sym, lit4_sym): New
	variables.
	(create_literal_section): New function.
	(create_lita_section): Now a macro.
	(get_lit8_offset, get_lit4_offset): New functions.
	(maybe_set_gp): New function.
	(select_gp_value): Call it.
	(load_expression): Preserve addend if symbol is a section symbol.
	(alpha_ip): Handle new operand type `F' for floating-point
	constants; store them in .lit{4,8} sections.
	(alpha_ip, case 'G'): Emit LITUSE relocations for symbol exprs.

	* config/tc-i386.c (smallest_imm_type): Never return Imm1.

Tue Mar  8 14:18:15 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* config/obj-coffbfd.c (w_strings): Only copy strings out if
	their symbols are going to be written.

Tue Mar  8 11:49:27 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* messages.c (as_perror): Declare arguments const.
	* as.h (as_perror): Change declaration.

Mon Mar  7 16:08:25 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (load_address): When calling frag_grow, allow
	for the (up to) two nops which may be inserted by append_insn if
	mips_optimize is 0.
	(macro): Likewise.

Thu Mar  3 11:37:55 1994  Doug Evans  (dje@canuck.cygnus.com)

	* config/atof-ieee.c (make_invalid_floating_point_number):
	Add cast to avoid warning from gcc.

Wed Mar  2 10:31:01 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c: Add a few casts to make HP C compiler happy.

	* config/obj-som.c (obj_som_version, obj_som_copyright): Be
	prepared
	to handle an error from bfd_som_attach_aux_hdr.

	* config/tc-hppa.h: Wrap ELF specific decls inside an ifdef.

Mon Feb 28 15:03:26 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/tc-alpha.c (md_atof): Omit warning about FP values.
	(line_comment_chars): Add ! to list.
	(md_apply_fix): Do process 32- and 64-bit relocations.

	* config/obj-coffbfd.c (obj_coff_lcomm): Put "#if 0" around the
	unused parts (most of the function).
	(obj_coff_init_stab_section): Cast alloca result.

	* configure.in (i960-*-coff, i960-*-vxworks5.*): Use coffbfd, and
	gas_target ic960coff.
	* config/ic960coff.mt: New file.
	* config/obj-coffbfd.h [TC_I960]: Include coff/i960.h.
	(TARGET_FORMAT) [TC_I960]: Use coff-Intel-little.
	* config/te-ic960.h (CROSS_COMPILE): Don't undef this.  We'll
	always build little-endian object files.
	* config/tc-i960.c (md_reloc_size): Don't define at all if BFD or
	BFD_ASSEMBLER is defined.
	(mem_fmt): Since COFF doesn't handle callx relocations yet, treat
	them like normal 32-bit relocations.
	(md_apply_fix): For callx relocations, store zero.
	(tc_bout_fix_to_chars): Store symbol index for all callx
	relocations, regardless of link-relax setting.
	(tc_coff_fix2rtype, tc_coff_sizemachdep): New functions.
	(i960_handle_align) [! OBJ_BOUT]: If link-relax option is
	selected, print an error message and clear it.
	* config/tc-i960.h (BFD_ARCH, COFF_FLAGS, COFF_MAGIC,
	TC_COUNT_RELOC, TC_COFF_FIX2RTYPE, TC_COFF_SIZEMACHDEP,
	tc_fix_adjustable): New macros.
	(tc_coff_fix2rtype, tc_coff_sizemachdep): Declare.

Fri Feb 25 20:56:57 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (hppa_tc_symbol): Call PA ELF BFD version.
	(hppa_tc_make_sections): Likewise.
	(pa_build_symextn_section): Delete unused function.
	(hppa_tc_make_symextn_section): Likewise.
	(pa_export): Delete call to pa_build_symextn_section.

	* config/tc-hppa.h (hppa_tc_symbol): Add extern decl.
	(elf_hppa_final_processing): Delete extern decl.
	(hppa_tc_symbol): Delete extern decl.

Fri Feb 25 13:15:31 1994  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-coffbfd.c (fill_section): Correct test for whether to
	fill a section (from Minh Tran-Le <TRANLE@intellicorp.com>).

Thu Feb 24 11:30:26 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* configure.in: Don't require version number for i386-*-mach.

	* read.c (potable): Added ".this_GCC_requires_the_GNU_assembler",
	which is ignored by gas, but will cause other assemblers to choke.
	Intended for use by gcc ports that require gas instead of native
	assemblers.

Thu Feb 24 07:10:31 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/ho-hppaosf.h: Fix braino in test for ANSI-C.

Wed Feb 23 16:51:43 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* write.c (write_contents): Give the user a reasonable error
	message rather than "assertion failed" if bfd_set_section_contents
	fails.

Tue Feb 22 10:07:32 1994  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* config/ho-mach3.h: New file.

Mon Feb 21 11:41:18 1994  Ian Lance Taylor  (ian@cygnus.com)

	* ecoff.c (ecoff_build_debug): Don't set hdr->magic here.  It is
	now set in bfd/ecofflink.c:ecoff_write_symhdr.

	* config/obj-coffbfd.c (write_object_file): use bfd_get_error (),
	not bfd_error.
	* config/obj-elf.c (elf_frob_file): Likewise.

	* read.c (s_lcomm): Use an alignment power of 3 for 8 byte .lcomm
	variables.

	* config/ho-hpux.h (BROKEN_ASSERT): Define if not __GNUC__.

	* read.c (read_a_source_file): Use correct arguments to memcpy
	(broken 19 Jul 1993).  From kjd@pescadero.stanford.edu (Kenneth
	Duda).

Sun Feb 20 18:01:54 1994  Ian Lance Taylor  (ian@lisa.cygnus.com)

	* config/obj-coff.h (obj_coff_section): Declare.
	* config/obj-coff.c (obj_pseudo_table): For "section", use
	obj_coff_section.
	(obj_coff_section): Rewrite.

Fri Feb 18 14:16:32 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* configure.in (i386-*-mach3*): New target; uses BFD.
	* config/te-mach.h: New file.
	* config/obj-aout.c (obj_aout_frob_file): New function.
	* config/obj-aout.h (obj_aout_frob_file): Declare it.
	(frob_file): New macro.
	* config/tc-i386.c (md_apply_fix_1) [TE_Mach]: Don't adjust
	pcrel32 relocations.
	* config/tc-i386.h (TARGET_FORMAT) [TE_Mach]: Use a.out-mach3.

	* write.c (write_object_file): Removed register declarations.

Thu Feb 17 16:25:18 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Some support for PowerPC ELF.
	* configure.in: If cpu is powerpc*, use ppc.
	(ppc-*-sysv4*): Use object format elf.
	* config/tc-ppc.h: Only declare a number of things if OBJ_COFF is
	defined.
	(TARGET_ARCH): Make it call ppc_arch.
	(ppc_arch): Declare.
	(TARGET_FORMAT): Set based on OBJ_COFF or OBJ_ELF.
	(NO_STRING_ESCAPES): Define.
	(LOCAL_LABEL, FAKE_LABEL_NAME): Define for OBJ_ELF.
	* config/tc-ppc.c: Only define a number of functions of OBJ_COFF
	is defined.
	(md_pseudo_table): Most pseudo-ops are OBJ_COFF specific.  Added
	OBJ_COFF specific "bi" and "ei".
	(md_parse_option): Fix handling of -u.  Make -m601 set
	PPC_OPCODE_601.  If OBJ_ELF, accept -V and -Q.
	(ppc_set_cpu): New function.
	(ppc_arch): New function.
	(md_begin): Call ppc_set_cpu.
	(ppc_insert_operand): For a signed operand accept an unsigned
	value, for IBM compatibility.
	(ppc_byte): Don't call stringer for strings; instead, treat two
	double quotes as a single double quote.
	(ppc_comm): Set sy_tc.output for a .lcomm symbol.
	(ppc_biei): New function.
	(ppc_tc): If not OBJ_COFF, ignore first argument.
	(ppc_fix_adjustable): Call as_bad_where, not as_bad.
	(ppc_is_toc_sym): New function.
	(md_apply_fix): Use ppc_is_toc_sym.  Handle BFD_RELOC_16 and
	BFD_RELOC_8.

Thu Feb 17 09:29:37 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* messages.c (as_perror) [BFD_ASSEMBLER]: Use bfd_get_error and
	bfd_set_error and new error names.

Tue Feb 15 20:23:20 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* configure.in: Support i960-vxworks versions > 5.0 as coff.
	Default is still bout if no version is specified.

	* atof-generic.c (atof_generic): Use switch and strcasecmp instead
	of large number of compares when looking for inf/nan values.

Fri Feb 11 13:13:27 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (macro): Do unaligned loads and stores
	correctly when big endian, and give errors on overflow rather than
	generating incorrect code.

Thu Feb 10 11:24:20 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* as.c: Include libiberty.h.

	* read.c (do_align): Don't define label just_record_alignment
	unless it might be used.

	* as.c (main): If md_parse_long_option is defined, call it with a
	long option.
	* config/tc-mips.h (md_parse_long_option): Define.
	* config/tc-mips.c (mips_trap): New static variable.
	(md_begin): Report an error if mips_trap is set at ISA level 1.
	(macro): If mips_trap, use trap instructions instead of break
	instructions for overflow and divide by zero detection.
	(mips_parse_long_option): New function.  Support --trap,
	--no-break, --break and --no-trap.
	* doc/as.texinfo: Document new options.

	* read.c (potable): Add "zero".
	* config/tc-i386.c (md_pseudo_table): Remove "zero".
	* config/tc-m88k.c (md_pseudo_table): Likewise.

Thu Feb 10 01:24:27 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Reject integer values for
	pc-relative operand fields.  This forces "call 0" to become "jmpl
	%g0,%o7" with no relocations needed.

Wed Feb  9 13:08:32 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* as.h (xmalloc, xrealloc): Declare using PTR rather than char *.
	* xmalloc.c (xmalloc, xrealloc): Use PTR rather than char *.

	* app.c (do_scrub_next_char): If NO_STRING_ESCAPES is defined,
	don't treat backslash specially inside strings.
	* read.c (next_char_of_string): Likewise.

Wed Feb  9 09:42:45 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/obj-coffbfd.c (obj_coff_init_stab_section): Use memset
	instead of memcpy to zero the initial stab symbol, duh.
	* config/obj-elf.c (obj_elf_init_stab_section): Ditto.
	* config/obj-som.c (obj_som_init_stab_section): Ditto.

Tue Feb  8 17:25:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* write.c (fixup_segment): Use as_bad_where, not as_bad.

	* subsegs.c (subseg_set_rest): Call memset with the arguments in
	the right order.  Explicitly clear fix_root and fix_tail fields.

Tue Feb  8 16:00:25 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/obj-coff.c (coff_frob_symbol): For abs_symbol, set *punt
	and do nothing else.

	* symbols.c (symbol_begin): Initialize value of abs_symbol
	properly.

	* write.c (adjust_reloc_syms): Use abs_symbol instead of calling
	section_symbol.

	* ecoff.c (ecoff_build_debug): Fix "/*" in comment to silence
	complaint from "gcc -Wall".

	* configure.in (alpha-*-netware*): New target, like alpha-*-osf*.

	* config/tc-alpha.c (GP_ADJUSTMENT): Move definition to start of
	file.
	(tc_gen_reloc): Remove uninitialized variable `code', and code
	that tried to use it (incorrectly).  For LITERAL reloc, set addend
	to negative of GP value.
	(load_symbol_address): Don't adjust return value by GP_ADJUSTMENT.

	* write.c (write_relocs): Print some sensible error message if
	bfd_perform_relocation returns bfd_reloc_overflow.

Mon Feb  7 15:49:24 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* configure.in (hppa*-*elf*): New configuration for PA ELF.
	(hppa*-*-osf*): Default object format is SOM.

Mon Feb  7 16:07:35 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/tc-alpha.c (md_atof): Warn that floating-point values
	might not assemble properly.

	* configure.in (target alpha-*-osf*): Don't set "dev=yes" any
	more.

	* config/tc-alpha.c (load_expression): Parenthesize operations in
	range checking, to avoid precedence questions.

	* config/tc-alpha.c (addr32): New static variable.
	(md_parse_option): Set it for "-32addr".
	(load_symbol_address): If addr32 is set, use ldl instead of ldq.

	* atof-generic.c (atof_generic): Calculate maximum_useful_digits
	and more_than_enough_bits_for_digits in integer arithmetic, to
	eliminate the only sources of dependence on floating point
	support, which doesn't work yet on the Alpha.

Mon Feb  7 03:56:05 1994  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* ecoff.c (ecoff_build_debug) [TC_ALPHA]: Specify version stamp as
	0x30b for Alpha for now, until ".verstamp" is handled.

	* literal.c (add_to_literal_pool): Use seginfo->frchainP, which
	actually refers to the literal pool section, rather than
	frchain_now, which refers to whatever section the assembler was
	in.

	* write.c (fixup_segment): Only do range checking if size of fixup
	is smaller than word size.  Otherwise, we always wind up with
	zeros.

	* config/tc-alpha.c (md_section_align): Change second argument and
	return type to valueT, to agree with tc.h.
	(alpha_do_align): Local static array nop_pattern is now unsigned
	char, to avoid overflow warnings.
	* config/tc-alpha.h (md_section_align): Delete declaration.

	* config/obj-ecoff.c (ecoff_frob_file): Ensure that ecoff_data for
	output bfd is non-null before indirecting through it.

	* config/tc-alpha.c (alpha_frob_ecoff_data): Renamed from
	alpha_frob_file.
	* config/tc-alpha.h (tc_frob_file): Macro deleted.
	* config/obj-ecoff.c (ecoff_frob_file) [TC_ALPHA]: Call
	alpha_frob_ecoff_data, then fill in optional-header info with gp
	value and register masks.

Sun Feb  6 16:13:47 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* configure.in (hiux): Fixes from m-kasahr@sramhc.sra.co.JP.

	* config/obj-som.c (obj_som_init_stab_section): Same change
	as coffbfd and elf below.  Zero the initial stab symbol after
	allocating it.

Sat Feb  5 12:30:32 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/obj-coffbfd.c (obj_coff_init_stab_section): Zero the
	initial stab symbol after allocating it.
	* config/obj-elf.c (obj_elf_init_stab_section): Ditto.

Sat Feb  5 11:53:31 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_ip): addb[tf] should only accept
	non-negated condition completers.  Add support for addb pseudo-op
	which accepts both negated and non-negated completers.

Sat Feb  5 00:15:49 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in (rs6000*): Use cpu_type ppc.
	(ppc-*-aix*): New target; use coff and force bfd_gas.
	* config/tc-ppc.h, config/tc-ppc.c: New files for PowerPC/POWER
	(RS/6000) support.  At the moment, only XCOFF is supported.

	* config/obj-coff.c (SA_SET_SYM_ENDNDX): Made non-static.
	(S_SET_DATA_TYPE): Likewise.
	(coff_last_function): Renamed from local static last_functionP in
	coff_frob_symbol and made externally visible.
	(coff_frob_symbol): New local static set_end; use it to try to
	avoid calling SA_SET_SYM_ENDNDX on a symbol that will be punted.
	* config/obj-coff.h (S_SET_DATA_TYPE): Declare.
	(SA_SET_SYM_ENDNDX): Declare.
	(coff_last_function): Declare.

	* expr.c (operand): If DOLLAR_DOT is defined, accept `$' as
	equivalent to `.' to mean the current location.

	* read.c (LEX_BR): If not defined, define as 0.
	(lex_type): Use LEX_BR as the type of `{',`}',`[',`]'.

	* symbols.c (symbol_new): If tc_canonicalize_symbol_name is
	defined, call it with preserved_copy_of_name.  If
	tc_symbol_new_hook is defined, call it on the new symbol.
	(symbol_find_base): If tc_canonicalize_symbol_name is defined,
	call it on a copy of the name argument.

	* write.c (write_object_file): Simplified usage of obj_frob_symbol
	and tc_frob_symbol.  Always call both if the symbol is going to be
	output.

	* write.c (relax_segment): Use %ld rather than %d when printing
	fragP->fr_var, and cast it to long.

	Changed relocs to be based on subsegments (when BFD_ASSEMBLER).
	* subsegs.h (struct frchain): If BFD_ASSEMBLER, added new fields
	fix_root and fix_tail.
	(segment_info_type): If BFD_ASSEMBLER, don't define fix_tail
	field.
	* write.c (fix_new_internal): If BFD_ASSEMBLER, set fix_rootP and
	fix_tailP based on frchain_now, not seg_info (now_seg).
	(chain_frchains_together_1): Chain the subsegment relocs together.
	* subsegs.c (subseg_change): Don't clear fix_tail field.
	(subseg_get): Likewise.
	* literal.c (add_to_literal_pool): Look through the relocs via
	frchain_now, not seginfo.

Thu Feb  3 23:07:30 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-ecoff.h (TARGET_SYMBOL_FIELDS): Changed
	ecoff_undefined to ecoff_extern_size.
	* config/obj-elf.h (ELF_TARGET_SYMBOL_FIELDS): Likewise.
	* config/tc-mips.c (s_extern): Set ecoff_extern_size to the
	external symbol size, rathern than setting the symbol value.
	(md_estimate_size_before_relax): Check both ecoff_extern_size and
	symbol value to see if GP referencing can be used.
	* ecoff.c (ecoff_symbol_new_hook): Clear ecoff_extern_size, not
	ecoff_undefined.
	(ecoff_frob_symbol): Don't check ecoff_undefined.
	(ecoff_build_symbols): Get size of an undefined symbol from
	sym->ecoff_extern_size, not S_GET_VALUE (sym).

Wed Feb  2 13:55:08 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Makefile.in:  Avoid bug in losing hpux sed.

Wed Feb  2 11:40:11 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (file_mips_isa): New static variable.
	(md_begin): Set it.
	(s_mipsset): Add support for .set mipN to set the ISA level.

	* gasp.c (kinfo): Fully bracket initializer.

Tue Feb  1 19:28:12 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* gasp.c (malloc): Don't declare, since host.h or system header
	files may declare it differently.

	* config/atof-ieee.c (int_to_gen): Now static.

	* config/ho-i386aix.h: Include sys/types.h and stdlib.h, not
	ho-sysv.h.  Based loosely on a patch from Minh Tran-Le.

Tue Feb  1 10:50:17 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* gasp.c: Include host.h.

Tue Feb  1 12:13:01 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_ip): Make an unsupported instruction a
	warning, not an error.

	* config/obj-coff.c (dot_text_symbol, dot_data_symbol,
	dot_bss_symbol): Don't define if BFD_ASSEMBLER.
	(obj_symbol_to_chars): bfd_coff_swap_aux_out now takes more
	arguments.
	(coff_line_base): Renamed from line_base.  Changed all uses.
	(coff_add_linesym): Renamed from add_line_sym.  Made non-static.
	Changed all uses.
	* config/obj-coff.h: If TC_PPC, include coff/rs6000.h.
	(S_SET_STORAGE_CLASS, S_GET_STORAGE_CLASS): Declare if
	BFD_ASSEMBLER.
	(coff_line_base): Declare.
	(coff_add_linesym): Declare if BFD_ASSEMBLER.
	* config/obj-coffbfd.c (symbol_to_chars): bfd_coff_swap_aux_out
	now takes more arguments.

Mon Jan 31 17:55:14 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* as.c (statistics_flag): Renamed from quiet_flag.
	(main): Get statistics with --statistics instead of -noquiet.

Mon Jan 31 07:19:30 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* Makefile.in: Support for Gnu ASsembler Preprocessor.
	* gasp.c: New file.
	* read.c (s_lcomm): Align lcomm data.
	* config/tc-z8k.c (tc_reloc_mangle): Don't allow subtraction
	from different sections.

Sun Jan 30 14:58:26 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* write.c (write_object_file): If tc_frob_file is defined, call it
	just before calling obj_frob_file.
	* config/tc-alpha.c (alpha_gp_value): Renamed from gp_value
	(references changed), and made non-static.
	(getExpression): Return void.
	(select_gp_value): Abort if gp_value is non-zero.  Delete call to
	non-existent bfd_set_gp_value.
	(alpha_validate_fix): Function deleted.
	(alpha_frob_symbol): Function deleted.
	(alpha_local_label): Function deleted.
	(alpha_frob_file): Renamed from alpha_end.
	* config/tc-alpha.h (alpha_frob_symbol, alpha_validate_fix,
	alpha_local_label, alpha_end): Declarations deleted.
	(alpha_gp_value, alpha_frob_file): Declare.
	(tc_frob_symbol, TC_VALIDATE_FIX, md_end): Macros deleted.
	(LOCAL_LABEL): Move code here from tc-alpha.c:alpha_local_label.
	(md_convert_frag): Simplified slightly.
	(tc_frob_file): New macro.

	* read.c (do_align): New function, most of guts of s_align_*
	functions.  Look for md_do_align macro, give it a chance to bypass
	all but recording of section alignment.
	(s_align_bytes, s_align_ptwo): Call do_align.
	(s_lcomm) [TC_ALPHA]: Align object to largest power of two that
	divides object size.

	* frags.c (frag_align_pattern): New function.
	(frag_align): Rewrite for clarity.

	* config/tc-vax.c (md_assemble): Handle O_constant expression.
	(vip_begin): Returns pointer to const char.  Cast hash_insert arg
	to PTR to avoid compiler complaints about const.
	(md_begin): Local variable errtxt must point to const.

	* configure.in: Handle host vax-*-ultrix* like vax-*-bsd*.  Don't
	bother with *-*-ultrix or *-*-sysv*, except *-*-sysv, since only
	the last has an existing host support file.  Do handle vax-bsd and
	vax-ultrix targets.

Fri Jan 28 11:26:40 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-coff.c (obj_coff_section_header_append): Do not
	declare if BFD_ASSEMBLER.
	(stack_pop): Correct test for stack underflow.
	(obj_coff_endef, obj_coff_dim, obj_coff_line, obj_coff_size,
	obj_coff_scl, obj_coff_tag, obj_coff_type, obj_coff_val): Declare
	type of ignored argument to avoid gcc warning.
	(align): Removed unused function.

Thu Jan 27 18:14:19 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/tc-alpha.c, config/tc-alpha.h, config/alpha-opcode.h: New
	files, based on port of gas-1.38 contributed by CMU, using a.out
	variant.  Updated for gas-2.x and ECOFF.  Floating-point constants
	are still broken, bootstrap testing incomplete.

	* literal.c: Comment changes.

	* listing.c (listing_source_file): Check for null listing_tail
	before indirecting through it.

	* expr.h (struct expressionS): Added struct tag.

	* as.h: If __GNUC__ and inline are both undefined, define inline
	away.

	* write.c (cvt_frag_to_fill): Don't assume that fr_var for
	rs_align or rs_org frags will be 1.
	(relax_segment): For rs_align, if fr_var is not 1, complain if
	required padding is not a multiple of the size of the pad pattern.
	(fixup_segment): Leave gp-relative relocations alone.  For pcrel
	relocations referring to the same segment, clear fx_pcrel when
	clearing fx_addsy.
	* as.h: Adjust comments on rs_align.

	* atof-generic.c: Some reformatting.
	(atof_generic): Be careful when mixing signed/unsigned values of
	different sizes.

	* write.c, config/obj-{aout,bout,coff*}.c, config/tc-sparc.c:
	Query the fx_done field instead of fx_addsy to see if the fixup
	still needs to be applied.  Set fx_done and clear fx_addsy both,
	for now.  If TC_HANDLES_FX_DONE isn't defined, assume md_apply_fix
	will only clear fx_addsy, and set fx_done accordingly after
	returning.
	* config/tc-sparc.h (TC_HANDLES_FX_DONE): Define.
	* config/tc-sparc.c (md_apply_fix): Set fx_done for non-pcrel fix
	with no fx_addsy.

	* symbols.c (dot_text_symbol, dot_data_symbol, dot_bss_symbol):
	Deleted.
	(symbol_begin): Moved to end of file, so function inlining can
	work better.
	(fb_label_count, fb_label_max): Default C static initializers are
	sufficient.
	* symbols.h (dot_text_symbol, dot_data_symbol, dot_bss_symbol):
	Declarations deleted.
	* config/obj-coff.c (dot_text_symbol, dot_data_symbol,
	dot_bss_symbol): Defined here, static.

	* config/obj-aout.c [BFD_ASSEMBLER]: Undef NO_RELOC before
	including aout/aout64.h.

	* write.c (write_object_file): If EMIT_SECTION_SYMBOLS is false,
	don't write out a section symbol even if it's used in a
	relocation; assume relocations will handle section numbers
	somehow.  Rename "punt_it" label to "punt_it_if_unused" to reflect
	it's true use.
	(EMIT_SECTION_SYMBOLS): Default to 1.
	(adjust_reloc_syms): Don't create a new symbol for an absolute
	reference; just use the absolute section symbol.
	(write_relocs): Make printout of reloc values dependent on flag
	DEBUG3, not DEBUG2.
	* config/obj-aout.h (EMIT_SECTION_SYMBOLS): Define as 0.
	* config/obj-ecoff.h (EMIT_SECTION_SYMBOLS): Ditto.

Thu Jan 27 16:43:51 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* read.c (lex_type): No longer make '{' a valid character for
	symbol names.

	* as.c (main): Print long values using %ld.

	* messages.c (as_warn_internal): New static function.
	(as_warn, 3 versions): Use as_warn_internal.
	(as_warn_where, 3 versions): New function.
	* as.h (as_warn_where): Declare.

Tue Jan 25 18:30:34 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* as.c (quiet_flag): New flag.
	(main): If -noquiet given, display execution time and memory used.

Tue Jan 25 15:53:11 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* doc/{all.texi,as.texinfo}: Add documentation for HPPA port.

Mon Jan 24 19:18:23 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_frob_symbol): New function.  Put undefined
	symbols of known size in the undefined section.  Put small common
	symbols in a .scommon section.
	* ecoff.h (ecoff_frob_symbol): Declare.
	* config/obj-ecoff.h (obj_frob_symbol): Define.
	* config/obj-elf.c (obj_elf_write_symbol_p, obj_elf_write_symbol,
	obj_elf_frob_symbol): Removed unused functions.
	* config/obj-elf.h (obj_frob_symbol, obj_write_symbol): Removed
	unused macros.
	(obj_elf_frob_symbol, obj_elf_write_symbol): Removed declarations
	of unused functions.
	(obj_frob_symbol): Define if ECOFF_DEBUGGING.

	* config/tc-mips.c (g_switch_seen): New static variable.
	(md_parse_option): Set g_switch_seen for -G option.
	(s_option): If creating PIC code, force the GP size to be 0.  Warn
	if -G switch used with a non-zero value.

	* symbols.c (S_IS_COMMON): Use bfd_is_com_section rather than
	comparing against bfd_com_section.

Mon Jan 24 14:12:25 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* read.c (s_lcomm): Treat Alpha like MIPS in handling of .sbss
	section.

Thu Jan 20 13:17:58 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* expr.c (operand): For floating point operand with unusual fp
	char from FLT_CHARS, preserve the character.  Patch from Lisa
	Repka.

Wed Jan 19 23:15:24 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (md_pseudo_table): Add all data allocation
	pseudo-ops: .hword, .int, .long, .octa, .quad, .short, .single.

Tue Jan 18 15:51:59 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* config/obj-coffbfd.c (obj_coff_endef): For C_EFCN, C_BLOCK and
	C_FCN assume .val has been set to .

Tue Jan 18 16:19:58 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c: Disable multiple $CODE$ subspace code.  It
	confuses GDB for some unknown reason.
	* config/obj-som.c: Likewise.

Tue Jan 18 19:05:32 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* literal.c (add_to_literal_pool): Handle duplicates of values
	already written to literal pool.

Tue Jan 18 17:23:52 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-aout.c (obj_aout_frob_symbol): Try to get symbols
	with explicitly marked stabs through BFD: if a symbol marked
	N_UNDF | N_EXT is in the absolute section, move it to the
	undefined section; move a symbol marked N_INDR into
	bfd_ind_section and set the BSF_INDIRECT flag; set the
	BSF_WARNING flag for a symbol makred N_WARNING.

Mon Jan 17 15:40:23 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (ecoff_set_gp_prolog_size): Declare.
	* ecoff.c (ecoff_set_gp_prolog_size): Return type is void.

Mon Jan 17 00:18:55 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_ip): Explicitly check for comma before 'u'
	and 'f' template operand.

	* config/tc-hppa.c (pa_ip): Handle 'N', 'O', 'o', '0', '1', 'u',
	and '2' in copr and sfu instruction templates.

Sun Jan 16 16:44:23 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* as.h (subseg_force_new): Add prototype.

Sat Jan 15 09:20:55 1994  Doug Evans  (dje@canuck.cygnus.com)

	* app.c (do_scrub_next_char): Allow lines like " foolab :".

	* read.c (emit_expr): Fix computation of mask.
	* config/obj-elf.c (obj_elf_section): Fix loop termination test.

Thu Jan 13 16:15:15 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* ecoff.c (ecoff_set_gp_prolog_size): New function.
	(current_file_idx): New static variable.
	(add_file): Use and increment current_file_idx instead of indx
	parameter.

	* struc-symbol.h (struct symbol): Make all bitfields unsigned.

	* config/tc-i960.c (i960_validate_fix): Added argument
	add_symbolPP.  Indirect through it to get "add_symbolP".
	* config/tc-i960.h (i960_validate_fix): Supply prototype.
	(TC_VALIDATE_FIX): Pass address of add_symbolP.

	* configure.in (i386-*-netbsd*): New target, using te-netbsd.h.
	(i386-*-netbsd0.8): New target, like 386bsd.

	* configure.in: Set BFDDEF in Makefile to "define" or "undef".
	* Makefile.in (config.h): Protect against multiple inclusions.
	Define or undef BFD_ASSEMBLER as specified by $(BFDDEF).
	(ALL_CFLAGS): Omit $(BFDDEF).
	* as.h: Include config.h.
	(struct symbol): Added forward declaration.
	(add_to_literal_pool): Fix declaration.
	* as.c: Don't include config.h.

	* literal.c (add_to_literal_pool): Take symbol and addend as
	arguments, instead of expression, for now.  Fix calculation of
	offset to return.

	* subsegs.h (segment_info_type) [NEED_LITERAL_POOL]: Add field
	literal_pool_size.

Thu Jan 13 12:14:21 1994  Jeffrey A. Law  (law@snake.cs.utah.edu

	* subsegs.c (subseg_get): Accept new argument "force_new".  If
	set then a new segment is always created.  All callers changed.
	(subseg_force_new): New function.  Similar to subseg_new, but
	always force a new segment to be created.

	* config/obj-som.c (som_frob_file): Call adjust_code_sections
	for each section.
	(adjust_code_sections): New function.  Adjusts the VMA for all the
	$CODE$ subspaces.

	* config/tc-hppa.c (md_assemble): Also handle creating a fixup
	for the unwind descriptors if a function's label follows the
	.PROC and .ENTRY directives.
	(pa_entry): Don't set BSF_FUNCTION for the label symbol here; it
	is done elsewhere.  Don't create a fixup for the unwind
	descriptors if the function's label has not been defined yet.
	(pa_proc): For SOM, place each procedure within a new $CODE$
	subspace.  Adjust the segment and frag for the associated
	function label if it exists.

Wed Jan 12 22:05:33 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (hppa_fix_struct): Add new "segment" field.
	(hppa_fix_new): Initialize segment field.
	(md_apply_fix): Do nothing for pc-relative fixup which involves
	crossing a segment boundary.
	(pa_procend): Undefine the current label after handling .PROC
	and .PROCEND directives.
	(dummy_symbol): Make type "symbolS *".  Change references as
	appropriate.

Wed Jan 12 13:29:31 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* read.c (read_a_source_file): Cast array argument to unsigned
	char.
	* write.c (adjust_reloc_syms): Remove unused variable symseginfo.
	(write_object_file): Don't define punt_it if it won't be used.
	(fixup_segment): Don't define skip if it won't be used.

	* config/tc-mips.h (TARGET_FORMAT): Define as mips_target_format.
	(mips_target_format): Declare.
	* config/tc-mips.c (mips_target_format): Define with appropriate
	default definition.
	(md_parse_option): If -EL or -EB is used, change byte_order and
	mips_target_format as appropriate.

Tue Jan 11 21:52:36 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* app.c (do_scrub_next_char): Another attempt to fix bugs
	dealing with labels without colons (for HPPA and MRI).

Tue Jan 11 17:01:06 1994  Doug Evans  (dje@canuck.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Truncate args to %hi/%lo to 32 bits.

	* expr.c (integer_constant): Fix computation of too_many_digits.
	Variable digit_2 renamed to start.  Fix check for whether number
	will fit in 32 bits.
	* read.c (emit_expr): Use valueT instead of long.

Tue Jan 11 13:01:20 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-elf.c: If TC_MIPS, include elf/mips.h.
	(special_sections): Define.
	(obj_elf_special_section): Get default types and attributes from
	list of special sections.
	* config/tc-mips.c (ELF_TC_SPECIAL_SECTIONS): Define.

	* config/obj-ecoff.c (ecoff_frob_file): Force .sdata and .sbss
	sections to be close together.

	* config/tc-mips.c (macro): Corrected $at warnings in a couple of
	spots.

	* listing.c (listing_prev_line): New function.
	* listing.c: Include subsegs.h.
	(listing_prev_line): New function.
	(calc_hex): Reset byte_in_frag to zero for each new frag.
	* config/tc-mips.c (append_insn): Call listing_prev_line after
	emitting nop instructions.
	* Makefile.in (listing.o): Depends upon subsegs.h.

Mon Jan 10 09:52:23 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_ip): Put check for missing label on .PROC
	here.  Handle case where label may be defined after the .PROC.
	(pa_proc): It is not an error if the procedure's label isn't
	defined before the .PROC directive.

Sun Jan  9 04:43:30 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config/te-netbsd.h: New file.
	* config/tc-i386.h (TARGET_FORMAT) [TE_NetBSD]: Use bfd target
	a.out-netbsd-386 for this configuration.

Fri Jan  7 17:38:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_stab): Don't clobber the ECOFF symbol information
	with the associated stabs information.
	(ecoff_build_symbols): Never set the type of stabs symbols to
	st_Global.  Don't update the symbol index or ifd if the gas symbol
	is not the same as the ECOFF symbol (which is now the case for
	stabs symbols).

Fri Jan  7 11:14:07 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/tc-mips.c (macro): Add a LOSING_COMPILER ifdef that
	splits the function.
	(macro2): New function, if LOSING_COMPILER defined.

Fri Jan  7 09:38:25 1994  Steve Chamberlain  (sac@cygnus.com)

	* config/obj-coffbfd.c (fill_section):  Don't ever fill past the
	end of a section. (write_object_file): Temporary fix - setup
	stdoutput.

Thu Jan  6 18:05:21 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/tc-sparc.c (tc_gen_reloc): Fix handling of addends in
	non-pcrel_offset relocations.

Thu Jan  6 01:06:40 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_ip): Warn about using $1 as well as $at
	without .set noat.

Wed Jan  5 14:22:22 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* literal.c: New file.
	* Makefile.in (REAL_SOURCES, OBJS): List it.

	* as.h (DEBUG): Don't define.
	(struct expressionS, struct fix): Declare in case they're used in
	prototypes.
	(add_to_literal_pool) [BFD_ASSEMBLER]: Declare.

	* config/tc-mips.h (TARGET_FORMAT) [OBJ_AOUT]: Fix for new names
	in bfd.

	* subsegs.c (subseg_get): New function.  Creates segment if
	needed, returns pointer, but doesn't change current segment.
	(subseg_new): Use it.

Tue Jan  4 15:12:43 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in (INCLUDES): Add $(srcdir)/.. to places to search.
	* config/obj-ecoff.c: Include files as "bfd/" instead of "../bfd/".
	* app.c, flonum.h, hex-value.c (const): Change #if to be more
	portable.

Tue Jan  4 22:11:34 1994  Rob Savoye  (rob@darkstar.cygnus.com)

	* config/ho-vsta.h, configure.in: Add support for VSTa
	micro-kernel.

Thu Dec 30 15:27:16 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* write.c (write_relocs): bfd_perform_relocation now takes an
	additional argument, to return an error string (which we ignore).

Wed Dec 29 14:37:26 1993  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* write.h (struct fix): Field tc_fix_data should be type PTR, not
	void*, for compatibility with non-ANSI compilers.  Added
	single-bit field "fx_done".

Sun Dec 26 14:31:47 1993  Torbjorn Granlund  (tege@adder.cygnus.com)

	* config/tc-hppa.c (pre_defined_registers): Convert to lower case.
	Delete spurious register names "%r4L", etc.
	(selector_table): Sort and convert to lower case.
	(cons_fix_new_hppa): `reloc_type' => `rel_type'.
	(pa_ip): Always use strcmp for non-text and strcasecmp for text.
	(reg_name_search): Rewrite to call strcasecmp only once per
	iteration.
	(pa_chk_field_selector): Rewrite to use binary search.
	(pa_parse_neg_add_cmpltr): Use strcasecmp for completer comparisons.
	(pa_parse_space_stmt): $TEXT$ and $PRIVATE$ are symbols; use case
	sensitive comparisons.
	(pa_parse_space_stmt): Canonicalize strncasecmp arg to lower case.
	(pa_space): "$text$" => "$TEXT$"; "$private$" => "$PRIVATE$".  Use
	case sensitive comparison for all symbolic names.
	(pa_subspace): Canonicalize strncasecmp arg to lower case.
	(pa_subspace_start): Use case sensitive comparison for symbolic names.

Mon Dec 20 10:37:48 1993  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* write.c (adjust_reloc_syms) [RELOC_REQUIRES_SYMBOL]: If no
	symbol is present (i.e., relocation against absolute), create a
	phony local symbol, and use it in the reloc.
	(fixup_segment): When adjusting a reloc with an absolute symbol,
	have TC_FORCE_RELOCATION control clearing add_symbolP too.
	* config/tc-sparc.h (RELOC_REQUIRES_SYMBOL): Define, for OBJ_COFF.

	* symbols.c (S_IS_EXTERNAL, S_IS_LOCAL): Don't use both BSF_EXPORT
	and BSF_GLOBAL, since they're the same.

	* as.c (main): Only invoke md_end if it's defined as a macro.
	* tc.h (md_end): Don't declare it.
	* config/tc-*.[ch] (md_end): Deleted, in cases where it doesn't do
	anything.
	* config/tc-vax.c (vip_end): Deleted null function.
	* config/tc-mips.c (md_mips_end): Renamed from md_end.
	* config/tc-mips.h (md_mips_end): Declare.
	(md_end): New macro, calls md_mips_end.

	* write.c (write_object_file): Don't close output file.
	* as.c (main): Close output file (if needed) after calling
	listing_print, which should be after calling write_object_file,
	which sets the frag addresses.

	* config/obj-coff.c (obj_coff_dim, obj_coff_endef, obj_coff_line,
	obj_coff_scl, obj_coff_size, obj_coff_tag, obj_coff_type,
	obj_coff_val): Add unused int argument to satisfy prototypes; goes
	with Ian's 10 Sep changes.
	(S_GET_DATA_TYPE, S_SET_DATA_TYPE, S_GET_STORAGE_CLASS,
	S_SET_STORAGE_CLASS): Now function instead of macros.
	(obj_emit_lineno) [BFD_ASSEMBLER]: Deleted.
	(tag_insert): Local var ERROR_STRING is const.  Use "const" not
	"CONST" for argument NAME.  Fixed prototype.
	(coff_frob_symbol): Removed explicit "#if 1" directive.  If
	S_IS_EXTERNAL, set storage class to C_EXT.
	(s_get_name): Use "const" not "CONST".
	* config/obj-coff.h (S_GET_DATA_TYPE, S_SET_DATA_TYPE,
	S_GET_STORAGE_CLASS, S_SET_STORAGE_CLASS): Deleted.
	(obj_emit_lineno): Declare only for non-BFD_ASSEMBLER.  For
	BFD_ASSEMBLER, define as macro that aborts.
	(obj_extra_stuff, tc_headers_hook): Declare only for
	non-BFD_ASSEMBLER.
	(coff_frob_symbol): Fix prototype.

Sun Dec 19 00:37:20 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c (tc_gen_reloc): Test of pcrel_offset had sense
	reversed.

Thu Dec 16 21:13:11 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_begin): Initialize "dummy_label".
	(tc_gen_reloc, SOM version): For relocations which have no symbol,
	set sym_ptr_ptr to dummy_label.  Avoids lossage in generic BFD code.

Thu Dec 16 16:07:56 1993  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* read.c (lex_type): No longer make '[' a valid character for
	symbol names.

	* config/tc-vax.c (tc_aout_fix_to_chars): Local variable
	NBYTES_R_LENGTH now const.

	* config/obj-*.c, config/tc-*.c: Omit superfluous "return"
	statements at ends of functions.  Don't check for null return from
	hash_new, since it won't return at all if there's no memory
	available.  Also, check for null return from hash_insert, rather
	than zero-length string, as success indicator.

	* subsegs.c (section_symbol): New function.
	* subsegs.h (section_symbol): Declare.
	* write.c (adjust_reloc_syms): Use it.

Wed Dec 15 15:39:53 1993  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (RUNTEST): New variable.
	(CHECKFLAGS): Pass it down.

	* ecoff.c (ecoff_directive_frame): Permit extra trailing operands;
	unused for now, but supplied by Alpha OSF1 compiler.

	* as.h: Protect against multiple inclusions.
	(int_to_gen): Don't declare.

	* config/atof-vax.c (atof_vax): NULL is not a valid character
	constant.

Tue Dec 14 21:38:25 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* configure.in (hppa*-*-osf*): Do not consider this a developmental
	configuration.

	* config/tc-hppa.c (md_apply_fix): Handle cases where no
	relocation will be emitted for 32bit formats.

Mon Dec 13 23:33:40 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_apply_fix): Do not call hppa_field_adjust
	for any of the 'T' field selectors.

Sat Dec 11 11:23:12 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/tc-h8500.c (build_bytes): Get reloc type right for a
	%page operation. (md_assemble): Don't modify input_line_pointer.
	(mdcoff_sizemachdep): New function.
	* config/tc-h8500.h (TC_COFF_SIZEMACHDEP): New macro.
	* config/tc-z8k.c (get_operand): Delete bogus check.

Wed Dec  8 16:31:51 1993  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* write.c (number_to_chars_*): Delete bogus range check.

	* output-file.c (TARGET_ARCH): No default.

Tue Dec  7 16:02:53 1993  Steve Chamberlain  (sac@jonny.cygnus.com)

	* config/tc-sh.c (md_convert_frag): Truncate disps before calling
	md_number_to_chars.  (md_assemble): Don't modify
	input_line_pointer.

Mon Dec  6 11:49:03 1993  Doug Evans  (dje@canuck.cygnus.com)

	* config/tc-h8300.c (md_assemble): Don't update input_line_pointer.

Mon Dec  6 11:20:02 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/obj-som.[ch] (obj_read_begin_hook): Remove last change.
	Breaks with the HP compilers.

	* config/tc-hppa.c (struct call_info): Remove fields which were
	set but never used.  Remove all code which sets those fields.
	(struct subspace_dictionary_chain): Likewise.
	(struct space_dictionary_chain): Likewise.
	(pa_desc): Delete useless function.  Delete all references.
	(hppa_tc_make_sections): No need to count the number of symbols for
	the symbol extension section.

Sun Dec  5 17:05:29 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/obj-som.c (obj_som_version): Pass version string to
	SOM BFD backend.
	(obj_som_copyright): New function.  Much like obj_som_version.

	* config/tc-hppa.c (obj_copyright): Define as appropriate for
	SOM and ELF.
	(pa_copyright): Just a stub now.

	* config/obj-som.c (obj_read_begin_hook): Delete unused function.
	* config/obj-som.h (obj_read_begin_hook): Provide dummy definition.
	(TARGET_SYMBOL_FIELDS): Delete.  SOM isn't making use of them.

	* config/tc-hppa.c (tc_gen_reloc, SOM version): Handle relocation
	expansion due to rounding mode selectors.  Handle R_[RDSN]_MODE
	relocations for selecting the current rounding mode.

	* config/tc-hppa.c (evaluate_absolute): Support e_rrsel and
	e_rlsel field selectors.

Fri Dec  3 18:33:24 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-elf.h: If ECOFF_DEBUGGING, undef
	SEPARATE_STAB_SECTIONS and INIT_STAB_SECTION, and define
	OBJ_PROCESS_STAB to call ecoff_stab.
	* config/obj-elf.c: Don't compile obj_elf_init_stab_section if
	INIT_STAB_SECTION is not defined.

Fri Dec  3 10:56:40 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_apply_fix): Delete old wrapper function.
	(md_apply_fix_1): Rename to md_apply_fix.  Fix argument decls.
	Fix comments in various places.  Always return a value.
	Avoid dereferencing a NULL fx_addsy.
	(hppa_force_relocation): Avoid dereferencing a NULL fx_addsy.

	Fri Dec  3 09:47:30 1993  Pete Hoogenboom  (hoogen@cs.utah.edu)

	* config/tc-hppa.c: (tc_gen_reloc): Addend for a plabel relocation should
	be either 0 or 2 (no static link or static link required).  Always
	assume no static link.

Thu Dec  2 11:52:21 1993  Ken Raeburn  (raeburn@cygnus.com)

	* config/tc-sparc.c (tc_gen_reloc): Make adjustment to addend be
	dependent on howto fields, not on format flavour.

	* struc-symbol.h (struct symbol): New fields sy_obj and sy_tc,
	defined as types OBJ_SYMFIELD_TYPE and TC_SYMFIELD_TYPE, if those
	macros are defined.
	* config/obj-coff.h (TC_SYMFIELD_TYPE, OBJ_SYMFIELD_TYPE): Define.
	(TARGET_SYMBOL_FIELDS, I960_SYM_FIELDS): Don't define.
	(sy_tc, sy_obj): Define so that the fields look like they used to,
	until all references get changed.

	* write.c (fixup_segment): Lots of variables no longer register.
	Reordered some code for easier reading.
	* config/obj-coff.c (obj_coff_dim): dim_index no longer register.
	Deleted superfluous return statement.
	(obj_coff_line, obj_coff_size, obj_coff_scl, obj_coff_type,
	obj_coff_val, tag_init, tag_insert): Deleted superfluous return
	statement.
	(align, obj_coff_section): Deleted debugging printfs.
	* config/tc-i386.c (md_assemble): Discard some register decls.
	Use assignment rather than memcpy to copy template.
	(op_hash, reg_hash, prefix_hash): Default C initialization of
	statics is sufficient.
	* config/tc-sparc.c (print_insn): Array Reloc is now const, and
	points to const.

	* config/obj-coff.h (TARGET_FORMAT): Only use coff-sparc-lynx if
	TE_LYNX; use coff-sparc otherwise.
	[USE_NATIVE_HEADERS]: Delete this code; it isn't used.

	* write.c (fixup_segment): Call TC_VALIDATE_FIX, if defined,
	before processing a fixup.  Call TC_ADJUST_RELOC_COUNT just before
	returning.  Remove some i960-coff-specific code.
	(TC_ADJUST_RELOC_COUNT): Default to doing nothing.
	* config/tc-i960.h (TC_ADJUST_RELOC_COUNT) [OBJ_COFF]: Define.
	(i960_validate_fix): Declare.
	(TC_VALIDATE_FIX): Define.
	* config/tc-i960.c (i960_validate_fix): New function.

	* write.c (number_to_chars_littleendian): New function.  Write out
	bytes in little endian order, doing size and range checking.
	(number_to_chars_bigendian): New function, similar.
	* write.h: Declare them.
	* config/tc-*.c (md_number_to_chars): Use them.
	* config/tc-vax.c (md_apply_fix): Ditto.
	* config/tc-i386.c (md_apply_fix): Ditto.

	* config/obj-coff.c: Rearranged code for handling line number
	data.
	(line_fsym): Renamed from function_lineoff in BFD_ASSEMBLER case,
	since the usage is different from non-BFD_ASSEMBLER case.
	(in_function, clear_function, set_function): New macros, to
	combine some of the functionality implemented in differnet ways in
	BFD_ASSEMBLER and non-... code.  Used in other functions that used
	to check function_lineoff &c.
	(obj_emit_lineno): Split into two copies, one for BFD_ASSEMBLER,
	one for not.  Non-BFD_ASSEMBLER version now has temporary variable
	to contain char* pointer pointed to by char** argument.  Always
	follow CROSS_COMPILE code; easier to read that way.
	(obj_coff_ln): Don't call add_lineno or c_line_new if appline is
	set.
	(obj_coff_endef) [BFD_ASSEMBLER]: Don't do anything special for
	".bf", it's been done elsewhere.
	(coff_frob_symbol): If ilne number data is pending, call
	add_linesym to flush it.
	(coff_frob_file): Don't do that here.
	* config/obj-coff.h (coff_frob_file): Declare.
	(obj_frob_file): Define, to call it.

	* config/tc-sparc.h (md_create_short_jump, md_create_long_jump,
	md_estimate_size_before_relax: Define them as macros calling
	as_fatal.
	* config/tc-sparc.c: Don't define them as functions.

	* configure.in: Handle target alpha-*-osf*.  (No cpu files yet.)

Wed Dec  1 23:37:14 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Makefile (clean): Depend on clean-here.

Wed Dec  1 11:35:21 1993  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/ho-go32.h: Include fopen-bin.h.
	* as.h: If FOPEN_WB isn't defined, include fopen-same.h.
	* output-file.c (output_file_create): Use FOPEN_WB instead of "w".
	* input-file.c (input_file_open): Use FOPEN_RT instead of "r".
	* listing.c (file_info): Use FOPEN_RB instead of "rb".
	* read.c (s_include): Use FOPEN_RT instead of "r".

	* stabs.c: Include obstack.h.

	* tc.h (md_create_long_jump): Don't declare if it's already
	defined as a macro.
	(md_create_short_jump, md_estimate_size_before_relax): Ditto.

	* messages.c (as_perror) [BFD_ASSEMBLER]: Use bfd_errmsg instead
	of strerror.  Clear bfd_error.

	* config/te-lynx.h (LOCAL_LABELS_FB): Define, if not already
	defined.

Wed Dec  1 10:41:56 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (hppa_elf_mark_end_of_function): New function.
	(pa_process_exit, pa_procend): Call it for ELF objects.

Wed Dec  1 12:10:41 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (macro): Subtract 8 from offset in non PIC l.d
	case.  See comment.  From wilson@cygnus.com: for M_L_DAB, set
	coproc before doing goto ld.

Tue Nov 30 13:40:30 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* write.c (TC_FORCE_RELOCATION): Provide a default definition.
	(fixup_segment): Allow the target machine to specify that a
	relocation must be generated for a particular fixup.  Remove
	#ifndef TC_HPPA hack.

	* config/tc-hppa.h (TC_FORCE_RELOCATION): Define.

	* config/tc-hppa.c (md_apply_fix_1): Never change fx_addsy to
	be NULL.  Only fixup_segment is supposed to do that.
	(hppa_force_relocation): New function.

Tue Nov 30 11:21:41 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (stabs.o): Added dependencies.

	* config/obj-ecoff.c (ecoff_frob_file): Don't call bfd_set_symtab.

Sun Nov 28 12:11:40 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* app.c (do_scrub_next_char): Output a TAB before any
	.app* directive.

	* config/tc-hppa.c (fix_new_hppa): Make sure a sub_symbol
	exists before trying to peek at its name.
	(pa_space): Do not call pa_align_subseg.  See hppa/unsorted/align3.s
	for testcase.
	(pa_align_subseg): Delete unused/unwanted function.

Sat Nov 27 22:49:07 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* read.c (read_a_source_file): Fix test for when to stick a colon
	on the end of a label.  Make code conditional on either MRI or
	LABELS_WITHOUT_COLONS.

	* app.c (do_scrub_next_char): If a line begins with whitespace, leave
	the single whitespace character alone.  Eat all others.

	* config/tc-hppa.h (LABELS_WITHOUT_COLONS): Define.

Wed Nov 24 01:22:54 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_procend): Do not call process_exit.
	(exit_processing_complete): Delete unwanted variable and all
	references.

Wed Nov 24 02:31:38 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_setup_ext): Renamed from ecoff_build_ext.
	Changed to not actually build the external symbol information, as
	that is now done by the ECOFF back end.
	(ecoff_build_debug): Changed accordingly.
	* ecoff.h (obj_ecoff_set_ext): Declare.   obj-format.c function
	called by ecoff_setup_ext.
	* config/obj-ecoff.c (ecoff_frob_file): If debug_info count is 0,
	set corresponding pointer to NULL.  Don't set raw_size and
	raw_syments.
	(obj_ecoff_set_sym_index): Removed.
	(obj_ecoff_set_ext): New function.
	* config/obj-ecoff.h (obj_set_sym_index): Don't define.
	(obj_ecoff_set_sym_index): Don't declare.
	* config/obj-elf.c (obj_ecoff_set_ext, elf_get_extr,
	elf_set_index): New functions used for ECOFF_DEBUGGING.
	(elf_frob_file): Reworked ECOFF debug generation to use
	new functions in bfd/ecofflink.c.

Sun Nov 21 23:54:52 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_def_subspaces): Only create the unwind
	subspace for ELF.  In the SOM world, the linker is responsible
	for creating the unwind subspaces.

Fri Nov 19 16:25:09 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-coffbfd.c: Use PARAMS rather than EXFUN.
	(yank_symbols): Don't call S_SET_EXTERNAL if the storage class is
	already set.  Fixes .def var; .val external_var; .scl 3; .endef.
	(adjust_stab_section): Make static.  Declare return type.  Remove
	unused variables.

	* config/tc-i386.h: Declare tc_coff_fix2rtype and
	tc_coff_sizemachdep.

Fri Nov 19 04:33:59 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* write.c (write_object_file): Disable obj_check_file_symbols
	hook; only back end using it wasn't using it correctly.
	(write_object_file): Always call obj_frob_symbol and
	tc_frob_symbol; always retain symbol if it's used by a relocation,
	regardless of what these routines indicate.
	* config/obj-coff.c (coff_frob_symbol): Renamed from
	coff_check_file_symbols.
	* config/obj-coff.h (obj_check_file_symbols): Deleted.
	(coff_frob_symbol): Declare.
	(obj_frob_symbol): Call it.

	* config/obj-coff.c (obj_crawl_symbol_chain, obj_emit_strings,
	obj_pre_write_hook): Don't define for BFD_ASSEMBLER.
	(c_section_header): Ditto.  Delete superfluous return at end of
	function.

	* config/obj-coff.h [TC_SPARC]: Include coff/sparc.h, and specify
	coff-sparc-lynx.
	(SA_GET_SYM_TAGNDX): Use BFD_HEADERS version for BFD_ASSEMBLER
	too.
	(c_section_header): Rewrite prototype so that it contains no
	preprocessing directives.  Don't declare it at all if
	BFD_ASSEMBLER.

	* configure.in (sparc*-*-lynxos): New target, using coff and
	BFD_ASSEMBLER.

	* stabs.c: New file.
	* Makefile.in (REAL_SOURCES, OBJS): List it.
	* read.c (STAB_SECTION_NAME, STAB_STRING_SECTION_NAME,
	get_stab_string_offset, s_stab_generic, s_stab, s_xstab, s_desc):
	Moved to new file.

	* config/tc-sparc.c (tc_gen_reloc): Handle coff files like elf
	files.

Wed Nov 17 17:23:53 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in (mips-*-irix5*): New target.  Use elf and mips-big.
	* config/obj-elf.c: If ECOFF_DEBUGGING, include ecoff.h.
	(obj_pseudo_table): If ECOFF_DEBUGGING, define ECOFF
	pseudo-ops.
	(obj_read_begin_hook): If ECOFF_DEBUGGING, call
	ecoff_read_begin_hook.
	(obj_symbol_new_hook): If ECOFF_DEBUGGING, call
	ecoff_symbol_new_hook.
	(obj_elf_init_stab_section): Cast alloca result.
	(elf_frob_file): If ECOFF_DEBUGGING, finish up ECOFF debugging
	information and write it out into .mdebug section.
	* config/obj-elf.h (ELF_TARGET_SYMBOL_FIELDS): New macro.
	(TARGET_SYMBOL_FIELDS): Use ELF_TARGET_SYMBOL_FIELDS.
	(ECOFF_DEBUGGING): Define if TC_MIPS.
	(TARGET_SYMBOL_FIELDS): If ECOFF_DEBUGGING, override to add
	fields required by ECOFF.
	* config/tc-mips.c: Check ECOFF_DEBUGGING rather than
	OBJ_ECOFF in many cases.
	(mips_any_noreorder): New variable.
	(mips_cprestore_offset): Initialize to -1.
	(mips_frame_reg): New variable.
	(RELAX_ENCODE, RELAX_OLD, RELAX_NEW, RELAX_RELOC1,
	RELAX_RELOC2, RELAX_RELOC3, RELAX_WARN): New macros.
	(md_pseudo_table): Handle "gpword" and "cpadd".
	(md_begin): Initialize ok to false.  If OBJ_ELF, set alignment
	of text, data and bss sections to 4.  Set alignment of
	.reginfo section to 2.  If ECOFF_DEBUGGING, create .mdebug
	section.
	(ALIGN_ERR, ALIGN_ERR2): Removed unused and useless alignment
	check.
	(append_insn, macro_build, macro_build_lui): Take place
	argument.  Changed all callers.
	(append_insn): If appending a nop, don't emit one.
	(macro_build): Changed assertion for 'i', 'j', 'o' case.
	(gp_reference): Removed.
	(load_address): New function.
	(macro): If mips_noreorder is used, set mips_any_noreorder.
	Extensive changes to handle GP and PIC symbols differently.
	Build both possible code choices using a variant frag, and
	make a final decision at the end of assembly when all
	information is known.  Added PIC support for all symbol
	references.
	(mips_ip): Don't permit anything but a number after $ for a
	coprocessor register.  Don't use .lit4 or .lit8 sections when
	generating PIC code.  If OBJ_ELF, set alignment of .lit4 or
	.lit8 section to 4.
	(md_apply_fix): Accept and ignore GOT16 and GPREL32 relocs.
	(s_change_sec): Set alignment of ELF .rodata or .sdata section
	to 4.
	(s_mipsset): If .set noreorder, set mips_any_noreorder.
	(s_cpload): Ignore .cpload if not generating PIC code.  Warn
	if .cpload is not in noreorder section.
	(s_cprestore): Ignore .cprestore if not generating PIC code.
	(s_gpword, s_cpadd): New functions.
	(tc_get_register): Added frame argument; if true, set
	mips_frame_reg to return value.  Changed all callers.
	(md_estimate_size_before_relax): Don't error out, but instead
	determine how much a frag should grow.
	(tc_gen_reloc): Return multiple relocs if appropriate, as
	determined by md_estimate_size_before_relax.
	(md_convert_frag): New function.
	(mips_elf_final_processing): Set ELF header flags based on
	mips_any_noreorder and mips_pic.
	* config/tc-mips.h (RELOC_EXPANSION_POSSIBLE): Define.
	(MAX_RELOC_EXPANSION): Define to be 3.
	(md_relax_frag): Define to be 0.
	(md_convert_frag): Don't define.
	(tc_get_register): Changed declaration.

	* ecoff.h, ecoff.c: New files pulled out of config/obj-ecoff.c to
	support generating ECOFF debugging information for MIPS ELF
	targets.  Compiled only if ECOFF_DEBUGGING is defined.  Changed
	handling of external symbols: it now always generates exactly
	those external symbols that are defined in the global symbol list.
	* Makefile.in (REAL_SOURCES): Added ecoff.c.
	(REAL_HEADERS): Added ecoff.h.
	(OBJS): Added ecoff.o.
	(ecoff.o): New target.
	* config/obj-ecoff.c: Almost entirely moved into ecoff.c.
	Remaining code mostly just calls ecoff.c code.
	* config/obj-ecoff.h: Define ECOFF_DEBUGGING.
	(TARGET_SYMBOL_FIELDS): Make ecoff_symbol a pointer to a
	struct localsym.
	(obj_read_begin_hook, obj_symbol_new_hook): Define to call
	functions in ecoff.c.
	(ecoff_stab): Don't declare (now declared in ecoff.h).
	(obj_set_sym_index): Define.
	(obj_ecoff_set_sym_index): Declare.

	* frags.h (frag_grow): Declare.
	* frags.c (frag_grow): Made non-static.

	* write.c (is_dnrange): Do not define if md_relax_frag is defined.
	(relax_segment): If md_relax_frag is defined, use it to handle a
	frag of type rs_machine_dependent rather than looking through
	md_relax_table.

	* read.c (read_a_source_file): If we find a bad pseudo-op,
	do a continue to go on to the next line rather than a break.
	Removed duplicate bad pseudo-op code which was never executed.

	* read.c (s_lcomm): Do not require a comma after the name.

	* subsegs.h (segment_info_type): Changed hadone field to bitfield.
	Added bss bitfield.
	* as.c (perform_an_assembly_pass): Set bss flag for bss_section.
	* read.c (s_lcomm): Set bss flag for .sbss section if used.
	* write.c (relax_and_size_seg): Don't set SEC_HAS_CONTENTS for a
	bss section.  Set SEC_RELOC if there are any relocations, even for
	a zero size section.

	* write.c (write_relocs): In RELOC_EXPANSION_POSSIBLE case, base
	data offset on reloc[0]->address rather than reloc[j]->address, so
	that multiple relocs can affect different memory locations.

	* write.c (chain_frchains_together, relax_and_size_seg,
	adjust_reloc_syms, write_relocs): Make third argument PTR, not
	char *, to match definition of bfd_map_over_sections.

	* app.c (do_scrub_next_char): Don't interpret a comment character
	as starting a CPP line directive unless it is a '#' and is the
	very first characters on the line (i.e., do not permit leading
	whitespace).

	* messages.c (identify): Make file argument non-const, to match
	callers.

Tue Nov 16 20:38:21 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_ip): Fix thinko in 21bit range check.

Sat Nov 13 18:22:48 1993  Steve Chamberlain  (sac@jonny.cygnus.com)

	* config/tc-sh.c (md_apply_fix): Cope with IMM16 type too.
	* config/tc-z8k.c (build_bytes, md_apply_fix): Understand nDISP7
	relocs.

Fri Nov 12 16:51:47 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.[ch]: Fix assorted trivial indention problems.
	* config/obj-som.c (obj_som_version): Add missing ';'.
	(som_frob_file): Delete whitespace at EOL.

Fri Nov 12 15:26:21 1993  Ken Raeburn  (raeburn@cygnus.com)

	* Makefile.in (VERSION): Updated following 2.2 release.

Fri Nov 12 14:52:17 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (hppa_fix_struct): Use a real type for the
	field selector, rather than an int.  All uses of field selectors
	fixed.
	(tc_gen_reloc): For SOM PLABELs, always set addend to zero for now.
	(md_apply_fix_1): Do not call hppa_field_adjust for any PLABEL
	field.

	Thu Nov 11 15:49:08 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (pa_type_args): For .import statements,
	silently ignore attempt to change the symbol type for a function
	from ST_ENTRY to ST_CODE on .import.

Wed Nov 10 16:19:13 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* write.h (fixS): Rename fx_callj field to fx_tcbit.
	* write.c, config/obj-coff.c, config/obj-coffbfd.c,
	config/tc-i960.c: Corresponding changes.

Tue Nov  9 00:49:01 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Makefile.in (distclean): Delete config-stamp and config.h

	* config/tc-hppa.c (evaluate_absolute): Avoid relying on
	ANSI-C features.

	* config/tc-hppa.c (pa_type_args): Renamed from pa_export_args.
	Accept new argument "is_export".  All callers changed.  When
	processing a .export directive for a function, do not allow
	the user to set the type to "CODE", instead warn and set the
	type to "ENTRY".

Mon Nov  8 12:05:07 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_ip, printInsn): Handle 'k' (from Ted
	Lemon <mellon@pepper.ncd.com>).
	(mips_ip): Permit odd numbered floating point registers if -mips3.
	(macro): Use BFD_RELOC_MIPS_LITERAL relocation for M_LI_SS.

Mon Nov  8 07:45:01 1993  Doug Evans  (dje@canuck.cygnus.com)

	* configure.in: Remove h8300h, we have multilib now.

Mon Nov  8 06:09:18 1993  D. V. Henkel-Wallace  (gumby@cirdan.cygnus.com)

	* configure.in: Support generic netware as being ELF format.
			Recognise unixware if the user supplies it.

Sun Nov  7 01:02:08 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* First cut at cleaning up PA instruction parsing.
	* config/tc-hppa.c (pa_get_absolute_expression): Accept pointer to
	insn structure as an argument, and a pointer to a string.  All
	callers changed.  Always read any field selector here.  Call
	evaluate absolute to get a return value.
	(evaluate_absolute): Addept pointer to insn structure as its
	argument.  All callers changed.
	(INSERT_FIELD_AND_CONTINUE): New macro for inserting a bitfield
	into an instruction and continuing the main pa_ip loop.
	(CHECK_FIELD): New macro for simple range checking of fields.
	(pa_ip): Delete unused variables.  Use INSERT_FIELD_AND_CONTINUE
	and CHECK_FIELD.  All immediate fields now pass through
	pa_get_absolute_expression which will also handle field selectors.
	Delete dead code.  Simplify.
	(md_apply_fix_1): Use CHECK_FIELD to verify any fixes that are
	applied are in range.  Use bfd_put_32 rather than inserting each
	byte of the fixed instrution into the buffer ourselves.

	* write.c (fixup_segment): Delete {SEG,GLOBAL}_DIFF_ALLOWED code,
	it was PA specific and is no longer needed (it's now handled
	within the PA backend).
	* config/tc-hppa.h (SEG_DIFF_ALLOWED): Delete definition.
	* config/tc-hppa.c (fix_new_hppa): If the subtract symbol for
	a fixup is $global$ change it to NULL as $global$ is really only
	needed long enough to determine the base type of relocation to use.

	* config/tc-hppa.c (create_new_subspace): Initialize subspace_defined.

	* config/tc-hppa.c (pa-ip, case 'z'): Make field selectors work
	for 'z' operands (target of ble branch).

Sat Nov  6 22:41:57 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c: (update_subspace): Fix type and name of last
	parameter.  All callers fixed.
	(md_begin, pa_chk_field_selector, pa_entry): Lint.

	* config/tc-hppa.c (cons_fix_new_hppa): Reset field selector
	to default state after it's been used.

Fri Nov  5 12:08:21 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/obj-som.c (obj_som_init_stab_section): Change
	space/subspace sort keys for the stab sections so as to avoid
	bugs in the hp linker and pxdb.

Thu Nov  4 17:00:05 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* write.c (chain_frchains_together): Update pointer to last
	frag for a segment in the seginfo structure.

Thu Nov 04 09:09:35 1993  Jeffrey Wheat  (cassidy@cygnus.com)

	*  Makefile.in: Changed RUNTESTFLAGS to RUNTEST_FLAGS

Wed Nov  3 12:16:27 1993  Ken Raeburn  (raeburn@rover.cygnus.com)

	* write.c (fixup_segment): Handle conversion of subtraction to
	pc-relative addressing even if pc-relative flag is already set.

	* config/tc-m68k.c (m68k_ip_op): Use strchr, not index.  Don't
	declare either.

	* doc/Makefile.in (distclean): Delete intermediate files from dvi
	build, but not the dvi or info files.
	* Makefile.in (clean-here): New target; cleans up current
	directory only.
	(distclean): Use it instead of clean.

	* read.c (s_xstab): Don't use alloca.

	* messages.c (identify): New routine; print message identifying
	following messages as coming from assembler.
	(as_show_where, as_bad_internal, as_bad_where): Call it.
	(as_fatal): Don't need to identify program any more.

Tue Nov  2 18:04:11 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Add default case to reloc switch.

	* read.c (s_lcomm): Put small objects in .sbss for MIPS ELF as
	well as MIPS ECOFF.
	(get_stab_string_offset): Remove unused variable aligned.

Tue Nov  2 15:07:07 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c: Add %dp and %rp as synonyms for %r27 and %r2 in the
	predefined register table.
	(pa_parse_number): Handle %rp in common register shortcut code.
	Consistently set return value to -1 for an error.  Clean up error
	messages and only print them when "print_errors" is true.  Handle
	empty string case like the HP assembler -- assume a value of
	zero.

	* config/ho-hpux.h: Do not include ho-sysv.h.  Instead include
	standard hpux include files to pick up various function decls.

	* config/ho-hppaosf.h: Delete _IO* macros.  They are defined in
	stdio.h.  Delete bogus declaration of free.  Get path to
	alloca-conf.h right.

Tue Nov  2 13:57:30 1993  Ken Raeburn  (raeburn@rover.cygnus.com)

	* expr.c (operand): Fix checks for characters following "0b" or
	"0f".

Mon Nov  1 21:37:04 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/obj-som.h (obj_attach_unwind_info): Define as a hook
	so GAS can attach unwind descriptor information to a BFD symbol.
	* config/tc-hppa.c (fix_new_hppa): If necessary attach unwind
	descriptor information to the BFD symbol.
	(md_apply_fix): R_HPPA_ENTRY and R_HPPA_EXIT can never be "applied",
	they are simply markers.  Make R_HPPA_UNWIND_* handling OBJ_ELF
	dependent.
	(pa_build_unwind_subspace): Whole function is OBJ_ELF dependent.
	(pa_entry): Build a R_HPPA_ENTRY relocation when configured for SOM.
	(pa_exit): Likewise, but built a R_HPPA_EXIT relocation.  Do not
	build "end-of-function" symbols for SOM, they are not needed.

	* config/tc-hppa.c (process_exit): Create temporary symbols with
	correct prefixes so they can be eliminated later.

	* config/tc-hppa.c (call_info struct): Delete unused "frame" field.
	(pa_callinfo): Insert framesize into the unwind information as
	soon as it's available.
	(pa_build_unwind_subspace): Do not insert framesize into the unwind
	information here.

	* Add support for marker type relocations.  These mark areas
	of interest to the linker.  ENTRY/EXIT relocations for SOM are
	an example of marker relocations.
	* write.c (write_relocs): Instead of assuming size of a relocation
	is 4 bytes, pick up the size from relocation itself.
	(fixup_segment): Do not complain that a value is too small for
	marker relocations.

	* struc-symbol.h: Add new "sy_used" field to the symbol structure.
	* expr.c (operand): Set sy_used for any symbol used as an operand.
	(expr): Likewise for any symbol used in an expression.
	* config/tc-hppa.h (tc_frob_symbol): Define.  Punt imported
	symbols which are never used and absolute symbols which local scope.

	* config/obj-som.h (obj_frob_file): Define.
	* config/obj-som.c (obj_som_init_stab_section): Set alignment
	of stab sections.  Make space for the special stab entry.
	(adjust_stab_sections): Adjust the special entry in the
	stabs section.
	(som_frob_file): New function.  Simply calls adjust_stab_sections
	for each section.

Mon Nov  1 17:54:29 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (PIC_CALL_REG, SP, FP): Define.
	(mips_pic, mips_cprestore_offset): New static variables.
	(md_pseudo_table): Handle .abicalls, .cpload, and .cprestore.
	Ignore .bgnb and .endb.
	(gp_reference): _gp_disp is never addressed off GP.
	(macro_build): Ignore macros while searching for insn.  For cases
	i, j, and o, accept the reloc type as an argument rather than
	assuming BFD_RELOC_LO16.  Don't try to convert BFD_RELOC_LO16 to
	BFD_RELOC_MIPS_GPREL.  Added new case a.
	(set_at, load_register, macro): Changed calls to macro_build to
	pass new argument for i, j and o cases.
	(macro): Handle M_JAL_1, M_JAL_2 and M_JAL_A.  These require
	special handling when generating SVR4 PIC code.
	(mips_ip, tc_get_register, s_frame): Use macros FP, SP, GP and AT
	rather than hard coded constants.
	(md_apply_fix): Handle BFD_RELOC_MIPS_LITERAL and
	BFD_RELOC_MIPS_CALL16.
	(s_option): Set mips_pic based on .option picN.
	(s_abicalls): New function; set mips_pic to 2.
	(s_cpload): New function; handle .cpload.
	(s_cprestore): New function; handle .cprestore.

	* config/obj-ecoff.c (obj_pseudo_table): Add entries for .bgnb,
	.endb and .verstamp, setting them to s_ignore.

Sun Oct 31 00:36:40 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (subspace_dictionary_chain): Add new ssd_defined
	field.  Define SUBSPACE_DEFINED accessor macro.
	(pa_subspace): Allow user to override subspace attributes for
	built-in subspaces.  Set ssd_defined at the end of fcn -- that
	way the attributes can only be changed once.  Pass newly allocated
	name to is_defined_subspace, not a pointer to the input line.
	Fix typo in space/subspace rework.
	(is_defined_subspace): Delete unused 2nd arg.  All callers changed.

	* config/tc-hppa.c (pa_import): If currently in the text segment
	and a symbol is imported without type information, set BSF_FUNCTION
	for the symbol.
	* write.c (relax_and_size_seg): Correct test to determine if
	the section's size was rounded up.

	* config/obj-som.h (obj_set_symbol_type): Define a hook so GAS
	can properly set all the SOM symbol types.
	* config/tc-hppa.c (pa_symbol_type): New enum to represent the
	symbol types which can be set from an IMPORT/EXPORT statement.
	(pa_export_args): Set the pa_symbol_type type based on arguments.
	If defined, call obj_set_symbol_type to pass this information on
	to the BFD backend.

	* read.c (get_stab_string_offset): Set SEC_DEBUGGING for any
	stab section we make.
	(s_stab_generic): Likewise.

Sat Oct 30 14:26:20 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Allow backends to override the value of the fake label.
	* write.h (LOCAL_LABEL): Delete DOT_LABEL_PREFIX code.  Instead
	assume backends will define LOCAL_LABEL if anything other than
	'L' is used to denote a local label.
	(FAKE_LABEL_NAME): New macro.  Defines the default name used for
	the "fake" label.
	* expr.c (make_expr_symbol): Delete DOT_LABEL_PREFIX code
	and instead simply use the string defined by FAKE_LABEL_NAME.
	(operand): Likewise.
	* read.c (s_stab_generic): Likewise.
	* config/tc-hppa.h (FAKE_LABEL_NAME): Define as L$0\001 so it's
	known to be a local label.
	* config/tc-i386.h (DOT_LABEL_PREFIX): Delete.
	(LOCAL_LABEL, FAKE_LABEL_NAME): Define.
	* config/tc-m68k.h (DOT_LABEL_PREFIX): Delete.
	(LOCAL_LABEL, FAKE_LABEL_NAME): Define.
	* config/te-sco386.h (DOT_LABEL_PREFIX): Delete.
	(LOCAL_LABEL, FAKE_LABEL_NAME): Define.

	Rework space/subspace handling in PA code to fully support
	SOM spaces/subspaces.
	* config/tc-hppa.c (USE_ALIASES): New object-format dependent define
	to control the use of space/subspace name aliases.
	(update_subspace): Accept space chain entry for containing space
	as a new parameter.  All callers changed.
	(pa_get_label): Use current_space rather than pa_segment_to_space.
	(pa_define_label): Likewise.
	(pa_undefine_label): Likewise.
	(md_begin): Change into the (possibly modified) text_section.
	(pa_parse_space_stmt): Create a new segment/space if create_flag
	is true, and the space name is not one of the two predefined spaces.
	(pa_subspace): Use current_space rather than a lookup via
	pa_segment_to_space.  Reset BFD section flags as required by
	the .subspace directive.  Likewise for the section alignment.
	Pass the current space to update_subspace and create_new_subspace.
	(pa_spaces_begin): Only use space/subspace aliases if USE_ALIASES
	is true.  When not using aliases, create a BFD section for each
	subspace encountered.  When not using aliases replace the default
	text, data, and bss segments with new ones.
	(create_new_subspace): When not using aliases each subspace has a
	section/segment and subsegments are not needed, so set the subsegment
	to zero.

	* config/tc-hppa.c (pa_parse_space_stmt): If needed, call
	obj_set_section_attributes to pass space attributes to the
	BFD backend.
	(create_new_space): Likewise.
	(create_new_subspace): Likewise for subspace attributes using
	obj_set_subsection_attributes.
	(update_subspace): Likewise for subspace attributes using
	obj_set_subsection_attributes.

	* config/tc-hppa.c (pa_parse_space_stmt): Get segment and sort key
	for $TEXT$ and $PRIVATE$ from the default space structure.

	* config/tc-hppa.c (pa_export_args): Always set BSF_FUNCTION
	as appropriate for the given type.

	* config/tc-hppa.c (tc_gen_reloc): Preliminary stab at handling
	SOM relocations.

	* config/tc-hppa.c (pa_comm): Delete incorrect check for symbol
	redefinition.

	* config/obj-som.[ch]: New files for SOM support.  Note SOM
	support is not yet complete in GAS or BFD.

	* config/ho-hppabsd.h:  Delete IO* macros, they are defined in
	stdio.h.  Delete declaration of free.  Include stdlib.h, unistd.h,
	and string.h.

Fri Oct 29 13:26:12 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Allow backends to override the section names used for embedded
	stabs support.  Needed for SOM.
	* read.c (STAB_SECTION_NAME): Default the name of the stab section
	to ".stab".
	(STAB_STRING_SECTION_NAME): Likewise for the stab strings section.
	(get_stab_string_offset): Is now passed the full name for the
	stab string section rather than a name prefix.  All references
	changed.
	(s_stab_generic): New argument for the stab string section name.
	all references changed.
	(s_xstab): Append "str" to the stab section name to get the
	stab string section name.
	* config/obj-coffbfd.c (obj_coff_init_stab_section): Append "str"
	to stab section name to get the stab string section name.  Pass
	the full name of the stab string section to get_stab_string_offset.
	* config/obj-elf.c (obj_elf_init_stab_section): Likewise.

	* config/tc-hppa.c (md_begin): Disable "-R" option to fold
	textand data segments.  Warn user "-R" is unsupported on the
	PA.

Thu Oct 28 12:36:13 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/tc-hppa.c (md_pseudo_table): Default alignment is 8 for
	.align and .ALIGN directives.

	* config/tc-hppa.c (pa_space): Do not report an error for a .space
	directive which does not define a "well-known" space and does
	not include a space number as an argument.

	* config/tc-hppa.c (pa_def_subspaces): Correct initialization of the
	"defined", "loadable", "code_only" and "space_index" fields.
	(pa_def_spaces): Correct initialization of the "spnum", "defined",
	and "private" fields.

	* write.h (struct fix): Add new tc_fix_data field for the various
	backends to attach machine dependent fixup information to.
	* write.c (fix_new_internal): Initialize new tc_fix_data field.
	* config/tc-hppa.c (hppa_fix_struct): Delete unnecessary fix_fixP and
	fx_next fields.
	(hppa_find_hppa_fix): Delete unnecessary function.  Fix all
	callers to get HPPA fixup information from the tc_fix_data field
	in the GAS fixup.
	(hppa_fix_root): Delete unnecessary variable.
	(fix_new_hppa): Attach HPPA fixup data to the GAS fixup.

	* config/tc-hppa.c (pa_set_start_symbol); Delete unwanted
	function.  Fix all callers.
	(subspace_dictionary_chain): Delete unused ssd_start_sym field.

	* config/tc-hppa.c (hppa_fix_adjustable): New function to determine
	if a particular fixup is adjustable.
	* config/tc-hppa.h (tc_fix_adjustable): Call hppa_fix_adjustable to
	perform the real work.

	* config/tc-hppa.h (RELOC_EXPANSION_POSSIBLE): Move definition out
	of OBJ_XXX conditionals.
	(MAX_RELOC_EXPANSION): Likewise.

	* config/tc-hppa.c (log2): Renamed from is_power_of_2.  Fix all
	callers. Now returns log2 (N) for positive N which are an exact
	power of two or -1 for an error.

	* config/tc-hppa.c (pa_callinfo): Range check values provided for
	ENTRY_GR, ENTRY_FR and ENTRY_SR.  Properly adjust vaues before
	inserting them into the unwind table.

	* config/tc-hppa.c (NEEDS_FIXUP): Delete definition and all references.
	(hppa_gen_reloc_type): New object format dependent macro.
	(pa_ip): Delete tons of code which was either OBJ_SOM or OBJ_ELF
	conditional.  The code can (and will) be shared between SOM & ELF
	formats in the near future.
	(cons_fix_new_hppa, md_apply_fix_1): Likewise.
	(pa_build_unwind_subspace, process_exit, pa_exit): Likewise.
	(tc_gen_reloc): Use hppa_gen_reloc rather than an object format
	specific call.

	* config/tc-hppa.c (pa_comm): Set the segment for a common symbol
	to bfd_und_section.

	* config/obj-elf.h (obj_elf_version): Add extern prototype.

	* configure.in (hppa-*-bsd*): New configuration.
	BFD is always used for GAS generating SOM objects.

	* write.c (adjust_reloc_syms): Set sy_used_in_reloc if an
	adjustment is rejected by the target machine.

	* config/tc-hppa.c (pa_big_cons): Delete function and its
	declaration.  All callers changed to use pa_cons.

	* write.c (fixup_segment): Fix indention and open/close brace
	problem.

	From Pete Hoogenboom:
	* config/tc-hppa.c (md_atof): Return a NULL on success rather than
	an empty string.

	* config/tc-hppa.c (pa_parse_space_stmt): Advance
	input_line_poitner when an invalid argument is encountered.

Thu Oct 28 13:09:26 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-a29k.c (md_begin): When opcodes are mashed together in
	the table, require that the one without bit 0x1000000 set come
	first.  Require further that it be case 'b' or 'P'.  The a29k
	opcode table already meets these constraints.
	(machine_ip): When handling case 'i' or 'A', make sure that the
	appropriate opcode really exists by looking at the next entry in
	the opcode table.

Wed Oct 27 11:48:56 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-m68k.c (m68k_ip): Adjust offsets for PC relative
	fixups.  Add 6 for long 7.3 case, 2 for short 7.2 case.

	* config/obj-ecoff.c (obj_ecoff_ent): Ignore an optional number
	after a .ent directive.

	* config/tc-mips.c (mips_ip): Handle '>' case (shift amount
	between 32 and 63 for double shift instruction).  Do & 0x1f rather
	than % 32.
	(printInsn): Handle '>'.

Tue Oct 26 16:58:36 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-ns32k.c (tc_aout_fix_to_chars): Output the symbol
	number in the right place.  Untested.  Probably does not work for
	cross assembly.  From cagney@cs.adelaide.edu.au (Andrew Cagney).

	* config/tc-m68k.c (md_apply_fix_2): Error if a short branch uses
	an illegal offset of 0 or -1.

	* config/obj-elf.c (obj_elf_init_stab_section): Align .stab
	section to a longword boundary.

Tue Oct 26 10:24:31 1993  Ken Raeburn  (raeburn@cygnus.com)

	* Makefile.in (CHECKFLAGS): Pass down RUNTESTFLAGS.

	From Jeff Law:
	* config/tc-hppa.c (tc_gen_reloc): ELF32_HPPA_R_ADDEND ->
	HPPA_R_ADDEND.

Mon Oct 25 14:06:17 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Fix up membar argument handling.

Mon Oct 25 11:17:58 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* config/tc-sh.c (build_Mbytes): Write the relocs to the correct
	address. (md_assemble): Make error handling a bit more graceful.
	(md_apply_fix):  Don't warn on non aligned displacement.

	* config/tc-z8k.c (get_specific, built_bytes):  Understand all the
	aspects of lda.

Mon Oct 25 10:20:31 1993  Ken Raeburn  (raeburn@rover.cygnus.com)

	* doc/Makefile.in (install-info): Use "$<*" so VPATH will find
	as.info* even if they're in $(srcdir) (e.g., for FSF
	distributions).

	* write.c (write_relocs): For relocs that are pc_relative and
	pcrel_offset and not partial_inplace, adjust reloc->addend to
	compensate for a bfd_perform_relocation bug.

	* config/tc-sparc.h: Removed remaining non-BFD_ASSEMBLER code.
	* config/tc-sparc.c: Ditto.
	(tc_gen_reloc): Include fx_offset for pcrel fixups.

Sun Oct 24 16:49:00 1993  Jim Wilson  (wilson@x1.cygnus.com)

	* config/tc-mips.c (md_pseudo_table): Add dword pseudo op.

Fri Oct 22 20:40:56 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* messages.c: replaced all variables called Format with 'format',
	  for consistency throughout

	* configure.in: handle mips*- instead of mips, mips*el for little
	endian configurations

Fri Oct 22 14:45:49 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* input-scrub.c (physical_input_file, logical_input_file,
	physical_input_line, logical_input_line): Made static.
	(as_where): Return current file name and line number, don't print
	them out.
	* messages.c (as_show_where): New static function.  Other
	functions use it instead of as_where.
	(as_bad_internal): New static function.
	(as_bad): Use as_bad_internal.
	(as_bad_where): New function, like as_bad but taking a file name
	and line number.
	* as.h (as_bad_where): Declare.
	(as_where): Change prototype for new arguments.
	* write.h (fixS): Added fields fx_file and fx_line.
	* write.c (fix_new_internal): Save file and line number in fix.
	(fixup_segment): Use as_bad_where, not as_bad.
	* input-file.c (f_in, file_name): Made static.
	* cond.c (struct file_line): Just use file and line fields.
	(s_else): Use as_where and as_bad_where, not get_file_line and
	set_file_line.
	(get_file_line, set_file_line): Removed.
	* listing.c (listing_newline): Use as_where.
	* config/obj-coffbfd.c (obj_coff_init_stab_section): Use as_where.
	* config/obj-ecoff.c (add_file): Use as_where.
	* config/obj-elf.c (obj_elf_init_stab_section): Use as_where.
	* config/tc-m68k.c (md_apply_fix_2): Use as_bad_where.
	* config/tc-mips.c (tc_gen_reloc): Use as_bad_where, not assert.

Thu Oct 21 12:52:01 1993  Ken Raeburn  (raeburn@cygnus.com)

	* config/tc-m68k.h: Don't define REGISTER_PREFIX or
	OPTIONAL_REGISTER_PREFIX if either is already defined.

	* config/tc-m68k.c (m68k_ip): Delete some code in "#if 0".

	* configure.in: Set bfd_gas for all sparc targets.  Added facility
	for keeping or rejecting configurations still under development;
	default is to assume production environment, and reject configs
	still being worked on.  Mark Elf configurations (except sparc and
	i386) as developmental.  Deleted cases matching some generic names
	in favor of more specific names.  (E.g., when we get Alpha
	support, we'll still only support VMS for Vax.)

	* config/tc-sparc.h (md_end): New macro.
	* config/tc-sparc.c (md_end): Function deleted.
	(BFD_RELOC_*): Delete macros that used to help keep the non-bfd
	version compiling.  All sparc targets will use bfd now.
	* tc.h (md_end): Don't declare if it's defined as a macro.

	Changes from Jeff Law and Peter Hoogenboom:

	* read.c (next_char_of_string): Limit octal character constants to
	three digits.

	* config/tc-hppa.h: Major cleanup.  Use GNU-style comments.  Warn
	against placing additional object-file dependent code here.  Warn
	against contaminating all of GAS with the internals of tc-hppa.c
	through inclusion of tc-hppa.h.  Delete all forward declarations
	for functions only used within tc-hppa.c, likewise for structures,
	variables, and #defines.  Try to group OBJ_ELF and OBJ_SOM
	conditional code in a few small places.

	* config/tc-hppa.c: Major cleanup.  Use GNU-style comments.  Group
	structures, global variables, forward declarations together.
	Reduce (or in some cases eliminate) OBJ_ELF and OBJ_SOM
	conditional code -- try to group conditional code together
	into a few places.   Make all functions and variables which
	are only used within tc-hppa.c static.  PARAMize all functions.
	Add comments to functions.  Delete unused functions, variables,
	#defines, etc.  Delete unused members within structures.  Delete
	ldil;ble hacks -- it is believed they were installed to work
	around old gas bugs.   Avoid using mixed case for local
	functions, variables, and structures.  Fix formatting problems
	not found by GNU-indent.  Add FIXME notices for things which
	should be worked on the near future.  Delete lots of old
	useless (1.36 PA-SOM) code.

	* config/tc-hppa.c: (fix_new_hppa): Initialize the fx_r_type
	field of the fixS structure.  Needed to build unwind
	descriptors correctly.

	* write.c: (fixup_segment): Allow expressions such as
	sym1-sym2+const as long as sym2 is $global$.

	* write.c (adjust_reloc_syms): Provide a hook so that a target
	cpu configuration can reject certain relocation reductions.
	* config/tc-hppa.h (tc_fix_adjustable): New macro.  Only accept relocations
	which do not involve function symbols.

	* config/tc-hppa.h: Reindent with GNU-indent.  Delete references
	to OBJ_OSFROSE.  Fix typos (OBJ_SOME -> OBJ_SOM).  Delete unused
	STAB_FIXUP macro.
	* config/tc-hppa.c: Likewise.

	* config/tc-hppa.c (md_apply_fix_1): Use elf_symbol_type, instead
	of elf32_symbol_type.
	(pa_export_args): Likewise.
	(elf_hppa_final_processing): Likewise.
	(pa_desc): Do not call obj_elf_desc.  (Is pa_desc even needed
	anymore?)
	(hppa_tc_make_sections): Do not declare elf_get_symtab_map any
	ore.

	* config/tc-hppa.c: (md_section_align): Align all sections to
	a multiple of the section alignment rather than always a
	multiple of 8.

	* config/tc-hppa.c (hppa_tc_symbol): If the argument relocation
	bits are zero (eg they specify no relocations), then do not even
	bother adding their entries to thesymextn section.

Thu Oct 21 15:44:55 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-sparc.c (md_parse_option): Accept and ignore -sparc
	option, which is used by the SunOS make default .s.o rule.

Wed Oct 20 12:26:33 1993  Ken Raeburn  (raeburn@rover.cygnus.com)

	* config/tc-sparc.c (sparc_ip, label "immediate"): Convert relocs
	operating on upper 32 bits of immediate constants to lower-half
	relocs with adjusted constants.

Tue Oct 19 18:13:26 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-m68k.h (AOUT_MACHTYPE): Define to be external variable
	m68k_aout_machtype.
	* config/tc-m68k.c (omagic): Remove obsolete and unused variable.
	(m68k_aout_machtype): New variable, if OBJ_AOUT.
	(md_assemble): Initialize m68k_aout_machtype based on
	current_architecture, if OBJ_AOUT.
	(md_parse_option): Remove obsolete reference to omagic.

Thu Oct 14 16:51:00 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (md_pseudo_table): Ignore .livereg pseudo-op.
	(s_option): Ignore .option O* and .option pic*.
	(s_ent): Skip whitespace between symbol and optional digit.
	(my_getSmallExpression): Handle ($xx) correctly: assume 0($xx).

	* app.c (do_scrub_next_char): Always accept 'x' and 'X' as escape
	characters in state 6.
	* read.c (next_char_of_string): Accept \Xh* and \xh* where h* are
	hexadecimal digits.

	* config/tc-i386.c (md_apply_fix_1): Make cross segment calls work
	for ELF by hacking around bizarre bfd_perform_relocation behaviour
	that I don't dare change.

Thu Oct 14 11:33:25 1993  Michael Meissner  (meissner@osf.org)

	* config/tc-i386.c: (md_begin): Do not zero static arrays.  Don't
	call strchr for each character to see if it is a special char,
	instead add a second loop over special_chars.  Set alignment
	of text, data and bss sections to 4.
	(pi, te, pt, pe, ps): Add declarations so that DEBUG386 can be
	used again.
	(reloc): Don't return 8 and 16 bit non-PC relative relocations on
	ELF, since the ELF object format does not have these type of
	relocations.  Change the abort into as as_bad and return
	BFD_RELOC_NONE to silence compiler warnings.
	(md_assemble): Keep track of the instruction size.  Allow white
	space between the $ and the constant for compatibility with older
	gases and other assemblers.
	(i386_operand): Skip spaces between $ and expression.
	(tc_gen_reloc): Don't allow anything but 32 bit relocations on
	ELF.  Convert abort into an as_bad and assert into as_fatal.

Wed Oct 13 16:50:55 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-coffbfd.c (fixup_segment) [DIFF_EXPR_OK]: If
	sub_symbolP is in the current segment, convert to a PC-relative
	fixup and discard the symbol.

Wed Oct 13 14:00:02 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-ecoff.c (ecoff_build_symbols): Handle st_End symbol
	for st_StaticProc just like st_Proc.

	* write.c (relax_and_size_all_segments): Moved #endif for OBJ_BOUT
	so that OBJ_BOUT doesn't forget to adjust all the fragments in the
	.bss section.

Tue Oct 12 17:26:15 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c: If OBJ_ELF, include elf/mips.h.
	(mips_regmask_frag): New static variable, if OBJ_ELF.
	(md_begin): If OBJ_ELF, create .reginfo section and set
	mips_regmask_frag to a frag.
	(mips_elf_final_processing): New function, if OBJ_ELF.  Set
	mips_regmask_frag to register mask information.
	* config/tc-mips.h (elf_tc_final_processing): New macro, defined
	if OBJ_ELF.

Tue Oct 12 03:33:26 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* messages.c (as_fatal): Use myname when printing messages.

	* config/tc-i960.c (md_begin): Use null pointer, not empty string,
	as initial "return" value in case hashing isn't needed.

	* config/tc-a29k.c (md_atof): Return null, not empty string, on
	success.
	* config/tc-h8300.c (md_atof), config/tc-h8500.c (md_atof),
	config/tc-hppa.c (md_atof), config/tc-i860.c (md_atof),
	config/tc-i960.c (md_atof), config/tc-m88k.c (md_atof),
	config/tc-ns32k.c (md_atof), config/tc-sh.c (md_atof): Ditto.

Mon Oct 11 16:46:31 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	fix for pr 3571
	* config/tc-h8300.c (get_specific): Special action if 8 bit
	address seen. (check_operand): Don't complain if truncating top
	bits of an 8 bit address.  (build_bytes): Allow an immediate and
	an absolute in the same insn.

Mon Oct 11 17:18:51 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* write.c (write_contents): Don't crash if seginfo is NULL.

	* config/obj-ecoff.c (ecoff_frob_file): Write out register masks
	by modifying .reginfo section, not by directly modifying BFD
	backend data.

Mon Oct 11 14:11:32 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* config/ho-sunos.h: remove extern time declaration

Mon Oct 11 16:14:43 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* messages.c (as_fatal): Do mention that it's the assembler that
	got the fatal error.

Fri Oct  8 14:09:35 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_gprmask, mips_cprmask): New variables to
	hold register masks.
	(md_begin): Initialize them to zero.
	(append_insn): Update mips_gprmask and mips_cprmask.  Also add
	register variables pinfo and prev_pinfo.
	* config/tc-mips.h (mips_gprmask, mips_cprmask): Declare.
	* config/obj-ecoff.c (ecoff_frob_file): If TC_MIPS, set gprmask
	and cprmask from mips_gprmask and mips_cprmask.

	* config/tc-mips.h: Define TARGET_FORMAT if OBJ_ELF.
	* config/tc-mips.c (GPOPT): Define if OBJ_ECOFF or OBJ_ELF.
	(various): Change all references to GP references to apply if
	GPOPT, not if OBJ_ECOFF.
	(s_change_sec): Rearrange somewhat.  If OBJ_ELF, use .rodata
	instead of .rdata.  If OBJ_ELF, set section flags for .rodata and
	.sdata sections.
	(s_frame, s_loc, s_mask): Comment out entire functions, rather
	than just body.  They're not used anyhow.
	* configure.in: Set cpu_type to mips for mips*.  Accept
	mips-*-elfl* and mips-*-elf*.

Thu Oct  7 18:36:29 1993  Michael Meissner  (meissner@osf.org)

	* config/obj-elf.c (obj_elf_common): Allow the alignment field to
	not be specified.

Wed Oct  6 13:01:34 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (cons_fix_new_mips): New function.  Turn
	BFD_RELOC_64 into BFD_RELOC_32.
	* config/tc-mips.h (TC_CONS_FIX_NEW): Define.
	(cons_fix_new_mips): Declare.

	Changes to let cons handle bignums like general expressions.
	* expr.h (expressionS): New field X_unsigned.
	* expr.c (operand): Initialize X_unsigned to 1.  Set it to 0 for
	unary minus case.
	(expr) Fix typo resultP to right if missing operand.  Set
	X_unsigned to 1 when building new expression.
	* read.c (potable): Make "octa" and "quad" call cons, not
	big_cons.
	(cons): Handle bignums.  If given an O_constant (small integer) to
	fill a big space, turn it into a bignum.
	(parse_bitfield_cons): Set X_unsigned field.
	(bignum_low, bignum_limit, bignum_high, grow_bignum, big_cons):
	Removed.
	* read.h (big_cons): Remove prototype.
	* symbols.c (resolve_symbol_value): Don't give a warning if a
	symbol in expr_section can not be resolved.
	(S_SET_VALUE): Clear X_unsigned.
	* write.c (write_object_file): If resolve_symbol_value failed on a
	symbol we are writing out, give a warning.
	* config/tc-h8500.c (parse_reglist): Set X_unsigned.
	* config/tc-hppa.c (md_pseudo_table): Change "octa" and "quad" to
	call pa_cons, not pa_big_cons.
	(pa_big_cons): Remove.
	* config/tc-hppa.h (pa_big_cons): Remove declaration.
	* config/tc-i960.c (md_pseudo_table): Change "quad" to call cons,
	not big_cons.

Tue Oct  5 10:53:36 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* doc/as.texinfo (Copying): new node, to handle the recent changes
	in the texinfo/gpl.texinfo file

Mon Oct  4 17:10:15 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* read.c (big_cons): Handle "0" correctly.

	* config/tc-mips.c (md_begin): Set target_big_endian correctly.

Mon Oct  4 15:37:57 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-m68k.c (m68k_ip): Mode 7.3 operand using PC should
	have pc-relative fixup.
	(md_parse_option): Move "-k" case down near "-pic" case.

	* configure.in: Alphabetize list of cpu type alternatives.  Enable
	OS values of "linux*elf*" and "linux*coff*" to select those
	formats, with linux emulation.  Don't bother checking for upper-
	or mixed-case versions of "ose".

Thu Sep 30 11:05:35 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* config/z8k.c (md_pseudo_table): add "unseg".

Wed Sep 29 16:15:11 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* config/m88k-opcode.h (m88k_opcodes): correct a few mistakes
	  found while extending the dissassembler.

Tue Sep 28 12:02:04 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* configure.in: Split i386 LynxOS out from other coff targets,
	add a specific Lynx emulation.
	Add m68k LynxOS target.
	* config/tc-i386.c: Define specific Lynx target format.
	* config/tc-m68k.c: Define specific Lynx target format.
	* config/te-lynx.h: New file.

	* config/obj-coffbfd.h: Don't set TARGET_FORMAT to be
	"coff-{i386,m68k}" if TARGET_FORMAT already defined.
	(INIT_STAB_SECTION): Define.
	* config/obj-coffbfd.c: Include <time.h>.
	(write_object_file): Look for .stab sections and call
	adjust_stab_section.
	(adjust_stab_section): New function, fills in the first symbol
	of a stab section with number of symbols and string table size.
	(obj_coff_init_stab_section): New function, creates the initial
	symbol for a stab section.

Mon Sep 27 15:21:55 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/atof-vax.c (md_atof): Return null on success instead of
	empty string.
	* config/atof-tahoe.c (md_atof): Ditto.
	* read.c (float_cons): Expect a null pointer for success, not an
	empty string.

	* hash.c (hash_insert, hash_jam, hash_grow): Return null pointer
	on success, instead of empty string.  All callers changed.

	* config/tc-vax.c: Use PARAMS in declarations.
	(vip_op): Use NULL instead of empty string for success in error
	and warning fields.

Sun Sep 26 23:45:29 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* expr.c (expr) [DIFF_EXPR_OK]: Permit subtraction of two symbols
	in different defined segments.

	* write.c (relax_segment): Localize "aim" variable.  If
	DIFF_EXPR_OK, don't impose checks on symbol segment types.
	(fixup_segment) [DIFF_EXPR_OK]: If sub_symbolP is in the current
	segment, convert to a PC-relative fixup and discard the symbol.

	* config/tc-m68k.c (flag_want_pic): New variable, mostly ignored.
	(md_parse_option) [TE_SUN3]: Set it for "-k".
	(m68k_ip): Generate proper fixup for mode 7.3.
	* config/tc-m68k.h (DIFF_EXPR_OK): Define.

Sat Sep 25 05:08:19 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-m68k.c (struct m68k_incant, getone, gettwo): Moved
	earlier in the file.
	(insop, add_exp): Now defined as functions, for readability.
	(insop): Now takes two arguments; callers changed.

Fri Sep 24 12:37:59 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* config/tc-m88k.c (get_o6): new function.
	  (get_bf, get_cmp, get_cnd, get_cr, get_fcr, get_imm16, get_reg,
	  get_vec9, getval, get_pcr, calcop, match_name): make static and
	  prototype.
	  (s_file): remove extraneous forward decl.
	  (md_begin): add const to retval decl.
	  (calcop): cope with instructions without arguments.  Handle 'o'
	  type argument, the o6 field of the prot insn.
	  (md_estimate_size_before_relax): return a dummy value.

	* config/m88k-opcode.h (m88k_opcodes): comment change; o6 field is
	  in bits 10 through 7.  flt.[dxs]s requires an r register in the
	  second argument.  New instruction lda.x.  New instruction muls
	  (alias for mul).

Fri Sep 24 13:43:30 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (distclean): Recurse like clean.
	* doc/Makefile.in (distclean): New target.

	* config/tc-mips.c (md_begin): Set BFD architecture and machine
	based on MIPS ISA level.

Thu Sep 23 17:58:58 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* as.c (main): "exhausted", not "exhuasted".

	* struc-symbol.h (struct symbol): Add sy_used_in_reloc field.
	* write.c (adjust_reloc_syms): Set sy_used_in_reloc.
	(write_object_file): Never strip symbols with sy_used_in_reloc
	set.

	* config/obj-elf.c (obj_elf_section): Rewrote to handle both
	Solaris and SVR4 style .section pseudo-ops.
	(obj_elf_ident): Set SEC_READONLY for .comment section.
	* config/tc-sparc.c (md_apply_fix): If this is ELF, and we're
	generating a reloc, don't apply a fix.

Thu Sep 23 13:16:58 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-coffbfd.c (relax_align): Now static.

Mon Sep 20 19:23:35 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* read.c (get_stab_string_offset): Make non-static.  Make
	arguments const.  Don't align strings to 4 byte boundaries.
	* read.h: Declare get_stab_string_offset.
	* config/obj-elf.c (obj_elf_section): Set SEC_ALLOC as well as
	SEC_LOAD for progbits section.
	(obj_elf_init_stab_section): New function.
	(adjust_stab_sections): Add casts to avoid warnings.
	* config/obj-elf.h (INIT_STAB_SECTION): Call
	obj_elf_init_stab_section.
	(OBJ_PROCESS_STAB): Removed definition.

Fri Sep 17 18:12:34 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-elf.h (S_GET_SIZE): Define.
	(obj_frob_forward_symbol): Define.
	* config/tc-i386.c (line_comment_chars): Initialize in all cases.

Thu Sep 16 14:23:08 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* tc.h: Declare tc_gen_reloc differently depending upon
	RELOC_EXPANSION_POSSIBLE.
	* config/obj-elf.c (obj_elf_section): Only set flags when first
	creating the section.

Wed Sep 15 12:15:53 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (append_insn): Don't swap a trap instruction
	with a branch.

Tue Sep 14 13:31:04 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-elf.c (obj_elf_data, obj_elf_text): New functions;
	set previous_section and previous_subsection and then call s_data
	and s_text, respectively.
	(obj_pseudo_table): Add data and text.
	(obj_elf_section): Add SEC_LOAD to default initialization of
	flags.  Treat .rodata1 like .rodata.  Set SEC_LOAD as well as
	SEC_ALLOC for "alloc" string.  Don't bother trying to find the
	section; just use subseg_new.

	* read.c (change_to_section): Removed.  This is now done by
	subseg_new.
	(get_stab_string_offset): Rearranged somewhat.  Create the section
	using subseg_new.  Store the string index in seg_info, rather than
	in a static variable.  Force the first string to be empty.  Use
	frag_more rather than FRAG_APPEND_1_CHAR.
	(s_stab_generic): Rewrote.
	* subsegs.h (segment_info_type): Added stabu union.
	* subsegs.c (subseg_new): Initialize stab_string_size to 0.
	* config/obj-aout.c: Don't include aout/stab_gnu.h.
	(obj_aout_stab, obj_aout_desc): Removed.
	(obj_pseudo_table): Removed desc and stabX entries.
	* config/obj-bout.c: Same changes as config/obj-aout.c.
	* config/obj-bout.h (S_SET_TYPE): Define.
	(tc_bout_fix_to_chars): Declare.
	* config/obj-coff.c (obj_coff_stab): Removed.
	(obj_pseudo_table): Removed desc and stabX entries.
	* config/obj-coff.h (SEPARATE_STAB_SECTIONS): Define.
	* config/obj-coffbfd.c (current_stab_symbol): Removed.
	* config/obj-coffbfd.h (obj_symbol_type): Removed n_strx, n_type,
	n_other, n_desc and n_value fields.
	(S_{S,G}ET_{OFFSET,OTHER,TYPE,DESC}): Removed.
	(MAKE_STAB_SYMBOL): Removed.
	* config/obj-ecoff.c (obj_ecoff_stab): Renamed to ecoff_stab.
	Changed arguments and removed parsing code.
	(obj_pseudo_table): Removed stabX entries.
	* config/obj-ecoff.h (ecoff_stab): Declare.
	(OBJ_PROCESS_STAB): Define.
	* config/obj-elf.c: Don't include aout/stab_gnu.h.
	(obj_elf_stab, obj_elf_xstab, obj_elf_desc,
	elf_stab_symbol_string, elf_stab_symbol, obj_elf_stab_generic):
	Removed.
	(obj_pseudo_table): Removed desc, stabX and xstabs entries.
	(obj_elf_version): Use subseg_new, not bfd_make_section.  Don't
	set SEC_LOAD for .note section.
	(adjust_stab_sections): Get frag pointer from seg_info, rather
	than looking through frags.
	* config/obj-elf.h (S_{S,G}ET_{OTHER,TYPE,DESC}): Removed.
	(SEPARATE_STAB_SECTIONS, INIT_STAB_SECTION, OBJ_PROCESS_STAB):
	Define.
	* config/obj-vms.c (obj_aout_stab): Removed.
	(obj_pseudo_table): Removed stabX entries.
	* config/obj-vms.h (S_SET_TYPE): Define.

	* as.h: Declare listing.
	* read.c: Don't declare listing.
	(emit_expr): Cast fix_new_exp argument.
	(parse_bitfield_cons): Correct printf format.
	* symbols.c (symbol_new): Add cast to avoid warning.
	* write.h: Declare text_last_frag and data_last_frag.
	* config/obj-bout.c (obj_bout_line): Added dummy argument.
	* config/obj-coffbfd.c: Add some casts to avoid warnings.
	* config/tc-a29k.c: Likewise.
	* config/tc-i960.c: Likewise.  Also fully bracket structure
	initializations, fix printf formats, and remove unused variables.

Mon Sep 13 16:48:38 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* read.c (s_desc): Only compile and use if S_SET_DESC is defined.
	* struc-symbol.h: Declare verify_symbol_chain and
	verify_symbol_chain_2 even if not SYMBOLS_NEED_BACKPOINTERS.
	* symbols.c (verify_symbol_chain): Removed useless expression.
	* write.c (headers, the_object_file): Only use if not
	BFD_ASSEMBLER and not BFD.
	(fixup_segment, cvs_frag_to_fill): Only use if BFD_ASSEMBLER or
	not BFD.
	(merge_data_into_text): Only use if BFD_ASSEMBLER or (not BFD and
	not OBJ_AOUT).
	* write.h: Declare relax_segment.
	* config/obj-coffbfd.c (stack_pop, stack_push, stack_init): Made
	static.
	(stack_top): Commented out, since it's not used.
	Fixed up pseudo-op functions to take an ignored int argument.
	(size_section): Added default BAD_CASE to switch.
	Changed bzero calls to memset.
	* config/obj-coffbfd.h (S_IS_LOCAL): Call strchr on S_GET_NAME
	(s), not on s itself.
	* config/tc-a29k.c (s_use): Take ignored int argument.  Only
	define if OBJ_COFF is not defined.
	* config/tc-i386.c: (fits_in_signed_byte, smallest_imm_type): Make
	argument signed again.
	* config/tc-m68k.c (s_bss, s_even, s_proc): Take ignored int
	argument.
	(m68k_ip): Fully bracket initialization of archs.
	Correct several formats for __LINE__ to be %d rather than %s.
	(init_table): Fully bracket initialization.
	Cast values larger than 0x7f assigned to fr_opcode to char.

	* subsegs.c: Renamed non-BFD_ASSEMBLER subseg_new to subseg_set.
	Wrote non-BFD_ASSEMBLER subseg_new.  Now subseg_new always takes a
	section name, and subseg_set always takes a segT.  Changed all
	callers as appropriate.
	* config/obj-coffbfd.c  (change_to_section): Renamed to
	obj_coff_add_segment.  Corrected.  Made callers use subseg_new.
	* config/obj-coffbfd.h (obj_segment_name, obj_add_segment):
	Define.

Mon Sep 13 13:15:03 1993  Doug Evans  (dje@canuck.cygnus.com)

	* config/tc-sparc.h (LOCAL_LABEL): Remove test for name[0] == 'L'.

Fri Sep 10 11:22:08 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-elf.h (S_SET_SIZE): Actually set the size.

	Gcc lint.
	* Added a number of casts to function calls.
	* app.c (do_scrub_begin), as.c (main), expr.c (integer_constant,
	operand, expr), read.c (read_begin, HANDLE_CONDITIONAL_ASSEMBLY,
	read_a_source_file, s_align_bytes, demand_empty_rest_of_line,
	ignore_rest_of_line, big_cons, is_it_end_of_statement, s_ignore),
	read.h (is_name_beginner, is_part_of_name), config/obj-elf.c
	(obj_elf_section), config/tc-i386.c (parse_register),
	config/tc-sparc.c (isoctal, s_proc): Cast char
	array indices to unsigned char.
	* app.c (process_escape): Make static.  Add prototype.  Change
	argument from char to int.
	* as.c: Include output-file.h for prototypes.  Comment out unused
	function got_sig.
	* Makefile.in (as.o): Depend on output-file.h.
	* as.h (BAD_CASE): Cast val argument to long, and use %ld.
	(pseudo_typeS): Add prototype to poc_handler field.
	(print_version_id): Add prototype.
	(xmalloc, xrealloc): Change size arguments to unsigned long.
	(do_scrub_next_char): Add prototypes for function arguments.
	(had_errors, had_warnings, scrub_from_file): Remove duplicate
	declarations.
	* atof-generic.c (atof_generic): Make size variables unsigned.
	* cond.c (ignore_input): Removed unused local variable ptr.
	* expr.c (floating_constant, integer_constant): Make static.  Add
	prototypes.
	* flonum-copy.c (flonum_copy): Make size variables unsigned.
	* frags.h: Add prototype for frag_init.
	* hash.h, hash.c: Change hash values from char * to PTR, make hash
	strings const, make returned error strings const char *.  Added
	prototypes for functions.
	* input-file.h, input-file.c (input_file_buffer_size): Return
	unsigned int.
	* input-scrub.c (buffer_length): Make unsigned.
	(input_scrub_push, input_scrub_pop): Make static.
	* listing.c (list_symbol_table): Cast sprintf argument to unsigned
	long and use %lx.  Print name of segment rather than address of
	structure.
	(listing_list, listing_title): Change argument to int.
	(listing_eject, listing_flags, listing_psize): Add int argument.
	* listing.h: Corresponding declaration changes.
	* obj.h (obj_emit_symbols): Rename prototype argument to avoid
	shadowing.
	* read.h: Change get_absolute_expression prototype to return
	offsetT.  Add prototype for next_char_of_string.  Various
	prototype changes.
	* read.c: Remove prototype for next_char_of_string.
	(pobegin): Make errtxt const.  Make new_length, tmp_len and num
	unsigned.
	(s_abort, s_align_ptwo, s_comm, s_data, s_app_line, s_fill,
	s_globl, s_lsym, s_org, s_set, s_text, s_desc): Add int argument.
	Change all callers.
	(s_comm): Change temp from valueT to offsetT.  Cast to long when
	printing and use %ld (only for error messages anyhow).
	(s_long, s_int): Remove unused functions.
	(cons): Change argument to int.
	(emit_expr): Use %lx when printing longs.
	(get_absolute_expression): Return offsetT, not long.
	(get_stab_string_offset): Comment out unless
	SEPARATE_STAB_SECTIONS.
	(s_stab_generic): Remove unused offset.  Define seg_is_new only
	if SEPARATE_STAB_SECTIONS.  Use toP only in local block.
	* struc-symbol.h (verify_symbol_chain_2): Add prototype.
	* symbols.c: Remove nested comment.
	(symbol_new): Rename value to valu.
	(colon): Use %ld and cast to long in error message.
	* symbols.h: Remove duplicate verify_symbol_chain declaration.
	* tc.h: Remove unused md_emit_relocations declaration.
	(tc_gen_reloc): Add declaration.
	* write.c (cvt_frag_to_fill): Change first argument name depending
	on BFD_ASSEMBLER.
	(write_relocs): Remove unused offset, frags.  Remove tc_gen_reloc
	declarations.  Make n unsigned.
	(write_contents): Remove unused i, n, relocs, fixp.  Rename frags
	to f to avoid shadowing.
	(write_object_file): Define fragP only if not BFD_ASSEMBLER or not
	WORKING_DOT_WORD.  Remove unused keep.  Only declare punt and
	punt_it if they will be used.  Make i and n unsigned.
	(fixup_segment): Cast to long and use %ld in error message.
	* xmalloc.c (xmalloc, xrealloc): Make size argument unsigned.
	* config/obj-aout.h: Remove nested comment.  Add prototype for
	obj_aout_frob_symbol.
	(obj_aout_line, obj_aout_desc): Add int argument.
	* config/obj-ecoff.c: Changed build routines to use an unsigned
	offset.
	(add_string): Make len unsigned long.
	(obj_ecoff_stab): Use %lu in error message.
	* config/obj-elf.c (obj_elf_common): Comment out unused label
	allocate_bss.
	(obj_elf_frob_symbol): Return 0 (currently broken).
	(obj_elf_desc, obj_elf_version, obj_elf_size, obj_elf_type,
	obj_elf_ident, obj_elf_weak, obj_elf_local, obj_elf_common,
	obj_elf_line, obj_elf_previous): Add int argument.
	(obj_elf_write_symbol_p): Make static.
	* config/obj-elf.h (obj_elf_write_symbol): Add prototype.
	* config/tc-hppa.h: Remove declarations of functions declared in
	read.h.
	* config/tc-i386.c (ENCODE_RELAX_STATE): Cast to relax_substateT.
	(s_bss): Add int argument.
	(fits_in_signed_byte, smallest_imm_type): Make argument unsigned.
	(dummy): Remove unused function.
	(md_assemble): Rename local o to op to avoid shadowing.
	(tc_gen_reloc): Rename local reloc to rel to avoid shadowing.
	* config/tc-m68k.c (s_data1, s_data2): Add int argument.
	* config/tc-mips.c (mips_ip, md_apply_fix): Cast to long and use
	%ld in error messages.
	* config/tc-sparc.c: Remove duplicate declarations.
	(getExpression): Rewrite condition to avoid empty conditional
	body.
	(s_reg, s_proc, s_reserve, s_common, s_seg, s_xword): Add int
	argument.

Thu Sep  9 17:10:00 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	Changes from Jeff Law:

	* config/tc-hppa.c (md_assemble): Fix typo.
	(pa_ip): Delete unused variables and labels.  Do not check for
	unsigned values being < 0, it can't happen.
	(is_same_frag): Return a value in recursive call case.
	(pa_callinfo): Delete unused variables and labels.
	(pa_comm): Likewise.
	(pa_copyright): Likewise.
	(pa_export): Likewise.
	(pa_import): Likewise.
	(pa_param): Likewise.
	(pa_space): Likewise.
	(pa_subspace): Likewise.

Thu Sep  9 15:05:34 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* read.c (get_stab_string_offset, s_stab_generic): If
	BFD_ASSEMBLER, call subseg_set rather than subseg_new.

Wed Sep  8 15:09:17 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-elf.c (obj_elf_section): Set SEC_LOAD when using
	default flag values.

Tue Sep  7 10:22:52 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* read.c: (change_to_section): Don't include body if not MANY_SECTIONS.

	* read.c: (s_stab, s_xstab, s_desc): New functions to parse
	various stab-related directives.
	* read.h: (s_stab, s_xstab, s_desc): New function prototypes.
	* write.c: (merge_data_into_text): Fix ifdef tangle.
	* config/obj-coffbfd.c (current_stab_symbol): Fake symbol
	for stab reader to use.
	* config/obj-coffbfdh.h (obj_symbol_type): Added fields for
	stab reader, macros to access.

Fri Sep  3 16:44:03 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-elf.h (elf_symbol): No longer special-cased on
	sparcv9, since elf_symbol_type is now independent of size.

	* config/obj-elf.h (elf_symbol): Fixed name of elf_symbol_type.

	* config/tc-hppa.h (struct default_subspace_dict, struct
	default_space_dict): Field "sort" is now unsigned char.

	* config/tc-hppa.c (pa_def_subspaces, pa_def_spaces): Align
	columns for easier reading.
	(bcmp, index): Deleted USG-specific definitions.  Should be dealt
	with in ho-*.h, or in libiberty.  Changed mention of index to
	strchr.
	(label_symbolP, label_symbol_defined, callinfo_found,
	within_entry_exit, exit_processing_complete, within_procedure,
	pa_def_subspaces, pa_def_spaces, pa_pseudo_op_moves_pc,
	label_symbols_rootP, pa_get_label, pa_label_is_defined,
	pa_undefine_label): Now static.
	(movers): Now const, in addition to pointing to const data.
	* config/tc-hppa.h (label_symbolS_rootP, pa_get_label,
	pa_label_is_defined, pa_undefine_label, pa_pseudo_op_moves_pc):
	Delete declarations.

	Merged more changes from Jeff Law and Pete Hoogenboom:

	* config/tc-hppa.c (pa_def_subspaces, pa_def_subspaces): Remove
	entries for .stab and .stabstr.

	* config/obj-elf.c: (elf_stab_symbol_string):  Set the
	SEC_LOAD attribute for the .stabstr section.
	(obj_elf_stab_generic):  Set the SEC_LOAD attribute for the
	.stab section.
	(obj_elf_stab_generic):  Change '#if 1' to '#if 0'.
	(obj_elf_stab_generic):  Incorrect byte count on call to
	md_number_to_chars function.

	* config/tc-hppa.c (hppa_tc_symbol): Static functions need
	argument relocation bits too.

	* config/tc-hppa.c (pa_stringer): Correctly handle escaping
	characters which should appear unaltered in the output string (for
	example an escaped double-quote).

	* config/tc-hppa.c (pa_parse_nonneg_cmpsub_cmpltr): Always
	initialize name.
	(pa_parse_neg_cmpsub_cmpltr): Likewise.
	(pa_parse_nonneg_add_cmpltr): Likewise.
	(pa_parse_neg_add_cmpltr): Likewise.

	* config/tc-hppa.h (parse_cons_expression_hppa): Remove prototype
	for now.
	(cons_fix_new_hppa): Likewise.
	* config/tc-hppa.c (md_apply_fix): Fix type of valp to match
	prototype.

	* config/tc-hppa.c: Include libhppa.h.

	* config/tc-hppa.h: Delete extern declarations of functions
	found in libhppa.h.

	* config/tc-hppa.c (pa_space): Rework to avoid unwanted #ifdef
	OBJ_ELF conditionals.
	* config/tc-hppa.h (LOCAL_LABEL): Correctly identify local labels
	on the PA.

Thu Sep  2 10:43:57 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (macro_build): Accept 'z', and ignore it.
	(macro): Use "z,s,t" for div instructions to match corresponding
	change in opcode table.
	(mips_ip): Added 'z'--must be zero register.

Wed Sep  1 15:56:42 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* write.c (write_relocs) [RELOC_EXPANSION_POSSIBLE]: Declare
	tc_gen_reloc correctly.

	* configure.in: Use "case" instead of "if" when possible.  Rewrote
	Makefile editing to reduce work done.  Treat "hppa*" as "hppa".

Wed Sep  1 12:19:07 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* config/obj-coffbfd.c (obj_coff_section): add 'd' as an alias for
	  section type of data.  'd' seems to be used for m88k.

Wed Aug 25 22:33:22 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_align, s_stringer, s_cons, s_float_cons,
	s_mips_space): Set insn_label to NULL to avoid changing it at the
	next .align statement.
	(append_insn): Don't swap jal with instruction that sets the
	register that jal sets.

Wed Aug 25 16:15:57 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* configure.in: recognize m88110.

Wed Aug 25 13:37:46 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	Merged changes from Pete Hoogenboom and Jeff Law at Utah:
	* config/tc-hppa.c (pa_build_unwind_subspace): SEC_ALLOC should
	not be on for .hppa_unwind.
	(md_pseudo_table): .PARAM and .param are valid pseudo-ops for GAS.
	(pa_param): New function to handle .PARAM directives.
	(pa_ip): Pass "isbranch" argument down to pa_parse_*_compltr
	functions.  Handle '|' for movb; allow movb,n.
	(pa_parse_nonneg_cmpsub_cmpltr): Delete old useless
	version.  Handle cases where no completer exists for
	comb,n or addb,n.
	(pa_parse_neg_cmpsub_cmpltr): Handle cases where no
	completer exists for comb,n or addb,n.  Make logic
	mirror that of pa_parse_nonneg_cmpsub_cmpltr.
	(pa_parse_nonneg_add_cmpltr): Likewise.
	(pa_parse_neg_add_cmpltr): Likewise.
	* config/tc-hppa.h (pa_param): Declare.

Tue Aug 24 15:41:35 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-hppa.c (hppa_tc_make_symextn_section): Now static.
	Added forward declaration.

	Merged changes from Pete Hoogenboom and Jeff Law at Utah:

	* config/obj-elf.c (elf_frob_file): Arguments were incorrect on
	call to elf_tc_make_sections.
	(obj_elf_version): A .note section shouldn't have the SEC_ALLOC
	attribute.

	* config/tc-hppa.c (hppa_tc_make_sections): Add some processing to
	handle symbol extension sections.

	* config/tc-hppa.c (pa_build_symextn_section): New function to
	create a symbol extension section.
	(pa_export_args): Make call to pa_build_symextn_section.
	(hppa_tc_symbol, hppa_tc_make_sections,
	hppa_tc_make_symextn_section): New functions.
	* config/tc-hppa.h: Update elf_tc_symbol and elf_tc_make_sections
	macros.

	* read.c (emit_expr): Place check for TC_CONS_FIX_NEW in the
	BFD_ASSEMBLER branch as well.

	* config/tc-hppa.h: If ELF is the target object format, define
	some ELF- and hppa-specific types and constants.

	* config/tc-hppa.c (getExpression): Fix a typo.

	* read.c (read_a_source_file): Use TC_EQUAL_IN_INSN to determine
	if a `=' is part of an instruction.
	(read_a_source_file): Handle case where end-of-line markers are
	also used within instructions.
	* config/tc-hppa.h (TC_EQUAL_IN_INSN, TC_EOL_IN_INSN): Define.

	* config/tc-hppa.c (md_apply_fix_1): Keep relocations for
	out-of-range branches/'calls using "bl" or calls which may need
	argument relocation stubs.  Do not need/keep relocations for
	conditional branches.
	(elf_hppa_final_processing): Fix calculation of function size.

	* config/obj-elf.c (obj_elf_version): Mark .note section as
	READONLY.

	* config/tc-hppa.c (parse_cons_expression_hppa): Pass exp, not the
	address of exp, to expression.
	(pa_build_unwind_subspace): Turn SEC_HAS_CONTENTS flag on.
	(md_apply_fix_1): Delete unwanted comments.
	(process_exit): Symbols marking the end of a function are always
	BSF_LOCAL.

	* config/tc-hppa.c: Include elf32-hppa.h from BFD tree.
	(pa_space): Declare and initialize gdb_section.

	* config/obj-elf.c (elf_frob_file): Change
	elf_tc_final_processing_hook to elf_tc_final_processing.

	* config/tc-hppa.c (fix_new_hppa): Fix argument list to match
	argument type declarations.
	(getExpression): Fix typo.
	(pa_export_args): Change elf_symbol_type to elf32_symbol_type.
	(elf_hppa_final_processing): Likewise.  Name changed from
	elf_hppa_final_processing_hook.
	(start_symbol_root, start_symbol_last): Deleted.

	* config/tc-hppa.h (TC_PARSE_CONS_EXPRESSION): Fix typo.

	* config/tc-hppa.h: Replace "symbolS" with "struct symbol" to
	avoid changing include ordering.

	* config/tc-hppa.c (pa_ip, case 'y'): Handle just like 't'.

Mon Aug 23 12:47:58 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (set_at): Added unsignedp argument.  Use
	load_register.
	(set_at_unsigned): Removed; changed callers to use set_at.
	(load_register): Removed unused ip argument.  Changed callers.
	(append_insn): Don't swap branch and branch likely.
	(macro_build): Handle 'u'.
	(load_register): Handle 64 bit constants.
	(macro): Added M_DABS, removed M_ABSU.  Numerous changes to
	support 64 bit constants.
	(mips_ip): Use hex constants in range checks for clarity.
	(md_number_to_chars): Support 8 byte values.

Fri Aug 20 16:50:59 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* config/tc-m88k.h: updated copyrights.
	  (TC_CONS_RELOC): declare to be RELOC_32.

Fri Aug 20 11:16:44 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_isa): New static variable.
	(md_begin): Initialize mips_isa based on TARGET_CPU.  Don't sanity
	check macros.  Set text alignment and GP size here.
	(md_assemble): Don't set text alignment and GP size here.
	(append_insn): Don't insert NOPs for load delays if mips_isa >= 2.
	Use the right mask and shift for WRITE_FPR_T and WRITE_FPR_S.  Add
	a NOP after a branch likely.
	(mips_emit_delays): Don't insert NOPS for load delays if mips_isa
	>= 2.
	(macro): Support r6000 and r4000 macros.
	(mips_ip): Check insn ISA level against mips_isa before using it.
	Added 'x' case for ignored register.
	(md_parse_option): Handle -mipsN and -mcpu=XX.

Fri Aug 20 01:26:52 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-i386.c (md_pseudo_table) [OBJ_ELF]: Handle ".zero".

Thu Aug 19 12:15:18 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c (s_local): Function moved and renamed...
	* config/obj-elf.c (obj_elf_local): ...to here.
	* config/tc-sparc.c (md_pseudo_table), config/obj-elf.c
	(obj_pseudo_table): Move handling of ".local".

	* tc.h (md_parse_option): Don't declare if defined as a macro.

	* config/tc-i386.h (NO_RELOC) [BFD_ASSEMBLER]: Define as
	BFD_RELOC_NONE.
	(md_parse_option): New macro, converted from function.
	* config/tc-i386.c (md_parse_option): Function deleted.
	(comment_chars) [OBJ_ELF]: Include "/".
	(line_comment_chars) [OBJ_ELF || TE_I386AIX]: Don't include "/".
	(md_assemble): Cast 0xe9 to char explicitly, to avoid compiler
	warning.
	(md_assemble, md_estimate_size_before_relax, md_create_long_jump):
	Call reloc for fix_new type, or use correct enumerator, instead of
	always using NO_RELOC.
	(i386_operand): Change "ifndef I386COFF" to "ifdef OBJ_AOUT" for
	tests for valid section.
	(md_convert_frag) [BFD_ASSEMBLER]: Compensate for frag start
	address.
	(md_apply_fix_1) [BFD_ASSEMBLER]: For pc-relative reloc with
	symbol, compensate for location of reloc.
	(reloc, BFD_RELOC_32, BFD_RELOC_32_PCREL) [!BFD_ASSEMBLER]: Define
	to return zero.

Wed Aug 18 16:51:29 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-elf.c: Undef NO_RELOC before including aout/aout64.h.
	(obj_elf_weak): New function.
	(obj_pseudo_table): Handle ".weak".
	(obj_elf_section): If section directive includes a string, ignore
	it for now.  Accept "progbits" flag.
	(obj_elf_type): Accept `@' before flag name.

	* write.c (relax_and_size_seg) [BFD_ASSEMBLER]: Get rid of `if(1)'
	condition.
	(fixup_segment) [BFD_ASSEMBLER]: Use bfd_is_com_section, rather
	than checking for bfd_com_section directly.
	(fixup_segment): Simplify range check.
	(fixup_segment) [OBJ_COFF && TC_I960]: Simplify cpp condition
	test.

	* symbols.h (S_SET_WEAK): Declare.
	* symbols.c (S_SET_WEAK): New function.
	(S_SET_EXTERNAL, S_CLEAR_EXTERNAL): Don't bother with BSF_EXPORT,
	it's not a separate flag any more.  Clear BSF_WEAK.

	* read.c (potable): Treat "string" like "asciz".

Wed Aug 18 15:30:29 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (append_insn): Don't swap branch instructions
	if .set nobopt or .set volatile.
	(gp_reference): .lit8 and .lit4 are accessed via the GP register.
	(macro): Added cases M_LI_S, M_LI_SS.  Fixed M_LI_D and M_LI_DD.
	(mips_ip): Added cases 'F', 'L', 'f', 'l' for floating point.
	* config/obj-ecoff.c: Renamed some variables to avoid shadow
	warnings.

Mon Aug 16 14:16:02 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* config/obj-coff.h (S_IS_COMMON): add missing backslash

	* configure.in (z8k-*-{coff,sim}): use coffbfd for this target

Thu Aug 12 11:47:58 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (mips_ip): Suggested by
	davidj@ICSI.Berkeley.EDU (David Johnson): Don't accept symbolic
	names for 'E' and 'G' argument types (coprocessor registers) and
	don't warn if $1 is used on the coprocessor.
	(macro): Handle M_{L,S}WC{0,2,3}_AB correctly.

Mon Aug  9 12:09:14 1993  Doug Evans  (dje@canuck.cygnus.com)

	* read.c (emit_expr): Use BFD_RELOC_16 for 2-byte values.
	* config/tc-sparc.c (md_apply_fix, tc_gen_reloc): Handle
	BFD_RELOC_16.
	* config/tc-sparc.h (WORKING_DOT_WORD): Define.

Mon Aug  9 13:36:22 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* write.c (merge_data_into_text): Define only if BFD_ASSEMBLER is
	defined or BFD is not.
	(relax_and_size_all_segments): Declare local variable fragP.

Fri Aug  6 15:22:53 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c (md_apply_fix, case BFD_RELOC_32): Fill in
	bytes with real values, not zeros.

Fri Aug  6 10:57:59 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in (mips-*-riscos*, mips-*-sysv*): New (untested)
	targets, using ecoff and mips-big.

	* config/tc-mips.c (mips_ip): From davidj@ICSI.Berkeley.EDU (David
	Johnson): Added case for 'C' for coprocessor instruction codes.

Thu Aug  5 13:08:56 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c (md_apply_fix, case BFD_RELOC_64): Fill in
	bytes with real values, not zeros.
	(md_pseudo_table): Call cons for .uaxword.

	* config/obj-elf.c (obj_pseudo_table): Handle ".8byte".

	* read.c (emit_expr): Use BFD_RELOC_64 for 8-byte expressions.

	* write.c (write_object_file): Test DEBUG_SYMS instead of DEBUG
	for verifying symbol chain.
	(merge_data_into_text, relax_and_size_all_segments): New
	functions, split out from write_object_file.

Tue Aug  3 15:43:55 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-elf.c (obj_elf_stab_generic, in disabled code): If
	debug section is new, allocate an extra 12 bytes at its start.  If
	".stabs" type is N_SO, fill in filename symbol field of that first
	entry.  Return early if "goof", to simplify later code slightly.
	(adjust_stab_sections): New function.
	(elf_frob_file): Apply adjust_stab_sections to each section.

	* config/obj-elf.c (obj_elf_section, obj_elf_previous): No longer
	static.
	* config/obj-elf.h (obj_elf_section, obj_elf_previous): Declare.
	* config/tc-sparc.c (md_pseudo_table): Call them for "pushsection"
	and "popsection", and call cons for "uaword" and "uahalf".

	* config/obj-elf.c (obj_elf_version): Use English in error
	messages.

Tue Aug  3 11:29:06 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-ecoff.c: Updated for BFD ECOFF changes.  Now gets the
	swapping routines and external structure sizes via the
	ecoff_backend information.  No longer includes coff/mips.h.

Mon Aug  2 17:35:48 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-ecoff.c (get_tag): Save tag name in permanent memory
	and in hash_ptr->string.

	* app.c (do_scrub_next_char): Reset state to 0 after .appline if
	file name is not seen.

Mon Aug  2 11:51:41 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c (md_apply_fix, case BFD_RELOC_64): New case,
	parallel to BFD_RELOC_32.
	(tc_gen_reloc): Accept BFD_RELOC_64.

Thu Jul 29 22:21:28 1993  Ian Lance Taylor  (ian@cygnus.com)

	* write.c: Don't use short int in a prototype.

	* expr.c (operand): Make return value simply depend on contents of
	returned expression.

Thu Jul 29 18:38:37 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* configure.in: sparc*-aout and sparc*-vxworks are BFD assemblers

Thu Jul 29 18:38:37 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* config/ho-sunos.h: remove some old function decls that conflict
	w/ ANSI, and which weren't needed anyway

Wed Jul 28 16:34:55 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-elf.h (obj_frob_symbol): Renamed from tc_frob_symbol,
	and disabled since it breaks Ian's new symbol-value code.

	* expr.c (integer_constant): Accept more digits if BFD64.

Wed Jul 28 11:30:05 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-m68k.c (m68k_ip): If we have a normal constant when we
	expect a bignum, turn it into a bignum.  Output extra zeroes
	before a short bignum, rather than after.

Tue Jul 27 15:54:27 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* symbols.c (symbol_new): Conditionalize verify_symbol_chain call
	on DEBUG_SYMS, not DEBUG.
	(symbol_remove): Likewise.
	(symbol_insert): Likewise.

Tue Jul 27 08:45:05 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-mips.c (mips_optimize): New static variable.
	(append_insn): If mips_optimize == 0, always insert NOP
	instructions.  If mips_optimize < 2, don't swap branches.
	(md_parse_option): If -Ox or -gx, set mips_optimize accordingly.

Mon Jul 26 18:02:43 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* Makefile.in (clean): if testsuite does not exist, then skip it.

Fri Jul 23 14:13:25 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-mips.c (prev_insn_unreordered,
	prev_prev_insn_unreordered): New static variables.
	(append_insn): Don't swap branch instruction if
	prev_prev_insn_unreordered (see comment).
	(mips_no_prev_insn): Clear the unreordered variables.
	(s_mipsset): When turning on reordering, set the unreordered
	variables.

Fri Jul 23 13:09:44 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-elf.c (obj_elf_section): Sections ".init" and ".fini"
	are also magic, and have special default flag settings.
	(obj_elf_frob_symbol): Since the return value from this function
	isn't used, don't bother calling obj_elf_write_symbol_p, since it
	doesn't accomplish anything else.

	* config/tc-sparc.c (md_section_align): Round up section size only
	for a.out format.

	* symbols.c: Don't define DEBUG by default.

Thu Jul 22 12:09:41 1993  Ian Lance Taylor  (ian@cygnus.com)

	* write.c (fix_new_exp): Handle a O_uminus expression.

	* expr.c (expr): Don't let absolute_section override
	undefined_section for the return value.

	* read.c (read_a_source_file): In NO_PSEUDO_DOT case, if we find a
	pseudo-op with a poc_handler field of NULL, ignore it and treat it
	as an instruction instead.
	* config/tc-m88k.c (md_pseudo_table): Add "set" with a NULL
	poc_handler field.

	* config/tc-h8500.c (md_begin): Use a local variable when
	initializing md_relax_table to avoid warnings about modifying a
	supposedly const data structure.

Thu Jul 22 10:58:51 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* config/obj-aout.c: Only include aout/aout64.h if BFD_ASSEMBLER
	is defined.

Wed Jul 21 17:32:02 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* configure.in (case ${host}):  Map *-*-sysv4* to gas_host=sysv.
	* configure.in (case ${generic_target}):  Add i[34]86-*-sysv4*
	case to set obj_format=elf.  Must go before i386-*-sysv* case that
	sets obj_format=coffbsd.  Add *-*-sysv4* to *-*-elf and
	*-*-solaris case, and move to before *-sysv* case that wants to
	set obj_format to coff.
	* config/tc-i386.c (i386_operand): Change all 'exp.X_op' to
	'exp->X_op'.
	* config/tc-i386.c (md_apply_fix):  Fix valp to be 'valueT *' for
	BFD_ASSEMBLER case.

Wed Jul 21 12:47:51 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-aout.c: Include aout/aout64.h.
	(obj_aout_frob_symbol): Set BSF_DEBUGGING for a constructor
	symbol, so that BFD doesn't tamper with the type.

	* read.c (read_a_source_file): If NO_PSEUDO_DOT is defined, look
	up opcodes as pseudo-ops even if they don't start with '.'.
	* config/tc-m88k.h (NO_PSEUDO_DOT): Define.
	* config/tc-m88k.c (md_assemble): Removed special pseudo-op
	handling.
	(md_apply_fix): Set fx_offset to the upper 16 bits of the reloc.
	Output the low 16 bits for RELOC_HI16, not the high 16 bits.
	* config/obj-coffbfd.c (do_relocs_for): If TC_M88K, set the
	r_offset field of the reloc to the fixup offset.
	(fixup_segments): If TC_M88K, don't warn about fixup overflows.
	* doc/as.texinfo: Minor updates.

Tue Jul 20 19:28:56 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Extensive changes to permit symbols to contain any expression
	type and to delay the computation of the expression until the
	value is actually needed.  This permits setting symbols to values
	calculated based on object code size.  Expressions were changed to
	no longer be in a section, to stop the overloading of segment and
	expression type that previously occurred.

	* as.c (big_section, pass1_section, diff_section, absent_section):
	Removed.
	(expr_section): Added (used for dummy symbols which hold
	intermediate expression values).
	(perform_an_assembly_pass): Create expr_section, do not create the
	sections now removed.
	* as.h (segT): Removed SEG_ABSENT, SEG_PASS1, SEG_BIG, and
	SEG_DIFFERENCE.  Added SEG_EXPR.
	(SEG_NORMAL): Corresponding changes.
	* subsegs.c (seg_name, subsegs_begin): Changed accordingly.
	* write.c (write_object_file): Ditto.
	* config/obj-aout.c (seg_N_TYPE): Ditto.
	* config/obj-bout.c (seg_N_TYPE): Ditto.
	* config/obj-coff.c (seg_N_TYPE): Ditto.
	* config/obj-coffbfd.c (seg_N_TYPE): Ditto.
	* config/obj-vms.c (seg_N_TYPE): Ditto.

	* expr.h (operatorT): Moved in from expr.c, added some values.
	(expressionS): Added X_op field, removed X_seg field; renamed
	X_subtract_symbol to X_op_symbol.
	* expr.c: Extensive changes to assign expression types rather than
	sections and to simplify the parsing.
	* write.c (fix_new_internal): New static function.
	(fix_new): Removed sub_symbol argument.
	(fix_new_exp): New function, takes expression argument.
	* write.h: Prototype changes for fix_new and fix_new_exp.
	* cond.c (s_if): Changed accordingly.
	* read.c (s_lsym, pseudo_set, emit_expr, parse_bitfield_cons,
	parse_repeat_cons, get_segmented_expression,
	get_known_segmented_expression, get_absolute_expression): Ditto.
	* symbols.c (resolve_symbol_value, S_GET_VALUE, S_SET_VALUE):
	Ditto.
	* write.c (write_object_file): Ditto.
	* config/obj-coff.c (obj_coff_def, obj_coff_val): Ditto.
	* config/obj-coffbfd.c (obj_coff_def, obj_coff_val,
	obj_coff_endef, yank_symbols): Ditto.
	* config/obj-elf.c (obj_elf_stab_generic, obj_elf_size): Ditto.
	* config/tc-a29k.c (md_assemble, parse_operand, machine_ip,
	print_insn, md_operand): Ditto.
	* config/tc-h8300.c (parse_exp, colonmod24, check_operand,
	do_a_fix_imm, build_bytes): Ditto.
	* config/tc-h8500.c (parse_exp, skip_colonthing, parse_reglist,
	get_specific, check, insert, md_convert_frag): Ditto.
	* config/tc-hppa.c (the_insn, fix_new_hppa, cons_fix_new_hppa,
	md_assemble, pa_ip, getExpression, getAbsoluteExpression,
	evaluateAbsolute, pa_build_unwind_subspace, pa_entry,
	process_exit): Ditto.
	* config/tc-hppa.h (STAB_FIXUP, is_DP_relative, is_PC_relative,
	is_complex): Ditto.
	* config/tc-i386.c (pe, md_assemble, i386_operand,
	md_estimate_size_before_relax, md_create_long_jump): Ditto.
	* config/tc-i860.c (md_assemble, getExpression, print_insn):
	Ditto.
	* config/tc-i960.c (parse_expr, subs, segs, md_convert_frag,
	get_cdisp, mem_fmt, parse_ldconst, relax_cobr, s_sysproc,
	i960_handle_align): Ditto.
	* config/tc-m68k.c (struct m68k_exp, struct m68k_it, seg, op,
	subs, add_fix, isvar, m68k_ip, md_assemble, md_convert_frag_1,
	md_estimate_size_before_relax, md_create_long_jump, get_num):
	Ditto.
	* config/tc-m88k.c (md_assemble, get_imm16, get_pcr,
	md_create_short_jump, md_create_long_jump): Ditto.
	* config/tc-mips.c (md_assemble, append_insn, gp_reference,
	macro_build, macro, my_getExpression): Ditto.  Also removed
	get_optional_absolute_expression; just use get_absolute_expression
	instead.
	* config/tc-ns32k.c (get_addr_mode, evaluate_expr, convert_iif,
	fix_new_ns32k, fix_new_ns32k_exp, cons_fix_new_ns32k): Ditto.
	* config/tc-ns32k.h (fix_new_ns32k prototype): Ditto.
	* config/tc-sh.c (parse_exp, check, insert, md_convert_frag):
	Ditto.
	* config/tc-sparc.c (md_assemble, sparc_ip, getExpression,
	print_insn): Ditto.
	* config/tc-tahoe.c (struct top, md_estimate_size_before_relax,
	tip_op, md_assemble): Ditto.
	* config/tc-vax.c (seg_of_operand, md_assemble,
	md_estimate_size_before_relax, md_create_long_jump): Ditto.
	* config/tc-z8k.c (parse_exp, check_operand, newfix): Ditto.

Tue Jul 20 12:17:16 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* configure.in: i386-lynx is the same as i386-coff

Mon Jul 19 15:21:20 1993  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* config/obj-elf.c (obj_elf_previous): New function.
	(previous_section, previous_subsection): New vars.
	(obj_elf_section): Save current place in case DWARF code wants us
	to pop back to it.  Handle unquoted section name as well as quoted
	section name.  Don't crash on invalid strings.
	(obj_pseudo_table): Handle new pseudos "previous", "2byte", and
	"4byte".

	* config/obj-elf.h: Don't include struc-symbol.h.
	(obj_elf_frob_symbol): Declare arg as struct symbol *.

	* config/tc-sparc.h (LOCAL_LABEL) [OBJ_ELF]: Local labels can start with
	"L" or "_.L_".

	* write.c (write_relocs): New function, split off from
	write_contents.  Use memset instead of bzero.
	(write_object_file): Apply write_relocs to each section before
	applying write_contents.

	* read.c (read_begin): Call obstack_begin with values closer to 1K
	multiples.
	(read_a_source_file, big_cons, float_cons): Use memcpy instead of
	bcopy.

Mon Jul 19 14:30:00 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/tc-m68k.c (m68k_ip_op): Don't decrement strend when
	calculating opP->isiz; this permits the expression size to be
	determined as well, later on.

	* expr.c (clean_up_expression): Don't cancel the subtraction of
	undefined symbols.

	* read.c (s_data), config/obj-coffbfd.c (obj_coff_data): If -R,
	switch to text section rather than data section.

Mon Jul 19 12:35:39 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-m68k.c (m68k_ip, case AINDX): Add 6 to operand
	expression (to take the pc-rel instruction itself into account)
	before using the expression, instead of after.

Fri Jul 16 08:56:04 1993  Ian Lance Taylor  (ian@cygnus.com)

	* read.c (float_cons): Simplified parsing logic.  If
	REPEAT_CONS_EXPRESSIONS is defined, accept a repeat count.

	* symbols.c (colon): Rather than a special case for TC_HPPA,
	use new macro tc_frob_label.
	* config/tc-hppa.h (tc_frob_label): Define.

	* config/tc-mips.c: Many changes to support simple assembler
	optimization.
	(insn_label, prev_insn, prev_prev_insn, dummy_opcode,
	prev_insn_valid, prev_insn_frag, prev_insn_where,
	prev_insn_fixp, prev_insn_is_delay_slot): New static
	variables.
	(insn_uses_reg, mips_no_prev_insn, mips_emit_delays,
	mips_align, s_stringer, s_mips_space): New static functions.
	(mips_define_label): New global function.
	(md_pseudo_table): For "ascii", "asciz", "asciiz", call
	s_stringer.  Changed argument to float_cons from 0 or 1 to 'f'
	or 'd'.  For "space" call s_mips_space.
	(md_begin): Call mips_no_prev_insn.
	(append_insn): Only insert necessary NOP instructions.
	(macro): Call mips_emit_delays before setting mips_noreorder.
	Increment and decrement mips_noreorder rather than using
	save_reorder_condition.  Don't bother to use noreorder in
	M_L_DOB and M_L_DAB, since append_insn will not insert a NOP.
	(md_atof): Handle floating point numbers correctly for both
	big and little endian targets.
	(s_align, s_cons): Call mips_align rather than frag_align.
	(s_change_seg, s_cons): Call mips_emit_delays.
	(s_float_cons): Let float_cons do the work.
	(s_mipsset): Call mips_emit_delays when setting noreorder.
	* config/tc-mips.h (tc_frob_label): Define to be
	mips_define_label.

	* config/obj-ecoff.c (ecoff_build_symbols, ecoff_build_procs,
	ecoff_frob_files): Consistently use S_GET_VALUE rather than
	bfd_asymbol_value.  Warn if taking difference of symbols in
	different segments.

Thu Jul 15 11:51:03 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/obj-ecoff.c (ecoff_frob_file): Discard all open scopes,
	with a warning.

	* config/obj-coffbfd.c (fixup_segment): If TC_M88K, don't adjust
	by md_pcrel_from if we are relocating against a symbol (we still
	need md_pcrel_from for a PC relative relocation within the same
	file).
	* config/tc-m88k.c (md_pcrel_from): Corrected return value.
	(omagic): Removed unused variable.

	* Preliminary support for m88k-coff.
	* configure.in (m88k-*-coff*): New target.  Use coffbfd and
	m88kcoff.
	* config/m88kcoff.mt: New file.
	* read.c (lex_type): New macro LEX_AT to set lex type of '@'.
	(pseudo_set): Handle difference of symbols in different fragments
	by saving the entire expression as the value of the symbol.
	* symbols.c (resolve_symbol_value): Resolve difference
	expressions.
	* config/obj-coffbfd.c (obj_pseudo_table): If TC_M88K, accept
	"sdef" as a synonym for "def".
	* config/obj-coffbfd.h: If TC_M88K, include coff/m88k.h and set
	TARGET_FORMAT.
	(S_IS_LOCAL): Any symbol which includes \001 in the name is local.
	* config/tc-m88k.c, config/tc-m88k.h: Numerous changes to bring
	m88k port up to date, and to add COFF support.

Wed Jul 14 15:09:32 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Removed sy_forward and replaced it with an undefined expression
	as the value of a symbol.
	* struc-symbol.h (struct symbol): Removed sy_forward field.  Added
	sy_resolved and sy_resolving single bit fields.
	* symbols.c (symbol_new): Don't initialize sy_forward field.
	(resolve_symbol_value): New function to adjust symbol value by
	fragment address, using recursion to resolve forward symbols.
	* symbols.h: Added prototype for new function.
	* read.c (pseudo_set): Set symbolP->sy_value to an undefined
	expression rather than setting symbolP->sy_forward.
	* write.c (write_object_file): Use resolve_symbol_value on
	symbols, keeping the common case (the old behaviour) inline.
	* config/obj-aout.c (obj_aout_frob_symbol): Removed sy_forward
	handling (subsumed by write.c change).
	* config/obj-coff.c, config/obj-coffbfd.c (obj_coff_val): Set
	sy_value rather than sy_forward.
	* config/obj-coffbfd.c (obj_coff_endef, yank_symbols): Check
	expression segment rather than sy_forward.
	(yank_symbols): Use resolve_symbol_value.
	(crawl_symbols): Removed extra pass over symbols.
	* config/obj-aout.c, config/obj-bout.c, config/obj-coff.c,
	config/obj-vms.c (obj_crawl_symbol_chain): Removed extra pass over
	symbols which handled sy_forward; use resolve_symbol_value
	instead.
	* config/obj-coff.h, config/obj-coffbfd.h (obj_frob_forward_symbol):
	Define.
	* config/obj-elf.c (obj_elf_stab_generic): Check expression
	segment rather than sy_forward.
	* config/obj-vms.c (VMS_Check_For_Main): Don't initialize
	sy_forward; do initialize sy_resolved and sy_resolving.
	* config/tc-hppa.h (STAB_FIXUP): Use sy_value, not sy_forward.

	* Changes to keep a full expression as the value of a symbol, not
	just a longword:
	* struc-symbol.h: New field sy_value.
	* as.h: Include expr.h before struc-symbol.h.
	* expr.h: Use struct symbol rather than symbolS.
	* symbols.c (S_GET_VALUE, S_SET_VALUE): Rewrote to retrieve value
	of sy_value field; compile unconditionally, not just if
	BFD_ASSEMBLER.
	* symbols.h: Compile S_{SG}ET_VALUE prototypes unconditionally.
	* write.c (write_object_file): Set BFD symbol value to gas symbol
	value.
	* config/obj-aout.h, config/obj-bout.h, config/obj-coff.h,
	config/obj-coffbfd.h, config/obj-generic.h, config/obj-vms.h
	(S_GET_VALUE, S_SET_VALUE): Removed macro definitions.
	* config/obj-ieee.c (S_GET_VALUE, S_SET_VALUE): Removed.
	* config/obj-coff.h, obj-coffbfd.h: Rewrote several macros to use
	S_GET_VALUE rather than ost_entry.n_value.
	* config/obj-aout.c (obj_symbol_to_chars), config/obj-bout.c
	(obj_symbol_to_chars), config/obj-coff.c (obj_symbol_to_chars),
	config/obj-coffbfd.c (symbol_to_chars): Get value to write out
	using S_GET_VALUE--don't assume it is already set.
	* config/obj-ieee.c (do_symbols): Set BFD symbol value to gas
	symbol value.
	* config/obj-vms.c (various): Don't assign directly to
	S_GET_VALUE; use S_SET_VALUE instead.

Wed Jul 14 09:35:23 1993  Doug Evans  (dje@canuck.cygnus.com)

	* configure.in: Make sparc64-*-aout* use bfd gas.

	* configure.in: Recognize h8300h.

Tue Jul 13 12:09:44 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* config/tc-h8500.c (line_comment_chars): Add hash.
	(parse_exp, skip_colonthing, build_bytes): Add support for
	R_H8500_HIGH16 relocation type.

Mon Jul 12 11:15:34 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)

	* config/obj-elf.c (obj_elf_section): Allow `@' to introduce an
	attribute name.  Handle `execinstr' attribute.

Mon Jul 12 07:22:28 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-mips.c (mips_ip): Don't warn on 'i' or 'j' mismatch if
	there is another alternative for the instruction.

Fri Jul  9 17:31:34 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* doc/as.texinfo: updates for H8/300H

Thu Jul  8 14:41:43 1993  Mark Eichin  (eichin@cygnus.com)

	* config/tc-i960.c (md_create_short_jump, md_create_long_jump,
	md_number_to_chars, md_section_align): Adjusted to use valueT,
	addressT, to match tc.h.

Thu Jul  8 14:15:05 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c (s_common): Revamp to handle both syntaxes,
	independent of format.

Thu Jul  8 07:25:25 1993  Doug Evans  (dje@canuck.cygnus.com)

	* config/tc-h8300.h (TC_CONS_RELOC): Use R_RELLONG if H8/300H.

Wed Jul  7 18:11:07 1993  david d `zoo' zuhn  (zoo at rtl.cygnus.com)

	* configure.in: define CROSS=-DCROSS_COMPILE if it is a cross
	build; also recognize h8300-*-coff

Wed Jul  7 10:21:24 1993  Ian Lance Taylor  (ian@cygnus.com)

	* symbols.c (fb_label_instance, fb_label_instance_inc): Don't dump
	core just because somebody uses a label before it is defined.

	* config/mips-opcode.h: Moved to opcode/mips.h.
	* config/tc-mips.c: Include opcode/mips.h rather than
	mips-opcode.h.
	(append_insn): An extra NOP is only needed after instructions
	which set HI or LO, not after instructions which read it.
	(macro_build, mips_ip): Support new 'E', 'G' and 'B' arguments.
	(macro): cfc1 and ctc1 now take "t,G" rather than "t,d".
	* config/tc-mips.h (struct mips_opcode): Don't define.
	* config/mips-big.mt, config/mips-lit.mt (TARG_CPU_DEPENDENTS):
	Set to $(srcdir)/../include/opcode/mips.h.

	Get the MIPS assembler up to speed with other gas changes:

	* config/obj-ecoff.c (ecoff_set_vma, ecoff_frob_symbol):
	Removed; don't change the symbol value.
	(ecoff_build_symbols, ecoff_build_procs, ecoff_frob_file): Use
	bfd_asymbol_value rather than S_GET_VALUE to include section
	vma in symbol value.
	(ecoff_frob_file): Ignore BSF_SECTION_SYM symbols, since ECOFF
	doesn't output them.  Set the vma of sections.
	* config/obj-ecoff.h: Don't define obj_frob_symbol.
	* config/tc-mips.c (tc_gen_reloc): Adjustment by section vma is no
	longer necessary.
	(various): use valueT rather than long.

Wed Jul  7 08:33:30 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.h (ENV64): Define for v9.

	* config/tc-sparc.c (s_xword): For numbers, call big_cons.
	(sparc_ip, md_apply_fix, tc_gen_reloc): Handle some sparc64
	relocation types.
	(md_number_to_chars): Handle 8-byte value.

	* config/obj-elf.h (elf_symbol): For v9, use 64-bit symbol type.

	* as.h (valueT): Typedef moved here.
	* struc-symbol.h (valueT): ...from here.
	* write.c (write_object_file): Locals from_addr, to_addr,
	table_addr are now addressT.  Supply prototype for bfd_alloc for
	now.
	(fixup_segment): Local add_number is now valueT.  Correct some
	range-checking bugs.
	(relax_align): Type `int' should be sufficient for the exponent.
	(fix_new): Argument offset is type offsetT.  Locals size and
	newsize are type valueT.
	* write.h (struct fix): Fields fx_offset and fx_addnumber are now
	type valueT.
	(fix_new): Fix prototype.
	* symbols.c (symbol_new): Symbol value is type valueT.
	(S_SET_VALUE, S_GET_VALUE): Likewise.
	(S_IS_*): Specify int return type explicitly.
	* symbols.h (symbol_new, S_GET_VALUE, S_SET_VALUE): Fixed
	prototypes.
	* read.c (s_comm): Values read are type valueT.
	* expr.h (expressionS): Field X_add_number is an offsetT.
	* tc.h (md_create_long_jump, md_create_short_jump,
	md_section_align): Addresses are now type addressT.
	(md_number_to_chars, md_apply_fix): Pass value as valueT.
	* config/tc-i386.c (md_create_short_jump, md_create_long_jump,
	md_number_to_chars, md_section_align): Adjusted.
	* config/tc-sparc.c (sparc_ip): Initialize `len' variable to make
	gcc shut up.
	(md_create_short_jump, md_create_long_jump, md_number_to_chars,
	md_section_align): Adjusted.

	* config/tc-sparc.c (s_reserve): Permit use for other than a.out
	format.
	(s_common): Handle Solaris-2 version.

	* config/ho-generic.h (free): Returns void if __STDC__.

	* config/obj-elf.h (obj_elf_frob_symbol, elf_frob_file,
	elf_file_symbol): Declare.

	* expr.c (floating_constant, integer_constant): Now return void.

Thu Jul  1 12:13:43 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in: Match on sparc*-fujitsu-none rather than
	sparclite*-fujitsu-none.

Wed Jun 30 11:12:02 1993  Ian Lance Taylor  (ian@cygnus.com)

	* read.c (cons): Conditionalize parsing of expression.  Move
	putting value into object file into separate function.  Separate
	out MRI and WANT_BITFIELDS cases into separate functions.
	(emit_expr): New function to write data into object file.
	Conditionalize on TC_CONS_FIX_NEW and TC_CONS_RELOC rather than on
	processor types.
	(parse_bitfield_cons): New function to parse bitfield expressions
	as used by i960 assemblers.  Only compiled if
	BITFIELD_CONS_EXPRESSIONS is defined.
	(parse_mri_cons): New function to parse MRI style strings.  Only
	compiled if MRI is defined.
	(parse_repeat_cons): New function to parse repeat counts.  Only
	compiled if REPEAT_CONS_EXPRESSIONS is defined.
	* read.h (emit_expr): Added declaration of new function.
	* config/tc-a29k.h (TC_CONS_RELOC): Define to be RELOC_32.
	* config/tc-h8300.h (TC_CONS_RELOC): Define to be R_RELWORD.
	* config/tc-hppa.c (parse_cons_expression_hppa): New function to
	parse a HPPA expression, rather than special case in cons
	function.
	(cons_fix_new_hppa): New function to emit an HPPA fixup, rather
	than special case in emit_expr function.
	* config/tc-hppa.h (TC_PARSE_CONS_EXPRESSION, TC_CONS_FIX_NEW):
	Define to use new functions from tc-hppa.c.
	* config/tc-i960.h (BITFIELD_CONS_EXPRESSIONS): Define.
	(WANT_BITFIELDS): Removed; now obsolete.
	* config/tc-mips.h (REPEAT_CONS_EXPRESSIONS): Define.
	* config/tc-ns32k.c (cons_fix_new_ns32k): New function to emit an
	NS32K fixup, rather than special case in emit_expr function.
	* config/tc-ns32k.h (TC_CONS_FIX_NEW): Define to be
	cons_fix_new_ns32k.  Also use PARAMS rather than checking
	__STDC__.
	* config/tc-sparc.h (TC_CONS_RELOC): Define to RELOC_32.

	* write.c (relax_and_size_seg, adjust_reloc_syms, write_contents):
	Don't core dump if gas has no information about a section.

Wed Jun 30 06:21:27 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c (md_begin): If sparcv9 is defined, reset
	current_architecture to v9 automatically.

	* config/tc-sparc.h (TARGET_FORMAT): Use elf64-sparc for v9.

	* config/tc-sparc64.h, config/tc-sparc64.c: New files.
	* configure.in: Use sparc64 cpu files for v9, and default to elf
	format.

	* write.c (relax_and_size_seg): Always fully process a section.
	Section size is last frag's (vm)address plus its size.  If no
	relocations are present, force SEC_RELOC flag clear.
	(dump_section_relocs): New debugging routine.
	(adjust_reloc_syms): New routine, broken out from write_contents.
	Don't adjust relocs that are already relative to section symbol.
	Look for obj_fix_adjustable macro to know what else to skip,
	instead of obj_write_symbol.  Look for section symbol stored in
	section information.
	(write_object_file): Map adjust_reloc_syms over all sections.
	(write_contents): Clear SEC_RELOC flag if no relocations are
	found.

	* as.h (__PTR_TO_INT, __INT_TO_PTR): New versions for Saber, to
	keep it quiet.

	* write.c (remove_subsegs): Don't define for BFD_ASSEMBLER.

Fri Jun 25 14:42:53 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* Makefile.in (all, dvi, info, install-info, clean-info): do not
	  echo recursion lines.
	  (install-info, clean-info): collapse into the dvi and info rule.

Fri Jun 25 10:47:24 1993  Doug Evans  (dje@canuck.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Remove support for %d/%q fp regs.
	All fp regs are now specified as %f.
	(priv_reg_table): fpq -> fq.

Fri Jun 25 03:43:06 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)

	* as.h (strstr): Disable declaration for now.
	(fprint_value, sprint_value): Declare.

	* subsegs.c (subseg_new_rest): Use memset to clear new frag.
	(subseg_new) [BFD_ASSEMBLER]: Initialize all seginfo fields.

	* expr.c (expr_part): Made sanity checks a.out-specific.
	(expr): Disabled sanity checks.

	* subsegs.h (segment_info_type) [BFD_ASSEMBLER]: Add field for
	section symbol.
	* subsegs.c (subseg_change): Initialize section symbol pointer
	when setting up a new section.

	* symbols.c (symbol_new) [BFD_ASSEMBLER]: Point BFD symbol's udata
	field back at gas symbol structure.

	* symbols.c (colon): Cast obstack_next_free value to char* before
	doing arithmetic on it.
	* subsegs.c (subseg_new_rest): Likewise.
	* as.h (frag_now_fix): Likewise.

	* config/obj-elf.c (elf_file_symbol): Use subseg_new instead of
	calling bfd_make_section_old_way directly, and call subseg_set
	instead of subseg_change.  Now returns void.
	(obj_elf_write_symbol): Only check local symbols for now.
	(elf_stab_symbol): Now static and void, and disabled until it
	works completely.
	(obj_elf_size): For expression values, fail silently for now.
	(obj_symbol_new_hook): Do nothing.

	* config/tc-sparc.c (tc_gen_reloc): Handle BFD_RELOC_SPARC_WDISP22
	relocation.
	(s_local) [OBJ_ELF]: New function.
	(md_pseudo_table) [OBJ_ELF]: Call it for "local".
	(s_common): Rearrange to handle Solaris .common pseudo, which may
	sometimes use bss space instead of common.
	* config/obj-elf.h (TARGET_SYMBOL_FIELDS): Add new `local' field.

Thu Jun 24 16:33:53 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: set host config to hpux for hppa*-hp-hpux

Thu Jun 24 13:35:06 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)

	* app.c (app_pop, app_push): Fix bug reported by Chris Arthur.

Tue Jun 22 01:04:23 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)

	* subsegs.c (subseg_new): Don't special-case a.out -R flag here.
	* config/obj-aout.c (s_sect): Do it here.

	* as.h (BAD_CASE): Don't make some lame compilers think we want
	substitution inside strings.

	* as.c (print_version_id): New function, split off from main.
	(main): Call it.
	* config/tc-sparc.c (md_parse_option) [OBJ_ELF]: Print version id
	for -V.  Ignore -Q and -s options for now.

Mon Jun 21 17:37:59 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: make installation & builds work again for crosses

Sun Jun 20 18:18:26 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)

	* listing.c (list_symbol_table): Rewrite to print wide (>32 bits)
	symbol values correctly.

	* write.c (write_object_file): Deleted unused variables.
	(fixup_segment): Use sprint_value.

	* messages.c (sprint_value, fprint_value): New routines.

	* config/obj-elf.c (elf_stab_symbol): Now returns void.
	(obj_elf_stab_generic): Fix typo in logic.

	* Makefile.in (INCLUDES): Look in ../bfd for bfd.h.

	* as.h (addressT, offsetT): New types, using BFD types if
	available.
	(relax_addressT, struct frag): Use them.
	* struc-symbol.h (valueT, struct broken_word): Likewise.

	* as.h (subseg_new) [BFD_ASSEMBLER]: Name argument is const.
	* subsegs.c (subseg_new) [BFD_ASSEMBLER]: Name argument is const.

Thu Jun 17 16:53:56 1993  david d `zoo' zuhn (zoo@cygnus.com)

	* Makefile.in: canonicalize install.sh; for use within
	this directory (and subdirs)

Sun Jun 20 02:34:04 1993  Ashley Saulsbury (ans@sics.se)

	* m88k-opcode.h : fixed tiny tiny mistake - xcr was incorrectly
	specified, should have both S1 and S2 fields identical
	If only finding the problem was as fast as fixing the bug !!!!

Tue Jun 15 16:01:57 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* write.c (write_contents): Do write out non-loadable sections.
	Debug sections can fall in this category.

	* read.c (s_app_file): Call elf_file_symbol for ELF files.
	* config/obj-elf.c (elf_file_symbol): New function.

	* config/obj-elf.c (elf_stab_symbol_string): Renamed from pa_...,
	added argument to specify section base name.
	(obj_elf_stab_generic): Renamed from ..._stab.  New argument
	specifies section base name.
	(obj_elf_stab): New function, calls obj_elf_stab_generic with
	".stab" as section base name.
	(obj_elf_xstab): New function, calls obj_elf_stab_generic.
	(obj_elf_type): Handle "object".  Use bitwise-or to merge in
	symbol flags rather than simply replacing, so global/local flags
	are preserved.
	(obj_elf_ident): Rewrite.

Tue Jun 15 17:03:25 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: remove parentdir support; use INSTALL_XFORM

Wed Jun  9 11:26:07 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-i386.c (md_pseudo_table): .align uses a power of two
	for any a.out target, not just Linux and 386BSD.
	* config/tc-i386.h (DOT_LABEL_PREFIX): Do not define for any a.out
	target.

Mon Jun  7 13:33:19 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-m88k.c: Don't include flonum.h, md.h, m88k.h.  They
	don't exist or duplicate other inclusions.

	* config/tc-vax.h (NO_RELOC): Define.

Mon Jun  7 09:55:03 1993  Doug Evans  (dje@canuck.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Fix parsing of asi number.
	Fix error message.

Sat Jun  5 19:32:52 1993  Torbjorn Granlund  (tege@nada.kth.se)

	* gas/config/m88k-opcode.h (m88k_opcodes): Add 88110 instructions.
	* gas/config/tc-m88k.c (get_reg): New arg reg_prefix.  Compare first
	char to reg_prefix instead of to 'r'.
	(calcop): Change calls to get_reg.
	(calcop): Handle new case 'x' to set reg_prefix.
	(calcop): Set reg_prefix to 'r' after each call to get_reg.
	(cmpslot): Add 88110 conditions.

	* gas/config/m88k-opcode.h: Swap cases for "rot" for consistency.

	* gas/config/tc-m88k.c (get_bf): Always restore input_line_pointer
	before returning.

	* gas/config/m88k-opcode.h (m88k_opcodes): Make equal mnemonics
	adjacent; mov.s and mov.d swapped.
	(m88k_opcodes): Fix typo `r2' -> `2'.

Fri Jun  4 15:59:31 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* config/h8300.c: Support for H8/300-H opcodes.

	* config/obj-coffbfd.c (w_strings): String table length is 4
	bytes, no matter what the host int size is.

	* configure.in (alpha-*-osf*): New.

Fri Jun  4 07:51:18 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in (mips-*-ecoffl*): New target; use ecoff and
	mips-lit.
	(mips-*-ecoff*): Added trailing '*'.

	* config/obj-ecoff.c (ecoff_build_procs): Force the adr of the
	first FDR in a file to be zero.

Thu Jun  3 14:09:59 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (VERSION): Jump to 2.1.4.

	* config/ho-hppabsd.h: New file, from Peter Hoogenboom.

	* config/tc-mips.c (md_assemble): Call bfd_set_gp_size only for
	ECOFF format.

Tue Jun  1 15:21:57 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-m68k.c (md_assemble): The 68040 cpu doesn't want a
	separate '851 mmu.

	* config/obj-elf.c, config/obj-elf.h: Update for new type, macro,
	and routine names.  Assuming 32 bits for now.

	* config/obj-elf.c (elf_frob_file): Look for macro
	elf_tc_final_processing_hook, instead of assuming a function
	always exists.
	* config/tc-hppa.c (elf_hppa_final_processing_hook): Renamed from
	tc_final_processing_hook.
	* config/tc-hppa.h (elf_tc_final_processing_hook): Use it.

	* config/tc-hppa.h (elf_tc_symbol, elf_tc_make_sections): Macros
	moved here from obj-elf.h.
	* config/obj-elf.h: Don't include CPU-specific header files.

Sun May 30 16:49:37 1993  Peter Hoogenboom  (hoogen@fast.cs.utah.edu)

	* configure.in: configurations should match on 'hppa*' not 'hppa'.

	* read.c: Add support for HPPA assembly language syntax (denoted
	with '#ifdef TC_HPPA').

	* symbols.c: Add support for HPPA assembly language syntax (denoted
	with '#ifdef TC_HPPA').

	* write.c (write_contents):  Add support for HPPA-style
	relocations.

	* config/obj-elf.c: Stab symbols weren't written properly.
	(obj_elf_version):
	(obj_elf_desc):
	(obj_elf_write_symbol):
	(obj_elf_write_symbol_p):
	(obj_elf_frob_symbol):
	(elf_stab_symbol):
	(elf_frob_file):

	* config/tc-hppa.c: Support for HPPA symbol extension sections.
	Remove some unused code.  Support for HPPA assembly language
	syntax.

	* app.c:

	* symbols.c:

	* config/obj-elf.h:
	(obj_write_symbol):
	(obj_frob_file):
	(elf_tc_symbol):
	(elf_tc_make_sections):

	* config/tc-hppa.h:

Sun May 30 21:44:45 1993  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config/obj-ecoff.c (obj_read_begin_hook, add_file): Assume
	hash_new will have succeeded if it returns.
	* config/tc-a29k.c (md_begin): Likewise.

	* config/tc-i386.c (tc_aout_fix_to_chars): Now nbytes_r_length is
	const.
	(mode_from_disp_size, opcode_suffic_to_type): Now inline under
	gcc.
	(fits_in_{signed,unsigned}_{byte,word}): Likewise.

	* expr.c: Delete register declarations; gcc ignores them anyways.

Fri May 28 19:03:32 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* hash.c (hash_new): Use xmalloc, since many callers don't check
	for failure.

Thu May 27 13:02:15 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* frags.c (zero_address_frag, bss_address_frag): These are
	external.

	* tc.h (md_reloc_size): This is const.
	* config/tc-{a29k,h8300,h8500,i386,i860,i960,m68k,ns32k,z8k}.c
	(md_reloc_size): Now const.

	* config/aout_gnu.h (enum machine_type, enum reloc_type): Delete
	trailing commas.
	* as.h (enum _segT): Ditto.

	* struc-symbol.h (N_TYPE_seg): This should be const.

Thu May 27 11:43:59 1993  Michael Meissner  (meissner@osf.org)

	* config/obj-ecoff.c (add_file): Cast file_name to char * in
	listing_source_file call.

	* config/obj-elf.c (elf_stab_symbol_string): Cast first argument
	of subseg_new call to eliminate const attribute.
	(obj_elf_stab): Ditto.
	(obj_symbol_new_hook): Cast first argument of bzero call to char *.

	* read.c (s_align_bytes): Properly record alignment.

	* expr.c (__): Undefine __ macro before use, since OSF/1 uses it
	for the prototype/no prototype macro.

	* as.c (got_sig): Don't do return ((SIGTY) 0), SIGTY might well be
	void.

	* as.h (relax_stateT enum): Delete trailing comma.

Thu May 27 11:07:50 1993  Ian Lance Taylor  (ian@cygnus.com)

	* app.c (do_scrub_begin): Let line_comment_chars override
	comment_chars.
	(do_scrub_next_char): If a line comment character is not at the
	start of a line, treat it as a comment character if it is one.
	For a CPP line comment use pseudo-op .appline rather than .line.
	* input-scrub.c (logical_input_line): Make int rather than
	unsigned.
	(input_scrub_push, input_scrub_begin): Initialize
	logical_input_line to -1 rather than 0.
	(bump_line_counters): Increment logical_input_line.
	(new_logical_line): If line_number is -2, decrement
	logical_input_line.
	(as_where): Use logical_input_line even if it is 0.
	* read.h (s_app_file prototype): Now takes an int argument.
	* read.c (potable): Make .appfile call s_app_file with 1.  New
	.appline pseudo-op calls s_app_line.
	(s_app_file): If .appfile, call new_logical_line with -2 to
	account for newline inserted by do_scrub_next_char.  If listing,
	call listing_source_file.
	(s_app_line): New function to handle fake pseudo-op .appline.
	* config/obj-coff.c (obj_pseudo_table): Make .appline call
	obj_coff_ln.
	(obj_coff_ln): Added argument to indicate whether .appline.
	* config/obj-coffbfd.c (obj_pseudo_table): Make .appline call
	obj_coff_ln.
	(obj_coff_ln): Added argument to indicate whether .appline.
	* config/tc-mips.c (s_file): Pass argument to s_app_file.

Tue May 25 11:59:07 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-bout.h (S_GET_VALUE): Removed unnecessary cast.

Thu May 20 19:14:24 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-m68k.c (md_apply_fix_2): Straighten out check for
	invalid values.

Wed May 19 07:33:17 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* config/tc-h5000.c (build_bytes): Understand @rd mode and build
	relocations correctly.

Mon May 17 15:06:26 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)

	* Makefile.in (FLAGS_TO_PASS): Leave out TEXI2DVI for now, because
	it's wrong.

	* config/tc-m68k.c (md_apply_fix_2): Apply range checks and warn
	if value is out of range.

	Patch from Minh Tran-Le:
	* config/tc-i386.c (i386_operand): For in/out port register used
	as base reg, include InOutPortReg in operand type.
	(MATCH): Accept overlap value of InOutPortReg.

Mon May 17 09:29:34 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-ecoff.c (add_file, obj_ecoff_loc, obj_ecoff_stab):
	Add calls to listing routines to produce combined source/assembler
	listings.
	(obj_ecoff_stab): Create a file pointer if none used yet.
	(ecoff_frob_file): Set symcount to correct value.

Fri May 14 06:53:33 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)

	* Makefile.in (VERSION): Bump to version 2.1, in preparation for
	release.

	* config/obj-aout.h (H_GET_HEADER_SIZE, H_SET_SYMBOL_TABLE_SIZE):
	Define in terms of constants, not C structure sizes.

	* config/tc-rs6000.c, config/tc-rs6000.h: Delete empty files.

Thu May 13 17:01:55 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-aout.c (obj_header_append): Don't define if it's
	defined as a macro.
	* config/obj-hp300.h (obj_header_append): Define it as a macro.
	* config/obj-hp300.c (hp300_header_append): New function.

	* Makefile.in (distclean): Don't bother cleaning up doc files;
	they aren't going to be in this directory.

Thu May 13 07:51:35 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-ecoff.c (ecoff_build_symbols): Handle absolute
	symbols.

	* tc.h (TC_COFF_SIZEMACHDEP): Don't define here.
	* config/tc-sh.h (TC_COFF_SIZEMACHDEP): Define here instead.

Mon May 10 06:01:12 1993  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config/obj-vms.c (VMS_Symbol_type_list): Don't bother with
	initialization.

	* configure.in (targets): Treat m68*-*-sysv* like m68k-*-coff.

Wed May  5 14:00:49 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-mips.c (macro): Correct floating point double word
	loads and stores for big endian target.

Wed May  5 08:39:21 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)

	* config/tc-i386.c: Replace SEG_* with *_section, fix up subseg_*
	calls.  Deleted some unused code.
	* config/obj-coff.c: Likewise.

	ELF support, mostly contributed by Utah:
	* config/obj-elf.c (obj_elf_section, obj_elf_stab, obj_elf_line,
	obj_elf_type): Rewrite.
	(obj_elf_frob_symbol, elf_stab_symbol_string, elf_stab_symbol,
	obj_elf_desc, obj_elf_version, obj_symbol_new_hook, obj_elf_size):
	New functions.
	(obj_elf_ident): Dummy.
	* config/obj-elf.h (FALSE, TRUE, S_*, tc_frob_symbol,
	TARGET_SYMBOL_FIELDS): New macros.
	(gdb_section): New variable decl.

	* config/tc-i386.c (md_atof): Return zero, not empty string, on
	success.

	BFD_ASSEMBLER conditional changes:
	* config/obj-coff.c (lineno_rootP, seg_N_TYPE, *_section_header):
	Don't define these.
	(SA_SET_SYM_ENDNDX, SA_SET_SYM_TAGNDX): New functions.
	(fetch_coff_debug_section): Ditto.
	(obj_coff_endef): Call fetch_coff_debug_section.
	(struct line_no): New type.
	(c_symbol_merge): New way for copying aux fields.
	(c_dot_file_symbol): Put symbol in absolute section, and set flag
	BSF_DEBUGGING.
	(function_lineoff): New symbol.
	(function_lineoff, text_lineno_number, our_lineno_number,
	lineno_lastP): Don't define.
	(c_line_new): Don't define.
	(obj_emit_lineno, obj_coff_endef): Use abort calls as, uh,
	placeholders, until
	line-number recording gets implemented.
	(obj_new_symbol_hook): New code for handling aux fields.
	(add_lineno, add_linesym): New functions.
	(obj_coff_ln): Call add_lineno, not c_line_new.
	(obj_coff_endef): New code for handling symbol names.  New lineno
	code.  Look for section name "*DEBUG*" for debugging section.
	(align, coff_check_file_symbols, obj_coff_section,
	coff_frob_file): New functions.
	* config/obj-coff.h: Reordered some includes.
	(BYTE_ORDERING, FILE_HEADER_MAGIC, seg_N_TYPE, N_TYPE_seg,
	DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE, AOUTHDR, AOUTHDRSIZE): Don't
	define these.
	(TARGET_SYMBOL_FIELDS, I960_SYM_FIELDS): New macros.
	(SYM_AUXENT): New macro (for non-BFD_ASSEMBLER too) for accessing
	aux entries.  Most SA_* macros now use it unconditionally.
	(S_*): Use `bsym' field, and access BFD private data.
	(SF_*): Use `sy_flags' symbol field for most of these.
	(H_*, object_headers, lineno, lineno_*P, OBJ_EMIT_LINENO): Don't
	define.
	(*_section_header): Don't define.
	* config/tc-i386.c (md_convert_frag, md_apply_fix): Changed
	interface.
	(tc_gen_reloc) [I386COFF]: New function.
	(tc_aout_fix_to_chars, tc_coff_fix2rtype): Don't define.
	* config/tc-i386.h (TARGET_ARCH, TARGET_BYTES_BIG_ENDIAN): New
	macros.

	* config/obj-coff.c (stack_init): Don't do assignments inside
	conditions.
	(obj_coff_def): Simplified handling of symbol name a bit.
	(tag_insert): Name argument is now pointer to CONST.
	(obj_crawl_symbol_chain): Commented out.

	* config/obj-coff.h: Use PARAMS macro in prototypes.

	* write.c (relax_and_size_seg) [BFD_ASSEMBLER]: Don't indirect
	through frchainP pointer if it is null.

	* configure.in: Warn if BFD mode is explicitly turned off but is
	required by specified target.
	(mips ecoff targets): Don't need to set bfd_gas here; it gets
	taken care of later.

	* config/obj-coffbfd.c (crawl_symbols): Don't clear sy_forward
	field.
	(yank_symbols): Merge symbols only if sy_forward is null.

	* config/tc-m68k.h (AOUT_MACHTYPE): Don't define if already
	defined.

	* tc.h (md_convert_frag) [BFD_ASSEMBLER]: Section arg is not
	pointer.
	* config/tc-m68k.c (md_convert_frag) [BFD_ASSEMBLER]: Ditto.

	* config/tc-sparc.h (LOCAL_LABEL) [OBJ_ELF]: Anything starting
	with "." is a local label.

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

	* config/te-linux.h, config/te-386bsd.h: New config files.
	* configure.in (i386-*-linux, i386-*-bsd): Use them.
	* config/tc-i386.h (TARGET_FORMAT): Select format based on target
	environment.
	(DOT_LABEL_PREFIX): Don't define for 386bsd or Linux.

Wed May  5 13:14:01 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-ecoff.c (init_file): Set fMerge to 0 since dbx seems
	to want it that way.
	(ecoff_build_symbols): Turn local st_Proc symbols into
	st_StaticProc symbols.  Set index field of external st_Proc and
	st_staticProc symbols correctly.
	* config/tc-mips.h (NO_LISTING): Don't define.  People might want
	listings.

Tue May  4 21:22:54 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-hp300.h, config/obj-hp300.c, config/te-hp300.h: New
	files.
	* configure.in (m68k-*-hpux): Use them.

	* config/obj-aout.c (obj_pre_write_hook): Use AOUT_VERSION if
	defined, otherwise zero.

	* config/aout_gnu.h (OMAGIC): Don't define if already defined.

Mon May  3 15:59:32 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Allow any abs expression as an
	address space number.

Wed Apr 28 19:11:22 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)

	* config/obj-aout.h (TARGET_DEFAULT): Don't default this at all.

	* config/tc-a29k.c: Include ctype.h.
	(define_some_regs): Added special-purpose registers for 29050.

	* config/tc-i386.c (comment_chars) [TE_I386AIX]: Include "/".

	* config/obj-coffbfd.c (fill_section): Don't set STYP_REG here.
	(change_to_section): Set it here instead.

Wed Apr 28 13:40:29 1993  Ian Lance Taylor  (ian@rtl.cygnus.com)

	* config/obj-ecoff.c (obj_symbol_new_hook): Make up a .file if one
	hasn't been seen yet.
	(add_ecoff_symbol): Don't refer to cur_file_ptr if it is NULL.

Mon Apr 26 18:29:05 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/tc-sh.c, config/tc-sh.h: New files supporting Hitachi
	SH.

Mon Apr 26 12:28:27 1993  Ian Lance Taylor  (ian@cygnus.com)

	* expr.c (operand): Fix unary plus operator (previously was the
	same as '~' operator!).

Wed Apr 21 00:20:11 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* write.c (cvt_frag_to_fill): Define even if BFD is defined.
	(write_object_file): Do define if BFD_ASSEMBLER.  Invoke
	obj_check_file_symbols if defined.  Call verify_symbol_chain_2
	instead of open-coding it.  Fix some bugs in patching up symbol
	chain.
	(relax_segment): Make some code we "ought to be able to" use for
	all targets no longer conditionalized on ns32k target; instead, do
	it always, and if the appropriate conditions fail, abort.

	* symbols.c (DEBUG): Enabled.
	(symbol_new): Make sure bfd_make_empty_symbol works.
	(verify_symbol_chain_2): New function; takes one symbol as
	argument, anywhere in the chain.
	(dollar_label*): Use default initializers.

	* as.c (perform_an_assembly_pass): Call md_begin here...
	(main): ...and not here.

	* config/tc-m68k.h (TARGET_FORMAT): Use a.out-sunos-big for a.out.
	(tc_frob_symbol): New macro: Get rid of symbols in reg_section.

	* config/tc-m68k.c (omagic): Don't define for BFD_ASSEMBLER.
	(add_fix, add_frag): Now functions instead of macros.
	(m68k_reg_parse, m68k_ip, md_estimate_size_before_relax, get_num,
	s_data1, s_data2, s_bss): Use new *_section names, for
	compatibility with BFD_ASSEMBLER mode; rewrite switch statements
	to handle non-integral segT.
	(tc_coff_fix2rtype, tc_aout_fix_to_chars,
	tc_coff_symbol_emit_hook): Don't define for BFD_ASSEMBLER.
	(tc_gen_reloc): New routine for BFD_ASSEMBLER.
	(md_apply_fix, md_apply_fix_2): Renamed old md_apply_fix to
	md_apply_fix_2; new md_apply_fix definition varies interface
	depending on BFD_ASSEMBLER.
	(md_convert_frag, md_convert_frag_1): Likewise.  Use new *_section
	names.

	* config/obj-vms.c: Include config.h.
	(version_string): Delete declaration.
	(Write_VMS_MHD_Records): Use GAS_VERSION instead.
	(vms_resolve_symbol_redef): New function, taken from VMS code in
	symbols.c.
	(_doprnt): Deleted.
	(VMS_Store_Struct, VMS_Def_Struct, VMS_Set_Struct,
	VMS_TBT_Block_End, get_VMS_time_on_unix, generate_suffix,
	VMS_Psect_Spec): Fixed to compile under traditional C.
	* config/obj-vms.h: Use PARAMS macro.
	(vms_resolve_symbol_redef): Declare.
	(RESOLVE_SYMBOL_REDEFINITION): New macro.
	* symbols.c (colon): Remove some VMS-specific code, look for
	RESOLVE_SYMBOL_REDEFINITION macro instead.

	* config/tc-m68k.c (m68k_ip): Don't try expanding DBcc
	instructions.

	* config/tc-i386.c: Reordered some functions so inlining might
	work.  Use PARAMS in function declarations.
	(reloc): New routine.
	(md_assemble): Rearrange switch statements to work with
	non-integral segT.

	* struc-symbol.h [BFD_ASSEMBLER]: Undefine
	SYMBOLS_NEED_BACKPOINTERS before defining it.

	* subsegs.c (subseg_new_rest): Now static.

	* read.c (pseudo_set): Better error message for difference of
	symbols in different frags.

	* Makefile.in (check): Pass down some new variables, indicating
	pathname or program name for cc, nm, objdump.

	* as.h (OUTPUT_FLAVOR): New macro.
	* config/tc-sparc.c (tc_gen_reloc): Use OUTPUT_FLAVOR.

	* configure.in: Initialize bfd_gas properly.  Warn that ELF
	support is incomplete.

Thu Apr 15 22:39:05 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* read.c (float_cons): Accept null pointer return from md_atof.
	* config/tc-m68k.c (md_atof): Return null for success.
	* config/tc-sparc.c (md_atof): Ditto.

Thu Apr 15 16:04:39 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* doc/as.texinfo: formatting and comment cleanups; show SPARC
	alternative options in same style as other machines; simplify some
	conditional use; include GPL as separate file (from texinfo dir)

	* doc/Makefile.in: (as.info) include directory containing GPL in
	makeinfo search path

	* doc/h8.texi: new file; conditional settings for GAS manual
	on Hitachi chips

Tue Apr 13 15:31:40 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* doc/as.texinfo: mention SPARC architecture options.

Fri Apr  9 17:43:11 1993  Ken Raeburn  (raeburn@cygnus.com)

	* configure.in: Rearranged whitespace in per-host/per-target
	sections.  Added hooks for dropping in HPPA support (not included
	yet).  Separate out overrides of variables based on target format
	and bfd-gas selection from actual target-specific commands.  Add
	error message for recognized but unsupported format name.

Fri Apr  9 09:05:47 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-ecoff.h (ecoff_build_lineno): Make ilineMax in
	symbolic header match cline in FDR; the native linker seems to
	want that.

Thu Apr  8 15:51:28 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* doc/Makefile.in: as.texinfo is in $(srcdir).  Use
	$(srcdir)/as.texinfo explicitly in several places

Thu Apr  8 15:15:02 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* doc/Makefile.in: update dvi, clean targets for new source
			   file structure

Thu Apr  8 12:52:46 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/ho-decstatn.h: Define BROKEN_ASSERT if not __GNUC__,
	rather than undefining know.
	* configure.in: Match ultrix*, not just ultrix.

Wed Apr  7 20:18:10 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* doc/as.texinfo: converted conditional markup to use new
	Texinfo facilities, avoiding m4.

	* doc/as-all.texinfo, all.m4, pretex.m4: deleted.

	* doc/Makefile.in: recast doc configuration to use a link to an
	included texinfo file.

	* doc/all.texi: settings for generic form of documentation.

Tue Apr  6 11:56:21 1993  Ian Lance Taylor  (ian@cygnus.com)

	* read.c (cons): Zero out frag when creating reloc.

Mon Apr  5 09:41:58 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-mips.c (gp_reference): Certain magic symbols can never
	be referenced off the GP register.

	* app.c (do_scrub_next_char): Handle states 9 and 10 correctly
	when dealing with characters of type LEX_IS_TWOCHAR_COMMENT_1ST,
	LEX_IS_STRINGQUOTE, and LEX_IS_ONECHAR_QUOTE.

	* config/te-irix.h: New file; irix needs a different LOCAL_LABEL
	definition from other MIPS targets.
	* configure.in (mips-*-irix): Use emulation irix.

Sun Apr  4 15:21:09 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/tc-h8500.c: Get relax size of branch instructions right,
	(get_operand): Parse @sp+ correctly.

Fri Apr  2 15:59:49 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* subsegs.h (segment_info_type) [BFD_ASSEMBLER]: Don't include
	COFF section header field.

	* configure.in: Print error message if host or target is not
	supported.

	* configure.in: If with-bfd-assembler, use obj-coff instead of
	obj-coffbfd.

	* config/ho-generic.h: Include string.h.

Fri Apr  2 08:54:57 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-mips.h (LOCAL_LABEL): Treat any label starting with
	'$' as local, for any object file format.

	* config/tc-mips.c (macro): Optimizations to branching code and a
	couple of bug fixes from ralphc@pyrps5.eng.pyramid.com (Ralph
	Campbell).

	* config/ho-irix.h: New file; if not gcc, define BROKEN_ASSERT.
	* configure.in (mips-sgi-irix*): Set gas_host to irix.

Wed Mar 31 17:53:54 1993  Ian Lance Taylor  (ian@cygnus.com)

	* subsegs.c (subseg_new): Set output_section of new section.
	* as.c (perform_an_assemly_pass): Don't set output_section here.
	* expr.c (expr_part, expr): Turn off section assertions for ECOFF,
	since it has additional sections.
	* read.c (s_lcomm): For MIPS ECOFF, put small objects in .sbss,
	not bss_section.
	* config/obj-ecoff.h (TARGET_SYMBOL_FIELDS): Added
	ecoff_undefined field.
	* config/obj-ecoff.c (obj_symbol_new_hook): Initialize
	ecoff_undefined field.
	(add_file): If using stabs, just output a stabs symbol rather than
	creating a new fdr.
	(obj_ecoff_begin, obj_ecoff_bend): Ignore line number by reading
	it with get_absolute_expression, rather than skipping it by hand.
	(obj_ecoff_loc): If using stabs, just output a stabs symbol rather
	than ECOFF line number information.
	(obj_ecoff_stab): Accept non-zero values for stabs line number.
	(ecoff_build_symbols): Set ifilesym correctly.  Set storage class
	to small, undefined and/or readonly sections if appropriate.
	Don't output symbol names containing \001 characters.
	(ecoff_frob_file): Make sure at least one fdr is output.
	* config/tc-mips.h: Define TC_MIPS.
	* config/tc-mips.c (g_switch_value): New static variable.
	(md_assemble): Set gp size of output BFD.
	(gp_reference): New function; returns 1 if expression can be
	accesssed via gp.  Always returns 0 if not using ECOFF.
	(macro_build): Convert BFD_RELOC_LO16 to BFD_RELOC_MIPS_GPREL if
	possible.
	(macro): Generate sequences using gp if possible.
	(md_parse_option): Ignore -EL and -EB.  Parse -G.
	(md_apply_fix): Added BFD_RELOC_MIPS_GPREL to ignored case.
	(s_change_sec): Handle .rdata and .sdata for ECOFF.
	(s_extern): Mark symbol as external.  Set ecoff_undefined field.

Tue Mar 30 10:11:41 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* output-file.c (output_file_create): Don't call as_perror for
	filename rejected by application.

	* as.c (main) [BFD_ASSEMBLER]: If errors occur, close and unlink
	the output file.

	* doc/as.texinfo: Don't use @value in node names for the moment;
	references don't appear to work right.

	* as.h (const, volatile): Put these definitions back, and use
	them.

	* doc/as.texinfo: First pass at using new texinfo features --
	variables, conditional tests.  Far from complete.

Mon Mar 29 16:05:40 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* read.c: Temporary hack to handle some 64-bit constants.  This
	should be redone later.
	(target_big_endian): Declare.
	(big_cons): If it's set, reverse order of bytes being copied.
	* config/tc-sparc.c (md_begin): Set target_big_endian.

	* read.c (s_ignore): Delete declaration of is_end_of_line.

	* config/obj-coffbfd.c (yank_symbols): Build list of file symbol
	forward pointers properly.

Mon Mar 29 13:47:33 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/obj-coffbfd.c (do_relocs_for): Fix bug where nrelocs
	wasn't being stored into scnhdr.
	* config/obj-coffbfd.h: Add prototype of s_get_segment.
	* read.c (TC_START_LABEL): Default definition.
	(read_a_source_file): Use TC_START_LABEL macro to work out
	if a label has been seen.

Mon Mar 29 12:56:56 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in: Set BFDDEF and BFDLIB at the top of Makefile, not
	the bottom (make expands variables in dependencies when the
	dependencies are read, not when they are used).

	* config/obj-coffbfd.c (fill_section): Don't set NOLOAD bit for
	a29k .bss section; the mondfe program doesn't like it.

Sun Mar 28 08:12:53 1993  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config/tc-m68k.c: Use PARAMS macro, and use CONST instead of
	const.
	(current_architecture): Don't need initializer.

Fri Mar 26 08:12:48 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* doc/none.m4: Define Z8000.
	* doc/Makefile.in (as-*.texinfo): Refer to $(srcdir).  Remove the
	texinfo file before recreating it.
	(TEXI2DVI): Need to set TEXINPUTS if "make as.dvi" is to work in
	this directory.
	(srcdir): Delete second, bogus definition.
	(as.info): Look for as-*.texinfo in current directory rather than
	in $(srcdir).
	(as.dvi): Ditto.
	(dvi): New rule.
	* doc/configure.in: Create links to all as-*.texinfo files in the
	source directory, if that's not the current directory.

	* configure.in (per-host):  Accept MIPS host with BSD version
	number.
	(per-target): Classify i486 as i386.  Use generic cpu_type instead
	of target_cpu in selecting format etc.

	* app.c (do_scrub_next_char): Use .appfile, not .app-file.
	* read.c (potable): Change .app-file to .appfile.

	* config/ho-decstatn.h: Renamed from ho-decstation.h.
	* configure.in: Adjusted.

	* config/obj-bfd-sunos.*: Unused; deleted.

	* Makefile.in (version.c, vers-stamp): Deleted.
	(config.h): Define GAS_VERSION.
	* as.c (version_string): Deleted declaration.
	(main): Look for GAS_VERSION instead.

	* doc/as.texinfo: Updated description of -a* (listing) options,
	and describe how to pass them through from gcc.

	* config/obj-coffbfd.c (do_relocs_for): Don't allocate storage or
	process relocs if there aren't any relocs to process.  Avoids
	malloc/free bug on SCO too.

	* as.h: Move local include files below system include files, to
	avoid some redefinition complaints on some systems.
	(const, volatile): Don't need these conditionally defined if we
	use CONST and VOLATILE from ansidecl.h.
	(seg_name): Use CONST, not const.

Fri Mar 26 10:22:04 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-mips.c: Reindented to GNU standards.

Thu Mar 25 08:59:14 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-coffbfd.c (do_relocs_for): Remove a29k special case.
	(fixup_segment): Add a29k special case; the linker is not prepared
	to see a segment offset here.

	* app.c (do_scrub_next_char): Added new state, 10, modifying state
	9 to only keep a space in between identifier characters.

Wed Mar 24 02:16:22 1993  david d `zoo' zuhn  (zoo at poseidon.cygnus.com)

	* Makefile.in: add dvi target; as-$(config).texinfo might live in
	srcdir, might be in objdir.

	* doc/Makefile.in: dvi depends on as.dvi

Mon Mar 22 23:59:13 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: add installcheck target

Mon Mar 22 16:25:57 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Add support for membar mask names.
	Add missing colons in prefetch error messages.  Add support for
	ASI names.

Mon Mar 22 10:19:00 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-mips.c (macro): Use $AT for any floating point load.

Sat Mar 20 12:50:51 1993  Ken Raeburn  (raeburn@urth.cygnus.com)

	* config/tc-m68k.c (m68k_ip): For operand type 'M', reject
	bignums, but don't emit error message.

Fri Mar 19 21:02:19 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* Makefile.in (targ-cpu.o): Depend on config.h.

Wed Mar 17 16:44:06 1993  Ian Lance Taylor  (ian@cygnus.com)

	* app.c (do_scrub_next_char): Added new state, 9, to avoid
	dropping a space immediately following an identifier.
	* expr.c, write.c: Rewrote assert expressions to not use multiple
	lines; I don't think that can be done portably.
	* config/tc-mips.c (macro): Use $AT if target register is zero in
	load instruction, which it can be for a floating point load.

Mon Mar 15 12:17:28 1993  Ian Lance Taylor  (ian@cygnus.com)

	* write.c (write_contents): Compute the relocs before writing out
	the section contents.
	* config/obj-ecoff.h, config/obj-ecoff.c: Numerous changes to get
	symbol table and values right.
	* config/tc-mips.h (LOCAL_LABEL): If OBJ_ECOFF, any label starting
	with $L is local.
	* config/tc-mips.c (tc_gen_reloc): If OBJ_ECOFF, adjust the addend
	by the section vma.

	* config/z8k.mt (TARG_CPU_DEPENDENTS): The relevant file is
	z8k-opc.h, not z8k.h.

	* config/obj-coffbfd.c (obj_coff_endef): Correct test for .bf
	symbol.

Fri Mar 12 18:33:36 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: recognize sparc-sun-solaris2* instead of -solaris2

Fri Mar 12 12:00:07 1993  Ian Lance Taylor  (ian@cygnus.com)

	* expr.c, write.c: Ultrix native 4.2 cc requires assert condition
	to be on a single line.

Thu Mar 11 17:56:22 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (config.h): Create file, writing out definitions of
	target cpu, alias, and canonical name.
	(ALL_CFLAGS): No longer define TARGET_CPU.

	* Makefile.in (check): Print a message, instead of quitting
	silently.

	* as.c (main): Don't catch any signals, for now.

	* version.c: Deleted.
	* Makefile.in: Generate it, putting in only the version number
	itself.
	(VERSION): New variable.
	* as.c: Include config.h.
	(main): Reformatted version string.  Include target alias.  Don't
	print if not requested (i.e., unknown -v argument).

	* as.c (stralloc): Deleted.
	(main): Call strdup instead.

	* configure.in: Handle all 68300 series chips.
	* config/tc-m68k.c: Include config.h.
	(md_assemble): Assume TARGET_CPU is defined.  Accept some 68300
	series cpus as defaults.
	(md_parse_option): Accept some m68300 series CPUs as defaults.

Wed Mar 10 17:41:16 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* as.c (EXIT_SUCCESS, EXIT_FAILURE): Define to normal values if
	not already defined.
	(main, got_sig): Use them.
	* config/ho-vms.h (EXIT_SUCCESS, EXIT_FAILURE): Reverse default
	values.

Tue Mar  9 07:40:06 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-ecoff.c, config/obj-ecoff.h: Preliminary ECOFF
	support.

	* config/tc-mips.h (TARGET_FORMAT): Define based on OBJ_AOUT vs.
	OBJ_ECOFF as well as TARGET_BYTES_*_ENDIAN.
	(struct loc, struct proc, struct file): Moved to tc-mips.c within
	#ifndef OBJ_ECOFF block, since ECOFF uses different versions.
	* config/tc-mips.c: Rearranged for ECOFF support.  Added
	prototypes for all static functions.  Moved existing minimal
	debugging format support info #ifndef OBJ_ECOFF blocks.
	(macro_build_lui): Eliminated sign_extend argument, because ECOFF
	does not support a non sign extended high 16 bits reloc.  Adjusted
	all callers accordingly.
	(tc_get_register): Renamed from get_register, and made non-static.

	* config/mips-big.mt, config/mips-lit.mt: New files.  Define
	TARGET_BYTES_BIG_ENDIAN and TARGET_BYTES_LITTLE_ENDIAN,
	respectively.
	* configure.in (mips-*-bsd*): Use gas_target mips-lit.
	(mips-*-ultrix*, mips-*-irix*, mips-*-ecoff): New targets, using
	obj_format ecoff and gas_target mips-lit or mips-big.

Tue Mar  9 07:43:01 1993  Ken Raeburn  (raeburn@cygnus.com)

	* version.c: Bump to version 2.0.1.

Tue Mar  9 07:40:06 1993  Ian Lance Taylor  (ian@cygnus.com)

	* write.c (chain_frchains_together): Check that seg_info (section)
	is not NULL.
	(write_object_file): Call obj_frob_file after setting the symbols,
	not before.

Tue Mar  9 00:00:00 1993  Ken Raeburn  (raeburn@cygnus.com)

	* Version 2.0 released.

Mon Mar  8 14:57:10 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-i386.h (TC_COUNT_RELOC): Look for fx_addsy only.

Fri Mar  5 09:05:55 1993  Ian Lance Taylor  (ian@cygnus.com)

	* read.h: Define stringer here.
	* read.c, config/obj-ieee.c, config/obj-tcm88k.c: Not any of these
	places.

Thu Mar  4 11:52:23 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* read.c (s_space): Multiply repeat count by mult, not fill.

Thu Mar  4 05:20:42 1993  Ken Raeburn  (raeburn@cygnus.com)

	* read.c: Include ctype.h.

Wed Mar  3 10:41:46 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	Patches from Eric Youngdale:
	* make-gas.com: Find obstack.obj if it's not in the current
	directory.
	* read.c (s_ignore): Don't declare is_end_of_line.  It's
	redundant, and triggers a VMS gcc compiler bug.

	* write.c (write_object_file): Macro SUB_SEGMENT_ALIGN now takes
	current segment as an argument.  (Ignored in all cases but VMS.)
	All callers and definitions changed.

Tue Mar  2 11:56:19 1993  Ian Lance Taylor  (ian@cygnus.com)

	* listing.c: Cleaned up a bit, added prototypes, made NO_LISTING
	case compile again.

Tue Mar  2 08:53:34 1993  Ken Raeburn  (raeburn@cygnus.com)

	* config/tc-m68k.c (isbyte): Accept all values from -255 to +255,
	so "~0x80" won't be rejected.

	* config/obj-elf.c: No longer include elf/reloc.h.
	(obj_elf_section): Set SEC_READONLY and SEC_CODE for text section.
	(obj_elf_stab, obj_elf_desc): Deleted do-nothing and commented-out
	routines.
	(obj_elf_xstab): New routine.
	(obj_elf_set_size): Call as_warn, not fprintf.  Pass desired
	argument to s_ignore.  Put "#if 0" around unused code.
	(obj_pseudo_table): Use s_ignore instead of do-nothing routines.
	Call elf_xstabs for .stabs and .xstabs operators.

	* config/tc-sparc.h (TARGET_FORMAT) [OBJ_ELF]: Now "elf32-sparc".

	* write.c (relax_and_size_seg): Set SEC_RELOC only if fixups are
	present.

	* configure.in: mips-bsd configuration was missing format spec.
	Should use aout.

	* Makefile.in (Makefile): Depends on configure.in.

	* config/tc-mips.c (append_insn): Don't check for alignment of
	frag in memory; alignment of instructions in section is a separate
	matter.

	* config/tc-mips.c (macro_build_lui): Fix some assumptions of ANSI
	C availability.

	* listing.h: Always provide function declarations, not macros, so
	pcc won't lose.

Tue Mar  2 00:50:43 1993  John Gilmore  (gnu@cygnus.com)

	* CONTRIBUTORS:  Update Gilmore entry.

Mon Mar  1 12:03:16 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* config/tc-sparc.c (sparc_ip):  Correctly assemble prefetch
	instructions.  Accept integer prefetch function numbers.

Wed Feb 24 14:58:19 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c (s_xword): Now call big_cons, so large
	constants are accepted, but symbolic values are not.  GCC will not
	generate the latter currently.

	* frags.c (frag_init): New function.
	(zero_address_frag, bss_address_frag): Now initialized at run
	time.
	* as.c (main): Call frag_init.

Wed Feb 24 10:32:42 1993  Ian Lance Taylor  (ian@cygnus.com)

	* app.c (do_scrub_next_char): In LEX_IS_LINE_COMMENT_START case:
	Don't unget ch2 if we didn't get it.

Wed Feb 24 04:14:07 1993  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* doc/Makefile.in (TEXIDIR): Updated for new layout.

	* config/tc-sparc.c (s_common): Add support for ELF version.
	(tc_gen_reloc) [BFD_ASSEMBLER]: New function.
	* config/tc-sparc.h (TARGET_ARCH, TARGET_FORMAT) [BFD_ASSEMBLER]:
	New macros.
	(md_convert_frag): New macro.

	* config/tc-m68k.c (m68k_ip): For PC-relative addressing of a
	symbol, fix the offset so "+2" isn't required.

	* config/tc-i960.c (line_comment_chars, line_separator_chars):
	Define as common/bss.
	(op_hash, reg_hash, areg_hash, iclasses_seen, br_cnt): Default C
	initializers are sufficient.

	* config/obj-aout.h [BFD_ASSEMBLER]: Include libaout.h from bfd.
	(TARGET_FORMAT) [BFD_ASSEMBLER]: Default to "a.out".
	(S_SET_*, S_GET_*, obj_frob_symbol) [BFD_ASSEMBLER]: New macros.
	(S_SET_TYPE) [!BFD_ASSEMBLER]: New macro.
	* config/obj-aout.c: Use PARAMS macro for declarations.  Remove
	"IGNORE_DEBUG" conditional, since both branches are identical.
	Use S_SET_TYPE, S_GET_TYPE, and S_GET_DESC instead of directly
	referencing symbol structure members.
	(obj_aout_frob_symbol) [BFD_ASSEMBLER]: New function.

	* as.h (struct frag): Reordered a couple of fields for better
	packing.

	* write.c (record_alignment) [BFD_ASSEMBLER]: Record it in the
	section info.
	(write_contents) [BFD_ASSEMBLER]: New function.
	(write_object_file) [BFD_ASSEMBLER]: Always handle -R here.  Call
	fix_new with BFD_RELOC_NONE instead of 0 or NO_RELOC.  Call
	obj_frob_file, obj_frob_symbol, tc_frob_symbol if defined.
	(fixup_segment): Make sure common-section symbols get treated the
	same as undefined symbols.
	(fix_new) [BFD_ASSEMBLER]: Argument r_type is of type
	bfd_reloc_code_real_type.  Use seg_fix_{root,tail}P derived from
	section info.
	* write.h (fix_new): Update prototype.

	* tc.h (md_operand, md_convert_frag, tc_headers_hook,
	md_section_align, md_undefined_symbol): Don't provide prototypes
	if these are defined as macros.
	(md_convert_frag) [BFD_ASSEMBLER]: BFD version needs bfd and
	section passed.

	* symbols.c (symbol_new): Argument NAME is now pointer to const.
	Simplified STRIP_UNDERSCORE code.  Remove assumptions about null
	pointers in freshly allocated storage.  [BFD_ASSEMBLER]: Get new
	BFD symbol.
	(colon): Display other/desc fields of redefined symbol only if
	S_GET_OTHER and S_GET_DESC are defined.
	(symbol_make): Argument NAME is now pointer to const.
	(symbol_find, symbol_find_base): Likewise.
	(S_IS_*, S_GET_*, S_SET_*) [BFD_ASSEMBLER]: New functions.
	* symbols.h: Fix prototypes for new const arguments.  Add
	prototypes for BFD_ASSEMBLER S_* functions.

	* subsegs.c (subseg_change) [BFD_ASSEMBLER]: BFD version of code
	for changing to an existing section.
	(subseg_new_rest) [BFD_ASSEMBLER]: Split off from subseg_new,
	called by subseg_new and subseg_set.
	(subseg_new) [BFD_ASSEMBLER]: Rewritten to change to new section,
	given section name and subseg number.
	(subseg_set) [BFD_ASSEMBLER]: New function; change to a possibly
	new section/subsection.

	* read.c: Don't include ctype.h.
	(cons) [BFD_ASSEMBLER]: For undefined symbols, use BFD_RELOC_32
	for now; should be machine-dependent.

	* configure.in: Accept *-*-elf and *-*-solaris* as ELF format
	targets, forcing BFD use.

Wed Feb 17 18:59:03 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c: Use PARAMS macro for static function
	declarations.  Use BFD_RELOC_ macros everywhere, with
	compatibility macros declared for non-BFD mode.
	(struct sparc_it) [BFD_ASSEMBLER]: Use bfd_reloc_code_real_type
	instead of enum reloc_type.
	(emit_sparc_reloc): Commented-out function deleted.
	(md_convert_frag): Deleted.
	(tc_aout_pre_write_hook): Don't define for BFD_ASSEMBLER.
	(md_apply_fix): Changed calling sequence (conditionally) for BFD
	version.
	* config/tc-sparc.h (md_convert_frag): New macro.

	* config/obj-aout.c (obj_aout_stab): Refer to undefined_section,
	not SEG_UNKNOWN.  Use S_SET_TYPE, S_GET_TYPE, S_GET_DESC instead
	of referencing fields directly.

	* write.c (cvt_frag_to_fill): New function; extracted from
	write_object_file.
	(write_object_file) [! BFD_ASSEMBLER]: Call it.
	(relax_and_size_seg) [BFD_ASSEMBLER]: New function; relax section
	and set its size and flags.

	* struc-symbol.h (struct symbol) [BFD_ASSEMBLER]: Replace some
	fields with BFD equivalents.  Turn on back-pointers, and add
	target-specific fields at end.

Thu Feb 11 09:20:37 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-coffbfd.c (fill_section): Don't set vaddr here.
	(write_object_file): Set it here instead, so that fixup_segment
	can see the correct value.

Mon Feb  8 13:56:17 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* write.c (write_object_file): Check for errors and warnings and
	bail out before processing contents.
	(chain_frchains_together_1): New function, does most of the work
	of remove_subsegs.
	(chain_frchains_together) [BFD_ASSEMBLER]: New function.
	(remove_subsegs) [! BFD]: Call it.
	(write_object_file) [BFD_ASSEMBLER]: Converted to use BFD
	structures and routines.

	* config/obj-elf.*: New files.

	* config/mips.mt, config/rs6000.mt: Deleted.

	* config/h8300.mt: Don't specify compiler here.

	* config/z8k.mt: The z8k code depends on the z8k opcode table,
	not the h8300 one.
	* config/tc-z8k.h: Comment fix.

	* write.c: Reordered some functions for better inlining.
	(fixup_segment): Linkrelax code is no longer conditional on
	TC_I960.

Thu Feb  4 12:45:16 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/{h8500.mt, config/tc-h8500.c, config/tc-h8500.h,
	config/obj-coffbfd.c, obj-coffbfd.h}: support for the H8/500.

Wed Feb  3 19:28:18 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-vms.h (SUB_SEGMENT_ALIGN): Define VMS version here.
	* write.c (write_object_file): Not here.
	(fix_new): Initialize fx_addnumber.

	* listing.c: Don't include target-cpu.h explicitly, since as.h
	includes it.

Thu Jan 28 00:35:40 1993  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* write.h [BFD_ASSEMBLER]: Don't declare next_object_file_charP,
	*_fix_root, *_fix_tail, seg_fix_rootP, seg_fix_tailP.
	(struct fix): Reordered fields for compactness and efficiency.
	Converted some logical fields to 1-bit fields.

	* config/obj-aout.h: Use PARAMS.
	[BFD_ASSEMBLER]: Don't define/declare AOUT_MACHTYPE, seg_N_TYPE,
	N_TYPE_seg, DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE.

	* read.c: Don't include listing.h; as.h includes it.  Removed
	DONTDEF code.
	[BFD_ASSEMBLER]: Include subsegs.h.
	(old_buffer, new_broken_words): Default initialization is
	sufficient.

	* output-file.c [BFD_ASSEMBLER]: Include bfd.h, default TARGET_MACH
	to 0, define stdoutput.
	(output_file_create) [BFD_ASSEMBLER]: Call bfd_perror on failure.
	Call bfd_set_arch_mach.
	(output_file_close) [BFD_ASSEMBLER]: Call bfd_close, not
	bfd_close_all_done.  Call bfd_perror on failure.
	(output_file_append) [BFD_ASSEMBLER]: Don't define.

	* config/m68kcoff.mt (LOCAL_LOADLIBES): Delete definition.

	* subsegs.h (segment_info_type): Always define.  Omit field scnhdr
	if not MANY_SEGMENTS.  Define new field bfd_section if
	BFD_ASSEMBLER.
	(seg_info): New macro.

	* expr.c, input-scrub.c: Use PARAMS macro.  Deleted unused
	variables, and some irrelevant comments.

	* Makefile.in (ALL_CFLAGS): Include $(BFDDEF).
	(LIBS): Include $(BFDLIB).  Don't bother with $(CLIB).
	* configure.in:  Permit --with-bfd-assembler now, with a warning.
	Variable need_bfd is now a boolean, as is new variable bfd_gas.
	Set BFDDEF and BFDLIB in Makefile when appropriate.

	* as.c: Removed "#ifdef DONTDEF" and "#ifdef comment" code.
	(main): Refer to flag_always_generate_output instead of
	flagseen['Z'].

	* as.c (main) [BFD_ASSEMBLER]: Open output bfd.
	(*_section) [BFD_ASSEMBLER]: Define them.
	(perform_an_assembly_pass) [BFD_ASSEMBLER]: Initialize them, and
	set section flags when appropriate.
	* as.h (SEG_NORMAL) [BFD_ASSEMBLER]: Require that the specified
	section is not absolute, undefined, or an assembler internal one.
	(absolute_section, undefined_section): Always define.
	* expr.c, read.c, symbols.c: Refer to *_section, not SEG_*; break
	switch statements into if-else trees.
	* symbols.c [MANY_SEGMENTS]: Deleted redundant definitions of
	SEG_BSS and SEG_DATA.

	* as.h (frag_now_fix): New macro.
	* symbols.c (colon): Use it.

Wed Jan 27 21:43:53 PST 1993  Ralph Campbell  (ralphc@pyramid.com)

	* config/tc-mips.c:  Added mips support for mips-dec-bsd.
	* config/tc-mips.h:  Added mips support for mips-dec-bsd.
	* config/ho-mipsbsd.h:  Added mips support for mips-dec-bsd.
	* config/mips-opcode.h:  Added mips support for mips-dec-bsd.
	* configure.in:  Added mips support for mips-dec-bsd.
	* atof-generic.c:  Define TRUE and FALSE if not defined.

Thu Jan 21 12:48:19 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* version.c: Bumped version number to 1.93.05.

Wed Jan 20 17:11:53 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/obj-coff.c (obj_emit_relocations): Don't use #elif.
	(obj_emit_lineno): Don't need return at end of void function.
	(obj_symbol_new_hook): Ditto.

	* config/tc-m68k.c: Removed some unused code.
	(tc_aout_fix_to_chars): Array nbytes_r_length is now const.

	* config/tc-m68k.h (TC_COUNT_RELOC): Don't emit reloc if only
	offset field is set.

Fri Jan  8 05:44:49 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-sparc.c (sparc_ip): For %uhi and %ulo, if not
	ENV64, emit no reloc.
	(md_pseudo_table): For ".xword", call s_xword.
	(s_xword): New function.

	* config/tc-sparc.c (architecture_requested, warn_on_bump,
	md_relax_table): Use default zero initialization.
	(s_reserve): Since SEG_E2 is equivalent to SEG_BSS, just use the
	latter, instead of selecting with preprocessor conditionals.

Thu Jan  7 08:58:21 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: recognise all sparclite variants

Thu Jan  7 05:25:25 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* read.c (s_data) [!BFD_ASSEMBLER]: Fix typo in 4 Jan change --
	accidentally changed to use subseg_change where it should have
	been subseg_new.

Tue Jan  5 08:42:16 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* expr.c (operand): If character other than comma or newline is a
	logical end-of-line character, use the newline case.
	From Eric Youngdale:
	(operand): Set X_add_number field for floating-point numbers.
	(operand): Treat zero byte as end-of-operand.

	* configure.in (per-target): Look for with_bfd_assembler option.
	For now, only accept "no", until the merge is done.

	Merged changes from Eric Youngdale (youngdale@v6550c.nrl.navy.mil):
	* as.c, flonum-konst.c, hex-value.c, input-file.c, version.c,
	  config/obj-aout.h, config/obj-vms.c: VMS -> HO_VMS.
	* read.c: Finish conversion to S_* macros in the VMS only
	  parts of the program. Add "const" modifier to hex_value.
	* as.c, read.c, symbols.c, write.c: Change "ifdef VMS" to
	  "ifdef OBJ_VMS".
	* expr.c: Add "const" modifier to hex_value.
	* symbols.c: Finish conversion to S_* macros in the VMS only
	  parts of the program.  Add "const" modifier to
	  md_[long,short]_jump_size. Remove declaration of const_flag
	  (which will be declared in obj-vms.h).
	* write.c: Add "const" modifier to md_[long,short]_jump_size.
	  Fix arguments to VMS_write_object_file.
	* config-gas.com: New file.  Script for VMS systems to set up the
	  configuration to build gas for VMS, and create config.status.
	* make-gas.com: Redone to work with new scheme.
	* config/obj-vms.c: Patch to fix bug where we were not correctly parsing the
	  stabs directives.
	* config/obj-vms.c:  Define macros COPY_LONG and COPY_SHORT which
	  will swap bytes if needed on a big endian system.  Use throughout
	  as needed.
	* config/obj-vms.c (obj_aout_stab):  Add code to generate listing file.
	* config/obj-vms.c (VMS_typedef_parse): Add alias to correctly handle certain
	  types of malformed stabs.  Change parsing algorithm so that we are
	  more certain of having all of the information that we need on hand.
	* config/obj-vms.c (final_forward_reference):  New function, used to help
	  resolve the data types of as many struct elements as possible
	  when some part of the struct is not fully defined by the compiler.
	* config/obj-vms.c (VMS_LSYM_Parse):  Correctly handle case of continuation
	  stabs directives.
	* config/obj-vms.c (VMS_write_object_file): Define all vtable psects
	  as symbols as well in the object file.  Look for external functions
	  that start with "__vt.", and turn them into variables, since the
	  g++ compiler is incapable of doing this.
	* config/tc-vax.c: Add '1' option for backward compatibility with older GCC
	  versions.
	* bignum-copy.c (bignum_copy): Fix bug where we pad with zeroes.
	* input-scrub.c (as_where): Fix bug where as would crash if we did not
	  have the name of the source file yet.
	* config/ho-vms.h: define HO_VMS, not HO_VAX.

Mon Jan  4 05:17:26 1993  Ken Raeburn  (raeburn@cygnus.com)

	* read.c (s_data): Always use "data_section", since it'll map to
	SEG_DATA or SEG_E1 if needed.
	(s_lcomm): Likewise with bss_section.
	(s_fill): Use memset, not bzero.

Thu Dec 31 04:29:27 1992  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* read.c: Deleted some code under "#ifdef DONTDEF" that was for
	handling GDB symbol table data.

	* config/obj-aout.h (segment_name): Delete definition.
	(seg_name): Delete declaration.
	* config/obj-bout.h (segment_name, seg_name): Ditto.
	* config/obj-vms.h (segment_name, seg_name): Ditto.
	* config/obj-coff.h (segment_name): Ditto.
	* config/obj-coffbfd.h (segment_name): Ditto.

	* Changes for BFD_ASSEMBLER:
	* obj.h (obj_crawl_symbol_chain): Declare only if not
	BFD_ASSEMBLER.
	(obj_header_append, obj_pre_write_hook): Ditto.
	* as.h (stdoutput): New var, defined only if BFD_ASSEMBLER.
	(segT) [BFD_ASSEMBLER]: New typedef for "asection *".
	(segment_name) If BFD_ASSEMBLER, look up BFD section name;
	otherwise, use seg_name array.
	(seg_name): Declare only if not BFD_ASSEMBLER.
	(section_alignment): Declare only if not BFD_ASSEMBLER.
	(big_section, reg_section, pass1_section, diff_section,
	absent_section, text_section, data_section, bss_section): If
	BFD_ASSEMBLER, declare as variables; otherwise, declare as macros,
	mapping to segT enum values.
	(tc_aout_fix_to_chars, next_object_file_charP): Force parse errors
	if these are used or defined, if BFD_ASSEMBLER.
	(subseg_set, subseg_new) [BFD_ASSEMBLER]: Functionality of old
	subseg_new split into two functions.
	(SEG_NORMAL): For BFD_ASSEMBLER, always return true, for now.

	* as.h (volatile): Don't define if already defined.
	(had_errors, had_warnings): Provide prototypes for ANSI C even if
	NO_STDARG.
	(as_bad, as_fatal, as_tsktsk, as_warn): For GNU C version 2,
	declare with format attribute for -Wformat checking.

Wed Dec 30 10:18:57 1992  Ian Lance Taylor  (ian@cygnus.com)

	* app.c, config/tc-*.c: Don't include read.h, since it is already
	included by as.h.

	* These are based on patches from Minh Tran-le
	<mtranle@paris.intellicorp.com>.
	* configure.in (i[34]86-ibm-aix*): Accept i486 for host.  Use
	obj_format coffbfd and gas_target i386coff for target.
	(i[34]86-*-isc*): New host (uses sysv).
	* config/i386aix.mt: Removed (no longer used).
	* config/mh-i386aix (RANLIB): Use true rather than /bin/true.
	(MINUS_G): Removed.
	(LDFLAGS): Added, defined as -shlib.
	* config/te-i386aix.h (REVERSE_SORT_RELOCS): Undefine.
	* config/te-sco386.h (LOCAL_LABEL): Don't define.
	(DOT_LABEL_PREFIX): Define.
	* expr.c (operand): If DOT_LABEL_PREFIX, use .L0\001 as a label
	name rather than L0\001.
	* read.c (s_lcomm): Make a frag in SEG_BSS rather than using
	local_bss_counter.
	* symbols.c, symbols.h (local_bss_counter): Removed.
	* write.c (write_object_file): bss no longer uses
	local_bss_counter.  Pass correct data and bss size to
	VMS_write_object_file.
	* config/obj-vms.c (VMS_write_object_file): Accept bss size as
	argument, rather than using local_bss_counter.
	* config/tc-m88k.c (s_bss): Don't use local_bss_counter.
	* config/tc-sparc.c (s_reserve): Don't use local_bss_counter.
	* config/obj-coffbfd.c (had_lineno, had_reloc): Removed.
	(size_section): Restored sanity check.
	(do_relocs_for): Base section address on s_paddr rather than
	computing it.  Adjust a29k R_IHIHALF special case to account for
	section paddr (used to require paddr to be zero).  If there are no
	reclos, set s_relptr to 0.  Set relocation size in object_headers.
	(fill_section): Always set s_vaddr here, removing
	ZERO_BASED_SEGMENTS case.  Force s_scnptr for bss to 0.  Don't set
	NOLOAD for i386 .bss, because it confuses the SVR3 native linker.
	Set STYP_INFO for .comment.
	(coff_header_append): Use object headers and H_{SET,GET}_* macros.
	Make aouthdr writing depend on OBJ_COFF_OMIT_OPTIONAL_HEADER.
	(crawl_symbols): Handle 8 character section name correctly.  Use
	H_{SET,GET}_* macros.
	(do_linenos_for): Set lineno size in object_headers.
	(write_object_file): Use H_{SET,GET}_* macros.  Don't bother to
	set s_vaddr here.  If string_byte_count remains 4, set it back to
	0, and only write strings out if there are some.  Call
	fill_section before do_relocs_for and do_linenos_for.
	(obj_coff_section): Handle optional quoted second argument giving
	section characteristics.
	(obj_coff_bss): Added to handle .bss.
	(obj_coff_ident): Added to handle .ident (puts string in .comment
	section).
	(obj_coff_lcomm): Put common symbols in .bss, not .data.
	(fixup_mdeps): Change to segment.  Call frag_wane after
	md_convert_frag.
	(fixup_segment): Explicitly check S_IS_COMMON before making 386
	adjustment (already happened only for common symbols, but this is
	clearer).
	* config/obj-coffbfd.h (OBJ_COFF_OMIT_OPTIONAL_HEADER): Define.
	* config/tc-i386.c (s_bss): Don't use if I386COFF.
	(md_pseudo_table): Ignore .optim and .noopt.
	(tc_coff_sizemachdep): New function.
	* config/tc-i386.h (REVERSE_SORT_RELOCS): Undef, for SVR3
	compatibility.
	(LOCAL_LABEL): Removed definition.
	(DOT_LABEL_PREFIX): Defined.

Mon Dec 28 10:32:05 1992  Ken Raeburn  (raeburn@cygnus.com)

	* app.c (app_push): Use memcpy, not bcopy.
	(do_scrub_next_char): For \", return " not '.
	(symbol_chars): Now const.

	* expr.c (operand): If not LOCAL_LABELS_FB, don't look for "0f"
	and "0b".  If LOCAL_LABELS_DOLLAR, check for "0$".

	* config/obj-coff.h: Don't use #elif.

	* config/ho-sunos.h: Don't include sys/stdtypes.h; 4.0.3 doesn't
	have it.  (Reported by Noah Friedman, friedman@gnu.ai.mit.edu.)

Wed Dec 16 12:12:33 1992  Ian Lance Taylor  (ian@cygnus.com)

	* write.c, config/obj-ieee.c: don't define SUB_SEGMENT_ALIGN
	if it is already defined.

Tue Dec 15 12:40:11 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* app.c (do_scrub_begin): allow single quote strings if so
	configured.

	* config/*z8k*: checkpoint

Sun Dec 13 00:04:38 1992  Ian Lance Taylor  (ian@cygnus.com)

	* read.c (read_a_source_file): avoid calling xmalloc (0).

Sat Dec 12 15:26:34 1992  Ian Lance Taylor  (ian@cygnus.com)

	* listing.c: Call xmalloc, not malloc; don't declare malloc.

	* Changes to support SCO 3.2v4:
	* read.c (s_align_bytes, s_align_ptwo): If not SEG_DATA or
	SEG_BSS, fill with NOP_OPCODE.
	* config/i386coff.mt: Add opcode/i386.h to TARG_CPU_DEPENDENTS.
	* config/obj-coffbfd.c (do_relocs_for): Increment addr even if not
	using ZERO_BASED_SEGMENTS.
	(fill_section): If ZERO_BASED_SEGMENTS, set segment addresses, but
	never set segment address for SEG_E2 (.bss) and don't write out
	SEG_E2 contents.  Set .init and .fini sections to STYP_TEXT.
	(obj_coff_endef): Don't merge labels or symbols awaiting forward
	definitions, and don't merge tags with non-tags.  Check for .bf
	rather than just checking whether the second character is b and
	the third character is f.
	(obj_coff_val): gcc can generate values which we don't handle
	correctly; discard information for now, since it only affects the
	debugging information.
	(tag_find_or_name): Don't insert tags in the symbol table.
	(yank_symbols): Don't merge labels.
	(write_object_file): Don't define SUB_SEGMENT_ALIGN if it is
	already defined.  Fill subsegments with NOP_OPCODE, not 0.  Don't
	set segment address if ZERO_BASED_SEGMENTS.
	(obj_coff_section): Accept and ignore a trailing quoted string, as
	used in AT&T i386 syntax.
	(fixup_segment): Take segment as argument.  On the i386, adjust PC
	relative addends by the segment vaddr.
	* config/tc-i386.h: Define SUB_SEGMENT_ALIGN.
	* config/tc-a29k.h: Define ZERO_BASED_SEGMENTS.
	* config/tc-i386.c: (i386_operand): If I386COFF, accept any segment type.

Tue Dec  8 00:06:48 1992  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* config/obj-coffbfd.c: Include libcoff.h.

	* version.c: Now version 1.93.

Mon Dec  7 00:39:09 1992  Ken Raeburn  (raeburn@cygnus.com)

	* config/tc-i386.c (md_pseudo_table): For 386bsd and linux, do
	power-of-two alignment for .align.

	* as.h: If BROKEN_ASSERT, just redefine `assert' to be trivial,
	and leave everything else alone.

Fri Dec  4 16:58:42 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (as.new): Don't bother saving as.old.

	* write.c: Conditionalize on OBJ_VMS, not VMS.
	(magic_number_for_object_file): Don't define if OBJ_VMS.

	* config/obj-vms.c: Changes for traditional C.

Thu Dec  3 01:24:07 1992  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config/ho-generic.h (malloc, realloc): Declare.

	* Lots of comment/whitespace changes.

	* write.h (struct fix): Some fields reordered, narrowed.

	* read.c (MASK_CHAR): Define using C types, not magic number.

	* as.c, input-file.c: Deleted some unused code.

	* app.c, as.h: Doc fix.

	* flonum-konst.c, flonum-mult.c: Include ansidecl.h.

	* as.h (xmalloc): Argument is long.

	* xmalloc.c (error): Remove declaration; as.h takes care of it.

	* doc/as.texinfo: Regrouped documentation of some command-line
	options.  Updated options documentation for m68k.  Some minor
	wording/punctuation changes.

Mon Nov 30 11:42:11 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* configure.in: Accept target OS "vms".

	* symbols.c:  Merged ANSI and non-ANSI function decls, using
	PARAMS macro.

	* xmalloc.c: Just include as.h, don't bother trying to figure out
	other header files.

	* strstr.c, strerror.c: Deleted.
	* Makefile.in: Deleted references.

	* config/tc-ns32k.c: Don't include header file for string
	declarations; leave that to ho-*.h.

Fri Nov 27 04:11:36 1992  Ken Raeburn  (raeburn at cambridge-laptop.cygnus.com)

	* config/coff_gnu.h [TC_I860]: Guesses for reloc type values,
	imported from FSF sources.

	* messages.c (strerror): Declare unconditionally.

	* as.h: Delete alloca and register definitions.

	* config/atof-ieee.c (mask): Now const.

	* obstack.c, obstack.h: Deleted.

	* as.h (flag_readonly_data_in_text): New flag.
	* as.c (main): Set it for -R.

	* as.h (flag_suppress_warnings): New flag.
	* as.c (main): Set it for -W.
	* messages.c (as_warn): Check it instead of flagseen['W'].

	* as.h (flag_always_generate_output): New flag.
	* as.c (main): Set it for -Z.

	* config/tc-sparc.h: Define NEED_FX_R_TYPE.
	* config/tc-a29k.h: Ditto.
	* write.h (struct fix): Don't conditionalize fx_r_type field on TC
	macros.

	* as.h: Merged ANSI and non-ANSI function decls, using PARAMS
	macro.
	* bignum.h, expr.h, flonum.h, frags.h, input-file.h, listing.h,
	obj.h, output-file.h, read.h, struc-symbol.h, symbols.h, tc.h,
	write.h: Likewise.
	* read.c: Likewise.

	* xmalloc.c: Conditionalize on HAVE_MALLOC_H, not USG.  Fold in
	xrealloc from xrealloc.c.
	* xrealloc.c: Deleted.
	* Makefile.in (REAL_SOURCES, OBJS): Adjusted.

	* configure.in: For host CPU a29k, rs6000, vax, consider using bsd
	or vms ho- files.

	* config/ho-sysv.h (setbuffer, HO_USG): Deleted.

	* config/atof-ieee.c (atof_ieee): Exponent field isn't a pointer;
	don't initialize it with NULL.

	* config/ho-vax.h (M_VAX): Deleted; was unused.

	* README-vms, config/ho-vms.h, config/obj-vms.c, config/obj-vms.h:
	New files imported from FSF version, contributed by Eric Youngdale.
	* README-vms-dbg, config/vms: Deleted.

	* ChangeLog, config/ChangeLog: Merged.

	* config/*tahoe*, configure.in: Tahoe support brought in from FSF
	version.

	* input-file.c (input_file_open): Eliminate call to setvbuf.
	[USG] (setbuffer): Deleted macro.

Mon Nov 23 11:00:16 1992  Ken Raeburn  (raeburn@cygnus.com)

	* all files: Whitespace changes for GNU indentation style, done by
	GNU `indent'.  Some cleanup still needed, especially of comments.

	* configure.in: No te-386bsd.h file exists; don't try to use it.

	* config/obj-coff.c (obj_coff_endef): Use as_warn, not fprintf.

	* config/tc-m68k.c (md_assemble): Don't complain about 68000 with 68881;
	could be doing emulation.

Thu Nov 19 11:47:19 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	z8000 documentation
	* doc/Makefile.in, doc/all.m4, doc/as-all.texinfo, doc/as.texinfo:
	all modified.

Tue Nov 10 09:49:24 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (as.o, obj-format.o): added dependency on subsegs.h.

	* subsegs.h: add extern to segment_info declaration.

	* read.h: added extern declarations for comment_chars,
	line_comment_chars, and line_separator_chars.
	read.c, app.c: removed definitions of comment_chars,
	line_comment_chars, and line_separator_chars.

	* config/tc-m68k.c (m68k_reg_parse): If REGISTER_PREFIX isn't defined,
	still accept (but don't require) OPTIONAL_REGISTER_PREFIX before
	the register name.
	(insert_reg): put REGISTER_PREFIX before register names before
	putting them in the symbol table.
	* config/tc-m68k.h (OPTIONAL_REGISTER_PREFIX): Define to be "%", if not
	M68KCOFF.

	* config/obj-coffbfd.c (fill_section): set STYP_NOLOAD bit for .bss
	section.

	* config/atof-ieee.c, config/atof-ns32k.c, config/tc-*.c: made
	EXP_CHARS, FLT_CHARS, comment_chars, line_comment_chars and
	line_seperator_chars consistently const, and always
	initialized them.  Included read.h.

Thu Nov  5 17:55:41 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* config/tc-sparc.c (sparc_ip): Add code to flag error if an absolute
	constant will not fit in an immediate field.
	(md_apply_fix, RELOC_BASE13 case): Check for relocation overflow.

Wed Nov  4 07:50:46 1992  Ken Raeburn  (raeburn@cygnus.com)

	* config/obj-coff.c (callj_table): Delete global variable.
	(obj_emit_relocations): Define it locally here, and only if
	TC_I960 is defined.

	* config/tc-m68k.c (m68k_reg_parse): Underscore is part of a symbol name.
	(m68k_ip): Don't warn about bignum used as float bit-pattern.

	* config/obj-coff.c: Replaced ANSI and non-ANSI function declarations
	with a single set using PARAMS macro.

	* config/tc-i960.c (tc_bout_fix_to_chars): Bit-field fixups want a length
	of 2.

	* config/tc-i960.c: Missed a couple of 0->NO_RELOC conversions.

	* config/tc-i960.h (N_BALNAME, N_CALLNAME): Define as char-type values,
	so widening works consistently.

Wed Oct 28 08:52:34 1992  Ken Raeburn  (raeburn@cygnus.com)

	* version.c: Put conditional "const" before version_string, not
	before dummy function for VMS.  Now version 1.91.03.

	* app.c (do_scrub_next_char): Need double-\ before `000' to show
	printed rep of null character.

Fri Oct 23 14:40:38 1992  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-coffbfd.c (write_object_file): check return value of
	bfd_close_all_done.

Tue Oct 20 12:18:08 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Support for i386-sysv.
	obj-coffbfd.c (do_relocs_for, write_object_file): set segment
	addresses to reasonable sizes.  New define ZERO_BASED_SEGMENTS can
	be used to set them all to zero as was done before.
	(fill_section): segment addresses now set in write_object_file.
	(fill_section): Don't set STYP_NOLOAD for .bss section.
	(fixup_segment): 386 uses strange common symbol format.
	tc-i386.c (tc_coff_fix2rtype): use R_DIR32, not R_RELLONG, for
	compatibility with SVR3.2 linker.
	* configure.in: i386-sysv and i386-sco use coffbfd.

	* app.c (do_scrub_next_char): discard whitespace after a label.

Sat Oct 10 12:33:45 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: differentiate between SunOS 4 and Solaris2 for Sun4
	hosts, use the sysv configuration for solaris2

Mon Oct  5 09:28:57 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	 fix i960+non-bfd coff bit rot.
	* config/obj-coff.c (c_dot_file_symbol, obj_coff_ln, obj_coff_line):
	support for C source listings. (obj_coff_endef): look in the right
	part of the symbol for the symbol name

	* config/tc-m68k.c (get_num): make it work for all segments, not just the
	first three.

Mon Oct  5 03:30:36 1992  Mark Eichin  (eichin at tweedledumber.cygnus.com)

	* configure.in: recognize i386-*-bsd emulation.

Thu Oct  1 23:05:12 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: use the cpu-vendor-os triple for host and target

Tue Sep 29 12:22:52 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/obj-coffbfd.c (write_object_file): don't fixup for the z8k
	* config/tc-z8k.c: lots of bug fixes

Tue Sep 29 10:51:55 1992  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-i960.h, config/tc-i960.c: avoid the ANSI
	preprocessor addition #elif, since it is not supported by old
	compilers.
	config/ho-rs6000.h, config/tc-m68k.c: the native RS/6000
	compiler miscompiles a couple of expressions in tc-m68k.c.

Mon Sep 28 21:18:24 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* read.c (cons): If NO_RELOC is defined, use it.

	* config/tc-i960.c (get_cdisp): Use NO_RELOC, not 0, in call to fix_new.

Fri Sep 25 18:18:52 1992  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-m68k.h: if M68KCOFF, define DOT_LABEL_PREFIX (to require
	local labels to start with a .) and set REGISTER_PREFIX to %.
	tc-m68k.c (m68k_reg_parse): accept REGISTER_PREFIX if defined.

Fri Sep 25 17:53:43 1992  John Gilmore  (gnu@cygnus.com)

	* messages.c:  Comment changes.

Fri Sep 25 14:12:58 1992  Ken Raeburn  (raeburn@kyriath.cygnus.com)

	* as.h: Test if __STDC__ is defined only, don't test its value.
	* messages.c: If __STDC__ is not defined, define NO_STDARG.

Thu Sep 24 12:42:32 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* listing.c (debugging_pseudo): Add stabs and stabn as things to
	ignore.

Tue Sep 22 13:02:07 1992  Sean Eric Fagan  (sef@cygnus.com)

	* config/obj-coffbfd.c (do_relocs_for,fill_section): now allocate all
	sections starting from zero, rather than making them consecutive.
	This makes subsequent reloc calculations easier, esp if the object
	format doesn't understand addends. (obj_coff_lcomm): (maybe temporarily)
	allocate lcomm in .data rather than in .bss.  It seems that some
	tools can't cope with a non-zero sized bss before linkage.

Tue Sep 22 15:10:51 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-m68k.c: Replace "enum m68k_architecture" with "int"
	throughout.  That enum no longer means what we thought it meant.

	* config/tc-m68k.c (md_assemble, md_parse_option): Handle new
	"-mno-688[58]1" options.

	* config/tc-m68k.c: Added CPU32 support.

Fri Sep 18 08:02:18 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/tc-m68k.c (m68k_ip): An(disp) is not pc relative.

Tue Sep 15 17:25:05 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* Makefile.in (as.new): Remove dependence on LOCAL_LOADLIBES.
	Change LIBDEPS dependence to LIBS.

Tue Sep 15 15:32:02 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (install): if $(tooldir) exists, install as in
	$(tooldir)/bin.

Sun Sep 13 20:30:10 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Added WARN_SIGNED_OVERFLOW_WORD define to give an error if any
	.word is < -32768 or > 32767.  The -J flag causes the error to be
	ignored.  This is to catch over-sized switches generated by gcc on
	systems which don't support the broken .word hack.
	as.c (main): permit -J if WARN_SIGNED_OVERFLOW_WORD.
	write.c (fixup_segment): check for signed .word overflow if
	WARN_SIGNED_OVERFLOW_WORD.

	* write.c (fixup_segment): fixed missing parens in expression
	checking for byte or word overflow.

	* config/obj-coffbfd.h: define WARN_SIGNED_OVERFLOW_WORD.
	obj-coffbfd.c (fixup_segment): check for signed .word overflow if
	WARN_SIGNED_OVERFLOW_WORD.

	* config/obj-coffbfd.c (fixup_segment): fixed missing parens in
	expression checking for byte or word overflow.

Fri Sep 11 10:21:04 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	Support for i386 coff
	* config/obj-coffbfd.h : added stuff
	* config/tc-i386.c (tc_coff_fix2rtype): new function
	* config/tc-i386.h : new coff defines

Thu Sep 10 09:23:15 1992  Ian Lance Taylor  (ian@cygnus.com)

	* input-scrub.c (input_scrub_push): call input_file_begin, not
	input_scrub_begin.
	messages.c (as_perror): print ": " between the passed in error and
	the strerror, like perror does.

Wed Sep  9 11:06:25 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: use gas_target instead of modifying target_cpu.
	From Steve Chamberlain:
	Makefile.in: Handle m68*-*-coff*.
	read.c, read.h: add mult argument to s_space

	* config/tc-m68k.c (m68k_ip, m68k_ip_op, get_num, try_moto_index): merge
	 Motorola and MIT syntax; gas can now assemble either type of
	 file.
	* config/tc-m68kmote.c, config/tc-m68kmote.h: removed now
	 superfluous files.

	From Steve Chamberlain:
	* config/m68kcoff.mt: for m68k COFF.
	* config/obj-coffbfd.c: (fixup_mdeps) added
	 (size_section) removed bad sanity check
	 (fill_section) added rs_machine_dependent case
	 (write_object_file) call fixup_mdeps
	 (fixup_segment) set fx_subsy to 0.
	* config/ obj-coffbfd.h: define WORKING_DOT_WORD (too hard to
	support) and handle m68k.
	* config/tc-m68k.c, config/tc-m68k.h: added m68k COFF support
	and Motorala pseudo ops.

Tue Sep  8 17:10:58 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (LIBS): Include opcode library.

Fri Sep  4 18:20:56 1992  Ken Raeburn  (raeburn@cygnus.com)

	* config/tc-m68k.c (get_num, case SEG_BIG): If only small integers
	including zero are accepted, pass +0.0.

Sun Aug 30 21:24:46 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: map "as" through program_transform_name when
	installing.

	* doc/Makefile.in: map "as" through program_transform_name when
	installing.

Sat Aug 29 12:11:12 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* Makefile.in (as.new): Depend on LOCAL_LOADLIBES.

Fri Aug 28 16:25:22 1992  Ian Lance Taylor  (ian@cygnus.com)

	* config/obj-bout.h, config/obj-bout.c (obj_header_append,
	obj_symbol_to_chars).
	* config/tc-i960.c (md_ri_to_chars): Always output bout object
	file in little endian byte order (used to use endianness of
	host).

Tue Aug 25 15:50:48 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* config/tc-m68k.c (init_table): Now const.  Always include 68851
	data, so that "bc" is available to 68040 cache instructions.
	Added "tt0", "tt1", and 68ec030 variants.
	(md_assemble): Complain if 68000 (only) and 68881 are specified.
	(enum _register): Added TT0, TT1.
	(m68k_ip, cases '3' and 't'): Handle new operand type codes.  Pass
	line number correctly in "internal error" messages.  Don't print
	architecture-mismatch message for operand errors.

	From Colin Smith (colin@wrs.com):
	* config/tc-m68k.c (m68k_ip, case '_'): Use addword twice rather
	than install_operand.

Tue Aug 25 15:13:48 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* listing.c (buffer_line): rewind to the start of include
	files, they might be included twice.

	* z8k.c, z8k.h, z8k.mt: z8000 support stuff

Mon Aug 24 12:45:43 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: defined TARGET_CPU for C code so that it can choose
	one element of a family.

	* config/tc-m68k.c: use TARGET_CPU to choose default cpu type.

	* config/te-generic.h: default to LOCAL_LABELS_DOLLAR and LOCAL_LABELS_FB
	so that we can assemble hand-written libgcc code.

Fri Aug 21 14:38:44 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* messages.c (as_warn): Use fputs, not fprintf, with a buffer that
	has already been formatted (but may still contain %-characters).
	(as_bad): Likewise.

Wed Aug 19 11:20:59 1992  Ian Lance Taylor  (ian@cygnus.com)

	* config/tc-m68k.c, tc-m68kmote.c: the cas2 instruction is supposed to be
	written with indirection on the last two operands, which can be
	either data or address registers.  Added a new operand type 'r'
	which accepts either register type.  Added '(' to notend stuff in
	tc-m68kmote.c to accept (a0):(a2) in cas2 instruction.

Wed Aug 19 09:25:09 1992  Ken Raeburn  (raeburn@cygnus.com)

	* as.h (enum _relax_state): Start off at one, not zero, to better
	catch uninitialized-variable errors.
	(linkrelax): Declare new variable.

	* messages.c (warning_count, error_count): Default initializer is
	sufficient.

	* write.c: Merged some declarations, using PARMS macro.
	(text_frag_root, data_frag_root, bss_frag_root, text_last_frag,
	data_last_frag): No longer static.
	(write_object_file, case rs_align or rs_org): If HANDLE_ALIGN is
	defined, call it.  Change segments before calling fixup_segment.
	(relax_align): If linkrelax, provide extra padding.

	* config/obj-bout.c (obj_emit_relocations): Emit alignment relocs despite
	their not having symbols associated.

	* config/tc-i960.c (norelax, instrument_branches): Default initializer is
	sufficient.
	(linkrelax): Delete variable definition.
	(mem_fmt): Call fix_new with NO_RELOC.
	(tc_bout_fix_to_chars): Handle alignment relocs.
	(i960_handle_align): New function.
	* config/tc-i960.h (linkrelax): Delete declaration.
	(HANDLE_ALIGN): New macro; calls i960_handle_align.
	(NEED_FX_R_TYPE, NO_RELOC): New macros.

Tue Aug 18 14:59:21 1992  Ken Raeburn  (raeburn@cygnus.com)

	* config/sparc.mt: New file.  Grab sparc opcode table from bfd
	library.

Tue Aug 18 14:16:38 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: always create installation directories.  Removed
	MINUS_G, set CFLAGS to default to -g, added FLAGS_TO_PASS, passed
	FLAGS_TO_PASS to recursive makes.

	* doc/Makefile.in: always create installation directories.

Mon Aug 17 15:09:56 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* input-scrub.c (input_scrub_pop, input_scrub_push): memcpy was
	being used with args swapped, causing occasional lossage when
	refilling buffers after an include file.

Mon Aug 17 13:18:51 1992  Ken Raeburn  (raeburn@cygnus.com)

	* messages.c (as_tsktsk): Use correct ANSI form for stdarg
	version.  Discard bogus DONTDEF version.
	(as_warn, as_bad, as_fatal): Likewise.

Fri Aug 14 18:31:14 1992  Ken Raeburn  (raeburn@cygnus.com)

	* config/tc-m68k.c (m68k_ip): If instruction is invalid for the
	selected architecture, print a message saying so and listing what
	processors support it, rather than saying "operands mismatch".

Thu Aug 13 13:53:19 1992  Ken Raeburn  (raeburn@cygnus.com)

	* as.h [BROKEN_ASSERT]: If defined, turn off all assertion checks.

	* config/ho-rs6000.h (M_RS6000): Don't define it.
	(free): Declare it.
	(BROKEN_ASSERT): Define it if not __STDC__.

Tue Aug 11 12:58:14 1992  Ken Raeburn  (raeburn@cygnus.com)

	* sparc.mt: New file.

Mon Aug 10 14:37:08 1992  Per Bothner  (bothner@cygnus.com)

	* config/tc-m68k.c: ".align N" means align to N-byte boundary *only*
	if TN_SUN3; otherwise align to 2**N-byte bounary.

Thu Aug  6 12:10:39 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* read.c (s_fill): make the .fill size clamped error a warn and
	fix bug where 0's were always placed.

	* config/tc-h8300.c: if a :8 is seen after an operand, fill top
	two bytes of any constant with 0xff:

Wed Aug  5 12:02:40 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/tc-m68k.c (md_pseudo_table): fix the .align thing
	the right way; for just the 68k. Sun 3 .align is nbytes, not ptwo.

Wed Aug  5 01:54:34 1992  John Gilmore  (gnu at cygnus.com)

	* config/tc-m68k.c (try_index):  Error if index scaling specified and
	assembling for an older CPU than a 68020.

Sat Aug  1 19:10:13 1992  Ken Raeburn  (raeburn@cygnus.com)

	* config/tc-sparc.c (tc_aout_fix_to_chars): If pc-relative, take
	fx_offset into account.

Fri Jul 31 21:53:28 1992  Ken Raeburn  (raeburn@cygnus.com)

	* configure.in (mips host): Accept "ultrix" with version number.

	* expr.c (floating_constant): Separate "=-" to avoid confusing
	ancient or broken compilers.

	* config/tc-m68k.c (m68k_ip): Mismatch error could also indicate
	processor/opcode mismatch, so reword the error message.
	(md_assemble): If no CPU has been set (even if FPU/PMMU
	characteristics have been), default to 68020.  Don't need extra
	quotes around error string.

Fri Jul 31 12:26:34 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* read.c (potable): Revert sac's incorrect change made Jul 13.
	Align really is supposed to be ptwo not nbytes.

Mon Jul 20 02:51:59 1992  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* Makefile.in: _Do_ include libiberty.  (from sef)

Fri Jul 17 15:15:28 1992  Ken Raeburn  (raeburn@cygnus.com)

	* expr.c (integer_constant): Handle "0f" and "0b" label references
	properly.

Thu Jul 16 08:20:17 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* write.c (fixup_segment): if relaxing, don't do anything.
	* config/obj-bout.[ch] : maintain the a_relaxable file header info
	* config/tc-i960.c: new option -linkrelax

Mon Jul 13 14:11:36 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* expr.c (expr): allow SEG_BSS in expressions
	* read.c (potable): align should be nbytes, not ptwo!
	* write.c (write_object_file): extra glue for new bss attributes
	(relax_segment): SEG_BSS is ok now
	* config/tc-m68k.c (m68k_ip_op): can now parse more @( modes

Mon Jul  6 17:09:32 1992  Steve Chamberlain  (sac@cygnus.com)

	* config/obj-coffbfd.c (fill_section): mark .lit sections as STYP_LIT

Mon Jun  1 16:20:22 1992  Michael Tiemann  (tiemann@cygnus.com)

	* configure.in: recognize m680x0 as having sun3 emulation mode for
	vxworks environment.


Tue Jun 30 20:25:54 1992  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* Makefile.in: Add program_suffix (parallel to program_prefix)

Wed Jun 24 10:57:54 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* app.c (process_escape): new function to handle escapes the right
	way, (do_scrub_next_char): use new function
	* cond.c (s_ifdef): do ifdef/ifndef right
	* read.c (s_fill): make the , expressions optional like the doc
	says
	* config/tc-h8300.[ch]: better warnings

Tue Jun  9 07:54:54 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* subsegs.c (subsegs_begin): create bss0_frchainP in the same was
	as data0_frchainP

	* write.c (write_object_file): various changes to handle data in
	the BSS segment in much the same was as stuff in the DATA segment.

	* config/tc-m68k.c (m68kip): Fix typo so that only arch's >=68020 do
	pcrel data stuff. (md_estimate_size_before_relax): when relaxing a
	68010 bxx into a bra+6 jmpxx, put the bytes of the jmp opcode into
	the right place. (s_bss): Don't put .bss stuff into SEG_DATA, put
	it into SEG_BSS

Thu Jun  4 11:59:13 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* expr.c(expr): allow SEG_REGISTER in expressions.
	* read.c(pseudo_set): register expressions can be the source of a
	set.
	* subsegs.c (subseg_new): Now -R forces all changes to SEG_DATA to
	goto SEG_TEXT (if a.out)
	* write.c (write_object_file): If a.out don't use the old way for
	-R.
	* config/obj-a.out (s_sect): complain if the user tries to use a
	subsegment with a value which might interfere with out -R hackery.
	* config/tc-m68k.c (m68k_reg_parse): lookup names in symbol table
	rather than use ugly if tree. (init_regtable): insert register
	names into symbol table.

Tue Jun  2 16:47:09 1992  Steve Chamberlain (sac@cygnus.com)

	* write.c (write_object_file): keep the fix_tail clean, which
	fixes a bug in -R where relocations were being lost.

Mon Jun  1 16:20:22 1992  Michael Tiemann  (tiemann@cygnus.com)

	* configure.in: recognize m680x0 as having sun3 emulation mode for
	vxworks environment.

Sun May 31 05:33:00 1992  david d `zoo' zuhn (zoo@cygnus.com)

	* configure.in: recognize m680x0 as an m68k

Thu May 28 11:22:02 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* configure.in: Recognize sparclite as a sparc variant.

	* config/tc-sparc.c: Use new ARCHITECTURES_CONFLICT_P macro.  Mention new
	-Asparclite flag.

Tue May 26 16:47:56 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/tc-a29k.c: lint
	* listing.c, expr.c: patches from Andrew Smith

Thu May 14 17:22:48 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* doc/Makefile.in: use m4 rather than gm4.

Mon May  4 18:56:19 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/obj-coffbfd.c: use is a synonym for section, (do_relocs_for):
	calc the base of relocs correctly.
	* config/tc-a29k.c (parse_operand): allow expressions to be in any section.

Mon Apr 27 13:13:31 1992  K. Richard Pixley  (rich@cygnus.com)

	* as.c, write.c: use -K rather than -k for the broken word warning
	  option.

Tue Apr 21 13:35:30 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: do not print recursion lines.

Wed Apr 15 21:19:31 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: the tooldir copy of gas goes directly in tooldir.

Tue Apr 14 14:50:22 1992  Ken Raeburn  (Raeburn@Cygnus.COM)

	* write.c (write_object_file): For b.out format, round up section
	start addresses to match required alignment.

Thu Apr  9 05:45:29 1992  Ken Raeburn  (Raeburn@Cygnus.COM)

	* Makefile.in (install): Install into $(tooldir)/bin, since that's
	where gcc looks for it.

Tue Apr  7 15:12:15 1992  Sean Eric Fagan  (sef@cygnus.com)

	* Makefile.in:  Changed some lines to be less confusing for some
	makes.

	* input-file.c:  Conditionalize on _IOFBF, not VMS.

	* read.c, write.c:  Change a series of ifdef/elif to
	ifdef/else/ifdef etc.

Fri Mar 27 12:21:16 1992  K. Richard Pixley  (rich@cygnus.com)

	* symbols.c (fb_label_init): fix sizeof to memset.

Fri Mar 13 15:45:44 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: install the man page.

	* Makefile.in: pass down MAKEINFO explicitly on info.

	* doc/Makefile.in: use $(MAKEINFO) not makeinfo.

Fri Mar 13 08:03:03 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* flonum-const.c: renamed flonum-konst.c to stop dos name
	conflict.

Thu Mar 12 04:42:38 1992  K. Richard Pixley  (rich@cygnus.com)

	* config/tc-m68k.h, config/te-sun3.h: moved LOCAL_LABELS_FB
	  definition from tc-m68k.h to te-sun3.h.

Wed Mar 11 23:32:42 1992  K. Richard Pixley  (rich@cygnus.com)

	* configure.in: vxworks68 gets te-sun3.h.

	* expr.c: remove limitation that local_labels_dollar or
	  local_labels_fb must be < 10.

	* symbols.c: remove local_labels_dollar, replace with a function
	  interface for a sparse array.  All users adjusted.

	* config/te-sun3.h: add LOCAL_LABELS_DOLLAR.

Sat Mar  7 00:06:25 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* doc/Makefile.in: commented out line for building as-all.texinfo.
	  This is temporary.

	* doc/as.texinfo, doc/as-all.texinfo: added menu item hooks.

Fri Mar  6 21:57:18 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: added check target.

Tue Mar  3 15:45:56 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: added tooldir and program_prefix.

Sun Mar  1 04:43:19 1992  Michael Tiemann  (tiemann@cygnus.com)

	* write.{c,h} (fix_new): Make these declarations consistent.

Sat Feb 29 13:59:10 1992  Michael Tiemann  (tiemann@cygnus.com)

	* Makefile.in (strerror.o): Add rule so that broken Sun make can
	work in subdirs.

Wed Feb 26 19:26:28 1992  Steve Chamberlain  (sac at thepub.cygnus.com)

	* read.c, obj-coffbfd.c : fix h8300 specific bit rot

	* expr.c (operand): if can't work out what sort of operand it is,
	then look through FLT_CHARS for a hint.

Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in, configure.in: removed traces of namesubdir,
	  -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
	  copyrights to '92, changed some from Cygnus to FSF.

	* doc/Makefile.in, doc/configure.in: removed traces of namesubdir,
	  -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
	  copyrights to '92, changed some from Cygnus to FSF.

Tue Feb 25 14:17:15 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* expr.c: If an expression is single comma, then return with
	SEG_ABSENT rather than an error - since the sparc front end does
	really strange things with things like fbge,a

	* as.h: include bfd.h if using many sections
	* expr.c: LOCAL_LABELS_FB had been changed to lower case - so
	local labels didn't work.
	* listing.c (list_symbol_table): don't core dump when there's no
	symbol there.
	* write.c, write.h: call fix_new with the right number of args on
	the H8.
	* config/tc-h8300.[ch] : fix bugs reported by HMSI, and make
	errors nices

Sat Feb 22 12:26:28 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* app.c: MRI compatibility - allow single quote to start a string.
	* as.c: fix typo recently introduced.
	* as.h : Don't include aout/reloc.h - it's not right for COFF!
	* expr.c: Much rewriting, to accommodate MRI syntax for
	expressions. Also easier to read now.
	* listing.c: Put back defuns
	* read.c: modified to accept MRI syntax, put back listing pseudo
	ops so that an assembler built with NO_LISTING ignores list ops
	rather than pukes.
	* write.c, write.h: fixs - only keep a reloc type in a fix if the target
	machine is a SPARC or a 29K.
	* config/obj-aout.c: added s_sect pseudo op
	* config/obj-coffbfd.c: lints, set the filehdr flags right and
	fill in the timestamp.
	* config/obj-coffbfd.h: Since we don't include aout/reloc.h
	anymore, define all the relocs which the tc-<x> bit will use so we
	can translate from them to the coff types.
	* config/tc-a29k.c: reloc_type isn't ane enum any more
	* config/tc-m68k.c: Added NO_RELOC definition.

Fri Feb 21 06:21:07 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: put header files before C source for TAGS; remove
	  references to non-existent syscalls.h.

	* read.c, write.c subsegs.c: back out the .bss changes.

	* config/obj-aout.c: do not include stab.gnu.h if NO_LISTING.

	* config/tc-i860.c, a.out.gnu.h: move i860 relocs to a proper place.

	* a.out.h: removed.

Fri Feb 21 01:08:48 1992  Minh Tran-Le (TRANLE@INTELLICORP.COM)

	* symbols.c (local_label_name): symbols now start with ^A.

	* read.c, subsegs.c, write.c obj-coff.c: added handling of
	  `.bss` pseudo op for unitialized data. The new gcc (1.37.9x)
	  generate these sections.  .align: will use NOP_OPCODE or 0
	  for padding. This is just for being nice to the
	  disassembler.

	* expr.c (operand): changed to generate local label "\001L0"
	  starting with a ^A so that it is recognized as a local label.

	* as.c (perform_an_assembly_pass): zero bss_fix_root, too.

	* config/tc-i386.c: tc-i386.c: added handling of the following opcodes:
	  i/o opcodes - inb, inw, outb and outw.  string manipulation with
	  att syntax - scmp, slod, smov, ssca, ssto.

	* config/obj-coff.c: (for aix386) Moved the symbols .text, .data and .bss
	  to just after .file .

	  In obj_crawl_symbol_chain() where it tries to put the external
	  symbols apart, with the condition:
	    (!S_IS_DEFINED(symbolP) &&
	     !S_IS_DEBUG(symbolP) &&
	     !SF_GET_STATICS(symbolP))
	  it was moving too many symbols out. So I switch it back to the
	  condition:
	    (S_GET_STORAGE_CLASS(symbolP) == C_EXT && !SF_GET_FUNCTION(symbolP))

	  In obj_emit_relocations() added the conditional on KEEP_RELOC_INFO
	  so that we don't use the F_RELFLG which make the linker complain
	  that somebody has stripped the relocation info.

	  Also, the AIX ld program require that the relocation table
	  is sorted by r_vaddr like the standard ATT assembler does.

	  [he also changed the sizeof(struct ...)'s into the coff
	  style FOOSZ macros.  I'm not sure this is right, but I can't
	  remember why.  xoxorich.]

Fri Feb 21 01:08:48 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in, configure.in, doc: use the doc.  Build it, install
	  it, clean it, etc.

Tue Feb 18 02:21:25 1992  K. Richard Pixley  (rich at cygnus.com)

	* read.c: white space and comments only.

	* configure.in: use the new atof-ns32.c for ns32k.

	* write.c: comment change only.

	* config/tc-m88k.[hc]: pulled in from hack's unfinished work.  These
	  aren't yet integrated.

	* config/tc-i860.[hc]: blew off the dust.  Something must still be done
	  about conflicting relocation types.

	* config/tc-ns32k.c: Replaced previous tc_aout_fix_to_chars stub with the
	  real thing.

	* config/tc-i960.c, config/tc-sparc.c: white space and comments only.

	* config/tc-a29k.h: delete duplicate macro definition.

	* new file atof-ns32k.c copied from hack's last unreleased gas.

Mon Feb 17 07:51:06 1992  K. Richard Pixley  (rich at cygnus.com)

	* config/tc-ns32k.c: actually make tc_aout_fix_to_chars work
	  rather than abort.

	* nearly everything.  flush ChangeLog, package as gas-1.92.1.
	  ChangeLog's prior to this are sketchy at best.  I have logs.
	  They just aren't ChangeLogs.

Copyright (C) 1992-1995 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:
