2003-03-25  Stan Cox   <scox@redhat.com>
	    Nick Clifton  <nickc@redhat.com>
	    
	Contribute support for Intel's iWMMXt chip - an	ARM variant:

	* arm.h (ARM_NOTE_SECTION): Define.

2002-11-30  Alan Modra  <amodra@bigpond.net.au>

	* ecoff.h: Replace boolean with bfd_boolean.
	* xcoff.h: Likewise.

2002-03-18  Tom Rix  <trix@redhat.com>

	* rs6k64.h: Add U64_TOCMAGIC, AIX 5 64 bit magic number.

2002-02-01  Tom Rix  <trix@redhat.com>

	* xcoff.h: Conditionally support <aiaff> for pre AIX 4.3.
 
2002-01-31  Ivan Guzvinec  <ivang@opencores.org>

	* or32.h: New file.

2001-12-24  Tom Rix  <trix@redhat.com>

	* xcoff.h (xcoff_big_format_p): Make <bigaf> the default archive 
	format.
	(XCOFFARMAG_ELEMENT_SIZE, XCOFFARMAGBIG_ELEMENT_SIZE): Define for 
	archive header ascii elements.  

2001-12-17  Tom Rix  <trix@redhat.com>

	* xcoff.h :  Add .except and .typchk section string and styp flags.
	Fix xcoff_big_format_p macro.  

2001-12-16  Tom Rix  <trix@redhat.com>

	* xcoff.h : Clean up formatting. 

2002-01-15  Richard Earnshaw  <rearnsha@arm.com>

	* arm.h (F_VFP_FLOAT): Define.

2001-11-11  Timothy Wall  <twall@alum.mit.edu>

	* ti.h: Move arch-specific stuff from here...
	(COFF_ADJUST_SYM_IN/OUT): Optionally put page flag into symbol
	value. 
	* tic54x.h: ...to here.
	
2001-10-26  Christian Groessler  <cpg@aladdin.de>

	* external.h (GET_LINENO_LNNO): Fix usage of H_GET_32/16.
	(PUT_LINENO_LNNO): Likewise with H_PUT_32/16.

2001-09-21  Nick Clifton  <nickc@cambridge.redhat.com>

	* ti.h (GET_SCNHDR_PAGE): Fix compile time warning.

2001-09-18  Alan Modra  <amodra@bigpond.net.au>

	* external.h (GET_LINENO_LNNO): Use H_GET_32/16.
	(PUT_LINENO_LNNO): Use H_PUT_32/16.
	* m88k.h (GET_LNSZ_SIZE, GET_LNSZ_LNNO, GET_SCN_NRELOC,
	GET_SCN_NLINNO): Use H_GET_32.
	(PUT_LNSZ_LNNO, PUT_LNSZ_SIZE, PUT_SCN_NRELOC, PUT_SCN_NLINNO):
	Use H_PUT_32.
	* ti.h: Formatting fixes.  Make use of H_GET_* and H_PUT_* throughout.
	* xcoff.h: White space changes.

2001-09-05  Tom Rix <trix@redhat.com>

	* xcoff.h : Add XCOFF_SYSCALL32 and XCOFF_SYSCALL64 hash table flags.
	
2001-08-27  Andreas Jaeger  <aj@suse.de>

	* xcoff.h (struct __rtinit): Make proper prototype for rtl.

Fri Aug 24 01:18:51 2001  J"orn Rennecke <amylaar@redhat.com>

	* internal.h (R_JMP2, R_JMPL2, R_MOVL2): Comment spelling fix.

2001-04-05  Tom Rix <trix@redhat.com>

	* rs6000.h : move xcoff32 external structures from xcofflink. 
	* rs6k64.h : move xcoff64 external structures from xcofflink. 
	* internal.h : promote 32 bit structure elements to 64 bit
	for xcoff64 support
	* xcoff.h : New file.
	
2001-03-23  Nick Clifton  <nickc@redhat.com>

	* a29k.h: Fix compile time warning.
	* external.h: Fix compile time warning.
	* m88k.h: Fix compile time warning.

2001-03-13  Nick Clifton  <nickc@redhat.com>

	* external.h: New file. Common structure definitions found in
	other COFF header files.

	* a29k.h: Use external.h.
	* apollo.h: Use external.h.
	* arm.h: Use external.h.
	* h8300.h: Use external.h.
	* h8500.h: Use external.h.
	* i386.h: Use external.h.
	* i860.h: Use external.h.
	* ia64.h: Use external.h.
	* m68k.h: Use external.h.
	* m88k.h: Use external.h.
	* mcore.h: Use external.h.
	* mips.h: Use external.h.
	* mipspe.h: Use external.h.
	* powerpc.h: Use external.h.
	* rs6000.h: Use external.h.
	* rs6k64.h: Use external.h.
	* sh.h: Use external.h.
	* sparc.h: Use external.h.
	* tic30.h: Use external.h.
	* tic80.h: Use external.h.
	* w65.h: Use external.h.
	* we32k.h: Use external.h.
	* z8k.h: Use external.h.

2001-02-09  David Mosberger  <davidm@hpl.hp.com>

	* pe.h (PEPAOUTSZ): Rename from PEP64AOUTSZ.
	Rename from PEPAOUTHDR.

2001-01-23  H.J. Lu  <hjl@gnu.org>

	* pe.h (struct external_PEI_DOS_hdr): New.
	(struct external_PEI_IMAGE_hdr): New.

