diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog
index b0b9a5859..c8e67f16f 100644
--- a/include/coff/ChangeLog
+++ b/include/coff/ChangeLog
@@ -1,3 +1,7 @@
+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.
diff --git a/include/coff/arm.h b/include/coff/arm.h
index f9d0c8d6e..b7a00139e 100644
--- a/include/coff/arm.h
+++ b/include/coff/arm.h
@@ -1,10 +1,28 @@
-/*** coff information for the ARM */
+/* ARM COFF support for BFD.
+   Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define COFFARM 1
 
 /********************** FILE HEADER **********************/
 
-struct external_filehdr {
+struct external_filehdr
+{
 	char f_magic[2];	/* magic number			*/
 	char f_nscns[2];	/* number of sections		*/
 	char f_timdat[4];	/* time & date stamp		*/
@@ -26,6 +44,7 @@ struct external_filehdr {
  *	F_AR32WR	file has byte ordering of an AR32WR machine (e.g. vax)
  *	F_APCS_26	file uses 26 bit ARM Procedure Calling Standard
  *	F_APCS_SET	the F_APCS_26, F_APCS_FLOAT and F_PIC bits have been initialised
+ *	F_SOFTFLOAT	code does not use floating point instructions
  */
 
 #define F_RELFLG	(0x0001)
@@ -40,6 +59,7 @@ struct external_filehdr {
 #define	F_AR32WR	(0x0100)
 #define F_APCS_26	(0x0400)
 #define F_APCS_SET	(0x0800)
+#define F_SOFTFLOAT	(0x2000)
 
 /* Bits stored in flags field of the internal_f structure */
 
@@ -86,8 +106,6 @@ typedef struct
   char	entry[4];		/* entry pt.				*/
   char 	text_start[4];		/* base of text used for this file */
   char 	data_start[4];		/* base of data used for this file */
-
-
 }
 AOUTHDR;
 
@@ -109,9 +127,8 @@ AOUTHDR;
 #define NT_DEF_COMMIT        0x1000
 
 /********************** SECTION HEADER **********************/
-
-
-struct external_scnhdr {
+struct external_scnhdr
+{
 	char		s_name[8];	/* section name			*/
 	char		s_paddr[4];	/* physical address, aliased s_nlib */
 	char		s_vaddr[4];	/* virtual address		*/
@@ -146,8 +163,10 @@ struct external_scnhdr {
  * grouping will have l_lnno = 0 and in place of physical address will be the
  * symbol table index of the function name.
  */
-struct external_lineno {
-	union {
+struct external_lineno
+{
+	union
+	{
 		char l_symndx[4];	/* function name symbol index, iff l_lnno == 0*/
 		char l_paddr[4];	/* (physical) address of line number	*/
 	} l_addr;
@@ -167,9 +186,11 @@ struct external_lineno {
 
 struct external_syment 
 {
-  union {
+  union
+  {
     char e_name[E_SYMNMLEN];
-    struct {
+    struct
+    {
       char e_zeroes[4];
       char e_offset[4];
     } e;
@@ -186,37 +207,47 @@ struct external_syment
 #define N_BTSHFT	(4)
 #define N_TSHIFT	(2)
 
-union external_auxent {
-	struct {
+union external_auxent
+{
+	struct
+	{
 		char x_tagndx[4];	/* str, un, or enum tag indx */
-		union {
-			struct {
+		union
+		{
+			struct
+			{
 			    char  x_lnno[2]; /* declaration line number */
 			    char  x_size[2]; /* str/union/array size */
 			} x_lnsz;
 			char x_fsize[4];	/* size of function */
 		} x_misc;
-		union {
-			struct {		/* if ISFCN, tag, or .bb */
+		union
+		{
+			struct 			/* if ISFCN, tag, or .bb */
+			{
 			    char x_lnnoptr[4];	/* ptr to fcn line # */
 			    char x_endndx[4];	/* entry ndx past block end */
 			} x_fcn;
-			struct {		/* if ISARY, up to 4 dimen. */
+			struct 			/* if ISARY, up to 4 dimen. */
+			{
 			    char x_dimen[E_DIMNUM][2];
 			} x_ary;
 		} x_fcnary;
 		char x_tvndx[2];		/* tv index */
 	} x_sym;
 
-	union {
+	union
+	{
 		char x_fname[E_FILNMLEN];
-		struct {
+		struct
+		{
 			char x_zeroes[4];
 			char x_offset[4];
 		} x_n;
 	} x_file;
 
-	struct {
+	struct
+	{
 		char x_scnlen[4];	/* section length */
 		char x_nreloc[2];	/* # relocation entries */
 		char x_nlinno[2];	/* # line numbers */
@@ -225,7 +256,8 @@ union external_auxent {
 		char x_comdat[1];	/* COMDAT selection number */
 	} x_scn;
 
-        struct {
+        struct
+	{
 		char x_tvfill[4];	/* tv fill value */
 		char x_tvlen[2];	/* length of .tv */
 		char x_tvran[2][2];	/* tv range */
@@ -239,15 +271,11 @@ union external_auxent {
 #define	AUXENT	union external_auxent
 #define	AUXESZ	18
 
-
-#	define _ETEXT	"etext"
-
+#define _ETEXT	"etext"
 
 /********************** RELOCATION DIRECTIVES **********************/
-
-
-
-struct external_reloc {
+struct external_reloc
+{
   char r_vaddr[4];
   char r_symndx[4];
   char r_type[2];