mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
PR 17287, DT_NEEDED of unneeded libraries affects --as-needed
PR 17287 bfd/ * elflink.c (on_needed_list): Only consider libraries that have been loaded. ld/ * ld.texinfo (--as-needed): Clarify that references from libraries must be from needed libraries. ld/testsuite/ * ld-plugin/needed3.c: New file. * ld-elf/shared.exp: Add needed3 test.
This commit is contained in:
parent
759388538d
commit
1240be6b7d
@ -1,3 +1,9 @@
|
||||
2014-08-18 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 17287
|
||||
* elflink.c (on_needed_list): Only consider libraries that have
|
||||
been loaded.
|
||||
|
||||
2014-08-18 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elflink.c (bfd_elf_discard_info): Return int error status.
|
||||
|
@ -3086,7 +3086,8 @@ 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)
|
||||
if ((elf_dyn_lib_class (needed->by) & DYN_AS_NEEDED) == 0
|
||||
&& strcmp (soname, needed->name) == 0)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2014-08-18 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* ld.texinfo (--as-needed): Clarify that references from libraries
|
||||
must be from needed libraries.
|
||||
|
||||
2014-08-18 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* emultempl/aarch64elf.em (gld${EMULATION_NAME}_after_allocation):
|
||||
|
@ -1179,8 +1179,8 @@ on the command line, regardless of whether the library is actually
|
||||
needed or not. @option{--as-needed} causes a DT_NEEDED tag to only be
|
||||
emitted for a library that @emph{at that point in the link} satisfies a
|
||||
non-weak undefined symbol reference from a regular object file or, if
|
||||
the library is not found in the DT_NEEDED lists of other libraries, a
|
||||
non-weak undefined symbol reference from another dynamic library.
|
||||
the library is not found in the DT_NEEDED lists of other needed libraries, a
|
||||
non-weak undefined symbol reference from another needed dynamic library.
|
||||
Object files or libraries appearing on the command line @emph{after}
|
||||
the library in question do not affect whether the library is seen as
|
||||
needed. This is similar to the rules for extraction of object files
|
||||
|
@ -1,3 +1,8 @@
|
||||
2014-08-18 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* ld-plugin/needed3.c: New file.
|
||||
* ld-elf/shared.exp: Add needed3 test.
|
||||
|
||||
2014-08-12 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* lib/ld-lib.exp (check_plugin_api_available): Match "-plugin PLUGIN".
|
||||
|
8
ld/testsuite/ld-elf/needed3.c
Normal file
8
ld/testsuite/ld-elf/needed3.c
Normal file
@ -0,0 +1,8 @@
|
||||
extern void foo (void);
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
foo ();
|
||||
return 0;
|
||||
}
|
@ -222,6 +222,18 @@ set build_tests {
|
||||
{"Build needed2"
|
||||
"tmpdir/libneeded2c.o -Wl,--as-needed tmpdir/libneeded2a.so tmpdir/libneeded2b.so" ""
|
||||
{dummy.c} {} "needed2"}
|
||||
{"Build libneeded3a.so"
|
||||
"-shared -Wl,--no-add-needed" "-fPIC"
|
||||
{needed1a.c} {} "libneeded3a.so"}
|
||||
{"Build libneeded3b.so"
|
||||
"-shared -Wl,--no-as-needed,--add-needed -Ltmpdir -lneeded1b" "-fPIC"
|
||||
{dummy.c} {} "libneeded3b.so"}
|
||||
{"Build needed3.o"
|
||||
"-r -nostdlib" ""
|
||||
{needed3.c} {} "libneeded3.so"}
|
||||
{"Build needed3"
|
||||
"tmpdir/needed3.o -Wl,--as-needed -Ltmpdir -lneeded3a -lneeded3b -lneeded1b" ""
|
||||
{dummy.c} {} "needed3"}
|
||||
{"Build libpr2404a.so"
|
||||
"-shared" "-fPIC"
|
||||
{pr2404a.c} {} "libpr2404a.so"}
|
||||
|
Loading…
Reference in New Issue
Block a user