2000-12-11  Alan Modra  <alan@linuxcare.com.au>

	* ti.h (OCTETS_PER_BYTE_POWER): Change #warning to #error.

2000-12-08  Alan Modra  <alan@linuxcare.com.au>

	* ti.h (OCTETS_PER_BYTE_POWER): Change #warn to #warning.

2000-06-30  DJ Delorie  <dj@cygnus.com>

	* pe.h: Clarify a comment.

2000-05-05  Clinton Popetz  <cpopetz@cygnus.com>

	* rs6k64.h (U802TOC64MAGIC): Change to U803XTOCMAGIC.

2000-04-24  Clinton Popetz  <cpopetz@cygnus.com>

	* rs6k64.h: New file.

2000-04-17  Timothy Wall  <twall@cygnus.com>
	
	* ti.h: Load page cleanup.
	* intental.h: Add load page field.
	
Mon Apr 17 16:44:01 2000  David Mosberger  <davidm@hpl.hp.com>

	* pe.h (PEP64AOUTHDR): New header for PE+.
	(PEP64AOUTSZ): New macro.
	(IMAGE_SUBSYSTEM_UNKNOWN): New macro.
	(IMAGE_SUBSYSTEM_NATIVE): Ditto.
	(IMAGE_SUBSYSTEM_WINDOWS_GUI): Ditto.
	(IMAGE_SUBSYSTEM_WINDOWS_CUI): Ditto.
	(IMAGE_SUBSYSTEM_POSIX_CUI): Ditto.
	(IMAGE_SUBSYSTEM_WINDOWS_CE_GUI): Ditto.
	(IMAGE_SUBSYSTEM_EFI_APPLICATION): Ditto.
	(IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER): Ditto.
	(IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER): Ditto.
	* internal.h (PE_DEF_FILE_ALIGNMENT): Define only if not defined
	already.
	* ia64.h: New file.

2000-04-13  Alan Modra  <alan@linuxcare.com.au>

	* ti.h (ADDR_MASK): Don't use ul suffix on constants.
	(PG_MASK): Ditto.

2000-04-11  Timothy Wall  <twall@cygnus.com>

	* ti.h: Remove load page references until load pages are
	reimplemented. 
	* tic54x.h: Ditto.
	
2000-04-07  Timothy Wall  <twall@cygnus.com>

	* internal.h: Fix some comments related to TI COFF (instead of tic80).
	* ti.h: New.
	* tic54x.h: New.
	
Wed Apr  5 22:08:41 2000  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (R_SH_LOOP_START, R_SH_LOOP_END): Define.

2000-03-15  Kazu Hirata  <kazu@hxi.com>

	* internal.h: Fix a typo in the comment for R_MOVL2.

2000-02-28  Nick Clifton  <nickc@cygnus.com>

	* mipspe.h (MIPS_PE_MAGIC): Define.
	* sh.h (SH_PE_MAGIC): Define.

2000-02-22  Nick Clifton  <nickc@cygnus.com>  DJ Delorie <dj@cygnus.com>

	* sh.h: Add Windows CE definitions.
	* arm.h: Add Windows CE definitions.
	* mipspe.h: New file: Windows CE definitions for MIPS.
	* pe.h: Add constants for ILF support.
	
2000-01-05  Nick Clifton  <nickc@cygnus.com>

	* pe.h: Fix formatting of comments.
	(IMAGE_FILE_AGGRESSIVE_WS_TRIM): Define.
	(IMAGE_FILE_LARGE_ADDRESS_AWARE): Define.
	(IMAGE_FILE_16BIT_MACHINE): Define.
	(IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP): Define.
	(IMAGE_FILE_UP_SYSTEM_ONLY): Define.
	(IMAGE_FILE_MACHINE_UNKNOWN): Define.
	(IMAGE_FILE_MACHINE_ALPHA): Define.
	(IMAGE_FILE_MACHINE_ALPHA64): Define.
	(IMAGE_FILE_MACHINE_I386): Define.
	(IMAGE_FILE_MACHINE_IA64): Define.
	(IMAGE_FILE_MACHINE_M68K): Define.
	(IMAGE_FILE_MACHINE_MIPS16): Define.
	(IMAGE_FILE_MACHINE_MIPSFPU): Define.
	(IMAGE_FILE_MACHINE_MIPSFPU16): Define.
	(IMAGE_FILE_MACHINE_POWERPC): Define.
	(IMAGE_FILE_MACHINE_R3000): Define.
	(IMAGE_FILE_MACHINE_R4000): Define.
	(IMAGE_FILE_MACHINE_R10000): Define.
	(IMAGE_FILE_MACHINE_SH3): Define.
	(IMAGE_FILE_MACHINE_SH4): Define.
	(IMAGE_FILE_MACHINE_THUMB): Define.

1999-09-20  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* internal.h: Delete bogus R_PCLONG, duplicate R_RELBYTE and
	R_RELWORD, and rewrite some R_* as decimal.

1999-09-06  Donn Terry  <donn@interix.com>

	* internal.h (DTYPE): Define.
	* pe.h (struct external_PEI_filehdr): Rename from
	external_PE_filehdr.  Define even if COFF_IMAGE_WITH_PE is not
	defined.

1999-07-17  Nick Clifton  <nickc@cygnus.com>

	* arm.h (F_SOFT_FLOAT): Rename from F_SOFTFLOAT.

