Use the platform specific ELF branding expected under FreeBSD.
This is similar to what the vendor ld(1) does on this platform.

Additionally, recognize and ignore Solaris 10's "Solaris Cryptographic
Framework" ELF header type "SUNW_signature", Solaris 10 "Symbol
information" ELF header type "SUNW_syminfo" and Solaris 10 "DTrace
Object Format" ELF header type. Also, fix the path to the dynamic
linker under Solaris 10/amd64.

Index: include/elf/common.h
--- include/elf/common.h.orig	2006-02-17 15:36:26 +0100
+++ include/elf/common.h	2006-06-24 21:50:39 +0200
@@ -346,6 +346,9 @@
 #define SHT_SUNW_verdef	0x6ffffffd	/* Versions defined by file */
 #define SHT_SUNW_verneed 0x6ffffffe	/* Versions needed by file */
 #define SHT_SUNW_versym	0x6fffffff	/* Symbol versions */
+#define SHT_SUNW_syminfo 0x6ffffffc	/* Symbol information */
+#define SHT_SUNW_signature 0x6ffffff6	/* Solaris Cryptographic Framework: Digital Signature */
+#define SHT_SUNW_dof 0x6ffffff4	/* Solaris DTrace Object Format */
 
 #define SHT_GNU_verdef	SHT_SUNW_verdef
 #define SHT_GNU_verneed	SHT_SUNW_verneed
Index: bfd/elf.c
--- bfd/elf.c.orig	2006-03-16 13:20:15 +0100
+++ bfd/elf.c	2006-06-24 21:50:39 +0200
@@ -2121,6 +2121,11 @@
       return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
       break;
 
+    case SHT_SUNW_syminfo:
+    case SHT_SUNW_signature:
+    case SHT_SUNW_dof:
+      return TRUE;
+
     case SHT_SHLIB:
       return TRUE;
 
@@ -4862,6 +4867,12 @@
   else
     i_ehdrp->e_type = ET_REL;
 
+  /* OpenPKG platform branding BEGIN */
+#if defined(OPENPKG_OS_FREEBSD)
+  i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD;
+#endif
+  /* OpenPKG platform branding END */
+
   switch (bfd_get_arch (abfd))
     {
     case bfd_arch_unknown:
Index: bfd/elf64-x86-64.c
--- bfd/elf64-x86-64.c.orig	2006-03-23 09:23:09 +0100
+++ bfd/elf64-x86-64.c	2006-06-24 21:50:39 +0200
@@ -327,7 +327,11 @@
 /* The name of the dynamic interpreter.	 This is put in the .interp
    section.  */
 
+#if defined(OPENPKG_OS_SOLARIS)
+#define ELF_DYNAMIC_INTERPRETER "/lib/amd64/ld.so.1"
+#else
 #define ELF_DYNAMIC_INTERPRETER "/lib/ld64.so.1"
+#endif
 
 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
    copying dynamic variables from a shared lib into an app's dynbss


-----------------------------------------------------------------------------

Support FreeBSD >= 4.10 by fixing platform detection.

Index: bfd/configure
--- bfd/configure.orig	2006-06-23 20:17:03 +0200
+++ bfd/configure	2006-06-24 21:50:39 +0200
@@ -11495,6 +11495,10 @@
   i[3-7]86-*-bsdi)
 	COREFILE=
 	;;
+  i[3456]86-*-freebsd4.1[0-9]*)
+	COREFILE=''
+	TRAD_HEADER='"hosts/i386bsd.h"'
+	;;
   i[3-7]86-*-bsd* | i[3-7]86-*-freebsd[123] | i[3-7]86-*-freebsd[123]\.* | i[3-7]86-*-freebsd4\.[01234] | i[3-7]86-*-freebsd4\.[01234]\.* | i[3-7]86-*-freebsd*aout*)
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/i386bsd.h"'

-----------------------------------------------------------------------------

Fight problems with --disable-nls under Solaris

Index: binutils/bucomm.h
--- binutils/bucomm.h.orig	2006-02-09 12:49:53 +0100
+++ binutils/bucomm.h	2006-06-24 21:50:39 +0200
@@ -138,6 +138,11 @@
 #endif
 
 
+#ifndef ENABLE_NLS
+# define _LIBINTL_H
+# define _LIBGETTEXT_H
+#endif
+
 #ifdef HAVE_LOCALE_H
 # ifndef ENABLE_NLS
    /* The Solaris version of locale.h always includes libintl.h.  If we have
Index: gas/asintl.h
--- gas/asintl.h.orig	2005-09-30 13:42:01 +0200
+++ gas/asintl.h	2006-06-24 21:50:39 +0200
@@ -20,6 +20,11 @@
    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
+#ifndef ENABLE_NLS
+# define _LIBINTL_H
+# define _LIBGETTEXT_H
+#endif
+
 #ifdef HAVE_LOCALE_H
 # ifndef ENABLE_NLS
    /* The Solaris version of locale.h always includes libintl.h.  If we have
Index: ld/ld.h
--- ld/ld.h.orig	2005-09-30 13:42:04 +0200
+++ ld/ld.h	2006-06-24 21:50:39 +0200
@@ -23,6 +23,11 @@
 #ifndef LD_H
 #define LD_H
 
+#ifndef ENABLE_NLS
+# define _LIBINTL_H
+# define _LIBGETTEXT_H
+#endif
+
 #ifdef HAVE_LOCALE_H
 #endif
 #ifndef SEEK_CUR
Index: ld/Makefile.in
--- ld/Makefile.in.orig	2006-06-03 06:45:50 +0200
+++ ld/Makefile.in	2006-06-24 21:53:56 +0200
@@ -269,7 +269,7 @@
 # We put the scripts in the directory $(scriptdir)/ldscripts.
 # We can't put the scripts in $(datadir) because the SEARCH_DIR
 # directives need to be different for native and cross linkers.
-scriptdir = $(tooldir)/lib
+scriptdir = $(libdir)
 BASEDIR = $(srcdir)/..
 BFDDIR = $(BASEDIR)/bfd
 INCDIR = $(BASEDIR)/include

