summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2004-07-09 10:37:29 +0000
committerEric Andersen <andersen@codepoet.org>2004-07-09 10:37:29 +0000
commit3c4c240d8c017bb63545ad303026d656800caa2e (patch)
tree4a07b89eb96c8a3ae5e1d8c6409a2e42d11be1ce
parent1b49b76786f7179f01ae764fbffa664ff9c1c214 (diff)
Update binutils. This version works on arm...
-rw-r--r--make/binutils-uclibc.mk4
-rw-r--r--sources/binutils-uclibc-001-debian.patch2471
-rw-r--r--sources/binutils-uclibc-100-conf.patch206
3 files changed, 236 insertions, 2445 deletions
diff --git a/make/binutils-uclibc.mk b/make/binutils-uclibc.mk
index ae2e5284b..0f3296497 100644
--- a/make/binutils-uclibc.mk
+++ b/make/binutils-uclibc.mk
@@ -4,8 +4,8 @@
#
#############################################################
BINUTILS_SITE:=http://ftp.kernel.org/pub/linux/devel/binutils
-BINUTILS_SOURCE:=binutils-2.14.90.0.7.tar.bz2
-BINUTILS_DIR:=$(TOOL_BUILD_DIR)/binutils-2.14.90.0.7
+BINUTILS_SOURCE:=binutils-2.14.90.0.6.tar.bz2
+BINUTILS_DIR:=$(TOOL_BUILD_DIR)/binutils-2.14.90.0.6
BINUTILS_CAT:=bzcat
BINUTILS_DIR1:=$(TOOL_BUILD_DIR)/binutils-build
diff --git a/sources/binutils-uclibc-001-debian.patch b/sources/binutils-uclibc-001-debian.patch
index 1dd39a933..97b8e7fde 100644
--- a/sources/binutils-uclibc-001-debian.patch
+++ b/sources/binutils-uclibc-001-debian.patch
@@ -1,2228 +1,28 @@
-diff -urN binutils-2.14.90.0.7.orig/bfd/ChangeLog binutils-2.14.90.0.7/bfd/ChangeLog
---- binutils-2.14.90.0.7.orig/bfd/ChangeLog 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/ChangeLog 2004-04-20 01:26:12.000000000 -0600
-@@ -1,3 +1,34 @@
-+2003-10-29 Daniel Jacobowitz <drow@mvista.com>
-+
-+ * elf32-arm.h (elf32_arm_final_link_relocate): Move check for
-+ SEC_ALLOC.
-+
-+2003-10-29 Philip Blundell <philb@gnu.org>
-+
-+ * elf32-arm.h (elf32_arm_plt0_entry, elf32_arm_plt_entry): New
-+ code sequence.
-+ (PLT_HEADER_SIZE): New.
-+ (struct elf32_arm_pcrel_relocs_copied): Rename to ...
-+ (struct elf32_arm_relocs_copied): ... this. Count both
-+ pcrel and non-pcrel relocs. All uses updated.
-+ (struct elf32_arm_link_hash_table): Add pointers to dynamic linker
-+ sections and symbol/section mapping cache.
-+ (create_got_section): New.
-+ (elf32_arm_create_dynamic_sections): New.
-+ (elf_backend_create_dynamic_sections): Use it.
-+ (elf32_arm_final_link_relocate): Support garbage collection of relocs.
-+ (elf32_arm_check_relocs): Likewise.
-+ (elf32_arm_adjust_dynamic_symbol): Likewise.
-+ (elf32_arm_copy_indirect_symbol): New.
-+ (elf32_arm_link_hash_table_create): Initialise new fields.
-+ (elf32_arm_gc_sweep_hook): Implement.
-+ (elf32_arm_discard_copies): Delete.
-+ (elf32_arm_finish_dynamic_symbol): Use new PLT code.
-+ (elf32_arm_finish_dynamic_sections): Likewise.
-+ (elf_backend_can_refcount): Define.
-+ (elf_backend_copy_indirect_symbol): Likewise.
-+ (elf_backend_plt_header_size): Set to PLT_HEADER_SIZE.
-+
- 2003-10-29 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (elf_backend_grok_prstatus): Define.
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf-bfd.h binutils-2.14.90.0.7/bfd/elf-bfd.h
---- binutils-2.14.90.0.7.orig/bfd/elf-bfd.h 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf-bfd.h 2004-04-20 01:26:12.000000000 -0600
-@@ -1303,7 +1303,7 @@
- extern enum elf_reloc_type_class _bfd_elf_reloc_type_class
- (const Elf_Internal_Rela *);
- extern bfd_vma _bfd_elf_rela_local_sym
-- (bfd *, Elf_Internal_Sym *, asection *, Elf_Internal_Rela *);
-+ (bfd *, Elf_Internal_Sym *, asection **, Elf_Internal_Rela *);
- extern bfd_vma _bfd_elf_rel_local_sym
- (bfd *, Elf_Internal_Sym *, asection **, bfd_vma);
- extern bfd_vma _bfd_elf_section_offset
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf-hppa.h binutils-2.14.90.0.7/bfd/elf-hppa.h
---- binutils-2.14.90.0.7.orig/bfd/elf-hppa.h 2003-08-21 09:28:47.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf-hppa.h 2004-04-20 01:26:12.000000000 -0600
-@@ -1346,11 +1346,11 @@
- /* This is a local symbol. */
- sym = local_syms + r_symndx;
- sym_sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sym_sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sym_sec, rel);
-
- /* If this symbol has an entry in the PA64 dynamic hash
- table, then get it. */
-- dyn_name = get_dyn_name (input_section, h, rel,
-+ dyn_name = get_dyn_name (input_bfd, h, rel,
- &dynh_buf, &dynh_buflen);
- dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
- dyn_name, FALSE, FALSE);
-@@ -1373,7 +1373,7 @@
-
- /* If this symbol has an entry in the PA64 dynamic hash
- table, then get it. */
-- dyn_name = get_dyn_name (input_section, h, rel,
-+ dyn_name = get_dyn_name (input_bfd, h, rel,
- &dynh_buf, &dynh_buflen);
- dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
- dyn_name, FALSE, FALSE);
-@@ -1410,7 +1410,7 @@
-
- /* If this symbol has an entry in the PA64 dynamic hash
- table, then get it. */
-- dyn_name = get_dyn_name (input_section, h, rel,
-+ dyn_name = get_dyn_name (input_bfd, h, rel,
- &dynh_buf, &dynh_buflen);
- dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
- dyn_name, FALSE, FALSE);
-@@ -1426,7 +1426,7 @@
- }
- else if (h->root.type == bfd_link_hash_undefweak)
- {
-- dyn_name = get_dyn_name (input_section, h, rel,
-+ dyn_name = get_dyn_name (input_bfd, h, rel,
- &dynh_buf, &dynh_buflen);
- dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
- dyn_name, FALSE, FALSE);
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf-m10200.c binutils-2.14.90.0.7/bfd/elf-m10200.c
---- binutils-2.14.90.0.7.orig/bfd/elf-m10200.c 2003-07-23 09:08:08.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf-m10200.c 2004-04-20 01:26:12.000000000 -0600
-@@ -373,7 +373,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf-m10300.c binutils-2.14.90.0.7/bfd/elf-m10300.c
---- binutils-2.14.90.0.7.orig/bfd/elf-m10300.c 2003-08-21 09:28:47.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf-m10300.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1574,7 +1574,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf.c binutils-2.14.90.0.7/bfd/elf.c
---- binutils-2.14.90.0.7.orig/bfd/elf.c 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf.c 2004-04-20 01:26:12.000000000 -0600
-@@ -7367,9 +7367,10 @@
- bfd_vma
- _bfd_elf_rela_local_sym (bfd *abfd,
- Elf_Internal_Sym *sym,
-- asection *sec,
-+ asection **psec,
- Elf_Internal_Rela *rel)
- {
-+ asection *sec = *psec;
- bfd_vma relocation;
-
- relocation = (sec->output_section->vma
-@@ -7379,16 +7380,14 @@
- && ELF_ST_TYPE (sym->st_info) == STT_SECTION
- && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
- {
-- asection *msec;
--
-- msec = sec;
- rel->r_addend =
-- _bfd_merged_section_offset (abfd, &msec,
-+ _bfd_merged_section_offset (abfd, psec,
- elf_section_data (sec)->sec_info,
- sym->st_value + rel->r_addend,
-- 0)
-- - relocation;
-- rel->r_addend += msec->output_section->vma + msec->output_offset;
-+ 0);
-+ sec = *psec;
-+ rel->r_addend -= relocation;
-+ rel->r_addend += sec->output_section->vma + sec->output_offset;
- }
- return relocation;
- }
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-arm.h binutils-2.14.90.0.7/bfd/elf32-arm.h
---- binutils-2.14.90.0.7.orig/bfd/elf32-arm.h 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-arm.h 2004-04-20 01:26:12.000000000 -0600
-@@ -84,6 +84,12 @@
- static void arm_add_to_rel
- PARAMS ((bfd *, bfd_byte *, reloc_howto_type *, bfd_signed_vma));
- #endif
-+static bfd_boolean allocate_dynrelocs
-+ PARAMS ((struct elf_link_hash_entry *h, PTR inf));
-+static bfd_boolean create_got_section
-+ PARAMS ((bfd * dynobj, struct bfd_link_info * info));
-+static bfd_boolean elf32_arm_create_dynamic_sections
-+ PARAMS ((bfd * dynobj, struct bfd_link_info * info));
- static enum elf_reloc_type_class elf32_arm_reloc_type_class
- PARAMS ((const Elf_Internal_Rela *));
- static bfd_boolean elf32_arm_object_p
-@@ -119,6 +125,12 @@
- section. */
- #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
-
-+#ifdef FOUR_WORD_PLT
-+
-+/* The size in bytes of the special first entry in the procedure
-+ linkage table. */
-+#define PLT_HEADER_SIZE 16
-+
- /* The size in bytes of an entry in the procedure linkage table. */
- #define PLT_ENTRY_SIZE 16
-
-@@ -126,23 +138,56 @@
- this. It is set up so that any shared library function that is
- called before the relocation has been set up calls the dynamic
- linker first. */
--static const bfd_vma elf32_arm_plt0_entry [PLT_ENTRY_SIZE / 4] =
-+static const bfd_vma elf32_arm_plt0_entry [PLT_HEADER_SIZE / 4] =
- {
-- 0xe52de004, /* str lr, [sp, #-4]! */
-- 0xe59fe010, /* ldr lr, [pc, #16] */
-- 0xe08fe00e, /* add lr, pc, lr */
-- 0xe5bef008 /* ldr pc, [lr, #8]! */
-+ 0xe52de004, /* str lr, [sp, #-4]! */
-+ 0xe59fe010, /* ldr lr, [pc, #16] */
-+ 0xe08fe00e, /* add lr, pc, lr */
-+ 0xe5bef008, /* ldr pc, [lr, #8]! */
- };
-
- /* Subsequent entries in a procedure linkage table look like
- this. */
- static const bfd_vma elf32_arm_plt_entry [PLT_ENTRY_SIZE / 4] =
-- {
-- 0xe59fc004, /* ldr ip, [pc, #4] */
-- 0xe08fc00c, /* add ip, pc, ip */
-- 0xe59cf000, /* ldr pc, [ip] */
-- 0x00000000 /* offset to symbol in got */
-- };
-+ {
-+ 0xe28fc600, /* add ip, pc, #NN */
-+ 0xe28cca00, /* add ip, ip, #NN */
-+ 0xe5bcf000, /* ldr pc, [ip, #NN]! */
-+ 0x00000000, /* unused */
-+ };
-+
-+#else
-+
-+/* The size in bytes of the special first entry in the procedure
-+ linkage table. */
-+#define PLT_HEADER_SIZE 20
-+
-+/* The size in bytes of an entry in the procedure linkage table. */
-+#define PLT_ENTRY_SIZE 12
-+
-+/* The first entry in a procedure linkage table looks like
-+ this. It is set up so that any shared library function that is
-+ called before the relocation has been set up calls the dynamic
-+ linker first. */
-+static const bfd_vma elf32_arm_plt0_entry [PLT_HEADER_SIZE / 4] =
-+ {
-+ 0xe52de004, /* str lr, [sp, #-4]! */
-+ 0xe59fe004, /* ldr lr, [pc, #4] */
-+ 0xe08fe00e, /* add lr, pc, lr */
-+ 0xe5bef008, /* ldr pc, [lr, #8]! */
-+ 0x00000000, /* &GOT[0] - . */
-+ };
-+
-+/* Subsequent entries in a procedure linkage table look like
-+ this. */
-+static const bfd_vma elf32_arm_plt_entry [PLT_ENTRY_SIZE / 4] =
-+ {
-+ 0xe28fc600, /* add ip, pc, #0xNN00000 */
-+ 0xe28cca00, /* add ip, ip, #0xNN000 */
-+ 0xe5bcf000, /* ldr pc, [ip, #0xNNN]! */
-+ };
-+
-+#endif
-
- /* The ARM linker needs to keep track of the number of relocs that it
- decides to copy in check_relocs for each symbol. This is so that
-@@ -152,14 +197,16 @@
-
- /* This structure keeps track of the number of PC relative relocs we
- have copied for a given symbol. */
--struct elf32_arm_pcrel_relocs_copied
-+struct elf32_arm_relocs_copied
- {
- /* Next section. */
-- struct elf32_arm_pcrel_relocs_copied * next;
-+ struct elf32_arm_relocs_copied * next;
- /* A section in dynobj. */
- asection * section;
- /* Number of relocs copied in this section. */
- bfd_size_type count;
-+ /* Number of relocs copied in this section. */
-+ bfd_size_type pc_count;
- };
-
- /* Arm ELF linker hash entry. */
-@@ -168,13 +215,9 @@
- struct elf_link_hash_entry root;
-
- /* Number of PC relative relocs copied for this symbol. */
-- struct elf32_arm_pcrel_relocs_copied * pcrel_relocs_copied;
-+ struct elf32_arm_relocs_copied * relocs_copied;
- };
-
--/* Declare this now that the above structures are defined. */
--static bfd_boolean elf32_arm_discard_copies
-- PARAMS ((struct elf32_arm_link_hash_entry *, PTR));
--
- /* Traverse an arm ELF linker hash table. */
- #define elf32_arm_link_hash_traverse(table, func, info) \
- (elf_link_hash_traverse \
-@@ -204,6 +247,18 @@
- /* A boolean indicating whether knowledge of the ARM's pipeline
- length should be applied by the linker. */
- int no_pipeline_knowledge;
-+
-+ /* Short-cuts to get to dynamic linker sections. */
-+ asection *sgot;
-+ asection *sgotplt;
-+ asection *srelgot;
-+ asection *splt;
-+ asection *srelplt;
-+ asection *sdynbss;
-+ asection *srelbss;
-+
-+ /* Small local sym to section mapping cache. */
-+ struct sym_sec_cache sym_sec;
- };
-
- /* Create an entry in an ARM ELF linker hash table. */
-@@ -231,11 +286,121 @@
- _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
- table, string));
- if (ret != (struct elf32_arm_link_hash_entry *) NULL)
-- ret->pcrel_relocs_copied = NULL;
-+ ret->relocs_copied = NULL;
-
- return (struct bfd_hash_entry *) ret;
- }
-
-+/* Create .got, .gotplt, and .rel.got sections in DYNOBJ, and set up
-+ shortcuts to them in our hash table. */
-+
-+static bfd_boolean
-+create_got_section (dynobj, info)
-+ bfd *dynobj;
-+ struct bfd_link_info *info;
-+{
-+ struct elf32_arm_link_hash_table *htab;
-+
-+ if (! _bfd_elf_create_got_section (dynobj, info))
-+ return FALSE;
-+
-+ htab = elf32_arm_hash_table (info);
-+ htab->sgot = bfd_get_section_by_name (dynobj, ".got");
-+ htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
-+ if (!htab->sgot || !htab->sgotplt)
-+ abort ();
-+
-+ htab->srelgot = bfd_make_section (dynobj, ".rel.got");
-+ if (htab->srelgot == NULL
-+ || ! bfd_set_section_flags (dynobj, htab->srelgot,
-+ (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
-+ | SEC_IN_MEMORY | SEC_LINKER_CREATED
-+ | SEC_READONLY))
-+ || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2))
-+ return FALSE;
-+ return TRUE;
-+}
-+
-+/* Create .plt, .rel.plt, .got, .got.plt, .rel.got, .dynbss, and
-+ .rel.bss sections in DYNOBJ, and set up shortcuts to them in our
-+ hash table. */
-+
-+static bfd_boolean
-+elf32_arm_create_dynamic_sections (dynobj, info)
-+ bfd *dynobj;
-+ struct bfd_link_info *info;
-+{
-+ struct elf32_arm_link_hash_table *htab;
-+
-+ htab = elf32_arm_hash_table (info);
-+ if (!htab->sgot && !create_got_section (dynobj, info))
-+ return FALSE;
-+
-+ if (!_bfd_elf_create_dynamic_sections (dynobj, info))
-+ return FALSE;
-+
-+ htab->splt = bfd_get_section_by_name (dynobj, ".plt");
-+ htab->srelplt = bfd_get_section_by_name (dynobj, ".rel.plt");
-+ htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
-+ if (!info->shared)
-+ htab->srelbss = bfd_get_section_by_name (dynobj, ".rel.bss");
-+
-+ if (!htab->splt || !htab->srelplt || !htab->sdynbss
-+ || (!info->shared && !htab->srelbss))
-+ abort ();
-+
-+ return TRUE;
-+}
-+
-+/* Copy the extra info we tack onto an elf_link_hash_entry. */
-+
-+static void
-+elf32_arm_copy_indirect_symbol (const struct elf_backend_data *bed,
-+ struct elf_link_hash_entry *dir,
-+ struct elf_link_hash_entry *ind)
-+{
-+ struct elf32_arm_link_hash_entry *edir, *eind;
-+
-+ edir = (struct elf32_arm_link_hash_entry *) dir;
-+ eind = (struct elf32_arm_link_hash_entry *) ind;
-+
-+ if (eind->relocs_copied != NULL)
-+ {
-+ if (edir->relocs_copied != NULL)
-+ {
-+ struct elf32_arm_relocs_copied **pp;
-+ struct elf32_arm_relocs_copied *p;
-+
-+ if (ind->root.type == bfd_link_hash_indirect)
-+ abort ();
-+
-+ /* Add reloc counts against the weak sym to the strong sym
-+ list. Merge any entries against the same section. */
-+ for (pp = &eind->relocs_copied; (p = *pp) != NULL; )
-+ {
-+ struct elf32_arm_relocs_copied *q;
-+
-+ for (q = edir->relocs_copied; q != NULL; q = q->next)
-+ if (q->section == p->section)
-+ {
-+ q->pc_count += p->pc_count;
-+ q->count += p->count;
-+ *pp = p->next;
-+ break;
-+ }
-+ if (q == NULL)
-+ pp = &p->next;
-+ }
-+ *pp = edir->relocs_copied;
-+ }
-+
-+ edir->relocs_copied = eind->relocs_copied;
-+ eind->relocs_copied = NULL;
-+ }
-+
-+ _bfd_elf_link_hash_copy_indirect (bed, dir, ind);
-+}
-+
- /* Create an ARM elf linker hash table. */
-
- static struct bfd_link_hash_table *
-@@ -256,10 +421,18 @@
- return NULL;
- }
-
-+ ret->sgot = NULL;
-+ ret->sgotplt = NULL;
-+ ret->srelgot = NULL;
-+ ret->splt = NULL;
-+ ret->srelplt = NULL;
-+ ret->sdynbss = NULL;
-+ ret->srelbss = NULL;
- ret->thumb_glue_size = 0;
- ret->arm_glue_size = 0;
- ret->bfd_of_glue_owner = NULL;
- ret->no_pipeline_knowledge = 0;
-+ ret->sym_sec.abfd = NULL;
-
- return &ret->root.root;
- }
-@@ -1134,16 +1307,21 @@
- #ifndef OLD_ARM_ABI
- case R_ARM_XPC25:
- #endif
-+ /* r_symndx will be zero only for relocs against symbols
-+ from removed linkonce sections, or sections discarded by
-+ a linker script. */
-+ if (r_symndx == 0)
-+ return bfd_reloc_ok;
-+
- /* When generating a shared object, these relocations are copied
- into the output file to be resolved at run time. */
-- if (info->shared
-- && r_symndx != 0
-- && (r_type != R_ARM_PC24
-- || (h != NULL
-- && h->dynindx != -1
-- && (! info->symbolic
-- || (h->elf_link_hash_flags
-- & ELF_LINK_HASH_DEF_REGULAR) == 0))))
-+ if ((info->shared
-+ && (input_section->flags & SEC_ALLOC)
-+ && (h == NULL
-+ || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-+ || h->root.type != bfd_link_hash_undefweak)
-+ && (r_type != R_ARM_PC24
-+ || !SYMBOL_CALLS_LOCAL (info, h))))
- {
- Elf_Internal_Rela outrel;
- bfd_byte *loc;
-@@ -1184,30 +1362,19 @@
-
- if (skip)
- memset (&outrel, 0, sizeof outrel);
-- else if (r_type == R_ARM_PC24)
-- {
-- BFD_ASSERT (h != NULL && h->dynindx != -1);
-- if ((input_section->flags & SEC_ALLOC) == 0)
-- relocate = TRUE;
-- outrel.r_info = ELF32_R_INFO (h->dynindx, R_ARM_PC24);
-- }
-+ else if (h != NULL
-+ && h->dynindx != -1
-+ && (r_type == R_ARM_PC24
-+ || !info->shared
-+ || !info->symbolic
-+ || (h->elf_link_hash_flags
-+ & ELF_LINK_HASH_DEF_REGULAR) == 0))
-+ outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
- else
- {
-- if (h == NULL
-- || ((info->symbolic || h->dynindx == -1)
-- && (h->elf_link_hash_flags
-- & ELF_LINK_HASH_DEF_REGULAR) != 0))
-- {
-- relocate = TRUE;
-- outrel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
-- }
-- else
-- {
-- BFD_ASSERT (h->dynindx != -1);
-- if ((input_section->flags & SEC_ALLOC) == 0)
-- relocate = TRUE;
-- outrel.r_info = ELF32_R_INFO (h->dynindx, R_ARM_ABS32);
-- }
-+ /* This symbol is local, or marked to become local. */
-+ relocate = TRUE;
-+ outrel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
- }
-
- loc = sreloc->contents;
-@@ -1617,16 +1784,17 @@
- if (h != NULL)
- {
- bfd_vma off;
-- bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
-+ bfd_boolean dyn;
-
- off = h->got.offset;
- BFD_ASSERT (off != (bfd_vma) -1);
-+ dyn = globals->root.dynamic_sections_created;
-
-- if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
-+ if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
- || (info->shared
-- && (info->symbolic || h->dynindx == -1
-- || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
-- && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
-+ && SYMBOL_REFERENCES_LOCAL (info, h))
-+ || (ELF_ST_VISIBILITY (h->other)
-+ && h->root.type == bfd_link_hash_undefweak))
- {
- /* This is actually a static link, or it is a -Bsymbolic link
- and the symbol is defined locally. We must initialize this
-@@ -1712,7 +1880,8 @@
- contents, rel->r_offset, value,
- (bfd_vma) 0);
-
-- if (h->plt.offset == (bfd_vma) -1)
-+ if (h->plt.offset == (bfd_vma) -1
-+ || globals->splt == NULL)
- /* We didn't make a PLT entry for this symbol. This
- happens when statically linking PIC code, or when
- using -Bsymbolic. */
-@@ -1958,7 +2127,7 @@
- bfd_put_32 (input_bfd, value, contents + rel->r_offset);
- }
- #else
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- #endif
- }
- else
-@@ -1983,9 +2152,10 @@
- case R_ARM_THM_PC22:
- if (info->shared
- && (
-- (!info->symbolic && h->dynindx != -1)
-+ (!info->symbolic && h->dynindx != -1)
- || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
- )
-+ && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
- && ((input_section->flags & SEC_ALLOC) != 0
- /* DWARF will emit R_ARM_ABS32 relocations in its
- sections against symbols defined externally
-@@ -2603,7 +2773,82 @@
- asection *sec ATTRIBUTE_UNUSED;
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
- {
-- /* We don't support garbage collection of GOT and PLT relocs yet. */
-+ Elf_Internal_Shdr *symtab_hdr;
-+ struct elf_link_hash_entry **sym_hashes;
-+ bfd_signed_vma *local_got_refcounts;
-+ const Elf_Internal_Rela *rel, *relend;
-+ unsigned long r_symndx;
-+ struct elf_link_hash_entry *h;
-+
-+ elf_section_data (sec)->local_dynrel = NULL;
-+
-+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
-+ sym_hashes = elf_sym_hashes (abfd);
-+ local_got_refcounts = elf_local_got_refcounts (abfd);
-+
-+ relend = relocs + sec->reloc_count;
-+ for (rel = relocs; rel < relend; rel++)
-+ switch (ELF32_R_TYPE (rel->r_info))
-+ {
-+ case R_ARM_GOT32:
-+ r_symndx = ELF32_R_SYM (rel->r_info);
-+ if (r_symndx >= symtab_hdr->sh_info)
-+ {
-+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
-+ if (h->got.refcount > 0)
-+ h->got.refcount -= 1;
-+ }
-+ else if (local_got_refcounts != NULL)
-+ {
-+ if (local_got_refcounts[r_symndx] > 0)
-+ local_got_refcounts[r_symndx] -= 1;
-+ }
-+ break;
-+
-+ case R_ARM_ABS32:
-+ case R_ARM_REL32:
-+ case R_ARM_PC24:
-+ r_symndx = ELF32_R_SYM (rel->r_info);
-+ if (r_symndx >= symtab_hdr->sh_info)
-+ {
-+ struct elf32_arm_link_hash_entry *eh;
-+ struct elf32_arm_relocs_copied **pp;
-+ struct elf32_arm_relocs_copied *p;
-+
-+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
-+
-+ if (!info->shared && h->plt.refcount > 0)
-+ h->plt.refcount -= 1;
-+
-+ eh = (struct elf32_arm_link_hash_entry *) h;
-+
-+ for (pp = &eh->relocs_copied; (p = *pp) != NULL; pp = &p->next)
-+ if (p->section == sec)
-+ {
-+ if (ELF32_R_TYPE (rel->r_info) == R_ARM_PC24)
-+ p->pc_count -= 1;
-+ p->count -= 1;
-+ if (p->count == 0)
-+ *pp = p->next;
-+ break;
-+ }
-+ }
-+ break;
-+
-+ case R_ARM_PLT32:
-+ r_symndx = ELF32_R_SYM (rel->r_info);
-+ if (r_symndx >= symtab_hdr->sh_info)
-+ {
-+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
-+ if (h->plt.refcount > 0)
-+ h->plt.refcount -= 1;
-+ }
-+ break;
-+
-+ default:
-+ break;
-+ }
-+
- return TRUE;
- }
-
-@@ -2622,13 +2867,15 @@
- const Elf_Internal_Rela *rel;
- const Elf_Internal_Rela *rel_end;
- bfd *dynobj;
-- asection *sgot, *srelgot, *sreloc;
-+ asection *sreloc;
- bfd_vma *local_got_offsets;
-+ struct elf32_arm_link_hash_table *htab;
-
- if (info->relocatable)
- return TRUE;
-
-- sgot = srelgot = sreloc = NULL;
-+ htab = elf32_arm_hash_table (info);
-+ sreloc = NULL;
-
- dynobj = elf_hash_table (info)->dynobj;
- local_got_offsets = elf_local_got_offsets (abfd);
-@@ -2653,126 +2900,82 @@
- else
- h = sym_hashes[r_symndx - symtab_hdr->sh_info];
-
-- /* Some relocs require a global offset table. */
-- if (dynobj == NULL)
-- {
-- switch (ELF32_R_TYPE (rel->r_info))
-- {
-- case R_ARM_GOT32:
-- case R_ARM_GOTOFF:
-- case R_ARM_GOTPC:
-- elf_hash_table (info)->dynobj = dynobj = abfd;
-- if (! _bfd_elf_create_got_section (dynobj, info))
-- return FALSE;
-- break;
--
-- default:
-- break;
-- }
-- }
--
- switch (ELF32_R_TYPE (rel->r_info))
- {
-- case R_ARM_GOT32:
-- /* This symbol requires a global offset table entry. */
-- if (sgot == NULL)
-- {
-- sgot = bfd_get_section_by_name (dynobj, ".got");
-- BFD_ASSERT (sgot != NULL);
-- }
-+ case R_ARM_PLT32:
-+ /* This symbol requires a procedure linkage table entry. We
-+ actually build the entry in adjust_dynamic_symbol,
-+ because this might be a case of linking PIC code which is
-+ never referenced by a dynamic object, in which case we
-+ don't need to generate a procedure linkage table entry
-+ after all. */
-
-- /* Get the got relocation section if necessary. */
-- if (srelgot == NULL
-- && (h != NULL || info->shared))
-- {
-- srelgot = bfd_get_section_by_name (dynobj, ".rel.got");
-+ /* If this is a local symbol, we resolve it directly without
-+ creating a procedure linkage table entry. */
-+ if (h == NULL)
-+ continue;
-
-- /* If no got relocation section, make one and initialize. */
-- if (srelgot == NULL)
-- {
-- srelgot = bfd_make_section (dynobj, ".rel.got");
-- if (srelgot == NULL
-- || ! bfd_set_section_flags (dynobj, srelgot,
-- (SEC_ALLOC
-- | SEC_LOAD
-- | SEC_HAS_CONTENTS
-- | SEC_IN_MEMORY
-- | SEC_LINKER_CREATED
-- | SEC_READONLY))
-- || ! bfd_set_section_alignment (dynobj, srelgot, 2))
-- return FALSE;
-- }
-- }
-+ h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
-+ h->plt.refcount++;
-+ break;
-
-+ case R_ARM_GOT32:
-+ /* This symbol requires a global offset table entry. */
- if (h != NULL)
- {
-- if (h->got.offset != (bfd_vma) -1)
-- /* We have already allocated space in the .got. */
-- break;
--
-- h->got.offset = sgot->_raw_size;
--
-- /* Make sure this symbol is output as a dynamic symbol. */
-- if (h->dynindx == -1)
-- if (! bfd_elf32_link_record_dynamic_symbol (info, h))
-- return FALSE;
--
-- srelgot->_raw_size += sizeof (Elf32_External_Rel);
-+ h->got.refcount++;
- }
- else
- {
-- /* This is a global offset table entry for a local
-- symbol. */
-- if (local_got_offsets == NULL)
-+ bfd_signed_vma *local_got_refcounts;
-+
-+ /* This is a global offset table entry for a local symbol. */
-+ local_got_refcounts = elf_local_got_refcounts (abfd);
-+ if (local_got_refcounts == NULL)
- {
- bfd_size_type size;
-- unsigned int i;
-
- size = symtab_hdr->sh_info;
-- size *= sizeof (bfd_vma);
-- local_got_offsets = (bfd_vma *) bfd_alloc (abfd, size);
-- if (local_got_offsets == NULL)
-+ size *= (sizeof (bfd_signed_vma) + sizeof(char));
-+ local_got_refcounts = ((bfd_signed_vma *)
-+ bfd_zalloc (abfd, size));
-+ if (local_got_refcounts == NULL)
- return FALSE;
-- elf_local_got_offsets (abfd) = local_got_offsets;
-- for (i = 0; i < symtab_hdr->sh_info; i++)
-- local_got_offsets[i] = (bfd_vma) -1;
-+ elf_local_got_refcounts (abfd) = local_got_refcounts;
- }
--
-- if (local_got_offsets[r_symndx] != (bfd_vma) -1)
-- /* We have already allocated space in the .got. */
-- break;
--
-- local_got_offsets[r_symndx] = sgot->_raw_size;
--
-- if (info->shared)
-- /* If we are generating a shared object, we need to
-- output a R_ARM_RELATIVE reloc so that the dynamic
-- linker can adjust this GOT entry. */
-- srelgot->_raw_size += sizeof (Elf32_External_Rel);
-+ local_got_refcounts[r_symndx] += 1;
- }
--
-- sgot->_raw_size += 4;
- break;
-
-- case R_ARM_PLT32:
-- /* This symbol requires a procedure linkage table entry. We
-- actually build the entry in adjust_dynamic_symbol,
-- because this might be a case of linking PIC code which is
-- never referenced by a dynamic object, in which case we
-- don't need to generate a procedure linkage table entry
-- after all. */
--
-- /* If this is a local symbol, we resolve it directly without
-- creating a procedure linkage table entry. */
-- if (h == NULL)
-- continue;
--
-- h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
-+ case R_ARM_GOTOFF:
-+ case R_ARM_GOTPC:
-+ if (htab->sgot == NULL)
-+ {
-+ if (htab->root.dynobj == NULL)
-+ htab->root.dynobj = abfd;
-+ if (!create_got_section (htab->root.dynobj, info))
-+ return FALSE;
-+ }
- break;
-
- case R_ARM_ABS32:
- case R_ARM_REL32:
- case R_ARM_PC24:
-+ if (h != NULL && !info->shared)
-+ {
-+ /* If this reloc is in a read-only section, we might
-+ need a copy reloc. We can't check reliably at this
-+ stage whether the section is read-only, as input
-+ sections have not yet been mapped to output sections.
-+ Tentatively set the flag for now, and correct in
-+ adjust_dynamic_symbol. */
-+ h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
-+
-+ /* We may need a .plt entry if the function this reloc
-+ refers to is in a shared lib. */
-+ h->plt.refcount += 1;
-+ }
-+
- /* If we are creating a shared library, and this is a reloc
- against a global symbol, or a non PC relative reloc
- against a local symbol, then we need to copy the reloc
-@@ -2784,14 +2987,17 @@
- possible that DEF_REGULAR is not set now but will be set
- later (it is never cleared). We account for that
- possibility below by storing information in the
-- pcrel_relocs_copied field of the hash table entry. */
-+ relocs_copied field of the hash table entry. */
- if (info->shared
-- && (ELF32_R_TYPE (rel->r_info) != R_ARM_PC24
-- || (h != NULL
-- && (! info->symbolic
-- || (h->elf_link_hash_flags
-- & ELF_LINK_HASH_DEF_REGULAR) == 0))))
-+ && (sec->flags & SEC_ALLOC) != 0
-+ && (ELF32_R_TYPE (rel->r_info) != R_ARM_PC24
-+ || (h != NULL
-+ && (! info->symbolic
-+ || (h->elf_link_hash_flags
-+ & ELF_LINK_HASH_DEF_REGULAR) == 0))))
- {
-+ struct elf32_arm_relocs_copied *p, **head;
-+
- /* When creating a shared object, we must copy these
- reloc types into the output file. We create a reloc
- section in dynobj and make room for this reloc. */
-@@ -2825,45 +3031,49 @@
- || ! bfd_set_section_alignment (dynobj, sreloc, 2))
- return FALSE;
- }
-- if (sec->flags & SEC_READONLY)
-- info->flags |= DF_TEXTREL;
-+
-+ elf_section_data (sec)->sreloc = sreloc;
- }
-
-- sreloc->_raw_size += sizeof (Elf32_External_Rel);
-- /* If we are linking with -Bsymbolic, and this is a
-- global symbol, we count the number of PC relative
-- relocations we have entered for this symbol, so that
-- we can discard them again if the symbol is later
-- defined by a regular object. Note that this function
-- is only called if we are using an elf_i386 linker
-- hash table, which means that h is really a pointer to
-- an elf_i386_link_hash_entry. */
-- if (h != NULL && info->symbolic
-- && ELF32_R_TYPE (rel->r_info) == R_ARM_PC24)
-+ /* If this is a global symbol, we count the number of
-+ relocations we need for this symbol. */
-+ if (h != NULL)
- {
-- struct elf32_arm_link_hash_entry * eh;
-- struct elf32_arm_pcrel_relocs_copied * p;
--
-- eh = (struct elf32_arm_link_hash_entry *) h;
--
-- for (p = eh->pcrel_relocs_copied; p != NULL; p = p->next)
-- if (p->section == sreloc)
-- break;
--
-+ head = &((struct elf32_arm_link_hash_entry *) h)->relocs_copied;
-+ }
-+ else
-+ {
-+ /* Track dynamic relocs needed for local syms too.
-+ We really need local syms available to do this
-+ easily. Oh well. */
-+
-+ asection *s;
-+ s = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
-+ sec, r_symndx);
-+ if (s == NULL)
-+ return FALSE;
-+
-+ head = ((struct elf32_arm_relocs_copied **)
-+ &elf_section_data (s)->local_dynrel);
-+ }
-+
-+ p = *head;
-+ if (p == NULL || p->section != sec)
-+ {
-+ bfd_size_type amt = sizeof *p;
-+ p = bfd_alloc (htab->root.dynobj, amt);
- if (p == NULL)
-- {
-- p = ((struct elf32_arm_pcrel_relocs_copied *)
-- bfd_alloc (dynobj, (bfd_size_type) sizeof * p));
-- if (p == NULL)
-- return FALSE;
-- p->next = eh->pcrel_relocs_copied;
-- eh->pcrel_relocs_copied = p;
-- p->section = sreloc;
-- p->count = 0;
-- }
--
-- ++p->count;
-+ return FALSE;
-+ p->next = *head;
-+ *head = p;
-+ p->section = sec;
-+ p->count = 0;
-+ p->pc_count = 0;
- }
-+
-+ p->count += 1;
-+ if (ELF32_R_TYPE (rel->r_info) == R_ARM_PC24)
-+ p->pc_count += 1;
- }
- break;
-
-@@ -3003,71 +3213,29 @@
- if (h->type == STT_FUNC
- || (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
- {
-- /* If we link a program (not a DSO), we'll get rid of unnecessary
-- PLT entries; we point to the actual symbols -- even for pic
-- relocs, because a program built with -fpic should have the same
-- result as one built without -fpic, specifically considering weak
-- symbols.
-- FIXME: m68k and i386 differ here, for unclear reasons. */
-- if (! info->shared
-- && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0)
-+ if (h->plt.refcount <= 0
-+ || SYMBOL_CALLS_LOCAL (info, h)
-+ || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
-+ && h->root.type == bfd_link_hash_undefweak))
- {
- /* This case can occur if we saw a PLT32 reloc in an input
-- file, but the symbol was not defined by a dynamic object.
-- In such a case, we don't actually need to build a
-- procedure linkage table, and we can just do a PC32 reloc
-- instead. */
-- BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0);
-+ file, but the symbol was never referred to by a dynamic
-+ object, or if all references were garbage collected. In
-+ such a case, we don't actually need to build a procedure
-+ linkage table, and we can just do a PC24 reloc instead. */
-+ h->plt.offset = (bfd_vma) -1;
- h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
-- return TRUE;
-- }
--
-- /* Make sure this symbol is output as a dynamic symbol. */
-- if (h->dynindx == -1)
-- {
-- if (! bfd_elf32_link_record_dynamic_symbol (info, h))
-- return FALSE;
- }
-
-- s = bfd_get_section_by_name (dynobj, ".plt");
-- BFD_ASSERT (s != NULL);
--
-- /* If this is the first .plt entry, make room for the special
-- first entry. */
-- if (s->_raw_size == 0)
-- s->_raw_size += PLT_ENTRY_SIZE;
--
-- /* If this symbol is not defined in a regular file, and we are
-- not generating a shared library, then set the symbol to this
-- location in the .plt. This is required to make function
-- pointers compare as equal between the normal executable and
-- the shared library. */
-- if (! info->shared
-- && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
-- {
-- h->root.u.def.section = s;
-- h->root.u.def.value = s->_raw_size;
-- }
--
-- h->plt.offset = s->_raw_size;
--
-- /* Make room for this entry. */
-- s->_raw_size += PLT_ENTRY_SIZE;
--
-- /* We also need to make an entry in the .got.plt section, which
-- will be placed in the .got section by the linker script. */
-- s = bfd_get_section_by_name (dynobj, ".got.plt");
-- BFD_ASSERT (s != NULL);
-- s->_raw_size += 4;
--
-- /* We also need to make an entry in the .rel.plt section. */
--
-- s = bfd_get_section_by_name (dynobj, ".rel.plt");
-- BFD_ASSERT (s != NULL);
-- s->_raw_size += sizeof (Elf32_External_Rel);
--
- return TRUE;
- }
-+ else
-+ /* It's possible that we incorrectly decided a .plt reloc was
-+ needed for an R_ARM_PC24 reloc to a non-function sym in
-+ check_relocs. We can't decide accurately between function and
-+ non-function syms in check-relocs; Objects loaded later in
-+ the link may change h->type. So fix it now. */
-+ h->plt.offset = (bfd_vma) -1;
-
- /* If this is a weak symbol, and there is a real definition, the
- processor independent code will have arranged for us to see the
-@@ -3142,6 +3310,198 @@
- return TRUE;
- }
-
-+/* Allocate space in .plt, .got and associated reloc sections for
-+ dynamic relocs. */
-+
-+static bfd_boolean
-+allocate_dynrelocs (h, inf)
-+ struct elf_link_hash_entry *h;
-+ PTR inf;
-+{
-+ struct bfd_link_info *info;
-+ struct elf32_arm_link_hash_table *htab;
-+ struct elf32_arm_link_hash_entry *eh;
-+ struct elf32_arm_relocs_copied *p;
-+
-+ if (h->root.type == bfd_link_hash_indirect)
-+ return TRUE;
-+
-+ if (h->root.type == bfd_link_hash_warning)
-+ /* When warning symbols are created, they **replace** the "real"
-+ entry in the hash table, thus we never get to see the real
-+ symbol in a hash traversal. So look at it now. */
-+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
-+
-+ info = (struct bfd_link_info *) inf;
-+ htab = elf32_arm_hash_table (info);
-+
-+ if (htab->root.dynamic_sections_created
-+ && h->plt.refcount > 0)
-+ {
-+ /* Make sure this symbol is output as a dynamic symbol.
-+ Undefined weak syms won't yet be marked as dynamic. */
-+ if (h->dynindx == -1
-+ && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
-+ {
-+ if (! bfd_elf32_link_record_dynamic_symbol (info, h))
-+ return FALSE;
-+ }
-+
-+ if (info->shared
-+ || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
-+ {
-+ asection *s = htab->splt;
-+
-+ /* If this is the first .plt entry, make room for the special
-+ first entry. */
-+ if (s->_raw_size == 0)
-+ s->_raw_size += PLT_HEADER_SIZE;
-+
-+ h->plt.offset = s->_raw_size;
-+
-+ /* If this symbol is not defined in a regular file, and we are
-+ not generating a shared library, then set the symbol to this
-+ location in the .plt. This is required to make function
-+ pointers compare as equal between the normal executable and
-+ the shared library. */
-+ if (! info->shared
-+ && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
-+ {
-+ h->root.u.def.section = s;
-+ h->root.u.def.value = h->plt.offset;
-+ }
-+
-+ /* Make room for this entry. */
-+ s->_raw_size += PLT_ENTRY_SIZE;
-+
-+ /* We also need to make an entry in the .got.plt section, which
-+ will be placed in the .got section by the linker script. */
-+ htab->sgotplt->_raw_size += 4;
-+
-+ /* We also need to make an entry in the .rel.plt section. */
-+ htab->srelplt->_raw_size += sizeof (Elf32_External_Rel);
-+ }
-+ else
-+ {
-+ h->plt.offset = (bfd_vma) -1;
-+ h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
-+ }
-+ }
-+ else
-+ {
-+ h->plt.offset = (bfd_vma) -1;
-+ h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
-+ }
-+
-+ if (h->got.refcount > 0)
-+ {
-+ asection *s;
-+ bfd_boolean dyn;
-+
-+ /* Make sure this symbol is output as a dynamic symbol.
-+ Undefined weak syms won't yet be marked as dynamic. */
-+ if (h->dynindx == -1
-+ && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
-+ {
-+ if (! bfd_elf32_link_record_dynamic_symbol (info, h))
-+ return FALSE;
-+ }
-+
-+ s = htab->sgot;
-+ h->got.offset = s->_raw_size;
-+ s->_raw_size += 4;
-+ dyn = htab->root.dynamic_sections_created;
-+ if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-+ || h->root.type != bfd_link_hash_undefweak)
-+ && (info->shared
-+ || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
-+ htab->srelgot->_raw_size += sizeof (Elf32_External_Rel);
-+ }
-+ else
-+ h->got.offset = (bfd_vma) -1;
-+
-+ eh = (struct elf32_arm_link_hash_entry *) h;
-+ if (eh->relocs_copied == NULL)
-+ return TRUE;
-+
-+ /* In the shared -Bsymbolic case, discard space allocated for
-+ dynamic pc-relative relocs against symbols which turn out to be
-+ defined in regular objects. For the normal shared case, discard
-+ space for pc-relative relocs that have become local due to symbol
-+ visibility changes. */
-+
-+ if (info->shared)
-+ {
-+ /* The only reloc that uses pc_count is R_ARM_PC24, which will
-+ appear on a call or on something like ".long foo - .". We
-+ want calls to protected symbols to resolve directly to the
-+ function rather than going via the plt. If people want
-+ function pointer comparisons to work as expected then they
-+ should avoid writing assembly like ".long foo - .". */
-+ if (SYMBOL_CALLS_LOCAL (info, h))
-+ {
-+ struct elf32_arm_relocs_copied **pp;
-+
-+ for (pp = &eh->relocs_copied; (p = *pp) != NULL; )
-+ {
-+ p->count -= p->pc_count;
-+ p->pc_count = 0;
-+ if (p->count == 0)
-+ *pp = p->next;
-+ else
-+ pp = &p->next;
-+ }
-+ }
-+
-+ /* Also discard relocs on undefined weak syms with non-default
-+ visibility. */
-+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
-+ && h->root.type == bfd_link_hash_undefweak)
-+ eh->relocs_copied = NULL;
-+ }
-+ else
-+ {
-+ /* For the non-shared case, discard space for relocs against
-+ symbols which turn out to need copy relocs or are not
-+ dynamic. */
-+
-+ if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0
-+ && (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
-+ && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
-+ || (htab->root.dynamic_sections_created
-+ && (h->root.type == bfd_link_hash_undefweak
-+ || h->root.type == bfd_link_hash_undefined))))
-+ {
-+ /* Make sure this symbol is output as a dynamic symbol.
-+ Undefined weak syms won't yet be marked as dynamic. */
-+ if (h->dynindx == -1
-+ && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
-+ {
-+ if (! bfd_elf32_link_record_dynamic_symbol (info, h))
-+ return FALSE;
-+ }
-+
-+ /* If that succeeded, we know we'll be keeping all the
-+ relocs. */
-+ if (h->dynindx != -1)
-+ goto keep;
-+ }
-+
-+ eh->relocs_copied = NULL;
-+
-+ keep: ;
-+ }
-+
-+ /* Finally, allocate space. */
-+ for (p = eh->relocs_copied; p != NULL; p = p->next)
-+ {
-+ asection *sreloc = elf_section_data (p->section)->sreloc;
-+ sreloc->_raw_size += p->count * sizeof (Elf32_External_Rel);
-+ }
-+
-+ return TRUE;
-+}
-+
- /* Set the sizes of the dynamic sections. */
-
- static bfd_boolean
-@@ -3153,7 +3513,10 @@
- asection * s;
- bfd_boolean plt;
- bfd_boolean relocs;
-+ bfd *ibfd;
-+ struct elf32_arm_link_hash_table *htab;
-
-+ htab = elf32_arm_hash_table (info);
- dynobj = elf_hash_table (info)->dynobj;
- BFD_ASSERT (dynobj != NULL);
-
-@@ -3168,26 +3531,74 @@
- s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
- }
- }
-- else
-- {
-- /* We may have created entries in the .rel.got section.
-- However, if we are not creating the dynamic sections, we will
-- not actually use these entries. Reset the size of .rel.got,
-- which will cause it to get stripped from the output file
-- below. */
-- s = bfd_get_section_by_name (dynobj, ".rel.got");
-- if (s != NULL)
-- s->_raw_size = 0;
-- }
--
-- /* If this is a -Bsymbolic shared link, then we need to discard all
-- PC relative relocs against symbols defined in a regular object.
-- We allocated space for them in the check_relocs routine, but we
-- will not fill them in in the relocate_section routine. */
-- if (info->shared && info->symbolic)
-- elf32_arm_link_hash_traverse (elf32_arm_hash_table (info),
-- elf32_arm_discard_copies,
-- (PTR) NULL);
-+
-+ /* Set up .got offsets for local syms, and space for local dynamic
-+ relocs. */
-+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
-+ {
-+ bfd_signed_vma *local_got;
-+ bfd_signed_vma *end_local_got;
-+ char *local_tls_type;
-+ bfd_size_type locsymcount;
-+ Elf_Internal_Shdr *symtab_hdr;
-+ asection *srel;
-+
-+ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
-+ continue;
-+
-+ for (s = ibfd->sections; s != NULL; s = s->next)
-+ {
-+ struct elf32_arm_relocs_copied *p;
-+
-+ for (p = *((struct elf32_arm_relocs_copied **)
-+ &elf_section_data (s)->local_dynrel);
-+ p != NULL;
-+ p = p->next)
-+ {
-+ if (!bfd_is_abs_section (p->section)
-+ && bfd_is_abs_section (p->section->output_section))
-+ {
-+ /* Input section has been discarded, either because
-+ it is a copy of a linkonce section or due to
-+ linker script /DISCARD/, so we'll be discarding
-+ the relocs too. */
-+ }
-+ else if (p->count != 0)
-+ {
-+ srel = elf_section_data (p->section)->sreloc;
-+ srel->_raw_size += p->count * sizeof (Elf32_External_Rel);
-+ if ((p->section->output_section->flags & SEC_READONLY) != 0)
-+ info->flags |= DF_TEXTREL;
-+ }
-+ }
-+ }
-+
-+ local_got = elf_local_got_refcounts (ibfd);
-+ if (!local_got)
-+ continue;
-+
-+ symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
-+ locsymcount = symtab_hdr->sh_info;
-+ end_local_got = local_got + locsymcount;
-+ s = htab->sgot;
-+ srel = htab->srelgot;
-+ for (; local_got < end_local_got; ++local_got, ++local_tls_type)
-+ {
-+ if (*local_got > 0)
-+ {
-+ *local_got = s->_raw_size;
-+ s->_raw_size += 4;
-+ if (info->shared)
-+ srel->_raw_size += sizeof (Elf32_External_Rel);
-+ }
-+ else
-+ *local_got = (bfd_vma) -1;
-+ }
-+ }
-+
-+ /* Allocate global sym .plt and .got entries, and space for global
-+ sym dynamic relocs. */
-+ elf_link_hash_traverse (&htab->root, allocate_dynrelocs, (PTR) info);
-
- /* The check_relocs and adjust_dynamic_symbol entry points have
- determined the sizes of the various dynamic sections. Allocate
-@@ -3312,33 +3723,6 @@
- return TRUE;
- }
-
--/* This function is called via elf32_arm_link_hash_traverse if we are
-- creating a shared object with -Bsymbolic. It discards the space
-- allocated to copy PC relative relocs against symbols which are
-- defined in regular objects. We allocated space for them in the
-- check_relocs routine, but we won't fill them in in the
-- relocate_section routine. */
--
--static bfd_boolean
--elf32_arm_discard_copies (h, ignore)
-- struct elf32_arm_link_hash_entry * h;
-- PTR ignore ATTRIBUTE_UNUSED;
--{
-- struct elf32_arm_pcrel_relocs_copied * s;
--
-- if (h->root.root.type == bfd_link_hash_warning)
-- h = (struct elf32_arm_link_hash_entry *) h->root.root.u.i.link;
--
-- /* We only discard relocs for symbols defined in a regular object. */
-- if ((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
-- return TRUE;
--
-- for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
-- s->section->_raw_size -= s->count * sizeof (Elf32_External_Rel);
--
-- return TRUE;
--}
--
- /* Finish up dynamic symbol handling. We set the contents of various
- dynamic sections here. */
-
-@@ -3362,6 +3746,7 @@
- bfd_vma got_offset;
- Elf_Internal_Rela rel;
- bfd_byte *loc;
-+ bfd_vma got_displacement;
-
- /* This symbol has an entry in the procedure linkage table. Set
- it up. */
-@@ -3377,35 +3762,43 @@
- corresponds to this symbol. This is the index of this symbol
- in all the symbols for which we are making plt entries. The
- first entry in the procedure linkage table is reserved. */
-- plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
-+ plt_index = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
-
- /* Get the offset into the .got table of the entry that
- corresponds to this function. Each .got entry is 4 bytes.
- The first three are reserved. */
- got_offset = (plt_index + 3) * 4;
-
-+ /* Calculate the displacement between the PLT slot and the
-+ entry in the GOT. */
-+ got_displacement = (sgot->output_section->vma
-+ + sgot->output_offset
-+ + got_offset
-+ - splt->output_section->vma
-+ - splt->output_offset
-+ - h->plt.offset
-+ - 8);
-+
-+ BFD_ASSERT ((got_displacement & 0xf0000000) == 0);
-+
- /* Fill in the entry in the procedure linkage table. */
-- bfd_put_32 (output_bfd, elf32_arm_plt_entry[0],
-+ bfd_put_32 (output_bfd, elf32_arm_plt_entry[0] | ((got_displacement & 0x0ff00000) >> 20),
- splt->contents + h->plt.offset + 0);
-- bfd_put_32 (output_bfd, elf32_arm_plt_entry[1],
-+ bfd_put_32 (output_bfd, elf32_arm_plt_entry[1] | ((got_displacement & 0x000ff000) >> 12),
- splt->contents + h->plt.offset + 4);
-- bfd_put_32 (output_bfd, elf32_arm_plt_entry[2],
-+ bfd_put_32 (output_bfd, elf32_arm_plt_entry[2] | (got_displacement & 0x00000fff),
- splt->contents + h->plt.offset + 8);
-- bfd_put_32 (output_bfd,
-- (sgot->output_section->vma
-- + sgot->output_offset
-- + got_offset
-- - splt->output_section->vma
-- - splt->output_offset
-- - h->plt.offset - 12),
-- splt->contents + h->plt.offset + 12);
-+#ifdef FOUR_WORD_PLT
-+ bfd_put_32 (output_bfd, elf32_arm_plt_entry[3],
-+ splt->contents + h->plt.offset + 12);
-+#endif
-
- /* Fill in the entry in the global offset table. */
- bfd_put_32 (output_bfd,
- (splt->output_section->vma
- + splt->output_offset),
- sgot->contents + got_offset);
--
-+
- /* Fill in the entry in the .rel.plt section. */
- rel.r_offset = (sgot->output_section->vma
- + sgot->output_offset
-@@ -3446,16 +3839,20 @@
- + sgot->output_offset
- + (h->got.offset &~ (bfd_vma) 1));
-
-- /* If this is a -Bsymbolic link, and the symbol is defined
-- locally, we just want to emit a RELATIVE reloc. The entry in
-- the global offset table will already have been initialized in
-- the relocate_section function. */
-+ /* If this is a static link, or it is a -Bsymbolic link and the
-+ symbol is defined locally or was forced to be local because
-+ of a version file, we just want to emit a RELATIVE reloc.
-+ The entry in the global offset table will already have been
-+ initialized in the relocate_section function. */
- if (info->shared
-- && (info->symbolic || h->dynindx == -1)
-- && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR))
-- rel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
-+ && SYMBOL_REFERENCES_LOCAL (info, h))
-+ {
-+ BFD_ASSERT((h->got.offset & 1) != 0);
-+ rel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
-+ }
- else
- {
-+ BFD_ASSERT((h->got.offset & 1) == 0);
- bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
- rel.r_info = ELF32_R_INFO (h->dynindx, R_ARM_GLOB_DAT);
- }
-@@ -3609,10 +4006,26 @@
- /* Fill in the first entry in the procedure linkage table. */
- if (splt->_raw_size > 0)
- {
-+ bfd_vma got_displacement;
-+
-+ /* Calculate the displacement between the PLT slot and &GOT[0]. */
-+ got_displacement = (sgot->output_section->vma
-+ + sgot->output_offset
-+ - splt->output_section->vma
-+ - splt->output_offset
-+ - 16);
-+
- bfd_put_32 (output_bfd, elf32_arm_plt0_entry[0], splt->contents + 0);
- bfd_put_32 (output_bfd, elf32_arm_plt0_entry[1], splt->contents + 4);
- bfd_put_32 (output_bfd, elf32_arm_plt0_entry[2], splt->contents + 8);
- bfd_put_32 (output_bfd, elf32_arm_plt0_entry[3], splt->contents + 12);
-+#ifdef FOUR_WORD_PLT
-+ /* The displacement value goes in the otherwise-unused last word of
-+ the second entry. */
-+ bfd_put_32 (output_bfd, got_displacement, splt->contents + 28);
-+#else
-+ bfd_put_32 (output_bfd, got_displacement, splt->contents + 16);
-+#endif
- }
-
- /* UnixWare sets the entsize of .plt to 4, although that doesn't
-@@ -3714,7 +4127,7 @@
- #define elf_backend_check_relocs elf32_arm_check_relocs
- #define elf_backend_relocate_section elf32_arm_relocate_section
- #define elf_backend_adjust_dynamic_symbol elf32_arm_adjust_dynamic_symbol
--#define elf_backend_create_dynamic_sections _bfd_elf_create_dynamic_sections
-+#define elf_backend_create_dynamic_sections elf32_arm_create_dynamic_sections
- #define elf_backend_finish_dynamic_symbol elf32_arm_finish_dynamic_symbol
- #define elf_backend_finish_dynamic_sections elf32_arm_finish_dynamic_sections
- #define elf_backend_size_dynamic_sections elf32_arm_size_dynamic_sections
-@@ -3723,7 +4136,9 @@
- #define elf_backend_object_p elf32_arm_object_p
- #define elf_backend_section_flags elf32_arm_section_flags
- #define elf_backend_final_write_processing elf32_arm_final_write_processing
-+#define elf_backend_copy_indirect_symbol elf32_arm_copy_indirect_symbol
-
-+#define elf_backend_can_refcount 1
- #define elf_backend_can_gc_sections 1
- #define elf_backend_plt_readonly 1
- #define elf_backend_want_got_plt 1
-@@ -3733,7 +4148,7 @@
- #endif
-
- #define elf_backend_got_header_size 12
--#define elf_backend_plt_header_size PLT_ENTRY_SIZE
-+#define elf_backend_plt_header_size PLT_HEADER_SIZE
-
- #include "elf32-target.h"
-
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-avr.c binutils-2.14.90.0.7/bfd/elf32-avr.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-avr.c 2003-07-23 09:08:08.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-avr.c 2004-04-20 01:26:12.000000000 -0600
-@@ -750,7 +750,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- name = bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name);
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-cris.c binutils-2.14.90.0.7/bfd/elf32-cris.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-cris.c 2003-08-21 09:28:47.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-cris.c 2004-04-20 01:26:12.000000000 -0600
-@@ -847,7 +847,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- symname = (bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name));
-@@ -1292,16 +1292,7 @@
- {
- long indx;
-
-- if (h == NULL)
-- sec = local_sections[r_symndx];
-- else
-- {
-- BFD_ASSERT (h->root.type == bfd_link_hash_defined
-- || (h->root.type
-- == bfd_link_hash_defweak));
-- sec = h->root.u.def.section;
-- }
-- if (sec != NULL && bfd_is_abs_section (sec))
-+ if (bfd_is_abs_section (sec))
- indx = 0;
- else if (sec == NULL || sec->owner == NULL)
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-fr30.c binutils-2.14.90.0.7/bfd/elf32-fr30.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-fr30.c 2003-07-23 09:08:08.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-fr30.c 2004-04-20 01:26:12.000000000 -0600
-@@ -552,7 +552,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- name = bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name);
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-frv.c binutils-2.14.90.0.7/bfd/elf32-frv.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-frv.c 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-frv.c 2004-04-20 01:26:12.000000000 -0600
-@@ -724,7 +724,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- name = bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name);
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-h8300.c binutils-2.14.90.0.7/bfd/elf32-h8300.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-h8300.c 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-h8300.c 2004-04-20 01:26:12.000000000 -0600
-@@ -435,7 +435,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-hppa.c binutils-2.14.90.0.7/bfd/elf32-hppa.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-hppa.c 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-hppa.c 2004-04-20 01:26:12.000000000 -0600
-@@ -3408,7 +3408,7 @@
- /* This is a local symbol, h defaults to NULL. */
- sym = local_syms + r_symndx;
- sym_sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sym_sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sym_sec, rel);
- }
- else
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-i370.c binutils-2.14.90.0.7/bfd/elf32-i370.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-i370.c 2003-07-23 09:08:08.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-i370.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1210,7 +1210,7 @@
- sec = local_sections[r_symndx];
- sym_name = "<local symbol>";
-
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- addend = rel->r_addend;
- }
- else
-@@ -1363,16 +1363,7 @@
- {
- long indx;
-
-- if (h == NULL)
-- sec = local_sections[r_symndx];
-- else
-- {
-- BFD_ASSERT (h->root.type == bfd_link_hash_defined
-- || (h->root.type
-- == bfd_link_hash_defweak));
-- sec = h->root.u.def.section;
-- }
-- if (sec != NULL && bfd_is_abs_section (sec))
-+ if (bfd_is_abs_section (sec))
- indx = 0;
- else if (sec == NULL || sec->owner == NULL)
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-i860.c binutils-2.14.90.0.7/bfd/elf32-i860.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-i860.c 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-i860.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1104,7 +1104,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- name = bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name);
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-m32r.c binutils-2.14.90.0.7/bfd/elf32-m32r.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-m32r.c 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-m32r.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1107,7 +1107,7 @@
- sec = local_sections[r_symndx];
- sym_name = "<local symbol>";
- #if !USE_REL
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- addend = rel->r_addend;
- #else
- /* FIXME: This won't handle local relocations against SEC_MERGE
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-m68k.c binutils-2.14.90.0.7/bfd/elf32-m68k.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-m68k.c 2003-08-21 09:28:47.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-m68k.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1403,7 +1403,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-@@ -1657,16 +1657,7 @@
- {
- long indx;
-
-- if (h == NULL)
-- sec = local_sections[r_symndx];
-- else
-- {
-- BFD_ASSERT (h->root.type == bfd_link_hash_defined
-- || (h->root.type
-- == bfd_link_hash_defweak));
-- sec = h->root.u.def.section;
-- }
-- if (sec != NULL && bfd_is_abs_section (sec))
-+ if (bfd_is_abs_section (sec))
- indx = 0;
- else if (sec == NULL || sec->owner == NULL)
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-mcore.c binutils-2.14.90.0.7/bfd/elf32-mcore.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-mcore.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-mcore.c 2004-04-20 01:26:12.000000000 -0600
-@@ -467,7 +467,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- addend = rel->r_addend;
- }
- else
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-msp430.c binutils-2.14.90.0.7/bfd/elf32-msp430.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-msp430.c 2003-08-21 09:28:47.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-msp430.c 2004-04-20 01:26:12.000000000 -0600
-@@ -449,7 +449,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- name = bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name);
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-openrisc.c binutils-2.14.90.0.7/bfd/elf32-openrisc.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-openrisc.c 2003-07-23 09:08:08.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-openrisc.c 2004-04-20 01:26:12.000000000 -0600
-@@ -375,7 +375,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- name = bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name);
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-ppc.c binutils-2.14.90.0.7/bfd/elf32-ppc.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-ppc.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-ppc.c 2004-04-20 01:26:12.000000000 -0600
-@@ -4727,7 +4727,7 @@
- sec = local_sections[r_symndx];
- sym_name = bfd_elf_local_sym_name (input_bfd, sym);
-
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-@@ -5455,44 +5455,9 @@
- break;
-
- case R_PPC_RELAX32:
-- {
-- unsigned long r_symndx;
-- Elf_Internal_Sym *sym;
-- asection *sym_sec;
-- bfd_byte *hit_addr = 0;
-- bfd_vma value = 0;
--
-- r_symndx = ELF32_R_SYM (rel->r_info);
--
-- if (r_symndx < symtab_hdr->sh_info)
-- {
-- sym = local_syms + r_symndx;
-- sym_sec = local_sections[r_symndx];
--
-- value = _bfd_elf_rela_local_sym (output_bfd, sym, sym_sec, rel);
-- }
-- else
-- {
-- bfd_boolean warned;
-- bfd_boolean unresolved_reloc;
--
-- RELOC_FOR_GLOBAL_SYMBOL (h, elf_sym_hashes (input_bfd),
-- r_symndx, symtab_hdr,
-- value, sym_sec,
-- unresolved_reloc, info,
-- warned);
-- if (warned)
-- continue;
-- }
-- hit_addr = contents + rel->r_offset;
-- value += rel->r_addend;
--
-- r = ppc_elf_install_value (output_bfd, hit_addr, value, r_type);
-- if (r != bfd_reloc_ok)
-- break;
-- else
-- continue;
-- }
-+ ppc_elf_install_value (output_bfd, contents + rel->r_offset,
-+ relocation + addend, r_type);
-+ continue;
-
- /* Indirect .sdata relocation. */
- case R_PPC_EMB_SDAI16:
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-s390.c binutils-2.14.90.0.7/bfd/elf32-s390.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-s390.c 2003-08-21 09:28:47.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-s390.c 2004-04-20 01:26:12.000000000 -0600
-@@ -2327,7 +2327,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-sh.c binutils-2.14.90.0.7/bfd/elf32-sh.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-sh.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-sh.c 2004-04-20 01:26:12.000000000 -0600
-@@ -4805,7 +4805,7 @@
- }
- else if (! howto->partial_inplace)
- {
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- addend = rel->r_addend;
- }
- else if ((sec->flags & SEC_MERGE)
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-sparc.c binutils-2.14.90.0.7/bfd/elf32-sparc.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-sparc.c 2003-08-21 09:28:48.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-sparc.c 2004-04-20 01:26:12.000000000 -0600
-@@ -2182,7 +2182,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-@@ -2459,16 +2459,8 @@
-
- if (is_plt)
- sec = htab->splt;
-- else if (h == NULL)
-- sec = local_sections[r_symndx];
-- else
-- {
-- BFD_ASSERT (h->root.type == bfd_link_hash_defined
-- || (h->root.type
-- == bfd_link_hash_defweak));
-- sec = h->root.u.def.section;
-- }
-- if (sec != NULL && bfd_is_abs_section (sec))
-+
-+ if (bfd_is_abs_section (sec))
- indx = 0;
- else if (sec == NULL || sec->owner == NULL)
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-v850.c binutils-2.14.90.0.7/bfd/elf32-v850.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-v850.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-v850.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1681,7 +1681,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- #if 0
- {
- char * name;
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-vax.c binutils-2.14.90.0.7/bfd/elf32-vax.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-vax.c 2003-08-21 09:28:48.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-vax.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1483,7 +1483,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-@@ -1737,16 +1737,7 @@
- {
- long indx;
-
-- if (h == NULL)
-- sec = local_sections[r_symndx];
-- else
-- {
-- BFD_ASSERT (h->root.type == bfd_link_hash_defined
-- || (h->root.type
-- == bfd_link_hash_defweak));
-- sec = h->root.u.def.section;
-- }
-- if (sec != NULL && bfd_is_abs_section (sec))
-+ if (bfd_is_abs_section (sec))
- indx = 0;
- else if (sec == NULL || sec->owner == NULL)
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-xstormy16.c binutils-2.14.90.0.7/bfd/elf32-xstormy16.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-xstormy16.c 2003-07-23 09:08:09.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf32-xstormy16.c 2004-04-20 01:26:12.000000000 -0600
-@@ -845,7 +845,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- name = bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name);
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-xtensa.c binutils-2.14.90.0.7/bfd/elf32-xtensa.c
---- binutils-2.14.90.0.7.orig/bfd/elf32-xtensa.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf32-xtensa.c 2004-04-20 01:26:12.000000000 -0600
-@@ -2004,7 +2004,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-alpha.c binutils-2.14.90.0.7/bfd/elf64-alpha.c
---- binutils-2.14.90.0.7.orig/bfd/elf64-alpha.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf64-alpha.c 2004-04-20 01:26:12.000000000 -0600
-@@ -4394,9 +4394,11 @@
-
- if (r_symndx < symtab_hdr->sh_info)
- {
-+ asection *msec;
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- value = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ msec = sec;
-+ value = _bfd_elf_rela_local_sym (output_bfd, sym, &msec, rel);
-
- /* If this is a tp-relative relocation against sym 0,
- this is hackery from relax_section. Force the value to
-@@ -4424,7 +4426,6 @@
- && !gotent->reloc_xlated)
- {
- struct alpha_elf_got_entry *ent;
-- asection *msec;
-
- for (ent = gotent; ent; ent = ent->next)
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-hppa.c binutils-2.14.90.0.7/bfd/elf64-hppa.c
---- binutils-2.14.90.0.7.orig/bfd/elf64-hppa.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf64-hppa.c 2004-04-20 01:26:12.000000000 -0600
-@@ -173,7 +173,7 @@
- PTR info));
-
- static const char *get_dyn_name
-- PARAMS ((asection *, struct elf_link_hash_entry *,
-+ PARAMS ((bfd *, struct elf_link_hash_entry *,
- const Elf_Internal_Rela *, char **, size_t *));
-
- /* This must follow the definitions of the various derived linker
-@@ -446,13 +446,14 @@
- allocate memory as necessary, possibly reusing PBUF/PLEN. */
-
- static const char *
--get_dyn_name (sec, h, rel, pbuf, plen)
-- asection *sec;
-+get_dyn_name (abfd, h, rel, pbuf, plen)
-+ bfd *abfd;
- struct elf_link_hash_entry *h;
- const Elf_Internal_Rela *rel;
- char **pbuf;
- size_t *plen;
- {
-+ asection *sec = abfd->sections;
- size_t nlen, tlen;
- char *buf;
- size_t len;
-@@ -858,7 +859,7 @@
- continue;
-
- /* Collect a canonical name for this address. */
-- addr_name = get_dyn_name (sec, h, rel, &buf, &buf_len);
-+ addr_name = get_dyn_name (abfd, h, rel, &buf, &buf_len);
-
- /* Collect the canonical entry data for this address. */
- dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-mmix.c binutils-2.14.90.0.7/bfd/elf64-mmix.c
---- binutils-2.14.90.0.7.orig/bfd/elf64-mmix.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf64-mmix.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1472,7 +1472,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- name = bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name);
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-ppc.c binutils-2.14.90.0.7/bfd/elf64-ppc.c
---- binutils-2.14.90.0.7.orig/bfd/elf64-ppc.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf64-ppc.c 2004-04-20 01:26:12.000000000 -0600
-@@ -7385,7 +7385,7 @@
- sec = local_sections[r_symndx];
- sym_name = bfd_elf_local_sym_name (input_bfd, sym);
- sym_type = ELF64_ST_TYPE (sym->st_info);
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- if (elf_section_data (sec) != NULL)
- {
- long *opd_sym_adjust;
-@@ -8178,7 +8178,9 @@
- relocation = TOCstart;
- if (r_symndx == 0)
- relocation += htab->stub_group[input_section->id].toc_off;
-- else if (sec != NULL && !unresolved_reloc)
-+ else if (unresolved_reloc)
-+ ;
-+ else if (sec != NULL && sec->id <= htab->top_id)
- relocation += htab->stub_group[sec->id].toc_off;
- else
- unresolved_reloc = TRUE;
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-s390.c binutils-2.14.90.0.7/bfd/elf64-s390.c
---- binutils-2.14.90.0.7.orig/bfd/elf64-s390.c 2003-08-21 09:28:48.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf64-s390.c 2004-04-20 01:26:12.000000000 -0600
-@@ -2297,7 +2297,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-sh64.c binutils-2.14.90.0.7/bfd/elf64-sh64.c
---- binutils-2.14.90.0.7.orig/bfd/elf64-sh64.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elf64-sh64.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1582,7 +1582,7 @@
- }
- else if (! howto->partial_inplace)
- {
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- relocation |= ((sym->st_other & STO_SH5_ISA32) != 0);
- }
- else if ((sec->flags & SEC_MERGE)
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-sparc.c binutils-2.14.90.0.7/bfd/elf64-sparc.c
---- binutils-2.14.90.0.7.orig/bfd/elf64-sparc.c 2003-08-21 09:28:48.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf64-sparc.c 2004-04-20 01:26:12.000000000 -0600
-@@ -2070,7 +2070,7 @@
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-@@ -2247,16 +2247,8 @@
-
- if (is_plt)
- sec = splt;
-- else if (h == NULL)
-- sec = local_sections[r_symndx];
-- else
-- {
-- BFD_ASSERT (h->root.type == bfd_link_hash_defined
-- || (h->root.type
-- == bfd_link_hash_defweak));
-- sec = h->root.u.def.section;
-- }
-- if (sec != NULL && bfd_is_abs_section (sec))
-+
-+ if (bfd_is_abs_section (sec))
- indx = 0;
- else if (sec == NULL || sec->owner == NULL)
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-x86-64.c binutils-2.14.90.0.7/bfd/elf64-x86-64.c
---- binutils-2.14.90.0.7.orig/bfd/elf64-x86-64.c 2003-08-21 09:28:48.000000000 -0600
-+++ binutils-2.14.90.0.7/bfd/elf64-x86-64.c 2004-04-20 01:26:12.000000000 -0600
-@@ -1823,7 +1823,7 @@
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
-
-- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
-+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
-@@ -2048,16 +2048,7 @@
- {
- long sindx;
-
-- if (h == NULL)
-- sec = local_sections[r_symndx];
-- else
-- {
-- BFD_ASSERT (h->root.type == bfd_link_hash_defined
-- || (h->root.type
-- == bfd_link_hash_defweak));
-- sec = h->root.u.def.section;
-- }
-- if (sec != NULL && bfd_is_abs_section (sec))
-+ if (bfd_is_abs_section (sec))
- sindx = 0;
- else if (sec == NULL || sec->owner == NULL)
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/elfxx-ia64.c binutils-2.14.90.0.7/bfd/elfxx-ia64.c
---- binutils-2.14.90.0.7.orig/bfd/elfxx-ia64.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/elfxx-ia64.c 2004-04-20 01:26:12.000000000 -0600
-@@ -3849,9 +3849,11 @@
- if (r_symndx < symtab_hdr->sh_info)
- {
- /* Reloc against local symbol. */
-+ asection *msec;
- sym = local_syms + r_symndx;
- sym_sec = local_sections[r_symndx];
-- value = _bfd_elf_rela_local_sym (output_bfd, sym, sym_sec, rel);
-+ msec = sym_sec;
-+ value = _bfd_elf_rela_local_sym (output_bfd, sym, &msec, rel);
- if ((sym_sec->flags & SEC_MERGE)
- && ELF_ST_TYPE (sym->st_info) == STT_SECTION
- && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE)
-@@ -3862,7 +3864,6 @@
- if (loc_h && ! loc_h->sec_merge_done)
- {
- struct elfNN_ia64_dyn_sym_info *dynent;
-- asection *msec;
-
- for (dynent = loc_h->info; dynent; dynent = dynent->next)
- {
-diff -urN binutils-2.14.90.0.7.orig/bfd/opncls.c binutils-2.14.90.0.7/bfd/opncls.c
---- binutils-2.14.90.0.7.orig/bfd/opncls.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/opncls.c 2004-04-20 01:26:11.000000000 -0600
-@@ -150,6 +150,13 @@
- {
- bfd *nbfd;
- const bfd_target *target_vec;
-+ struct stat s;
-+
-+ if (stat (filename, &s) == 0)
-+ if (S_ISDIR(s.st_mode)) {
-+ bfd_set_error (bfd_error_file_not_recognized);
-+ return NULL;
-+ }
-
- nbfd = _bfd_new_bfd ();
- if (nbfd == NULL)
-diff -urN binutils-2.14.90.0.7.orig/binutils/objcopy.c binutils-2.14.90.0.7/binutils/objcopy.c
---- binutils-2.14.90.0.7.orig/binutils/objcopy.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/binutils/objcopy.c 2004-04-20 01:26:12.000000000 -0600
-@@ -27,6 +27,7 @@
- #include "libiberty.h"
- #include "budbg.h"
- #include "filenames.h"
-+#include "elf-bfd.h"
- #include <sys/stat.h>
-
- /* A list of symbols to explicitly strip out, or to keep. A linked
-@@ -385,6 +386,7 @@
- -g --strip-debug Remove all debugging symbols & sections\n\
- --strip-unneeded Remove all symbols not needed by relocations\n\
- -N --strip-symbol <name> Do not copy symbol <name>\n\
-+ --only-keep-debug Strip everything but the debug information\n\
- -K --keep-symbol <name> Only copy symbol <name>\n\
- -L --localize-symbol <name> Force symbol <name> to be marked as a local\n\
- -G --keep-global-symbol <name> Localize all symbols except <name>\n\
-@@ -457,6 +459,7 @@
- -s --strip-all Remove all symbol and relocation information\n\
- -g -S -d --strip-debug Remove all debugging symbols & sections\n\
- --strip-unneeded Remove all symbols not needed by relocations\n\
-+ --only-keep-debug Strip everything but the debug information\n\
- -N --strip-symbol=<name> Do not copy symbol <name>\n\
- -K --keep-symbol=<name> Only copy symbol <name>\n\
- -x --discard-all Remove all non-global symbols\n\
-@@ -734,7 +737,7 @@
- return FALSE;
- }
-
-- return strip_symbols == STRIP_NONDEBUG ? TRUE : FALSE;
-+ return FALSE;
- }
-
- /* Choose which symbol entries to copy; put the result in OSYMS.
-@@ -1806,6 +1809,13 @@
-
- if (p != NULL && p->set_flags)
- flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC));
-+ else if (strip_symbols == STRIP_NONDEBUG && (flags & SEC_ALLOC) != 0)
-+ {
-+ flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD);
-+ if (obfd->xvec->flavour == bfd_target_elf_flavour)
-+ elf_section_type (osection) = SHT_NOBITS;
-+ }
-+
- if (!bfd_set_section_flags (obfd, osection, flags))
- {
- err = _("flags");
-@@ -1926,6 +1936,8 @@
- }
-
- bfd_set_reloc (obfd, osection, relcount == 0 ? NULL : relpp, relcount);
-+ if (relcount == 0)
-+ free (relpp);
- }
-
- isection->_cooked_size = isection->_raw_size;
-diff -urN binutils-2.14.90.0.7.orig/binutils/readelf.c binutils-2.14.90.0.7/binutils/readelf.c
---- binutils-2.14.90.0.7.orig/binutils/readelf.c 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/binutils/readelf.c 2004-04-20 01:26:12.000000000 -0600
-@@ -6055,7 +6055,7 @@
+--- binutils-2.11.90.0.19.orig/ld/Makefile.am
++++ binutils-2.11.90.0.19/ld/Makefile.am
+@@ -19,7 +19,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)
- bytes = section->sh_size;
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+--- binutils-2.11.90.0.19.orig/ld/Makefile.in
++++ binutils-2.11.90.0.19/ld/Makefile.in
+@@ -123,7 +123,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)
-- if (bytes == 0)
-+ if (bytes == 0 || section->sh_type == SHT_NOBITS)
- {
- printf (_("\nSection '%s' has no data to dump.\n"),
- SECTION_NAME (section));
-diff -urN binutils-2.14.90.0.7.orig/gprof/gprof.texi binutils-2.14.90.0.7/gprof/gprof.texi
---- binutils-2.14.90.0.7.orig/gprof/gprof.texi 2002-08-01 18:49:32.000000000 -0600
-+++ binutils-2.14.90.0.7/gprof/gprof.texi 2004-04-20 01:26:11.000000000 -0600
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urN binutils-2.11.90.0.27/gprof/gprof.texi binutils-2.11.90.0.27.new/gprof/gprof.texi
+--- binutils-2.11.90.0.27/gprof/gprof.texi Tue Jun 19 14:57:58 2001
++++ binutils-2.11.90.0.27.new/gprof/gprof.texi Mon Aug 27 10:27:23 2001
@@ -137,6 +137,10 @@
If more than one profile file is specified, the @code{gprof}
output shows the sum of the profile information in the given profile files.
@@ -2234,55 +34,51 @@ diff -urN binutils-2.14.90.0.7.orig/gprof/gprof.texi binutils-2.14.90.0.7/gprof/
@code{Gprof} calculates the amount of time spent in each routine.
Next, these times are propagated along the edges of the call graph.
Cycles are discovered, and calls into a cycle are made to share the time
-@@ -181,7 +185,7 @@
- @c man end
-
- @c man begin SEEALSO
--monitor(3), profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
-+profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
-
- ``An Execution Profiler for Modular Programs'',
- by S. Graham, P. Kessler, M. McKusick;
-@@ -267,6 +271,11 @@
+@@ -266,6 +270,11 @@
+ to do the linking, simply specify @samp{-pg} in addition to your usual
options. The same option, @samp{-pg}, alters either compilation or linking
to do what is necessary for profiling. Here are examples:
-
++
+If you use gcc 2.95.x or 3.0.x, you may need to add the
+@samp{-fprofile-arcs} option to the compile line along with @samp{-pg}
+in order to allow the call-graphs to be properly included in the gmon.out
+file.
-+
+
@example
cc -g -c myprog.c utils.c -pg
- cc -o myprog myprog.o utils.o -pg
-diff -urN binutils-2.14.90.0.7.orig/ld/Makefile.am binutils-2.14.90.0.7/ld/Makefile.am
---- binutils-2.14.90.0.7.orig/ld/Makefile.am 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/ld/Makefile.am 2004-04-20 01:26:11.000000000 -0600
-@@ -19,7 +19,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@
-diff -urN binutils-2.14.90.0.7.orig/ld/Makefile.in binutils-2.14.90.0.7/ld/Makefile.in
---- binutils-2.14.90.0.7.orig/ld/Makefile.in 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/ld/Makefile.in 2004-04-20 01:26:11.000000000 -0600
-@@ -128,7 +128,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)
+diff -urN binutils-2.11.92.0.5/bfd/opncls.c binutils-2.11.92.0.5.new/bfd/opncls.c
+--- binutils-2.11.92.0.5/bfd/opncls.c Mon Oct 1 18:25:21 2001
++++ binutils-2.11.92.0.5.new/bfd/opncls.c Sat Oct 13 11:26:59 2001
+@@ -127,6 +127,13 @@
+ {
+ bfd *nbfd;
+ const bfd_target *target_vec;
++ struct stat s;
++
++ if (stat (filename, &s) == 0)
++ if (S_ISDIR(s.st_mode)) {
++ bfd_set_error (bfd_error_file_not_recognized);
++ return NULL;
++ }
- EMUL = @EMUL@
- EMULATION_OFILES = @EMULATION_OFILES@
-diff -urN binutils-2.14.90.0.7.orig/ld/emultempl/elf32.em binutils-2.14.90.0.7/ld/emultempl/elf32.em
---- binutils-2.14.90.0.7.orig/ld/emultempl/elf32.em 2003-08-21 09:28:48.000000000 -0600
-+++ binutils-2.14.90.0.7/ld/emultempl/elf32.em 2004-04-20 01:26:11.000000000 -0600
-@@ -679,6 +679,8 @@
+ nbfd = _bfd_new_bfd ();
+ if (nbfd == NULL)
+diff -urN binutils-2.11.92.0.12.3/opcodes/i386-dis.c binutils-2.11.92.0.12.3.new/opcodes/i386-dis.c
+--- binutils-2.11.92.0.12.3/opcodes/i386-dis.c Fri Nov 16 17:05:55 2001
++++ binutils-2.11.92.0.12.3.new/opcodes/i386-dis.c Mon Dec 31 15:55:04 2001
+@@ -1830,7 +1830,7 @@
+ * The function returns the length of this instruction in bytes.
+ */
+
+-static char intel_syntax;
++static signed char intel_syntax;
+ static char open_char;
+ static char close_char;
+ static char separator_char;
+diff -urN binutils-2.12.90.0.12/ld/emultempl/elf32.em binutils-2.12.90.0.12.new/ld/emultempl/elf32.em
+--- binutils-2.12.90.0.12/ld/emultempl/elf32.em Wed Jun 19 00:41:59 2002
++++ binutils-2.12.90.0.12.new/ld/emultempl/elf32.em Wed Jun 26 10:00:26 2002
+@@ -672,6 +672,8 @@
&& command_line.rpath == NULL)
{
lib_path = (const char *) getenv ("LD_RUN_PATH");
@@ -2291,19 +87,81 @@ diff -urN binutils-2.14.90.0.7.orig/ld/emultempl/elf32.em binutils-2.14.90.0.7/l
if (gld${EMULATION_NAME}_search_needed (lib_path, l->name,
force))
break;
-@@ -855,6 +857,8 @@
+@@ -867,6 +869,8 @@
rpath = command_line.rpath;
if (rpath == NULL)
rpath = (const char *) getenv ("LD_RUN_PATH");
+ if ((rpath) && (strlen (rpath) == 0))
+ rpath = NULL;
if (! (bfd_elf${ELFSIZE}_size_dynamic_sections
- (output_bfd, command_line.soname, rpath,
+ (output_bfd, command_line.soname, rpath,
command_line.filter_shlib,
-diff -urN binutils-2.14.90.0.7.orig/ltmain.sh binutils-2.14.90.0.7/ltmain.sh
---- binutils-2.14.90.0.7.orig/ltmain.sh 2002-03-22 15:06:16.000000000 -0700
-+++ binutils-2.14.90.0.7/ltmain.sh 2004-04-20 01:26:12.000000000 -0600
-@@ -4413,6 +4413,10 @@
+diff -urN binutils-2.13.90.0.18/gprof/gprof.texi binutils-2.13.90.0.18.new/gprof/gprof.texi
+--- binutils-2.13.90.0.18/gprof/gprof.texi 2003-02-02 18:29:09.000000000 -0500
++++ binutils-2.13.90.0.18.new/gprof/gprof.texi 2003-02-02 18:28:37.000000000 -0500
+@@ -185,7 +185,7 @@
+ @c man end
+
+ @c man begin SEEALSO
+-monitor(3), profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
++profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
+
+ ``An Execution Profiler for Modular Programs'',
+ by S. Graham, P. Kessler, M. McKusick;
+diff -urN binutils-2.13.90.0.10/opcodes/alpha-opc.c binutils-2.13.90.0.10.new/opcodes/alpha-opc.c
+--- binutils-2.13.90.0.10/opcodes/alpha-opc.c 2002-03-07 14:52:40.000000000 -0500
++++ binutils-2.13.90.0.10.new/opcodes/alpha-opc.c 2002-10-12 20:16:08.000000000 -0400
+@@ -1101,7 +1101,8 @@
+ { "wmb", MFC(0x18,0x4400), BASE, ARG_NONE },
+ { "fetch", MFC(0x18,0x8000), BASE, { ZA, PRB } },
+ { "fetch_m", MFC(0x18,0xA000), BASE, { ZA, PRB } },
+- { "rpcc", MFC(0x18,0xC000), BASE, { RA } },
++ { "rpcc", MFC(0x18,0xC000), BASE, { RA, ZB } },
++ { "rpcc", MFC(0x18,0xC000), BASE, { RA, RB } }, /* ev6 una */
+ { "rc", MFC(0x18,0xE000), BASE, { RA } },
+ { "ecb", MFC(0x18,0xE800), BASE, { ZA, PRB } }, /* ev56 una */
+ { "rs", MFC(0x18,0xF000), BASE, { RA } },
+--- binutils-2.13.90.0.18/bfd/elf64-alpha.c 2003-01-21 19:21:32.000000000 +0100
++++ binutils-2.13.90.0.18-modif/bfd/elf64-alpha.c 2003-04-11 01:24:26.000000000 +0200
+@@ -4184,9 +4184,12 @@
+
+ loc = srel->contents;
+ loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
+- bfd_elf64_swap_reloca_out (abfd, &outrel, loc);
+- BFD_ASSERT (sizeof (Elf64_External_Rela) * srel->reloc_count
+- <= srel->_cooked_size);
++ if (loc)
++ {
++ bfd_elf64_swap_reloca_out (abfd, &outrel, loc);
++ BFD_ASSERT (sizeof (Elf64_External_Rela) * srel->reloc_count
++ <= srel->_cooked_size);
++ }
+ }
+
+ /* Relocate an Alpha ELF section for a relocatable link.
+2003-05-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ltmain.sh: Make symlink for shared library if needed.
+
+opcodes/
+
+2003-07-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.in: Regenerated.
+
+2003-06-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.in: Regenerated.
+
+2003-05-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (libopcodes_la_LIBADD): Use "-L../bfd -lbfd"
+ instead of "../bfd/libbfd.la".
+ * Makefile.in: Regenerated.
+
+--- binutils/ltmain.sh.dso 2002-03-22 00:16:20.000000000 -0800
++++ binutils/ltmain.sh 2003-07-14 12:50:17.000000000 -0700
+@@ -4413,6 +4413,10 @@ relink_command=\"$relink_command\""
# LD_LIBRARY_PATH before the program is installed.
$show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
$run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
@@ -2314,81 +172,14 @@ diff -urN binutils-2.14.90.0.7.orig/ltmain.sh binutils-2.14.90.0.7/ltmain.sh
;;
esac
exit 0
-diff -urN binutils-2.14.90.0.7.orig/opcodes/Makefile.am binutils-2.14.90.0.7/opcodes/Makefile.am
---- binutils-2.14.90.0.7.orig/opcodes/Makefile.am 2003-10-29 10:37:49.000000000 -0700
-+++ binutils-2.14.90.0.7/opcodes/Makefile.am 2004-04-20 01:26:12.000000000 -0600
-@@ -284,7 +284,7 @@
-
- libopcodes_la_SOURCES = dis-buf.c disassemble.c dis-init.c
- libopcodes_la_DEPENDENCIES = $(OFILES) ../bfd/libbfd.la
--libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ ../bfd/libbfd.la
-+libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ -L../bfd -lbfd
- libopcodes_la_LDFLAGS = -release $(VERSION) @WIN32LDFLAGS@
-
- # libtool will build .libs/libopcodes.a. We create libopcodes.a in
-diff -urN binutils-2.14.90.0.7.orig/opcodes/Makefile.in binutils-2.14.90.0.7/opcodes/Makefile.in
---- binutils-2.14.90.0.7.orig/opcodes/Makefile.in 2003-10-29 10:37:49.000000000 -0700
-+++ binutils-2.14.90.0.7/opcodes/Makefile.in 2004-04-20 01:26:12.000000000 -0600
-@@ -394,7 +394,7 @@
+--- binutils/opcodes/Makefile.am.dso 2003-06-11 07:18:04.000000000 -0700
++++ binutils/opcodes/Makefile.am 2003-07-14 12:50:18.000000000 -0700
+@@ -283,7 +283,7 @@ disassemble.lo: disassemble.c $(INCDIR)/
- libopcodes_la_SOURCES = dis-buf.c disassemble.c dis-init.c
+ libopcodes_la_SOURCES = dis-buf.c disassemble.c
libopcodes_la_DEPENDENCIES = $(OFILES) ../bfd/libbfd.la
-libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ ../bfd/libbfd.la
+libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ -L../bfd -lbfd
libopcodes_la_LDFLAGS = -release $(VERSION) @WIN32LDFLAGS@
# libtool will build .libs/libopcodes.a. We create libopcodes.a in
-@@ -593,7 +593,7 @@
- all-recursive install-data-recursive install-exec-recursive \
- installdirs-recursive install-recursive uninstall-recursive install-info-recursive \
- check-recursive installcheck-recursive info-recursive dvi-recursive:
-- @set fnord $(MAKEFLAGS); amf=$$2; \
-+ @set fnord $$MAKEFLAGS; amf=$$2; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
-@@ -613,7 +613,7 @@
-
- mostlyclean-recursive clean-recursive distclean-recursive \
- maintainer-clean-recursive:
-- @set fnord $(MAKEFLAGS); amf=$$2; \
-+ @set fnord $$MAKEFLAGS; amf=$$2; \
- dot_seen=no; \
- rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
- rev="$$subdir $$rev"; \
-diff -urN binutils-2.14.90.0.7.orig/opcodes/alpha-opc.c binutils-2.14.90.0.7/opcodes/alpha-opc.c
---- binutils-2.14.90.0.7.orig/opcodes/alpha-opc.c 2003-01-21 11:21:34.000000000 -0700
-+++ binutils-2.14.90.0.7/opcodes/alpha-opc.c 2004-04-20 01:26:11.000000000 -0600
-@@ -1105,7 +1105,8 @@
- { "wmb", MFC(0x18,0x4400), BASE, ARG_NONE },
- { "fetch", MFC(0x18,0x8000), BASE, { ZA, PRB } },
- { "fetch_m", MFC(0x18,0xA000), BASE, { ZA, PRB } },
-- { "rpcc", MFC(0x18,0xC000), BASE, { RA } },
-+ { "rpcc", MFC(0x18,0xC000), BASE, { RA, ZB } },
-+ { "rpcc", MFC(0x18,0xC000), BASE, { RA, RB } }, /* ev6 una */
- { "rc", MFC(0x18,0xE000), BASE, { RA } },
- { "ecb", MFC(0x18,0xE800), BASE, { ZA, PRB } }, /* ev56 una */
- { "rs", MFC(0x18,0xF000), BASE, { RA } },
-diff -urN binutils-2.14.90.0.7.orig/opcodes/m68k-opc.c binutils-2.14.90.0.7/opcodes/m68k-opc.c
---- binutils-2.14.90.0.7.orig/opcodes/m68k-opc.c 2003-10-29 10:37:49.000000000 -0700
-+++ binutils-2.14.90.0.7/opcodes/m68k-opc.c 2004-04-20 01:26:12.000000000 -0600
-@@ -847,15 +847,15 @@
- {"fmoved", two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
- {"fmovel", two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
- {"fmovel", two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7$l", mfloat },
-+/* FIXME: the next two variants should not permit moving an address
-+ register to anything but the floating point instruction register. */
-+{"fmovel", two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
-+{"fmovel", two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", mfloat },
- {"fmovel", two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
- {"fmovel", two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
- /* Move the FP control registers */
- {"fmovel", two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8ps", cfloat },
- {"fmovel", two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Iibss8", cfloat },
--/* FIXME: the next two variants should not permit moving an address
-- register to anything but the floating point instruction register. */
--{"fmovel", two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
--{"fmovel", two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", mfloat },
- {"fmovep", two(0xF000, 0x4C00), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
- {"fmovep", two(0xF000, 0x6C00), two(0xF1C0, 0xFC00), "IiF7~pkC", mfloat },
- {"fmovep", two(0xF000, 0x7C00), two(0xF1C0, 0xFC0F), "IiF7~pDk", mfloat },
diff --git a/sources/binutils-uclibc-100-conf.patch b/sources/binutils-uclibc-100-conf.patch
index 6e36af229..87db23fb0 100644
--- a/sources/binutils-uclibc-100-conf.patch
+++ b/sources/binutils-uclibc-100-conf.patch
@@ -1,6 +1,6 @@
-diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/config.bfd
---- binutils-2.14.90.0.7.orig/bfd/config.bfd 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/config.bfd 2004-04-20 01:37:12.000000000 -0600
+diff -urN binutils-2.14.90.0.6/bfd/config.bfd binutils-2.14.90.0.6-uClibc/bfd/config.bfd
+--- binutils-2.14.90.0.6/bfd/config.bfd 2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/config.bfd 2004-01-06 23:20:32.000000000 -0600
@@ -121,7 +121,7 @@
targ_defvec=ecoffalpha_little_vec
targ_selvecs=bfd_elf64_alpha_vec
@@ -10,16 +10,17 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
targ_defvec=bfd_elf64_alpha_vec
targ_selvecs=ecoffalpha_little_vec
;;
-@@ -131,7 +131,7 @@
+@@ -131,7 +131,8 @@
alpha*-*-*)
targ_defvec=ecoffalpha_little_vec
;;
-- ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
-+ ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-linux-uclibc* | ia64*-*-kfreebsd*-gnu)
+- ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf*)
++ ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | \
++ ia64*-*-linux-uclibc* | ia64*-*-elf*)
targ_defvec=bfd_elf64_ia64_little_vec
targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
;;
-@@ -214,7 +214,7 @@
+@@ -214,7 +215,7 @@
targ_defvec=bfd_elf32_littlearm_vec
targ_selvecs=bfd_elf32_bigarm_vec
;;
@@ -28,16 +29,17 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
targ_defvec=bfd_elf32_bigarm_vec
targ_selvecs=bfd_elf32_littlearm_vec
;;
-@@ -222,7 +222,7 @@
+@@ -222,7 +223,8 @@
targ_defvec=bfd_elf32_littlearm_vec
targ_selvecs=bfd_elf32_bigarm_vec
;;
-- arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux* | arm-*-kfreebsd*-gnu)
-+ arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux* | arm*-*-linux-uclibc* | arm-*-kfreebsd*-gnu)
+- arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux*)
++ arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++ arm*-*-conix* | arm*-*-uclinux*)
targ_defvec=bfd_elf32_littlearm_vec
targ_selvecs=bfd_elf32_bigarm_vec
;;
-@@ -355,7 +355,7 @@
+@@ -355,7 +357,7 @@
;;
#ifdef BFD64
@@ -46,16 +48,16 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
targ_defvec=bfd_elf64_hppa_linux_vec
targ_selvecs=bfd_elf64_hppa_vec
;;
-@@ -366,7 +366,7 @@
+@@ -366,7 +368,7 @@
;;
#endif
-- hppa*-*-linux-gnu* | hppa*-*-netbsd*)
-+ hppa*-*-linux-gnu* | hppa*-*-netbsd* | hppa*-*-linux-uclibc*)
+- hppa*-*-linux-gnu*)
++ hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
targ_defvec=bfd_elf32_hppa_linux_vec
targ_selvecs=bfd_elf32_hppa_vec
;;
-@@ -488,7 +488,7 @@
+@@ -488,7 +490,7 @@
targ_selvecs=bfd_elf32_i386_vec
targ_underscore=yes
;;
@@ -64,7 +66,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
targ_defvec=bfd_elf32_i386_vec
targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
targ64_selvecs=bfd_elf64_x86_64_vec
-@@ -502,7 +502,7 @@
+@@ -502,7 +504,7 @@
targ_defvec=bfd_elf64_x86_64_vec
targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
;;
@@ -73,7 +75,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
targ_defvec=bfd_elf64_x86_64_vec
targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
;;
-@@ -662,7 +662,7 @@
+@@ -662,7 +664,7 @@
targ_selvecs=bfd_elf32_m68k_vec
targ_underscore=yes
;;
@@ -82,7 +84,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
targ_defvec=bfd_elf32_m68k_vec
targ_selvecs=m68klinux_vec
;;
-@@ -929,7 +929,8 @@
+@@ -929,7 +931,8 @@
;;
#endif
powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
@@ -92,7 +94,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
targ_defvec=bfd_elf32_powerpc_vec
targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
-@@ -961,8 +962,8 @@
+@@ -961,8 +964,8 @@
targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
;;
powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
@@ -103,7 +105,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
targ_defvec=bfd_elf32_powerpcle_vec
targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
-@@ -1110,7 +1111,7 @@
+@@ -1110,7 +1113,7 @@
targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
targ_underscore=yes
;;
@@ -112,7 +114,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
targ_defvec=bfd_elf32_sparc_vec
targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
;;
-@@ -1157,7 +1158,7 @@
+@@ -1157,7 +1160,7 @@
targ_defvec=sunos_big_vec
targ_underscore=yes
;;
@@ -121,10 +123,10 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/conf
targ_defvec=bfd_elf64_sparc_vec
targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
;;
-diff -urN binutils-2.14.90.0.7.orig/bfd/configure binutils-2.14.90.0.7/bfd/configure
---- binutils-2.14.90.0.7.orig/bfd/configure 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/configure 2004-04-20 01:32:29.000000000 -0600
-@@ -1699,6 +1699,11 @@
+diff -urN binutils-2.14.90.0.6/bfd/configure binutils-2.14.90.0.6-uClibc/bfd/configure
+--- binutils-2.14.90.0.6/bfd/configure 2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/configure 2004-01-06 20:26:51.000000000 -0600
+@@ -1698,6 +1698,11 @@
lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
;;
@@ -136,8 +138,8 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/configure binutils-2.14.90.0.7/bfd/confi
netbsd*)
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-@@ -5278,7 +5283,7 @@
- alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+@@ -5102,7 +5107,7 @@
+ alpha*-*-freebsd*)
COREFILE=''
;;
- alpha*-*-linux-gnu*)
@@ -145,7 +147,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/configure binutils-2.14.90.0.7/bfd/confi
COREFILE=trad-core.lo
TRAD_HEADER='"hosts/alphalinux.h"'
;;
-@@ -5338,7 +5343,7 @@
+@@ -5161,7 +5166,7 @@
COREFILE=trad-core.lo
TRAD_HEADER='"hosts/i386mach3.h"'
;;
@@ -154,7 +156,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/configure binutils-2.14.90.0.7/bfd/confi
COREFILE=trad-core.lo
TRAD_HEADER='"hosts/i386linux.h"'
;;
-@@ -5388,7 +5393,7 @@
+@@ -5211,7 +5216,7 @@
COREFILE=trad-core.lo
TRAD_HEADER='"hosts/hp300bsd.h"'
;;
@@ -163,11 +165,11 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/configure binutils-2.14.90.0.7/bfd/confi
COREFILE=trad-core.lo
TRAD_HEADER='"hosts/m68klinux.h"'
;;
-diff -urN binutils-2.14.90.0.7.orig/bfd/configure.in binutils-2.14.90.0.7/bfd/configure.in
---- binutils-2.14.90.0.7.orig/bfd/configure.in 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/bfd/configure.in 2004-04-20 01:32:29.000000000 -0600
-@@ -178,7 +178,7 @@
- alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+diff -urN binutils-2.14.90.0.6/bfd/configure.in binutils-2.14.90.0.6-uClibc/bfd/configure.in
+--- binutils-2.14.90.0.6/bfd/configure.in 2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/configure.in 2004-01-06 20:33:02.000000000 -0600
+@@ -153,7 +153,7 @@
+ alpha*-*-freebsd*)
COREFILE=''
;;
- alpha*-*-linux-gnu*)
@@ -175,7 +177,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/configure.in binutils-2.14.90.0.7/bfd/co
COREFILE=trad-core.lo
TRAD_HEADER='"hosts/alphalinux.h"'
;;
-@@ -259,7 +259,7 @@
+@@ -233,7 +233,7 @@
TRAD_HEADER='"hosts/i386mach3.h"'
;;
changequote(,)dnl
@@ -184,7 +186,7 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/configure.in binutils-2.14.90.0.7/bfd/co
changequote([,])dnl
COREFILE=trad-core.lo
TRAD_HEADER='"hosts/i386linux.h"'
-@@ -312,7 +312,7 @@
+@@ -286,7 +286,7 @@
COREFILE=trad-core.lo
TRAD_HEADER='"hosts/hp300bsd.h"'
;;
@@ -193,9 +195,9 @@ diff -urN binutils-2.14.90.0.7.orig/bfd/configure.in binutils-2.14.90.0.7/bfd/co
COREFILE=trad-core.lo
TRAD_HEADER='"hosts/m68klinux.h"'
;;
-diff -urN binutils-2.14.90.0.7.orig/config.sub binutils-2.14.90.0.7/config.sub
---- binutils-2.14.90.0.7.orig/config.sub 2003-08-21 09:28:47.000000000 -0600
-+++ binutils-2.14.90.0.7/config.sub 2004-04-20 01:32:29.000000000 -0600
+diff -urN binutils-2.14.90.0.6/config.sub binutils-2.14.90.0.6-uClibc/config.sub
+--- binutils-2.14.90.0.6/config.sub 2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/config.sub 2004-01-06 22:56:56.000000000 -0600
@@ -118,7 +118,7 @@
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
@@ -215,11 +217,11 @@ diff -urN binutils-2.14.90.0.7.orig/config.sub binutils-2.14.90.0.7/config.sub
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-diff -urN binutils-2.14.90.0.7.orig/configure binutils-2.14.90.0.7/configure
---- binutils-2.14.90.0.7.orig/configure 2003-10-29 10:38:23.000000000 -0700
-+++ binutils-2.14.90.0.7/configure 2004-04-20 01:32:29.000000000 -0600
-@@ -1276,6 +1276,18 @@
- i[3456789]86-*-freebsd* | i[3456789]86-*-kfreebsd*-gnu)
+diff -urN binutils-2.14.90.0.6/configure binutils-2.14.90.0.6-uClibc/configure
+--- binutils-2.14.90.0.6/configure 2003-08-21 10:29:32.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure 2004-01-07 05:43:40.000000000 -0600
+@@ -1257,6 +1262,18 @@
+ i[3456789]86-*-freebsd*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
;;
+ i[3456789]86-*-linux-uclibc)
@@ -237,11 +239,11 @@ diff -urN binutils-2.14.90.0.7.orig/configure binutils-2.14.90.0.7/configure
i[3456789]86-*-linux*)
# The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
# not build java stuff by default.
-diff -urN binutils-2.14.90.0.7.orig/configure.in binutils-2.14.90.0.7/configure.in
---- binutils-2.14.90.0.7.orig/configure.in 2003-10-29 10:38:20.000000000 -0700
-+++ binutils-2.14.90.0.7/configure.in 2004-04-20 01:32:29.000000000 -0600
-@@ -515,6 +515,19 @@
- i[[3456789]]86-*-freebsd* | i[[3456789]]86-*-kfreebsd*-gnu)
+diff -urN binutils-2.14.90.0.6/configure.in binutils-2.14.90.0.6-uClibc/configure.in
+--- binutils-2.14.90.0.6/configure.in 2003-08-21 10:29:30.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure.in 2004-01-07 05:44:02.000000000 -0600
+@@ -508,6 +513,19 @@
+ i[[3456789]]86-*-freebsd*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
;;
+ i[3456789]86-*-linux-uclibc)
@@ -260,10 +262,10 @@ diff -urN binutils-2.14.90.0.7.orig/configure.in binutils-2.14.90.0.7/configure.
i[[3456789]]86-*-linux*)
# The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
# not build java stuff by default.
-diff -urN binutils-2.14.90.0.7.orig/demangler/configure binutils-2.14.90.0.7/demangler/configure
---- binutils-2.14.90.0.7.orig/demangler/configure 2003-10-29 10:38:20.000000000 -0700
-+++ binutils-2.14.90.0.7/demangler/configure 2004-04-20 01:32:29.000000000 -0600
-@@ -1380,6 +1380,11 @@
+diff -urN binutils-2.14.90.0.6/demangler/configure binutils-2.14.90.0.6-uClibc/demangler/configure
+--- binutils-2.14.90.0.6/demangler/configure 2003-08-21 10:29:31.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/demangler/configure 2004-01-06 21:45:51.000000000 -0600
+@@ -1363,6 +1363,11 @@
lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
;;
@@ -275,10 +277,10 @@ diff -urN binutils-2.14.90.0.7.orig/demangler/configure binutils-2.14.90.0.7/dem
netbsd*)
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/configure
---- binutils-2.14.90.0.7.orig/gas/configure 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/gas/configure 2004-04-20 01:37:58.000000000 -0600
-@@ -3215,6 +3215,11 @@
+diff -urN binutils-2.14.90.0.6/gas/configure binutils-2.14.90.0.6-uClibc/gas/configure
+--- binutils-2.14.90.0.6/gas/configure 2003-07-23 10:08:10.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/gas/configure 2004-01-06 21:57:25.000000000 -0600
+@@ -1576,6 +1576,11 @@
lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
;;
@@ -290,7 +292,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/confi
netbsd*)
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-@@ -4028,6 +4033,7 @@
+@@ -2370,6 +2375,7 @@
alpha*-*-osf*) fmt=ecoff ;;
alpha*-*-linuxecoff*) fmt=ecoff ;;
alpha*-*-linux-gnu*) fmt=elf em=linux ;;
@@ -298,7 +300,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/confi
alpha*-*-netbsd*) fmt=elf em=nbsd ;;
alpha*-*-openbsd*) fmt=elf em=obsd ;;
-@@ -4044,6 +4050,7 @@
+@@ -2386,6 +2392,7 @@
arm*-*-conix*) fmt=elf ;;
arm-*-linux*aout*) fmt=aout em=linux ;;
arm*-*-linux-gnu*) fmt=elf em=linux ;;
@@ -306,7 +308,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/confi
arm*-*-uclinux*) fmt=elf em=linux ;;
arm-*-netbsdelf*) fmt=elf em=nbsd ;;
arm-*-*n*bsd*) fmt=aout em=nbsd ;;
-@@ -4058,6 +4065,7 @@
+@@ -2400,6 +2407,7 @@
avr-*-*) fmt=elf ;;
cris-*-linux-gnu*) fmt=multi bfd_gas=yes em=linux ;;
@@ -314,7 +316,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/confi
cris-*-*) fmt=multi bfd_gas=yes ;;
d10v-*-*) fmt=elf ;;
-@@ -4114,7 +4122,9 @@
+@@ -2455,7 +2463,9 @@
i386-*-linux*oldld) fmt=aout em=linux ;;
i386-*-linux*coff*) fmt=coff em=linux ;;
i386-*-linux-gnu*) fmt=elf em=linux ;;
@@ -324,7 +326,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/confi
i386-*-lynxos*) fmt=coff em=lynx ;;
i386-*-sysv[45]*) fmt=elf ;;
i386-*-solaris*) fmt=elf ;;
-@@ -4175,6 +4185,7 @@
+@@ -2512,6 +2522,7 @@
ia64-*-elf*) fmt=elf ;;
ia64-*-aix*) fmt=elf em=ia64aix ;;
ia64-*-linux-gnu*) fmt=elf em=linux ;;
@@ -332,7 +334,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/confi
ia64-*-hpux*) fmt=elf em=hpux ;;
ia64-*-netbsd*) fmt=elf em=nbsd ;;
-@@ -4201,6 +4212,7 @@
+@@ -2538,6 +2549,7 @@
m68k-*-hpux*) fmt=hp300 em=hp300 ;;
m68k-*-linux*aout*) fmt=aout em=linux ;;
m68k-*-linux-gnu*) fmt=elf em=linux ;;
@@ -340,16 +342,15 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/confi
m68k-*-gnu*) fmt=elf ;;
m68k-*-lynxos*) fmt=coff em=lynx ;;
m68k-*-netbsdelf*) fmt=elf em=nbsd ;;
-@@ -4257,7 +4269,7 @@
+@@ -2592,6 +2604,7 @@
ppc-*-beos*) fmt=coff ;;
ppc-*-*n*bsd* | ppc-*-elf*) fmt=elf ;;
ppc-*-eabi* | ppc-*-sysv4*) fmt=elf ;;
-- ppc-*-linux-gnu*) fmt=elf em=linux
-+ ppc-*-linux-uclibc* | ppc-*-linux-gnu*) fmt=elf em=linux
++ ppc-*-linux-uclibc* | \
+ ppc-*-linux-gnu*) fmt=elf
case "$endian" in
big) ;;
- *) { { echo "$as_me:$LINENO: error: GNU/Linux must be configured big endian" >&5
-@@ -4286,7 +4298,9 @@
+@@ -2616,7 +2629,9 @@
ppc-*-kaos*) fmt=elf ;;
s390x-*-linux-gnu*) fmt=elf em=linux ;;
@@ -359,7 +360,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/confi
sh*-*-linux*) fmt=elf em=linux
case ${cpu} in
-@@ -4319,6 +4333,7 @@
+@@ -2649,6 +2664,7 @@
sparc-*-coff) fmt=coff ;;
sparc-*-linux*aout*) fmt=aout em=linux ;;
sparc-*-linux-gnu*) fmt=elf em=linux ;;
@@ -367,10 +368,10 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/confi
sparc-*-lynxos*) fmt=coff em=lynx ;;
sparc-fujitsu-none) fmt=aout ;;
sparc-*-elf) fmt=elf ;;
-diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/configure.in
---- binutils-2.14.90.0.7.orig/gas/configure.in 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/gas/configure.in 2004-04-20 01:38:23.000000000 -0600
-@@ -192,6 +192,7 @@
+diff -urN binutils-2.14.90.0.6/gas/configure.in binutils-2.14.90.0.6-uClibc/gas/configure.in
+--- binutils-2.14.90.0.6/gas/configure.in 2003-07-23 10:08:10.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/gas/configure.in 2004-01-06 21:57:26.000000000 -0600
+@@ -184,6 +184,7 @@
alpha*-*-osf*) fmt=ecoff ;;
alpha*-*-linuxecoff*) fmt=ecoff ;;
alpha*-*-linux-gnu*) fmt=elf em=linux ;;
@@ -378,7 +379,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/co
alpha*-*-netbsd*) fmt=elf em=nbsd ;;
alpha*-*-openbsd*) fmt=elf em=obsd ;;
-@@ -208,6 +209,7 @@
+@@ -200,6 +201,7 @@
arm*-*-conix*) fmt=elf ;;
arm-*-linux*aout*) fmt=aout em=linux ;;
arm*-*-linux-gnu*) fmt=elf em=linux ;;
@@ -386,7 +387,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/co
arm*-*-uclinux*) fmt=elf em=linux ;;
arm-*-netbsdelf*) fmt=elf em=nbsd ;;
arm-*-*n*bsd*) fmt=aout em=nbsd ;;
-@@ -222,6 +224,7 @@
+@@ -214,6 +216,7 @@
avr-*-*) fmt=elf ;;
cris-*-linux-gnu*) fmt=multi bfd_gas=yes em=linux ;;
@@ -394,7 +395,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/co
cris-*-*) fmt=multi bfd_gas=yes ;;
d10v-*-*) fmt=elf ;;
-@@ -278,7 +281,9 @@
+@@ -269,7 +272,9 @@
i386-*-linux*oldld) fmt=aout em=linux ;;
i386-*-linux*coff*) fmt=coff em=linux ;;
i386-*-linux-gnu*) fmt=elf em=linux ;;
@@ -404,7 +405,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/co
i386-*-lynxos*) fmt=coff em=lynx ;;
changequote(,)dnl
i386-*-sysv[45]*) fmt=elf ;;
-@@ -332,6 +337,7 @@
+@@ -322,6 +327,7 @@
ia64-*-elf*) fmt=elf ;;
ia64-*-aix*) fmt=elf em=ia64aix ;;
ia64-*-linux-gnu*) fmt=elf em=linux ;;
@@ -412,7 +413,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/co
ia64-*-hpux*) fmt=elf em=hpux ;;
ia64-*-netbsd*) fmt=elf em=nbsd ;;
-@@ -358,6 +364,7 @@
+@@ -348,6 +354,7 @@
m68k-*-hpux*) fmt=hp300 em=hp300 ;;
m68k-*-linux*aout*) fmt=aout em=linux ;;
m68k-*-linux-gnu*) fmt=elf em=linux ;;
@@ -420,16 +421,15 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/co
m68k-*-gnu*) fmt=elf ;;
m68k-*-lynxos*) fmt=coff em=lynx ;;
m68k-*-netbsdelf*) fmt=elf em=nbsd ;;
-@@ -412,7 +419,7 @@
+@@ -402,6 +409,7 @@
ppc-*-beos*) fmt=coff ;;
ppc-*-*n*bsd* | ppc-*-elf*) fmt=elf ;;
ppc-*-eabi* | ppc-*-sysv4*) fmt=elf ;;
-- ppc-*-linux-gnu*) fmt=elf em=linux
-+ ppc-*-linux-uclibc* | ppc-*-linux-gnu*) fmt=elf em=linux
++ ppc-*-linux-uclibc* | \
+ ppc-*-linux-gnu*) fmt=elf
case "$endian" in
big) ;;
- *) AC_MSG_ERROR(GNU/Linux must be configured big endian) ;;
-@@ -434,7 +441,9 @@
+@@ -424,7 +432,9 @@
ppc-*-kaos*) fmt=elf ;;
s390x-*-linux-gnu*) fmt=elf em=linux ;;
@@ -439,7 +439,7 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/co
sh*-*-linux*) fmt=elf em=linux
case ${cpu} in
-@@ -467,6 +476,7 @@
+@@ -457,6 +467,7 @@
sparc-*-coff) fmt=coff ;;
sparc-*-linux*aout*) fmt=aout em=linux ;;
sparc-*-linux-gnu*) fmt=elf em=linux ;;
@@ -447,9 +447,9 @@ diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/co
sparc-*-lynxos*) fmt=coff em=lynx ;;
sparc-fujitsu-none) fmt=aout ;;
sparc-*-elf) fmt=elf ;;
-diff -urN binutils-2.14.90.0.7.orig/ld/configure binutils-2.14.90.0.7/ld/configure
---- binutils-2.14.90.0.7.orig/ld/configure 2003-05-05 15:46:49.000000000 -0600
-+++ binutils-2.14.90.0.7/ld/configure 2004-04-20 01:32:29.000000000 -0600
+diff -urN binutils-2.14.90.0.6/ld/configure binutils-2.14.90.0.6-uClibc/ld/configure
+--- binutils-2.14.90.0.6/ld/configure 2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ld/configure 2004-01-06 21:59:31.000000000 -0600
@@ -1578,6 +1578,11 @@
lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
;;
@@ -462,9 +462,9 @@ diff -urN binutils-2.14.90.0.7.orig/ld/configure binutils-2.14.90.0.7/ld/configu
netbsd*)
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/configure.tgt
---- binutils-2.14.90.0.7.orig/ld/configure.tgt 2003-10-29 10:37:48.000000000 -0700
-+++ binutils-2.14.90.0.7/ld/configure.tgt 2004-04-20 01:32:29.000000000 -0600
+diff -urN binutils-2.14.90.0.6/ld/configure.tgt binutils-2.14.90.0.6-uClibc/ld/configure.tgt
+--- binutils-2.14.90.0.6/ld/configure.tgt 2003-08-21 10:28:48.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ld/configure.tgt 2004-01-06 22:09:40.000000000 -0600
@@ -30,6 +30,7 @@
targ_extra_emuls="criself crislinux"
targ_extra_libpath=$targ_extra_emuls ;;
@@ -492,7 +492,7 @@ diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/con
targ_extra_emuls="sparclinux elf64_sparc sun4"
targ_extra_libpath=elf64_sparc
tdir_sparclinux=${targ_alias}aout
-@@ -125,7 +128,7 @@
+@@ -124,7 +127,7 @@
m68*-ericsson-ose) targ_emul=sun3 ;;
m68*-apple-aux*) targ_emul=m68kaux ;;
*-tandem-none) targ_emul=st2000 ;;
@@ -501,7 +501,7 @@ diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/con
i[3-7]86-*-nto-qnx*) targ_emul=i386nto ;;
i[3-7]86-*-vsta) targ_emul=vsta ;;
i[3-7]86-go32-rtems*) targ_emul=i386go32 ;;
-@@ -149,14 +152,16 @@
+@@ -148,14 +151,16 @@
tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
;;
i[3-7]86-*-linux*oldld) targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
@@ -520,7 +520,7 @@ diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/con
targ_extra_emuls="elf_i386 i386linux"
targ_extra_libpath=elf_i386
tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
-@@ -256,10 +261,13 @@
+@@ -250,10 +255,13 @@
arm9e-*-elf) targ_emul=armelf ;;
arm-*-oabi) targ_emul=armelf_oabi ;;
arm*b-*-linux-gnu*) targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
@@ -535,7 +535,7 @@ diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/con
strongarm-*-coff) targ_emul=armcoff ;;
strongarm-*-elf) targ_emul=armelf ;;
strongarm-*-kaos*) targ_emul=armelf ;;
-@@ -360,7 +368,8 @@
+@@ -354,7 +362,8 @@
targ_extra_emuls=m68kelf
tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
;;
@@ -545,7 +545,7 @@ diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/con
targ_extra_emuls=m68klinux
tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
;;
-@@ -376,9 +385,9 @@
+@@ -370,9 +379,9 @@
m68*-*-psos*) targ_emul=m68kpsos ;;
m68*-*-rtemscoff*) targ_emul=m68kcoff ;;
m68*-*-rtems*) targ_emul=m68kelf ;;
@@ -557,7 +557,7 @@ diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/con
hppa*-*-*elf*) targ_emul=hppaelf ;;
hppa*-*-lites*) targ_emul=hppaelf ;;
hppa*-*-netbsd*) targ_emul=hppanbsd ;;
-@@ -422,16 +431,20 @@
+@@ -416,16 +425,20 @@
mips*-*-rtems*) targ_emul=elf32ebmip ;;
mips*el-*-vxworks*) targ_emul=elf32elmip ;;
mips*-*-vxworks*) targ_emul=elf32ebmip ;;
@@ -582,7 +582,7 @@ diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/con
targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
;;
mips*-*-lnews*) targ_emul=mipslnews ;;
-@@ -454,6 +467,10 @@
+@@ -447,6 +460,10 @@
alpha*-*-linux-gnu*) targ_emul=elf64alpha targ_extra_emuls=alpha
tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
;;
@@ -593,9 +593,9 @@ diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/con
alpha*-*-osf*) targ_emul=alpha ;;
alpha*-*-gnu*) targ_emul=elf64alpha ;;
alpha*-*-netware*) targ_emul=alpha ;;
-diff -urN binutils-2.14.90.0.7.orig/libtool.m4 binutils-2.14.90.0.7/libtool.m4
---- binutils-2.14.90.0.7.orig/libtool.m4 2003-05-05 15:46:46.000000000 -0600
-+++ binutils-2.14.90.0.7/libtool.m4 2004-04-20 01:32:29.000000000 -0600
+diff -urN binutils-2.14.90.0.6/libtool.m4 binutils-2.14.90.0.6-uClibc/libtool.m4
+--- binutils-2.14.90.0.6/libtool.m4 2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/libtool.m4 2004-01-06 20:30:39.000000000 -0600
@@ -645,6 +645,11 @@
lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
;;
@@ -608,9 +608,9 @@ diff -urN binutils-2.14.90.0.7.orig/libtool.m4 binutils-2.14.90.0.7/libtool.m4
netbsd*)
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
[lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
-diff -urN binutils-2.14.90.0.7.orig/ltconfig binutils-2.14.90.0.7/ltconfig
---- binutils-2.14.90.0.7.orig/ltconfig 2003-10-29 10:37:47.000000000 -0700
-+++ binutils-2.14.90.0.7/ltconfig 2004-04-20 01:32:29.000000000 -0600
+diff -urN binutils-2.14.90.0.6/ltconfig binutils-2.14.90.0.6-uClibc/ltconfig
+--- binutils-2.14.90.0.6/ltconfig 2003-07-23 10:08:08.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ltconfig 2004-01-06 21:05:11.000000000 -0600
@@ -603,6 +603,7 @@
# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
case $host_os in