1999-06-21  Philip Blundell  <pb@nexus.co.uk>

	* arm.h (F_SOFTFLOAT): Define.

1999-07-05  Nick Clifton  <nickc@cygnus.com>

	* arm.h (F_ARM_5): Define.

Wed Jun  2 18:08:18 1999  Richard Henderson  <rth@cygnus.com>

	* internal.h (BEOS_EXE_IMAGE_BASE, BEOS_DLL_IMAGE_BASE): New.

Mon May 17 13:35:35 1999  Stan Cox  <scox@cygnus.com>

	* arm.h (F_PIC, F_ARM_2, F_ARM_2a, F_ARM_3, F_ARM_3M,
	F_ARM_4, F_ARM_4T, F_APCS26): Changed values to distinguish
	F_ARM_2a, F_ARM_3M, F_ARM_4T.

1999-05-15  Nick Clifton  <nickc@cygnus.com>

	* mcore.h (IMAGE_REL_MCORE_RVA): Define.

1999-04-21  Nick Clifton  <nickc@cygnus.com>

	* mcore.h (GET_LINENO_LNNO): New macro.
	(PUT_LINENO_LNNO): New macro.

1999-04-08  Nick Clifton  <nickc@cygnus.com>

	* mcore.h: New header file.  Defines for Motorola's MCore
	processor. 

Sun Dec  6 21:36:37 1998  Mark Elbrecht  <snowball3@usa.net>

	* internal.h (C_WEAKEXT): Define.

Wed Jan 27 13:35:35 1999  Stan Cox  <scox@cygnus.com>

	* arm.h (F_PIC_INT, F_ARM_2, F_ARM_3, F_ARM_4, F_APCS26):
	Changed values to avoid clashing with IMAGE_FILE_* coff header
	flag values.
	
Wed Apr  1 16:06:15 1998  Nick Clifton  <nickc@cygnus.com>

	* internal.h: Document numbers associated with Thumb symbol
	types. 

Fri Mar 27 17:16:57 1998  Ian Lance Taylor  <ian@cygnus.com>

	* internal.h (ISPTR, ISFCN, ISARY): Add casts to unsigned long.

Mon Feb  2 17:10:38 1998  Steve Haworth  <steve@pm.cse.rmit.EDU.AU>

	* tic30.h: New file.

Fri Dec 12 11:49:07 1997  Fred Fish  <fnf@cygnus.com>

	* tic80.h (R_MPPCR15W): New relocation type, for 15 bit PC relative
	offsets.

Tue Dec  2 10:21:40 1997  Nick Clifton  <nickc@cygnus.com>

	* arm.h (COFFARM): New define.

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

	* sh.h (R_SH_SWITCH8): New.

Sat Nov 22 15:10:14 1997  Nick Clifton  <nickc@cygnus.com>

	* internal.h (C_THUMBEXTFUNC, C_THUMBSTATFUNC): Constants to
	define static and external functions.

	* arm.h: Add bits to support PIC and APCS-FLOAT type binaries,
	when implemented.

Fri Oct  3 14:25:17 1997  Fred Fish  <fnf@cygnus.com>

	* tic80.h (R_PPL16B): Make constant uppercase for consistency.

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

	* go32exe.h: New file.

Tue Jul  8 12:23:55 1997  Fred Fish  <fnf@cygnus.com>

	* tic80.h (TIC80_TARGET_ID): Add define.
	* internal.h (struct internal_filehdr): Add f_target_id field.

Tue Jun  3 16:44:18 1997  Nick Clifton  <nickc@cygnus.com>

	* internal.h: Add storage classes for Thumb symbols

Mon May 26 14:07:55 1997  Ian Lance Taylor  <ian@cygnus.com>

	* tic80.h (R_PPL16B): Correct value.

Tue May 13 10:21:14 1997  Nick Clifton  <nickc@cygnus.com>

	* arm.h (constants):   Added new flag bits F_APCS_26 and
	F_APCS_SET for the f_flags field of the filehdr structure.  Added new
	flags: F_APCS26, F_ARM_2, F_ARM_3, F_ARM_7, F_ARM_7T to store
	information in the flags field of the internal_f structure used by BFD
	routines.

Sat May  3 08:24:59 1997  Fred Fish  <fnf@cygnus.com>

	* internal.h (C_UEXT, C_STATLAB, C_EXTLAB, C_SYSTEM):
	New storage classes for TIc80.

Fri Apr 18 11:52:55 1997  Niklas Hallqvist  <niklas@appli.se>

	* alpha.h (ALPHA_ECOFF_BADMAG): Recognize *BSD/alpha magic too.
	(ALPHA_R_LITERALSLEAZY): Define.
	* ecoff.h (ALPHA_MAGIC_BSD): Define.

Wed Jan 29 11:31:51 1997  Ian Lance Taylor  <ian@cygnus.com>

	* i960.h (R_IPR13, R_ALIGN): Define.

Mon Jan 27 13:34:30 1997  Ian Lance Taylor  <ian@cygnus.com>

	* internal.h (R_IPRMED, R_OPTCALL, R_OPTCALLX): Move definitions
	from here...
	* i960.h (R_IPRMED, R_OPTCALL, R_OPTCALLX): ...to here.

Wed Jan 22 20:10:47 1997  Fred Fish  <fnf@cygnus.com>

	* tic80.h (TIC80MAGIC): Renamed to TIC80_AOUTHDR_MAGIC.

