PKGBUILDs/core/binutils/binutils-2.19-as-needed.patch
2009-10-09 21:17:35 -05:00

38 lines
1 KiB
Diff

===================================================================
RCS file: /cvs/src/src/bfd/elflink.c,v
retrieving revision 1.328
retrieving revision 1.329
diff -u -r1.328 -r1.329
--- src/bfd/elflink.c 2009/01/29 16:35:03 1.328
+++ src/bfd/elflink.c 2009/01/31 11:44:37 1.329
@@ -3199,6 +3199,16 @@
return 0;
}
+static bfd_boolean
+on_needed_list (const char *soname, struct bfd_link_needed_list *needed)
+{
+ for (; needed != NULL; needed = needed->next)
+ if (strcmp (soname, needed->name) == 0)
+ return TRUE;
+
+ return FALSE;
+}
+
/* Sort symbol by value and section. */
static int
elf_sort_symbol (const void *arg1, const void *arg2)
@@ -4434,8 +4444,11 @@
if (!add_needed
&& definition
- && dynsym
- && h->ref_regular)
+ && ((dynsym
+ && h->ref_regular)
+ || (h->ref_dynamic
+ && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
+ && !on_needed_list (elf_dt_name (abfd), htab->needed))))
{
int ret;
const char *soname = elf_dt_name (abfd);