diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 84888f6f8..621f48e4a 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,20 +1,30 @@
 2008-03-12  Alan Modra  <amodra@bigpond.net.au>
 
-	* elf/cr16c.h (SHN_CR16C_FCOMMON): Define using SHN_LORESERVE.
+	PR 5900
+	* common.h (SHN_BAD): Delete.
+	(SHN_LORESERVE .. SHN_HIRESERVE): Move to..
+	* external.h: ..here.
+	* internal.h (SHN_LORESERVE, SHN_HIRESERVE): Define.
+	(SHN_LOPROC, SHN_HIPROC, SHN_LOOS, SHN_HIOS): Define.
+	(SHN_ABS, SHN_COMMON, SHN_XINDEX, SHN_BAD): Define.
+
+2008-03-12  Alan Modra  <amodra@bigpond.net.au>
+
+	* cr16c.h (SHN_CR16C_FCOMMON): Define using SHN_LORESERVE.
 	(SHN_CR16C_NCOMMON): Likewise.
-	* elf/hppa.h (SHN_PARISC_ANSI_COMMON): Likewise.
+	* hppa.h (SHN_PARISC_ANSI_COMMON): Likewise.
 	(SHN_PARISC_HUGE_COMMON): Likewise.
-	* elf/ia64.h (SHN_IA_64_ANSI_COMMON): Likewise.
+	* ia64.h (SHN_IA_64_ANSI_COMMON): Likewise.
 	(SHN_IA_64_VMS_SYMVEC): Define using SHN_LOOS.
-	* elf/m32r.h (SHN_M32R_SCOMMON): Define using SHN_LORESERVE.
-	* elf/mips.h (SHN_MIPS_ACOMMON, SHN_MIPS_TEXT): Likewise.
+	* m32r.h (SHN_M32R_SCOMMON): Define using SHN_LORESERVE.
+	* mips.h (SHN_MIPS_ACOMMON, SHN_MIPS_TEXT): Likewise.
 	(SHN_MIPS_DATA, SHN_MIPS_SCOMMON, SHN_MIPS_SUNDEFINED): Likewise.
-	* elf/score.h (SHN_SCORE_TEXT, SHN_SCORE_DATA): Likewise.
+	* score.h (SHN_SCORE_TEXT, SHN_SCORE_DATA): Likewise.
 	(SHN_SCORE_SCOMMON): Likewise.
-	* elf/sparc.h (SHN_BEFORE, SHN_AFTER): Likewise.
-	* elf/v850.h (SHN_V850_SCOMMON, SHN_V850_TCOMMON): Likewise.
+	* sparc.h (SHN_BEFORE, SHN_AFTER): Likewise.
+	* v850.h (SHN_V850_SCOMMON, SHN_V850_TCOMMON): Likewise.
 	(SHN_V850_ZCOMMON): Likewise.
-	* elf/x86-64.h (SHN_X86_64_LCOMMON): Likewise.
+	* x86-64.h (SHN_X86_64_LCOMMON): Likewise.
 
 2008-03-03  Pallavi Tambay  <pallavi.tambay@amd.com>
 
diff --git a/include/elf/common.h b/include/elf/common.h
index b6d981f3d..314de4ea9 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -1,6 +1,6 @@
 /* ELF support for BFD.
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
    Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support, from information published
@@ -496,21 +496,6 @@
 #define STT_LOPROC	13		/* Application-specific semantics */
 #define STT_HIPROC	15		/* Application-specific semantics */
 
-/* Special section indices, which may show up in st_shndx fields, among
-   other places.  */
-
-#define SHN_UNDEF	0		/* Undefined section reference */
-#define SHN_LORESERVE	0xFF00		/* Begin range of reserved indices */
-#define SHN_LOPROC	0xFF00		/* Begin range of appl-specific */
-#define SHN_HIPROC	0xFF1F		/* End range of appl-specific */
-#define SHN_LOOS	0xFF20		/* OS specific semantics, lo */
-#define SHN_HIOS	0xFF3F		/* OS specific semantics, hi */
-#define SHN_ABS		0xFFF1		/* Associated symbol is absolute */
-#define SHN_COMMON	0xFFF2		/* Associated symbol is in common */
-#define SHN_XINDEX	0xFFFF		/* Section index is held elsewhere */
-#define SHN_HIRESERVE	0xFFFF		/* End range of reserved indices */
-#define SHN_BAD		((unsigned) -1) /* Used internally by bfd */
-
 /* The following constants control how a symbol may be accessed once it has
    become part of an executable or shared library.  */
 
