You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
5.6 KiB
178 lines
5.6 KiB
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 2008-08-04 01:20:42 +0200 |
|
+++ include/elf/common.h 2009-02-03 08:15:09 +0100 |
|
@@ -404,6 +404,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 2008-12-23 14:54:48 +0100 |
|
+++ bfd/elf.c 2009-02-03 08:15:09 +0100 |
|
@@ -1859,6 +1859,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; |
|
|
|
@@ -4825,6 +4830,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 2008-07-28 20:07:05 +0200 |
|
+++ bfd/elf64-x86-64.c 2009-02-03 08:15:09 +0100 |
|
@@ -346,7 +346,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 2009-02-02 11:44:37 +0100 |
|
+++ bfd/configure 2009-02-03 08:15:09 +0100 |
|
@@ -18061,6 +18061,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-07-03 13:01:02 +0200 |
|
+++ gas/asintl.h 2009-02-03 08:15:09 +0100 |
|
@@ -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 2008-05-31 18:35:56 +0200 |
|
+++ ld/ld.h 2009-02-03 08:15:09 +0100 |
|
@@ -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 2008-12-23 14:54:52 +0100 |
|
+++ ld/Makefile.in 2009-02-03 08:15:09 +0100 |
|
@@ -291,7 +291,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 2009-02-03 08:15:09 +0100 |
|
@@ -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 2009-02-03 08:15:09 +0100 |
|
@@ -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); |
|
|
|
|