Fri Dec 27 22:05:45 1996  Fred Fish  <fnf@cygnus.com>

	* tic80.h: New file for TIc80 support.

Thu Dec 19 16:18:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* arm.h (_LIT): Define.

Fri Jun 28 12:54:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* pe.h (FILHSZ): Define.

Wed Jun 26 16:24:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* All files: Define FILHSZ, AOUTSZ, AOUTHDRSZ, SCNHSZ, SYMESZ,
	AUXESZ, LINESZ, RELSZ as numeric constants rather than uses of
	sizeof.  Define AOUTHDRSZ in all files.
	* pe.h (AOUTSZ): Define by adding to AOUTHDRSZ.

Fri Jun 21 11:17:46 1996  Richard Henderson  <rth@tamu.edu>

	* alpha.h: Add declarations for relocation types added for Alpha
 	OSF/1 3.0.

Tue Jun 18 16:04:29 1996  Jeffrey A. Law  <law@rtl.cygnus.com>

	* h8300.h (H8300SMAGIC): Define.
	(H8300SBADMAG): Define.

Mon Jun 10 11:53:28 1996  Jeffrey A Law  (law@cygnus.com)

	* internal.h (R_BCC_INV, R_JMP_DEL): New relocations for
	relaxing in the H8/300 series.

Thu May 16 15:49:22 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sh.h (R_SH_CODE, R_SH_DATA, R_SH_LABEL): Define.

Tue May  7 00:36:39 1996  Jeffrey A Law  (law@cygnus.com)

	* internal.h (R_JMPL2): Renamed from R_JMPL_B8 to be
	consistent with other similar relocs.

	* internal.h (H8/300 specific relocs): Add comments better
	explaining what each reloc is used for.
	(R_MOV16B1, R_MOV16B2): Renamed from R_MOVB1 and R_MOVB2.
	(R_MOV24B1, R_MOV24B2): Renamed from R_MOVLB1 and R_MOVLB2.
	(R_MOVL1, R_MOVL2): New relocs.
	
Fri May  3 13:01:12 1996  Jeffrey A Law  (law@cygnus.com)

	* internal.h (R_PCRWORD_B): Define for the h8300 relaxing
	linker.

Wed May  1 19:21:03 1996  Ian Lance Taylor  <ian@cygnus.com>

	* internal.h (SCNNMLEN): Define.
	(struct internal_scnhdr): Use SCNNMLEN for s_name field.

Fri Mar 29 13:41:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* pe.h: Define IMAGE_COMDAT codes.

Wed Mar 27 17:29:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* arm.h (union external_auxent): Add x_checksum, x_associated, and
	x_comdat fields to x_scn struct.
	* i386.h (union external_auxent): Likewise.
	* powerpc.h (union external_auxent): Likewise.
	* internal.h (union internal_auxent): Likewise.

Thu Mar 21 16:25:57 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* ecoff.h (struct ecoff_find_line): Add caching fields.

Thu Mar 14 15:22:44 1996  Jeffrey A Law  (law@cygnus.com)

	* internal.h (R_MEM_INDIRECT): New reloc for the h8300.
 
Fri Feb  9 10:44:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aux-coff.h: Rename from aux.h, to avoid problems on hapless DOS
	systems which think that aux is a com port.

Mon Feb  5 18:35:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* i960.h (F_I960HX): Define.

Wed Jan 31 13:11:54 1996  Richard Henderson  <rth@tamu.edu>

	* aux.h: New file.
	* internal.h, m68k.h: Protect against multiple inclusion.

Wed Nov 22 13:48:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.h (_RCONST, STYP_RCONST, RELOC_SECTION_RCONST): Define.
	(NUM_RELOC_SECTIONS): Update.
	* symconst.h (scRConst): Define.

Tue Nov 14 18:54:29 1995  Ian Lance Taylor  <ian@cygnus.com>

	* internal.h (C_NT_WEAK): Define.

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

	* rs6000.h (STYP_OVRFLO): Define.

Tue Nov  7 14:38:45 1995  Kim Knuttila  <krk@cygnus.com>

	* powerpc.h (IMAGE_NT_OPTIONAL_HDR_MAGIC): Added define.
	* pe.h: Added defines for file level flags

Mon Nov  6 17:28:01 1995  Harry Dolan  <dolan@ssd.intel.com>

	* i860.h: New file, based on i386.h.

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

	* m68k.h (PAGEMAGICEXECSWAPPED): Define.
	(PAGEMAGICPEXECSWAPPED): Define.
	(PAGEMAGICPEXECTSHLIB): Define.
	(PAGEMAGICPEXECPAGED): Define.
	(_COMMENT): DEFINE.
	* m88k.h (_COMMENT): Define.

Wed Oct 18 18:36:19 1995  Geoffrey Noer  <noer@cygnus.com>

	* sym.h: #if 0'd out runtime_pdr struct because it chokes 
	Visual C++ and there aren't any references to it elsewhere in gdb.

Mon Oct 16 11:12:24 1995  Ian Lance Taylor  <ian@cygnus.com>

	* rs6000.h (SMALL_AOUTSZ): Define.

	* internal.h (XMC_TD): Define.

Tue Oct 10 18:41:03 1995  Ian Lance Taylor  <ian@cygnus.com>

	* internal.h (struct internal_aouthdr): Add o_cputype field.
	* rs6000.h (AOUTHDR): Rename o_resv1 to o_cputype.

