Thu, 23 Apr 2009 15:20:21 +0200
Specify options in configuration and adapt package for virtual users.
michael@68 | 1 | Use the platform specific ELF branding expected under FreeBSD. |
michael@68 | 2 | This is similar to what the vendor ld(1) does on this platform. |
michael@68 | 3 | |
michael@68 | 4 | Additionally, recognize and ignore Solaris 10's "Solaris Cryptographic |
michael@68 | 5 | Framework" ELF header type "SUNW_signature", Solaris 10 "Symbol |
michael@68 | 6 | information" ELF header type "SUNW_syminfo" and Solaris 10 "DTrace |
michael@68 | 7 | Object Format" ELF header type. Also, fix the path to the dynamic |
michael@68 | 8 | linker under Solaris 10/amd64. |
michael@68 | 9 | |
michael@68 | 10 | Index: include/elf/common.h |
michael@68 | 11 | --- include/elf/common.h.orig 2007-08-28 19:19:40 +0200 |
michael@68 | 12 | +++ include/elf/common.h 2007-08-29 09:30:04 +0200 |
michael@68 | 13 | @@ -353,6 +353,9 @@ |
michael@68 | 14 | #define SHT_SUNW_verdef 0x6ffffffd /* Versions defined by file */ |
michael@68 | 15 | #define SHT_SUNW_verneed 0x6ffffffe /* Versions needed by file */ |
michael@68 | 16 | #define SHT_SUNW_versym 0x6fffffff /* Symbol versions */ |
michael@68 | 17 | +#define SHT_SUNW_syminfo 0x6ffffffc /* Symbol information */ |
michael@68 | 18 | +#define SHT_SUNW_signature 0x6ffffff6 /* Solaris Cryptographic Framework: Digital Signature */ |
michael@68 | 19 | +#define SHT_SUNW_dof 0x6ffffff4 /* Solaris DTrace Object Format */ |
michael@68 | 20 | |
michael@68 | 21 | #define SHT_GNU_verdef SHT_SUNW_verdef |
michael@68 | 22 | #define SHT_GNU_verneed SHT_SUNW_verneed |
michael@68 | 23 | Index: bfd/elf.c |
michael@68 | 24 | --- bfd/elf.c.orig 2007-08-28 19:19:33 +0200 |
michael@68 | 25 | +++ bfd/elf.c 2007-08-29 09:30:04 +0200 |
michael@68 | 26 | @@ -1793,6 +1793,11 @@ |
michael@68 | 27 | elf_tdata (abfd)->dynverref_hdr = *hdr; |
michael@68 | 28 | return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); |
michael@68 | 29 | |
michael@68 | 30 | + case SHT_SUNW_syminfo: |
michael@68 | 31 | + /* case SHT_SUNW_signature: conflicts with new SHT_GNU_HASH in Binutils 2.18 */ |
michael@68 | 32 | + case SHT_SUNW_dof: |
michael@68 | 33 | + return TRUE; |
michael@68 | 34 | + |
michael@68 | 35 | case SHT_SHLIB: |
michael@68 | 36 | return TRUE; |
michael@68 | 37 | |
michael@68 | 38 | @@ -4682,6 +4687,12 @@ |
michael@68 | 39 | else |
michael@68 | 40 | i_ehdrp->e_type = ET_REL; |
michael@68 | 41 | |
michael@68 | 42 | + /* OpenPKG platform branding BEGIN */ |
michael@68 | 43 | +#if defined(OPENPKG_OS_FREEBSD) |
michael@68 | 44 | + i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD; |
michael@68 | 45 | +#endif |
michael@68 | 46 | + /* OpenPKG platform branding END */ |
michael@68 | 47 | + |
michael@68 | 48 | switch (bfd_get_arch (abfd)) |
michael@68 | 49 | { |
michael@68 | 50 | case bfd_arch_unknown: |
michael@68 | 51 | Index: bfd/elf64-x86-64.c |
michael@68 | 52 | --- bfd/elf64-x86-64.c.orig 2007-08-06 21:59:33 +0200 |
michael@68 | 53 | +++ bfd/elf64-x86-64.c 2007-08-29 09:30:04 +0200 |
michael@68 | 54 | @@ -345,7 +345,11 @@ |
michael@68 | 55 | /* The name of the dynamic interpreter. This is put in the .interp |
michael@68 | 56 | section. */ |
michael@68 | 57 | |
michael@68 | 58 | +#if defined(OPENPKG_OS_SOLARIS) |
michael@68 | 59 | +#define ELF_DYNAMIC_INTERPRETER "/lib/amd64/ld.so.1" |
michael@68 | 60 | +#else |
michael@68 | 61 | #define ELF_DYNAMIC_INTERPRETER "/lib/ld64.so.1" |
michael@68 | 62 | +#endif |
michael@68 | 63 | |
michael@68 | 64 | /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid |
michael@68 | 65 | copying dynamic variables from a shared lib into an app's dynbss |
michael@68 | 66 | |
michael@68 | 67 | ----------------------------------------------------------------------------- |
michael@68 | 68 | |
michael@68 | 69 | Support FreeBSD >= 4.10 by fixing platform detection. |
michael@68 | 70 | |
michael@68 | 71 | Index: bfd/configure |
michael@68 | 72 | --- bfd/configure.orig 2007-08-28 22:19:51 +0200 |
michael@68 | 73 | +++ bfd/configure 2007-08-29 09:30:04 +0200 |
michael@68 | 74 | @@ -17459,6 +17459,10 @@ |
michael@68 | 75 | i[3-7]86-*-bsdi) |
michael@68 | 76 | COREFILE= |
michael@68 | 77 | ;; |
michael@68 | 78 | + i[3456]86-*-freebsd4.1[0-9]*) |
michael@68 | 79 | + COREFILE='' |
michael@68 | 80 | + TRAD_HEADER='"hosts/i386bsd.h"' |
michael@68 | 81 | + ;; |
michael@68 | 82 | 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*) |
michael@68 | 83 | COREFILE=trad-core.lo |
michael@68 | 84 | TRAD_HEADER='"hosts/i386bsd.h"' |
michael@68 | 85 | |
michael@68 | 86 | ----------------------------------------------------------------------------- |
michael@68 | 87 | |
michael@68 | 88 | Fight problems with --disable-nls under Solaris |
michael@68 | 89 | |
michael@68 | 90 | Index: gas/asintl.h |
michael@68 | 91 | --- gas/asintl.h.orig 2007-08-06 21:59:49 +0200 |
michael@68 | 92 | +++ gas/asintl.h 2007-08-29 09:30:04 +0200 |
michael@68 | 93 | @@ -20,6 +20,11 @@ |
michael@68 | 94 | Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA |
michael@68 | 95 | 02110-1301, USA. */ |
michael@68 | 96 | |
michael@68 | 97 | +#ifndef ENABLE_NLS |
michael@68 | 98 | +# define _LIBINTL_H |
michael@68 | 99 | +# define _LIBGETTEXT_H |
michael@68 | 100 | +#endif |
michael@68 | 101 | + |
michael@68 | 102 | #ifdef HAVE_LOCALE_H |
michael@68 | 103 | # ifndef ENABLE_NLS |
michael@68 | 104 | /* The Solaris version of locale.h always includes libintl.h. If we have |
michael@68 | 105 | Index: ld/ld.h |
michael@68 | 106 | --- ld/ld.h.orig 2007-08-06 22:00:19 +0200 |
michael@68 | 107 | +++ ld/ld.h 2007-08-29 09:30:04 +0200 |
michael@68 | 108 | @@ -23,6 +23,11 @@ |
michael@68 | 109 | #ifndef LD_H |
michael@68 | 110 | #define LD_H |
michael@68 | 111 | |
michael@68 | 112 | +#ifndef ENABLE_NLS |
michael@68 | 113 | +# define _LIBINTL_H |
michael@68 | 114 | +# define _LIBGETTEXT_H |
michael@68 | 115 | +#endif |
michael@68 | 116 | + |
michael@68 | 117 | #ifdef HAVE_LOCALE_H |
michael@68 | 118 | #endif |
michael@68 | 119 | #ifndef SEEK_CUR |
michael@68 | 120 | Index: ld/Makefile.in |
michael@68 | 121 | --- ld/Makefile.in.orig 2007-08-06 22:29:54 +0200 |
michael@68 | 122 | +++ ld/Makefile.in 2007-08-29 09:30:04 +0200 |
michael@68 | 123 | @@ -287,7 +287,7 @@ |
michael@68 | 124 | # We put the scripts in the directory $(scriptdir)/ldscripts. |
michael@68 | 125 | # We can't put the scripts in $(datadir) because the SEARCH_DIR |
michael@68 | 126 | # directives need to be different for native and cross linkers. |
michael@68 | 127 | -scriptdir = $(tooldir)/lib |
michael@68 | 128 | +scriptdir = $(libdir) |
michael@68 | 129 | BASEDIR = $(srcdir)/.. |
michael@68 | 130 | BFDDIR = $(BASEDIR)/bfd |
michael@68 | 131 | INCDIR = $(BASEDIR)/include |
michael@68 | 132 | |
michael@68 | 133 | ----------------------------------------------------------------------------- |
michael@68 | 134 | |
michael@68 | 135 | workaround problems under Mac OS X. |
michael@68 | 136 | |
michael@68 | 137 | Index: libiberty/fibheap.c |
michael@68 | 138 | --- libiberty/fibheap.c.orig 2005-05-10 17:33:33 +0200 |
michael@68 | 139 | +++ libiberty/fibheap.c 2007-08-29 09:30:04 +0200 |
michael@68 | 140 | @@ -34,8 +34,11 @@ |
michael@68 | 141 | #include "libiberty.h" |
michael@68 | 142 | #include "fibheap.h" |
michael@68 | 143 | |
michael@68 | 144 | - |
michael@68 | 145 | +#ifdef LONG_MIN |
michael@68 | 146 | #define FIBHEAPKEY_MIN LONG_MIN |
michael@68 | 147 | +#else |
michael@68 | 148 | +#define FIBHEAPKEY_MIN (-0x7fffffffL - 1) |
michael@68 | 149 | +#endif |
michael@68 | 150 | |
michael@68 | 151 | static void fibheap_ins_root (fibheap_t, fibnode_t); |
michael@68 | 152 | static void fibheap_rem_root (fibheap_t, fibnode_t); |
michael@68 | 153 | |
michael@68 | 154 | ----------------------------------------------------------------------------- |
michael@68 | 155 | |
michael@68 | 156 | Disable the "error" about "eh_frame_hdr" as it is actually more a |
michael@68 | 157 | warning (the linking is *not* aborted) and it occurs at least under |
michael@68 | 158 | FreeBSD-7.0/amd64 regularily without doing any obvious harm. Seems |
michael@68 | 159 | like the issue itself exists since a longer time, but in recent GNU |
michael@68 | 160 | binutils this additional message was introduced. As we cannot observe |
michael@68 | 161 | any problems and this message really confused, just disable it for now. |
michael@68 | 162 | |
michael@68 | 163 | Index: bfd/elf-eh-frame.c |
michael@68 | 164 | --- bfd/elf-eh-frame.c.orig 2007-08-06 21:59:22 +0200 |
michael@68 | 165 | +++ bfd/elf-eh-frame.c 2007-11-11 15:46:44 +0100 |
michael@68 | 166 | @@ -970,9 +970,11 @@ |
michael@68 | 167 | return offset != sec->rawsize; |
michael@68 | 168 | |
michael@68 | 169 | free_no_table: |
michael@68 | 170 | +#if 0 |
michael@68 | 171 | (*info->callbacks->einfo) |
michael@68 | 172 | (_("%P: error in %B(%A); no .eh_frame_hdr table will be created.\n"), |
michael@68 | 173 | abfd, sec); |
michael@68 | 174 | +#endif |
michael@68 | 175 | if (ehbuf) |
michael@68 | 176 | free (ehbuf); |
michael@68 | 177 | if (sec_info) |
michael@69 | 178 | Index: bfd/elflink.c |
michael@69 | 179 | diff -Nau bfd/elflink.c.orig bfd/elflink.c |
michael@69 | 180 | --- bfd/elflink.c.orig 2007-08-24 16:01:08.000000000 +0200 |
michael@69 | 181 | +++ bfd/elflink.c 2009-01-11 14:07:54.705525343 +0100 |
michael@69 | 182 | @@ -4231,7 +4231,15 @@ |
michael@69 | 183 | h->ref_regular_nonweak = 1; |
michael@69 | 184 | } |
michael@69 | 185 | else |
michael@69 | 186 | - h->def_regular = 1; |
michael@69 | 187 | + { |
michael@69 | 188 | + h->def_regular = 1; |
michael@69 | 189 | + if (h->def_dynamic) |
michael@69 | 190 | + { |
michael@69 | 191 | + h->def_dynamic = 0; |
michael@69 | 192 | + h->ref_dynamic = 1; |
michael@69 | 193 | + h->dynamic_def = 1; |
michael@69 | 194 | + } |
michael@69 | 195 | + } |
michael@69 | 196 | if (! info->executable |
michael@69 | 197 | || h->def_dynamic |
michael@69 | 198 | || h->ref_dynamic) |