|
|
|
|
Use the platform specific ELF branding expected under FreeBSD.
|
|
|
|
|
This is similar to what the vendor ld(1) does on this platform.
|
|
|
|
|
|
|
|
|
|
Index: bfd/elf.c
|
|
|
|
|
--- bfd/elf.c.orig 2005-03-06 03:02:15 +0100
|
|
|
|
|
+++ bfd/elf.c 2005-05-03 19:48:25 +0200
|
|
|
|
|
@@ -4621,6 +4621,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:
|
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Support FreeBSD >= 4.10 by fixing platform detection.
|
|
|
|
|
|
|
|
|
|
Index: bfd/configure
|
|
|
|
|
--- bfd/configure.orig 2005-05-02 21:43:54 +0200
|
|
|
|
|
+++ bfd/configure 2005-05-03 19:49:53 +0200
|
|
|
|
|
@@ -9956,6 +9956,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 2005-08-16 21:35:21.000000000 +0200
|
|
|
|
|
+++ binutils/bucomm.h 2005-09-13 16:55:29.276456000 +0200
|
|
|
|
|
@@ -125,6 +125,11 @@
|
|
|
|
|
# endif /* HAVE_ALLOCA_H */
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
+#ifndef ENABLE_NLS
|
|
|
|
|
+# define _LIBINTL_H
|
|
|
|
|
+# define _LIBGETTEXT_H
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
#ifdef HAVE_LOCALE_H
|
|
|
|
|
# include <locale.h>
|
|
|
|
|
#endif
|
|
|
|
|
Index: gas/asintl.h
|
|
|
|
|
--- gas/asintl.h.orig 2005-05-05 11:12:43.000000000 +0200
|
|
|
|
|
+++ gas/asintl.h 2005-09-13 16:58:29.082469000 +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
|
|
|
|
|
# include <locale.h>
|
|
|
|
|
#endif
|
|
|
|
|
Index: gprof/gprof.c
|
|
|
|
|
--- gprof/gprof.c.orig 2005-04-23 19:13:31.000000000 +0200
|
|
|
|
|
+++ gprof/gprof.c 2005-09-13 17:13:52.242443000 +0200
|
|
|
|
|
@@ -189,8 +189,10 @@
|
|
|
|
|
#if defined (HAVE_SETLOCALE)
|
|
|
|
|
setlocale (LC_CTYPE, "");
|
|
|
|
|
#endif
|
|
|
|
|
+#ifdef ENABLE_NLS
|
|
|
|
|
bindtextdomain (PACKAGE, LOCALEDIR);
|
|
|
|
|
textdomain (PACKAGE);
|
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
|
|
whoami = argv[0];
|
|
|
|
|
xmalloc_set_program_name (whoami);
|
|
|
|
|
Index: ld/ld.h
|
|
|
|
|
--- ld/ld.h.orig 2005-06-09 04:05:46.000000000 +0200
|
|
|
|
|
+++ ld/ld.h 2005-09-13 17:24:03.767249000 +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
|
|
|
|
|
# include <locale.h>
|
|
|
|
|
#endif
|
|
|
|
|
Index: ld/Makefile.in
|
|
|
|
|
--- ld/Makefile.in.orig 2005-01-23 06:36:37 +0100
|
|
|
|
|
+++ ld/Makefile.in 2005-09-21 21:06:55 +0200
|
|
|
|
|
@@ -139,7 +139,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)
|
|
|
|
|
|
|
|
|
|
EMUL = @EMUL@
|
|
|
|
|
EMULATION_OFILES = @EMULATION_OFILES@
|
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Security Issue (PR binutils/2584, CVE-2006-2362)
|
|
|
|
|
|
|
|
|
|
Index: bfd/tekhex.c
|
|
|
|
|
--- bfd/tekhex.c.orig 2004-10-08 16:54:02 +0200
|
|
|
|
|
+++ bfd/tekhex.c 2006-05-26 20:21:02 +0200
|
|
|
|
|
@@ -99,7 +99,7 @@
|
|
|
|
|
#define ISHEX(x) hex_p(x)
|
|
|
|
|
|
|
|
|
|
static void tekhex_init PARAMS ((void));
|
|
|
|
|
-static bfd_vma getvalue PARAMS ((char **));
|
|
|
|
|
+static bfd_boolean getvalue PARAMS ((char **, bfd_vma *));
|
|
|
|
|
static void tekhex_print_symbol
|
|
|
|
|
PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type));
|
|
|
|
|
static void tekhex_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *));
|
|
|
|
|
@@ -121,11 +121,11 @@
|
|
|
|
|
static bfd_boolean tekhex_mkobject PARAMS ((bfd *));
|
|
|
|
|
static long tekhex_get_symtab_upper_bound PARAMS ((bfd *));
|
|
|
|
|
static long tekhex_canonicalize_symtab PARAMS ((bfd *, asymbol **));
|
|
|
|
|
-static void pass_over PARAMS ((bfd *, void (*) (bfd*, int, char *)));
|
|
|
|
|
-static void first_phase PARAMS ((bfd *, int, char *));
|
|
|
|
|
+static bfd_boolean pass_over PARAMS ((bfd *, bfd_boolean (*) (bfd*, int, char *)));
|
|
|
|
|
+static bfd_boolean first_phase PARAMS ((bfd *, int, char *));
|
|
|
|
|
static void insert_byte PARAMS ((bfd *, int, bfd_vma));
|
|
|
|
|
static struct data_struct *find_chunk PARAMS ((bfd *, bfd_vma));
|
|
|
|
|
-static unsigned int getsym PARAMS ((char *, char **));
|
|
|
|
|
+static bfd_boolean getsym PARAMS ((char *, char **, unsigned int *));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
Here's an example
|
|
|
|
|
@@ -304,40 +304,53 @@
|
|
|
|
|
|
|
|
|
|
#define enda(x) (x->vma + x->size)
|
|
|
|
|
|
|
|
|
|
-static bfd_vma
|
|
|
|
|
-getvalue (srcp)
|
|
|
|
|
+static bfd_boolean
|
|
|
|
|
+getvalue (srcp, valuep)
|
|
|
|
|
char **srcp;
|
|
|
|
|
+ bfd_vma *valuep;
|
|
|
|
|
{
|
|
|
|
|
char *src = *srcp;
|
|
|
|
|
bfd_vma value = 0;
|
|
|
|
|
- unsigned int len = hex_value(*src++);
|
|
|
|
|
+ unsigned int len;
|
|
|
|
|
+
|
|
|
|
|
+ if (!ISHEX(*src))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
|
|
|
|
|
+ len = hex_value(*src++);
|
|
|
|
|
if (len == 0)
|
|
|
|
|
len = 16;
|
|
|
|
|
while (len--)
|
|
|
|
|
{
|
|
|
|
|
+ if (!ISHEX(*src))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
value = value << 4 | hex_value(*src++);
|
|
|
|
|
}
|
|
|
|
|
*srcp = src;
|
|
|
|
|
- return value;
|
|
|
|
|
+ *valuep = value;
|
|
|
|
|
+ return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-static unsigned int
|
|
|
|
|
-getsym (dstp, srcp)
|
|
|
|
|
+static bfd_boolean
|
|
|
|
|
+getsym (dstp, srcp, lenp)
|
|
|
|
|
char *dstp;
|
|
|
|
|
char **srcp;
|
|
|
|
|
+ unsigned int *lenp;
|
|
|
|
|
{
|
|
|
|
|
char *src = *srcp;
|
|
|
|
|
unsigned int i;
|
|
|
|
|
- unsigned int len = hex_value(*src++);
|
|
|
|
|
+ unsigned int len;
|
|
|
|
|
|
|
|
|
|
+ if (!ISHEX(*src))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
+ len = hex_value(*src++);
|
|
|
|
|
if (len == 0)
|
|
|
|
|
len = 16;
|
|
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
|
dstp[i] = src[i];
|
|
|
|
|
dstp[i] = 0;
|
|
|
|
|
*srcp = src + i;
|
|
|
|
|
- return len;
|
|
|
|
|
+ *lenp = len;
|
|
|
|
|
+ return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct data_struct *
|
|
|
|
|
@@ -383,7 +396,7 @@
|
|
|
|
|
|
|
|
|
|
/* The first pass is to find the names of all the sections, and see
|
|
|
|
|
how big the data is */
|
|
|
|
|
-static void
|
|
|
|
|
+static bfd_boolean
|
|
|
|
|
first_phase (abfd, type, src)
|
|
|
|
|
bfd *abfd;
|
|
|
|
|
int type;
|
|
|
|
|
@@ -391,6 +404,7 @@
|
|
|
|
|
{
|
|
|
|
|
asection *section = bfd_abs_section_ptr;
|
|
|
|
|
unsigned int len;
|
|
|
|
|
+ bfd_vma val;
|
|
|
|
|
char sym[17]; /* A symbol can only be 16chars long */
|
|
|
|
|
|
|
|
|
|
switch (type)
|
|
|
|
|
@@ -398,7 +412,10 @@
|
|
|
|
|
case '6':
|
|
|
|
|
/* Data record - read it and store it */
|
|
|
|
|
{
|
|
|
|
|
- bfd_vma addr = getvalue (&src);
|
|
|
|
|
+ bfd_vma addr;
|
|
|
|
|
+
|
|
|
|
|
+ if (!getvalue (&src, &addr))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
|
|
|
|
|
while (*src)
|
|
|
|
|
{
|
|
|
|
|
@@ -408,17 +425,18 @@
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- return;
|
|
|
|
|
+ return TRUE;
|
|
|
|
|
case '3':
|
|
|
|
|
/* Symbol record, read the segment */
|
|
|
|
|
- len = getsym (sym, &src);
|
|
|
|
|
+ if (!getsym (sym, &src, &len))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
section = bfd_get_section_by_name (abfd, sym);
|
|
|
|
|
if (section == (asection *) NULL)
|
|
|
|
|
{
|
|
|
|
|
char *n = bfd_alloc (abfd, (bfd_size_type) len + 1);
|
|
|
|
|
|
|
|
|
|
if (!n)
|
|
|
|
|
- abort (); /* FIXME */
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
memcpy (n, sym, len + 1);
|
|
|
|
|
section = bfd_make_section (abfd, n);
|
|
|
|
|
}
|
|
|
|
|
@@ -428,8 +446,11 @@
|
|
|
|
|
{
|
|
|
|
|
case '1': /* section range */
|
|
|
|
|
src++;
|
|
|
|
|
- section->vma = getvalue (&src);
|
|
|
|
|
- section->size = getvalue (&src) - section->vma;
|
|
|
|
|
+ if (!getvalue (&src, §ion->vma))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
+ if (!getvalue (&src, &val))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
+ section->size = val - section->vma;
|
|
|
|
|
section->flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC;
|
|
|
|
|
break;
|
|
|
|
|
case '0':
|
|
|
|
|
@@ -447,37 +468,43 @@
|
|
|
|
|
char stype = (*src);
|
|
|
|
|
|
|
|
|
|
if (!new)
|
|
|
|
|
- abort (); /* FIXME */
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
new->symbol.the_bfd = abfd;
|
|
|
|
|
src++;
|
|
|
|
|
abfd->symcount++;
|
|
|
|
|
abfd->flags |= HAS_SYMS;
|
|
|
|
|
new->prev = abfd->tdata.tekhex_data->symbols;
|
|
|
|
|
abfd->tdata.tekhex_data->symbols = new;
|
|
|
|
|
- len = getsym (sym, &src);
|
|
|
|
|
+ if (!getsym (sym, &src, &len))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
new->symbol.name = bfd_alloc (abfd, (bfd_size_type) len + 1);
|
|
|
|
|
if (!new->symbol.name)
|
|
|
|
|
- abort (); /* FIXME */
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
memcpy ((char *) (new->symbol.name), sym, len + 1);
|
|
|
|
|
new->symbol.section = section;
|
|
|
|
|
if (stype <= '4')
|
|
|
|
|
new->symbol.flags = (BSF_GLOBAL | BSF_EXPORT);
|
|
|
|
|
else
|
|
|
|
|
new->symbol.flags = BSF_LOCAL;
|
|
|
|
|
- new->symbol.value = getvalue (&src) - section->vma;
|
|
|
|
|
+ if (!getvalue (&src, &val))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
+ new->symbol.value = val - section->vma;
|
|
|
|
|
}
|
|
|
|
|
+ default:
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
+ return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Pass over a tekhex, calling one of the above functions on each
|
|
|
|
|
record. */
|
|
|
|
|
|
|
|
|
|
-static void
|
|
|
|
|
+static bfd_boolean
|
|
|
|
|
pass_over (abfd, func)
|
|
|
|
|
bfd *abfd;
|
|
|
|
|
- void (*func) PARAMS ((bfd *, int, char *));
|
|
|
|
|
+ bfd_boolean (*func) PARAMS ((bfd *, int, char *));
|
|
|
|
|
{
|
|
|
|
|
unsigned int chars_on_line;
|
|
|
|
|
bfd_boolean eof = FALSE;
|
|
|
|
|
@@ -516,9 +543,10 @@
|
|
|
|
|
abort (); /* FIXME */
|
|
|
|
|
src[chars_on_line] = 0; /* put a null at the end */
|
|
|
|
|
|
|
|
|
|
- func (abfd, type, src);
|
|
|
|
|
+ if (!func (abfd, type, src))
|
|
|
|
|
+ return FALSE;
|
|
|
|
|
}
|
|
|
|
|
-
|
|
|
|
|
+ return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static long
|
|
|
|
|
@@ -585,7 +613,9 @@
|
|
|
|
|
|
|
|
|
|
tekhex_mkobject (abfd);
|
|
|
|
|
|
|
|
|
|
- pass_over (abfd, first_phase);
|
|
|
|
|
+ if (!pass_over (abfd, first_phase))
|
|
|
|
|
+ return NULL;
|
|
|
|
|
+
|
|
|
|
|
return abfd->xvec;
|
|
|
|
|
}
|
|
|
|
|
|