diff --git a/include/elf/external.h b/include/elf/external.h
index 21450f005..3d4ba7960 100644
--- a/include/elf/external.h
+++ b/include/elf/external.h
@@ -1,6 +1,6 @@
 /* ELF support for BFD.
-   Copyright 1991, 1992, 1993, 1995, 1997, 1998, 1999, 2001, 2003, 2005
-   Free Software Foundation, Inc.
+   Copyright 1991, 1992, 1993, 1995, 1997, 1998, 1999, 2001, 2003, 2005,
+   2008 Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support, from information published
    in "UNIX System V Release 4, Programmers Guide: ANSI C and
@@ -35,6 +35,19 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
 #ifndef _ELF_EXTERNAL_H
 #define _ELF_EXTERNAL_H
 
+/* Special section indices, which may show up in st_shndx fields, among
+   other places.  */
+
+#define SHN_LORESERVE	0xFF00		/* Begin range of reserved indices */
+#define SHN_LOPROC	0xFF00		/* Begin range of appl-specific */
+#define SHN_HIPROC	0xFF1F		/* End range of appl-specific */
+#define SHN_LOOS	0xFF20		/* OS specific semantics, lo */
+#define SHN_HIOS	0xFF3F		/* OS specific semantics, hi */
+#define SHN_ABS		0xFFF1		/* Associated symbol is absolute */
+#define SHN_COMMON	0xFFF2		/* Associated symbol is in common */
+#define SHN_XINDEX	0xFFFF		/* Section index is held elsewhere */
+#define SHN_HIRESERVE	0xFFFF		/* End range of reserved indices */
+
 /* ELF Header (32-bit implementations) */
 
 typedef struct {
diff --git a/include/elf/internal.h b/include/elf/internal.h
index 93c2315e8..cacfc63bf 100644
--- a/include/elf/internal.h
+++ b/include/elf/internal.h
@@ -1,6 +1,6 @@
 /* ELF support for BFD.
    Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002,
-   2003, 2006, 2007 Free Software Foundation, Inc.
+   2003, 2006, 2007, 2008 Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support, from information published
    in "UNIX System V Release 4, Programmers Guide: ANSI C and
@@ -37,6 +37,31 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
 #ifndef _ELF_INTERNAL_H
 #define _ELF_INTERNAL_H
 
+/* Special section indices, which may show up in st_shndx fields, among
+   other places.  */
+
+#undef SHN_UNDEF
+#undef SHN_LORESERVE
+#undef SHN_LOPROC
+#undef SHN_HIPROC
+#undef SHN_LOOS
+#undef SHN_HIOS
+#undef SHN_ABS
+#undef SHN_COMMON
+#undef SHN_XINDEX
+#undef SHN_HIRESERVE
+#define SHN_UNDEF	0		/* Undefined section reference */
+#define SHN_LORESERVE	(-0x100u)	/* Begin range of reserved indices */
+#define SHN_LOPROC	(-0x100u)	/* Begin range of appl-specific */
+#define SHN_HIPROC	(-0xE1u)	/* End range of appl-specific */
+#define SHN_LOOS	(-0xE0u)	/* OS specific semantics, lo */
+#define SHN_HIOS	(-0xC1u)	/* OS specific semantics, hi */
+#define SHN_ABS		(-0xFu)		/* Associated symbol is absolute */
+#define SHN_COMMON	(-0xEu)		/* Associated symbol is in common */
+#define SHN_XINDEX	(-0x1u)		/* Section index is held elsewhere */
+#define SHN_HIRESERVE	(-0x1u)		/* End range of reserved indices */
+#define SHN_BAD		(-0x101u)	/* Used internally by bfd */
+
 /* ELF Header */
 
 #define EI_NIDENT	16		/* Size of e_ident[] */