Mon Oct  9 14:45:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* rs6000.h (AOUTHDR): Add o_maxdata field.  Add comments.
	(_PAD, _LOADER): Define.
	(STYP_LOADER): Define.
	* internal.h (struct internal_aouthdr): Add o_maxdata field.

Thu Oct  5 10:02:57 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.h: Define section name macros and STYP macros for various
	Alpha sections: .got, .hash, .dynsym, .dynstr, .rel.dyn, .conflic,
	.comment, .liblist, .dynamic.

Wed Oct  4 10:56:35 1995  Kim Knuttila  <krk@cygnus.com>

	* pe.h: Moved DOSMAGIC and NT_SIGNATURE defines here
	* powerpc.h: removed DOSMAGIC, NT_SIGNATURE, and DEFAULT_* defines
	Also removed other unused defines (various MAGIC ones)
	* i386.h: removed DOSMAGIC, NT_SIGNATURE, and DEFAULT_* defines
	* arm.h: removed DOSMAGIC, NT_SIGNATURE, and DEFAULT_* defines
	* apollo.h: removed unused DEFAULT_* defines
	* alpha.h: removed unused DEFAULT_* defines
	* h8500.h: removed unused DEFAULT_* defines
	* h8300.h: removed unused DEFAULT_* defines
	* i960.h: removed unused DEFAULT_* defines
	* m88k.h: removed unused DEFAULT_* defines
	* we32k.h: removed unused DEFAULT_* defines
	* rs6000.h: removed unused DEFAULT_* defines
	* mips.h: removed unused DEFAULT_* defines
	* m68k.h: removed unused DEFAULT_* defines
	* z8k.h: removed unused DEFAULT_* defines
	* w65.h: removed unused DEFAULT_* defines
	* sparc.h: removed unused DEFAULT_* defines
	* sh.h: removed unused DEFAULT_* defines

Fri Sep 29 08:40:08 1995  Kim Knuttila  <krk@cygnus.com>

	* powerpc.h: Reformatted to GNU coding conventions.

Wed Sep 27 06:50:50 1995  Kim Knuttila  <krk@nellie>

	* pe.h: added defines for more section characteristics
	* powerpc.h (new file): base coff definitions for ppc PE

Tue Sep 12 12:08:20 1995  Ian Lance Taylor  <ian@cygnus.com>

	* internal.h (struct internal_syment): Change n_numaux field from
	char to unsigned char.

Fri Sep  1 15:39:36 1995  Kazumoto Kojima  <kkojima@info.kanagawa-u.ac.jp>

	* mips.h (struct rpdr_ext): Define.

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

	* internal.h (internal_aouthdr, internal_filehdr):
	don't indirect the pe stuff.

Tue Aug 29 14:16:07 1995  steve chamberlain  <sac@slash.cygnus.com>

	* i386.h (NT_DEF_RESERVE, NT_DEF_COMMIT): Make the same
	as 'the other' compiler.
	* internal.h (NT_IMAGE_BASE): Deleted.
	(NT_EXE_IMAGE_BASE, NT_DLL_IMAGE_BASE): New.
	(PE_DEF_SECTION_ALIGNMENT, PE_DEF_FILE_ALIGNMENT): New.
	(R_IMAGEBASE): New.

Mon Aug 21 18:12:19 1995  steve chamberlain  <sac@slash.cygnus.com>

	* internal.h: (internal_filehdr): Moved PE stuff into
	internal_extra_pe_filehdr.
	(internal_aouthdr): Moved PE stuff into
	interanl_extra_pe_aouthdr.

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

	* internal.h: Move R_SH_* relocs from here...
	* sh.h: ...to here.
	(R_SH_SWITCH16, R_SH_SWITCH32): Define.
	(R_SH_USES, R_SH_COUNT, R_SH_ALIGN): Define.

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

	* internal.h (NT_DEF_RESERVE, NT_DEF_COMMIT): Increase a lot.

Tue May 16 15:08:20 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* internal.h (NT_subsystem, NT_stack_heap): Delete

Tue May 16 15:08:20 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* internal.h (NT_subsystem, NT_stack_heap): Now extern.

Sat May 13 10:14:08 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* pe.h: New file.
	* i386.h (NT_SECTION_ALIGNMENT, NT_FILE_ALIGNMENT,
	NT_DEF_RESERVE, NT_DEF_COMMIT): New.
	* internal.h (internal_filehdr):  New fields for PE.
	(IMAGE_DATA_DIRECTORY): New.
	(internal_aouthdr): New fields for PE.

Tue Feb 14 17:59:37 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.h (struct ecoff_fdrtab_entry): Define.
	(struct ecoff_find_line): Define.

Sat Feb  4 14:38:03 1995  David Mosberger-Tang  <davidm@piston.cs.arizona.edu>

	* sym.h (struct pdr): field "prof" added.

	* alpha.h (PDR_BITS1_PROF_*): added, macros for PDR_BITS*_RESERVED_*
	updated accordingly.

Sun Jan 15 18:38:33 1995  Steve Chamberlain  <sac@splat>

	* w65.h: New file.

Wed Nov 23 22:43:38 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* sh.h (SH_ARCH_MAGIC_BIG, SH_ARCH_MAGIC_LITTLE): New.
	(SHBADMAG): Changed to suit.

Tue Jul 26 17:46:08 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* i960.h (F_I960JX): New macro.

Wed Jul  6 00:48:57 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* alpha.h:  Add definitions for alpha file header flags, encoding
	the object type of the file.

