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 explicit.

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:
