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.
	* symbol.c (symbol_print_statistics): New function.
	* symbol.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)

	* 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>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Split huge vms_write_object_file routine into managable pieces.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* read.c (po_hash): Now static.

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

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

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

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

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

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

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

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

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

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

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

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

	* All files: Updated FSF address.

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

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

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

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

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

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

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

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

	* conf.in: Regenerate with autoreconf.

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

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

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

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

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

	* conf.in: Add undef of HAVE_SBRK.

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

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

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

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

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

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

	* tc-m68k.c (m68k_init_after_args): Test for m68360.
	(md_parse_option): Likewise.
	(md_show_usage): Mention m68360.
	* 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>

	* 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.
	* 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 legel 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.

	* 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.
	* cofnig/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)

	* 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)

	* 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)

	* 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)

	* 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.
	* 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
	hexidecimal 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.
	* 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 *.

	* 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.ch, 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, tc-h8500.c, tc-h8500.h, 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.
	* obj-vms.c: Patch to fix bug where we were not correctly parsing the
	  stabs directives.
	* 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.
	* obj-vms.c (obj_aout_stab):  Add code to generate listing file.
	* 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.
	* 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.
	* obj-vms.c (VMS_LSYM_Parse):  Correctly handle case of continuation
	  stabs directives.
	* 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.
	* 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, 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.
	* tc-i386.h: Define SUB_SEGMENT_ALIGN.
	* tc-a29k.h: Define ZERO_BASED_SEGMENTS.
	* 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.

	* obj-coff.c (obj_coff_endef): Use as_warn, not fprintf.

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

	* 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.
	* tc-m68k.h (OPTIONAL_REGISTER_PREFIX): Define to be "%", if not
	M68KCOFF.

	* obj-coffbfd.c (fill_section): set STYP_NOLOAD bit for .bss
	section.

	* atof-ieee.c, atof-ns32k.c, 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)

	* 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)

	* obj-coff.c (callj_table): Delete global variable.
	(obj_emit_relocations): Define it locally here, and only if
	TC_I960 is defined.

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

	* obj-coff.c: Replaced ANSI and non-ANSI function declarations
	with a single set using PARAMS macro.

	* tc-i960.c (tc_bout_fix_to_chars): Bit-field fixups want a length
	of 2.

	* tc-i960.c: Missed a couple of 0->NO_RELOC conversions.

	* 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)

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

	* 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)

	* obj-coffbfd.c (write_object_file): don't fixup for the z8k
	* tc-z8k.c: lots of bug fixes

Tue Sep 29 10:51:55 1992  Ian Lance Taylor  (ian@cygnus.com)

	* tc-i960.h, tc-i960.c: avoid the ANSI preprocessor addition
	#elif, since it is not supported by old compilers.
	ho-rs6000.h, 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.

	* 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)

	* 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)

	* 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)

	* tc-m68k.c: Replace "enum m68k_architecture" with "int"
	throughout.  That enum no longer means what we thought it meant.

	* tc-m68k.c (md_assemble, md_parse_option): Handle new
	"-mno-688[58]1" options.

	* tc-m68k.c: Added CPU32 support.

Fri Sep 18 08:02:18 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

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

	* obj-coffbfd.h: define WARN_SIGNED_OVERFLOW_WORD.
	obj-coffbfd.c (fixup_segment): check for signed .word overflow if
	WARN_SIGNED_OVERFLOW_WORD.

	* 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
	* obj-coffbfd.h : added stuff
	* tc-i386.c (tc_coff_fix2rtype): new function
	* 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

	* 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.
	tc-m68kmote.c, tc-m68kmote.h: removed now superfluous files.
	From Steve Chamberlain:
	m68kcoff.mt: for m68k COFF.
	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.
	obj-coffbfd.h: define WORKING_DOT_WORD (too hard to support) and
	 handle m68k.
	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)

	* obj-bout.h, obj-bout.c (obj_header_append, obj_symbol_to_chars),
	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.

	* tc-m68k.c: use TARGET_CPU to choose default cpu type.

	* 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)

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

	* obj-bout.c (obj_emit_relocations): Emit alignment relocs despite
	their not having symbols associated.

	* 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.
	* 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)

	* 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)

	* 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)

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

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

	* 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)

	* obj-coffbfd.c: use is a synonym for section, (do_relocs_for):
	calc the base of relocs correctly.
	* 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)

	* tc-m68k.h, 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.

	* 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 accomodate 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.

	* obj-aout.c: do not include stab.gnu.h if NO_LISTING.

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

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

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

	* tc-m88k.[hc]: pulled in from hack's unfinished work.  These
	  aren't yet integrated.

	* tc-i860.[hc]: blew off the dust.  Something must still be done
	  about conflicting relocation types.

	* tc-ns32k.c: Replaced previous tc_aout_fix_to_chars stub with the
	  real thing.

	* tc-i960.c, tc-sparc.c: white space and comments only.

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