Mon Jun 20 13:47:01 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ecoff.h (ecoff_swap_tir_in): Remove declaration.
	(ecoff_swap_tir_out): Likewise.
	(ecoff_swap_rndx_in, ecoff_swap_rndx_out): Likewise.
	(struct ecoff_debug_swap): Add new fields: swap_tir_in,
	swap_rndx_in, swap_tir_out, swap_rndx_out, read_debug_info.

Sun Jun 12 03:51:52 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symconst.h:  Pick up SGI define for stIndirect.

Fri Apr 22 13:05:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (REGINFO): Don't define.
	(struct ecoff_reginfo): Don't define.

	* sh.h (SH_ARCH_MAGIC): Rename from SHMAGIC.  SHMAGIC is used by
	several targets to mean a shared library.
	(SHBADMAG): Corresponding change.

Thu Apr 14 13:00:53 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* mips.h (RELOC_BITS3_TYPE_BIG): Changed from 0x1e to 0x3e.
	(RELOC_BITS3_TYPEHI_LITTLE): Define.
	(RELOC_BITS3_TYPEHI_SH_LITTLE): Define.
	(MIPS_R_PCREL16): Change value from 8 to 12 to match Irix 4.
	(MIPS_R_RELHI): Define.
	(MIPS_R_RELLO): Define.
	(MIPS_R_SWITCH): Change value from 9 to 22.

Thu Apr  7 14:19:35 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* mips.h (MIPS_R_SWITCH): Define.

Thu Mar 31 19:28:33 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* internal.h (internal_aouthdr): Added comments for Apollo fields.

Thu Mar 31 16:28:02 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (STYP_ECOFF_LIB): Define as used on Irix 4.

Fri Mar 25 17:16:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (struct ecoff_debug_info): Add adjust field.
	(struct ecoff_value_adjust): Define.

Tue Mar 22 13:22:47 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* mips.h (MIPS_R_PCREL16): Define.

Sat Feb 26 10:26:38 1994  Ian Lance Taylor  (ian@cygnus.com)

	* ecoff.h: Add casts to avoid warnings from SVR4 cc.

Mon Feb 21 09:48:46 1994  Ian Lance Taylor  (ian@lisa.cygnus.com)

	* sym.h (struct runtime_pdr): Make field adr bfd_vma, not unsigned
	long.
	(SYMR): Make field value bfd_vma, not long.

Fri Feb  4 23:35:53 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* rs6000.h (STYP_DEBUG): Define.

Wed Feb  2 14:31:37 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* internal.h (union internal_auxent): Change x_csect.x_scnlen into
	a union of a long and a pointer to a symbol.  XCOFF sometimes uses
	this field as a symbol index.

Mon Jan 10 23:54:25 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (ecoff_debug_info): Remove fields line_end,
	external_dnr_end, external_pdr_end, external_sym_end,
	external_opt_end, external_aux_end, ss_end, external_fdr_end.
	Replace ifdbase with ifdmap.

Wed Jan  5 17:05:36 1994  Ken Raeburn  (raeburn@deneb.cygnus.com)

	* ecoff.h (STYP_EXTENDESC, STYP_COMMENT, STYP_XDATA, STYP_PDATA):
	Define.

Wed Jan  5 16:58:24 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (NUM_RELOC_SECTIONS): Define.

Tue Dec 21 09:24:56 1993  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* sparc.h (struct external_reloc): Rename field r_addend to
	r_offset.

Sat Dec 11 16:12:32 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* internal.h (R_DISP7, R_SH_IMM16): New reloc types.

Tue Nov 23 14:23:19 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (struct ecoff_debug_swap): Added *_end fields for all
	the symbolic information pointers.

	* sym.h: Named the EXTR structure ecoff_extr.

Fri Nov 19 08:21:18 1993  Ken Raeburn  (raeburn@rover.cygnus.com)

	* sparc.h (RELSZ): Use correct size.

Wed Nov 17 17:18:16 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* mips.h (struct ecoff_debug_info): Define.

Tue Nov  2 17:56:57 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (struct ecoff_debug_swap): Define.

Thu Oct 28 17:07:50 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* i386.h (I386LYNXMAGIC): Rename to LYNXCOFFMAGIC.
	* m68k.h (LYNXCOFFMAGIC): Define.
	* sparc.h: New file.

Tue Oct 19 15:34:50 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* alpha.h (external_aouthdr): Split four byte padding field into
	two byte bldrev field and two byte padding field.

	* ecoff.h (_LITA, _PDATA, _XDATA, STYP_LITA): Defined.

Wed Oct 13 15:52:34 1993  Ken Raeburn  (raeburn@cygnus.com)

	Sun Oct 10 17:27:10 1993  Troy Rollo (troy@cbme.unsw.edu.au)

	* internal.h: Added o_sri, o_inlib and o_vid for Apollos as well
	as R_DIR16.

	* apollo.h: New file

Mon Oct 11 17:16:48 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (REGINFO, struct ecoff_reginfo): Define.

Tue Oct  5 10:52:53 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* rs6000.h: Change non-ASCII characters in comment to octal
	escapes.

Tue Sep 28 03:27:04 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* ecoff.h (_FINI, STYP_ECOFF_FINI):  Add to support .fini section.

Fri Sep 24 11:53:53 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* mips.h (BADMAG): Recognize MIPS_MAGIC_LITTLE3 and MIPS_MAGIC_BIG3.
	* ecoff.h: Define MIPS_MAGIC_LITTLE3 and MIPS_MAGIC_BIG3.

