* NEWS: Mention --as-needed change.
ld/
* ld.texinfo (--as-needed): Update.
bfd/
* elflink.c (on_needed_list): New function.
(elf_link_add_object_symbols): Link in --as-needed libs if they
satisfy undefined symbols in other libs.
+2009-01-31 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (on_needed_list): New function.
+ (elf_link_add_object_symbols): Link in --as-needed libs if they
+ satisfy undefined symbols in other libs.
+
2009-01-30 Julian Brown <julian@codesourcery.com>
* elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Skip BFDs with
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)
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);
+2009-01-31 Alan Modra <amodra@bigpond.net.au>
+
+ * NEWS: Mention --as-needed change.
+
2009-01-29 Alan Modra <amodra@bigpond.net.au>
PR 9798
-*- text -*-
+* --as-needed now links in a dynamic library if it satisfies undefined
+ symbols in regular objects, or in other dynamic libraries. In the
+ latter case the library is not linked if it is found in a DT_NEEDED
+ entry of one of the libraries already linked.
+
* Add new option --use-nul-prefixed-import-tables to dlltool to allow fall-
back to old import table generation with null element prefix.
+2009-01-31 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo (--as-needed): Update.
+
2009-01-29 Andrew Jenner <andrew@codesourcery.com>
* emultempl/armelf.em: Correct formatting of help text for
on the command line after the @option{--as-needed} option. Normally,
the linker will add a DT_NEEDED tag for each dynamic library mentioned
on the command line, regardless of whether the library is actually
-needed. @option{--as-needed} causes DT_NEEDED tags to only be emitted
-for libraries that satisfy some symbol reference from regular objects
-which is undefined at the point that the library was linked.
+needed. @option{--as-needed} causes a DT_NEEDED tag to only be emitted
+for a library that satisfies a symbol reference from regular objects
+which is undefined at the point that the library was linked, or, if
+the library is not found in the DT_NEEDED lists of other libraries
+linked up to that point, a reference from another dynamic library.
@option{--no-as-needed} restores the default behaviour.
@kindex --add-needed