diff -r ce0d31e18b66 -r 49e9fb8edd05 binutils/binutils.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/binutils/binutils.patch Mon Jan 12 14:38:36 2009 +0100 @@ -0,0 +1,177 @@ +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 2007-08-28 19:19:40 +0200 ++++ include/elf/common.h 2007-08-29 09:30:04 +0200 +@@ -353,6 +353,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 2007-08-28 19:19:33 +0200 ++++ bfd/elf.c 2007-08-29 09:30:04 +0200 +@@ -1793,6 +1793,11 @@ + elf_tdata (abfd)->dynverref_hdr = *hdr; + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); + ++ case SHT_SUNW_syminfo: ++ /* case SHT_SUNW_signature: conflicts with new SHT_GNU_HASH in Binutils 2.18 */ ++ case SHT_SUNW_dof: ++ return TRUE; ++ + case SHT_SHLIB: + return TRUE; + +@@ -4682,6 +4687,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 2007-08-06 21:59:33 +0200 ++++ bfd/elf64-x86-64.c 2007-08-29 09:30:04 +0200 +@@ -345,7 +345,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 2007-08-28 22:19:51 +0200 ++++ bfd/configure 2007-08-29 09:30:04 +0200 +@@ -17459,6 +17459,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: gas/asintl.h +--- gas/asintl.h.orig 2007-08-06 21:59:49 +0200 ++++ gas/asintl.h 2007-08-29 09:30:04 +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 2007-08-06 22:00:19 +0200 ++++ ld/ld.h 2007-08-29 09:30:04 +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 2007-08-06 22:29:54 +0200 ++++ ld/Makefile.in 2007-08-29 09:30:04 +0200 +@@ -287,7 +287,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 + +----------------------------------------------------------------------------- + +workaround problems under Mac OS X. + +Index: libiberty/fibheap.c +--- libiberty/fibheap.c.orig 2005-05-10 17:33:33 +0200 ++++ libiberty/fibheap.c 2007-08-29 09:30:04 +0200 +@@ -34,8 +34,11 @@ + #include "libiberty.h" + #include "fibheap.h" + +- ++#ifdef LONG_MIN + #define FIBHEAPKEY_MIN LONG_MIN ++#else ++#define FIBHEAPKEY_MIN (-0x7fffffffL - 1) ++#endif + + static void fibheap_ins_root (fibheap_t, fibnode_t); + static void fibheap_rem_root (fibheap_t, fibnode_t); + +----------------------------------------------------------------------------- + +Disable the "error" about "eh_frame_hdr" as it is actually more a +warning (the linking is *not* aborted) and it occurs at least under +FreeBSD-7.0/amd64 regularily without doing any obvious harm. Seems +like the issue itself exists since a longer time, but in recent GNU +binutils this additional message was introduced. As we cannot observe +any problems and this message really confused, just disable it for now. + +Index: bfd/elf-eh-frame.c +--- bfd/elf-eh-frame.c.orig 2007-08-06 21:59:22 +0200 ++++ bfd/elf-eh-frame.c 2007-11-11 15:46:44 +0100 +@@ -970,9 +970,11 @@ + return offset != sec->rawsize; + + free_no_table: ++#if 0 + (*info->callbacks->einfo) + (_("%P: error in %B(%A); no .eh_frame_hdr table will be created.\n"), + abfd, sec); ++#endif + if (ehbuf) + free (ehbuf); + if (sec_info)