|
|
|
|
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 2008-09-17 11:00:44 +0200
|
|
|
|
|
+++ bfd/elf-eh-frame.c 2008-10-16 22:34:32 +0200
|
|
|
|
|
@@ -887,9 +887,11 @@
|
|
|
|
|
goto success;
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
hdr_info->table = FALSE;
|
|
|
|
|
if (sec_info)
|
|
|
|
|
free (sec_info);
|