Thu Sep 23 21:07:14 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* mips.h (BADMAG): Recognize MIPS_MAGIC_LITTLE2 and MIPS_MAGIC_BIG2.
	* ecoff.h: Define MIPS_MAGIC_LITTLE2 and MIPS_MAGIC_BIG2.

Thu Sep 16 20:27:21 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)

	* sym.h, symconst.h: Add comment stating these files are not part
	of GDB, GAS, etc.  In 1991, when we asked rms whether we could
	include these files in GDB (although they are copyrighted by
	someone besides the FSF), he said it was OK if they were not
	considered part of GDB.

Fri Sep 10 17:40:35 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (AUX_PUT_ANY): Cast val argument to bfd_vma.

	* alpha.c (external_aouthdr): Need four bytes of padding between
	vstamp and tsize.

Tue Sep  7 14:20:43 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.h (AUX_GET_ANY, AUX_PUT_ANY): Changed to reflect further
	change in bfd swapping routine names.

Tue Sep  7 10:15:17 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* ecoff.h (AUX_GET_ANY): Change name of _do_getb32 to reflect bfd
	changes.

Fri Aug 13 14:30:32 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ecoff.h (RELOC_SECTION_NONE): Define.

Thu Aug 12 11:24:42 1993  Ian Lance Taylor  (ian@cygnus.com)

	* alpha.h (struct external_reloc): Add r_symndx field.
	(RELSZ): Correct.
	(RELOC_BITS*): Correct.
	(ALPHA_R_*): Define.
	* ecoff.h (RELOC_SECTION_{XDATA,PDATA,FINI,LITA,ABS}): Define.
	(r_extern): Undefine.
	* internal.h (struct internal_reloc): Make r_vaddr bfd_vma rather
	than long.  Add r_extern field.

	* alpha.h (PDR_BITS*): Define.
	* sym.h (PDR): Give correct names to new fields.

	* ecoff.h: Moved MIPS reloc definitions from here...
	* mips.h: to here.

Mon Aug  2 16:37:14 1993  Stu Grossman  (grossman at cygnus.com)

	* i386.h:  Add Lynx magic number.

Tue Aug  3 11:17:53 1993  Ian Lance Taylor  (ian@cygnus.com)

	* alpha.h: Corrected external symbolic debugging structures to
	match actual usage.
	* internal.h (internal_filehdr, internal_aouthdr,
	internal_scnhdr): Changed type of some fields to bfd_vma so they
	can hold 64 bits.
	* sym.h (HDRR, FDR, PDR, EXTR): Likewise.
	(PDR): Added new fields found on Alpha.
	* symconst.h (magicSym2): Define; new value found on Alpha.

	* ecoff.h: New file.
	* alpha.h, mips.h: Moved common information into ecoff.h.  Moved
	external structure definitions in from ecoff-ext.h.
	* ecoff-ext.h: Removed; information now in alpha.h and mips.h.

Sun Jul 18 21:43:59 1993  Jim Kingdon  (kingdon@rtl.cygnus.com)

	* i386.h: Recognize I386PTXMAGIC.

Fri Jul 16 09:54:35 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.h (MIPS_AOUT_{OZ}MAGIC): Renamed from {OZ}MAGIC.

Thu Jul 15 12:23:55 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* m88k.h (union external_auxent): Move x_fcn back inside x_fcnary.
	({GET,PUT}_FCN_{LNNOPTR,ENDNDX}): Adjust accordingly.

Sun Jul 11 18:00:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* m68k.h: Define MC68KBCSMAGIC.

Thu Jun 10 11:46:28 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.h (_INIT, STYP_MIPS_INIT): Define (used on Irix4).
	(STYP_OTHER_LOAD): Define as STYP_MIPS_INIT.

Wed Jun  9 15:09:09 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.h (OMAGIC): Define.

Tue Jun  8 12:16:03 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	 Support for H8/300-H
	* h8300.h: New magic number.
	* internal.h: New relocations.

Mon Apr 26 18:04:47 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* internal.h, sh.h: Support for SH.

Sat Apr 24 21:34:59 1993  Jim Kingdon  (kingdon@cygnus.com)

	* a29k.h: Define _LIT.

Fri Apr 23 18:41:23 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* alpha.h: New file.

Thu Apr  8 12:36:34 1993  Ian Lance Taylor  (ian@cygnus.com)

	* internal.h (C_SHADOW, C_VERSION): Copied in from m88k.h.
	* m88k.h, i386.h, we32k.h: Don't define all the storage classes;
	they're already in internal.h.

Wed Apr  7 11:51:24 1993  Jim Kingdon  (kingdon@cygnus.com)

	* internal.h: Change n_sclass to unsigned char.
	Change C_EFCN to 0xff, change RS/6000 dbx symbols
	to no longer be signed.

Fri Mar 19 14:52:56 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* internal.h: Add H8/500 reloc types.

Wed Mar 17 09:46:03 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ecoff-ext.h (AUX_PUT_ANY): Don't use void values in branches of
	conditional expression.

Thu Mar  4 14:12:06 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ecoff-ext.h (AUX_GET_*): Rewrote to use new macro AUX_GET_ANY.
	(AUX_PUT_*): New macros corresponding to the AUX_GET macros.
	(ecoff_swap_tir_out): Added prototype.

	* mips.h (N_BTMASK, N_TMASK, N_BTSHFT, N_TSHIFT): Define; these
	are needed to interpret gcc debugging output.

