binutils/

* 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.
This commit is contained in:
Alan Modra
2009-01-31 11:44:38 +00:00
parent 5d27446dac
commit 010e5ae26e
6 changed files with 39 additions and 5 deletions

View File

@ -1,3 +1,9 @@
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> 2009-01-30 Julian Brown <julian@codesourcery.com>
* elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Skip BFDs with * elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Skip BFDs with

View File

@ -3199,6 +3199,16 @@ elf_add_dt_needed_tag (bfd *abfd,
return 0; 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. */ /* Sort symbol by value and section. */
static int static int
elf_sort_symbol (const void *arg1, const void *arg2) elf_sort_symbol (const void *arg1, const void *arg2)
@ -4434,8 +4444,11 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
if (!add_needed if (!add_needed
&& definition && definition
&& dynsym && ((dynsym
&& h->ref_regular) && 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; int ret;
const char *soname = elf_dt_name (abfd); const char *soname = elf_dt_name (abfd);

View File

@ -1,3 +1,7 @@
2009-01-31 Alan Modra <amodra@bigpond.net.au>
* NEWS: Mention --as-needed change.
2009-01-29 Alan Modra <amodra@bigpond.net.au> 2009-01-29 Alan Modra <amodra@bigpond.net.au>
PR 9798 PR 9798

View File

@ -1,5 +1,10 @@
-*- text -*- -*- 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- * Add new option --use-nul-prefixed-import-tables to dlltool to allow fall-
back to old import table generation with null element prefix. back to old import table generation with null element prefix.

View File

@ -1,3 +1,7 @@
2009-01-31 Alan Modra <amodra@bigpond.net.au>
* ld.texinfo (--as-needed): Update.
2009-01-29 Andrew Jenner <andrew@codesourcery.com> 2009-01-29 Andrew Jenner <andrew@codesourcery.com>
* emultempl/armelf.em: Correct formatting of help text for * emultempl/armelf.em: Correct formatting of help text for

View File

@ -1093,9 +1093,11 @@ This option affects ELF DT_NEEDED tags for dynamic libraries mentioned
on the command line after the @option{--as-needed} option. Normally, on the command line after the @option{--as-needed} option. Normally,
the linker will add a DT_NEEDED tag for each dynamic library mentioned the linker will add a DT_NEEDED tag for each dynamic library mentioned
on the command line, regardless of whether the library is actually on the command line, regardless of whether the library is actually
needed. @option{--as-needed} causes DT_NEEDED tags to only be emitted needed. @option{--as-needed} causes a DT_NEEDED tag to only be emitted
for libraries that satisfy some symbol reference from regular objects for a library that satisfies a symbol reference from regular objects
which is undefined at the point that the library was linked. 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. @option{--no-as-needed} restores the default behaviour.
@kindex --add-needed @kindex --add-needed