Tue Feb  9 07:43:27 1993  Ian Lance Taylor  (ian@cygnus.com)

	* we32k.h (BTYPE, ISPTR, ISFCN, ISARY, DECREF): Removed
	more definitions duplicated in internal.h.

Wed Feb  3 09:18:24 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.h (RELOC_BITS3_TYPE_*): Correct for big endian machines.

Mon Jan 25 11:35:51 1993  Ian Lance Taylor  (ian@cygnus.com)

	* internal.h (internal_aouthdr): Added additional fields used only
	by MIPS ECOFF.

Thu Jan 21 10:28:38 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.h (AOUTHDR): Added additional fields used by ECOFF.

Tue Jan 19 12:21:19 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* i386.h, we32k.h (N_*, T_*, DT_*): Removed still more definitions
	duplicated in internal.h.

	* mips.h (RELOC_SECTION_*, ECOFF_R_*): Defined constants for ECOFF
	relocs.

Fri Jan 15 18:17:00 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff-ext.h: Added prototypes for new ECOFF swapping functions.
	(opt_ext): New structure.
	* mips.h (ZMAGIC): Defined to be 0413.
	(_LIB): Defined to be ".lib"
	(external_reloc): MIPS ECOFF relocs are only 8 bytes.  Added
	macros to aid in swapping.

Fri Jan  8 16:19:26 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff-ext.h: Added prototypes for ECOFF swapping functions.
	* internal.h (internal_scnhdr): Always provide s_align field, not
	just on i960.
	(internal_reloc): Always provide r_size field, not just on
	RS/6000.
	* mips.h (_RDATA, _SDATA, _SBSS, _LIT4, _LIT8, STYP_RDATA,
	STYP_SDATA, STYP_SBSS, STYP_LIT4, STYP_LIT8): Defined.
	(CODE_MASK, MIPS_IS_STAB, MIPS_MARK_STAB, MIPS_UNMARK_STAB,
	STABS_SYMBOL): Moved in from gdb/mipsread.c.

Wed Jan  6 14:01:46 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* i386.h, we32k.h: removed STYP_* defines, since they duplicated
	those in internal.h.

Tue Dec 29 15:40:07 1992  Ian Lance Taylor  (ian@cygnus.com)

	* i386.h: define I386AIXMAGIC for Danbury AIX PS/2 compiler.

Sat Dec 12 16:07:57 1992  Ian Lance Taylor  (ian@cygnus.com)

	* i386.h: don't define BTYPE, ISPTR, ISFCN, ISARY, DECREF: they
	are defined in internal.h.

Thu Nov 12 09:52:01 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* internal.h: (internal_reloc): r_offset is now a long.
	* z8k.h: slight comment enhancement

Wed Sep 30 07:46:08 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* internal.h: changed z8k reloc types

Fri Aug 28 10:16:31 1992  Brendan Kehoe  (brendan@cygnus.com)

	* we32k.h: new file

Thu Aug 27 13:00:01 1992  Brendan Kehoe  (brendan@cygnus.com)

	* symconst.h: comment out cruft at the end of #endif

Tue Aug 25 15:06:49 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* internal.h: added #define for STYP_LIT, removed from a29k and
	h8300.

	* z8k.h: added z8000 support

Thu Jul 16 16:32:00 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* internal.h: added R_RELLONG_NEG reloc type

Fri Jun 12 20:11:04 1992  John Gilmore  (gnu at cygnus.com)

	* symconst.h:  Fix unterminated comment.

Wed Jun 10 07:57:49 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* i386.h: a.out magic numbers from
	mohring@informatik.tu-muenchen.de

Mon Jun  8 20:13:33 1992  John Gilmore  (gnu at cygnus.com)

	* ecoff-ext.h, mips.h:  Use unsigned chars everywhere.
	(Suggested by Antti Miettinen.)

Tue Apr 14 15:18:44 1992  John Gilmore  (gnu at cygnus.com)

	* sym.h:  Add comments.
	* symconst.h:  Merge with Fred's changes.

Tue Apr 14 14:30:05 1992  Fred Fish  (fnf@cygnus.com)

	* symconst.h:  Pick up SGI defines for stStruct, stUnion, stEnum,
	langCplusplus, and langCplusplusV2.

Thu Apr  2 19:47:43 1992  John Gilmore  (gnu at cygnus.com)

	* sym.h, symconst.h:  MIPS has provided redistributable versions
	of these files.  Thanks!
	* ecoff-ext.h:  Add weakext bit to match new sym.h.

Fri Mar  6 00:10:46 1992  John Gilmore  (gnu at cygnus.com)

	* ecoff-ext.h:  Add relative file descriptors.

Thu Feb 27 11:53:04 1992  John Gilmore  (gnu at cygnus.com)

	* ecoff-ext.h:  New file for external (in-file) form of ecoff
	symbol structures.

Thu Feb  6 11:33:32 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* h8300.h: made the external_lineno l_lnno field 4 bytes wide.
	andded GET/PUT_LINENO_LNNO macros

Sat Nov 30 20:38:35 1991  Steve Chamberlain  (sac at rtl.cygnus.com)

	* a29k.h, h8300.h, i386.h, i960.h, internal.h, m68k.h, m88k.h,
	mips.h, rs6000.h: Move from above coff-<foo>.h.


Local Variables:
version-control: never
End:
