mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 04:00:07 +08:00
ld: Add more tests for --as-needed
Prior to commit 1e3b96fd6cf0c7d018083994ad951ccf92aba582 Author: Alan Modra <amodra@gmail.com> Date: Fri Sep 4 13:54:21 2020 +0930 Allow plugin syms to mark as-needed shared libs needed when removing unused IR symbol references, ld didn't add unnecessary DT_NEEDED libraries which may lead to undefined symbol reference in a --as-needed library when the symbol is defined in a prior --as-needed library and there is no reference in relocatable inputs. This behavior is desirable since it ensures that both lazy and non-lazy bindings work the same way. The problem is with --as-needed libraries, which happens with and without LTO. Now, the linker may add many unnecessary DT_NEEDED libraries for IR inputs. PR ld/26590 * testsuite/ld-elf/pr26590.err: New file. * testsuite/ld-elf/pr26590a.c: Likewise. * testsuite/ld-elf/pr26590b.c: Likewise. * testsuite/ld-elf/pr26590c.c: Likewise. * testsuite/ld-elf/pr26590d.c: Likewise. * testsuite/ld-elf/shared.exp: Run ld/26590 tests.
This commit is contained in:
10
ld/ChangeLog
10
ld/ChangeLog
@ -1,3 +1,13 @@
|
||||
2020-09-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/26590
|
||||
* testsuite/ld-elf/pr26590.err: New file.
|
||||
* testsuite/ld-elf/pr26590a.c: Likewise.
|
||||
* testsuite/ld-elf/pr26590b.c: Likewise.
|
||||
* testsuite/ld-elf/pr26590c.c: Likewise.
|
||||
* testsuite/ld-elf/pr26590d.c: Likewise.
|
||||
* testsuite/ld-elf/shared.exp: Run ld/26590 tests.
|
||||
|
||||
2020-09-10 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* testsuite/ld-elf/pr26580-2.sd: Accept undefined symbol.
|
||||
|
3
ld/testsuite/ld-elf/pr26590.err
Normal file
3
ld/testsuite/ld-elf/pr26590.err
Normal file
@ -0,0 +1,3 @@
|
||||
#...
|
||||
.*: tmpdir/libpr26590b.so: undefined reference to `f1'
|
||||
#pass
|
10
ld/testsuite/ld-elf/pr26590a.c
Normal file
10
ld/testsuite/ld-elf/pr26590a.c
Normal file
@ -0,0 +1,10 @@
|
||||
int select (void) { return 1; }
|
||||
|
||||
extern int f2 (int);
|
||||
|
||||
int f1 (int x)
|
||||
{
|
||||
if (x > 0)
|
||||
return x * f2 (x - 1);
|
||||
return 1;
|
||||
}
|
10
ld/testsuite/ld-elf/pr26590b.c
Normal file
10
ld/testsuite/ld-elf/pr26590b.c
Normal file
@ -0,0 +1,10 @@
|
||||
int select (void) { return 2; }
|
||||
|
||||
extern int f1 (int);
|
||||
|
||||
int f2 (int x)
|
||||
{
|
||||
if (x > 0)
|
||||
return x * f1 (x - 1);
|
||||
return 22222;
|
||||
}
|
11
ld/testsuite/ld-elf/pr26590c.c
Normal file
11
ld/testsuite/ld-elf/pr26590c.c
Normal file
@ -0,0 +1,11 @@
|
||||
#include <stdio.h>
|
||||
|
||||
extern int select ();
|
||||
extern int f2 (int);
|
||||
|
||||
int main (void)
|
||||
{
|
||||
if (select () == 0 && f2 (0) == 22222)
|
||||
printf ("PASS\n");
|
||||
return 0;
|
||||
}
|
1
ld/testsuite/ld-elf/pr26590d.c
Normal file
1
ld/testsuite/ld-elf/pr26590d.c
Normal file
@ -0,0 +1 @@
|
||||
int select (void) { return 0; }
|
@ -809,6 +809,56 @@ run_cc_link_tests [list \
|
||||
{} \
|
||||
"libpr2404b.a" \
|
||||
] \
|
||||
[list \
|
||||
"Build libpr26590a.so" \
|
||||
"-shared" \
|
||||
"-fPIC" \
|
||||
{pr26590a.c} \
|
||||
{} \
|
||||
"libpr26590a.so" \
|
||||
] \
|
||||
[list \
|
||||
"Build libpr26590b.so (1)" \
|
||||
"-shared" \
|
||||
"-fPIC" \
|
||||
{pr26590b.c} \
|
||||
{} \
|
||||
"libpr26590b.so" \
|
||||
] \
|
||||
[list \
|
||||
"Build pr26590c.o and pr26590d.o" \
|
||||
"" \
|
||||
"" \
|
||||
{pr26590c.c pr26590d.c} \
|
||||
{} \
|
||||
] \
|
||||
[list \
|
||||
"Build pr26590 (1)" \
|
||||
"tmpdir/pr26590c.o tmpdir/pr26590d.o \
|
||||
-Wl,--as-needed tmpdir/libpr26590a.so tmpdir/libpr26590b.so" \
|
||||
"" \
|
||||
{dummy.c} \
|
||||
{{error_output pr26590.err}} \
|
||||
"pr26590" \
|
||||
] \
|
||||
[list \
|
||||
"Build libpr26590b.so (2)" \
|
||||
"-shared -Wl,--no-as-needed \
|
||||
tmpdir/libpr26590a.so" \
|
||||
"-fPIC" \
|
||||
{pr26590b.c} \
|
||||
{} \
|
||||
"libpr26590b.so" \
|
||||
] \
|
||||
[list \
|
||||
"Build pr26590 (2)" \
|
||||
"tmpdir/pr26590c.o tmpdir/pr26590d.o \
|
||||
-Wl,--as-needed tmpdir/libpr26590a.so tmpdir/libpr26590b.so" \
|
||||
"" \
|
||||
{dummy.c} \
|
||||
{} \
|
||||
"pr26590" \
|
||||
] \
|
||||
]
|
||||
|
||||
# pr19073.s uses .set, which has a different meaning on alpha.
|
||||
@ -1055,6 +1105,10 @@ set run_tests [list \
|
||||
"" "" \
|
||||
{pr26580-a.c} "pr26580-4" "pr26580-4.out" "-fcommon" "c" "" \
|
||||
"-Wl,--no-as-needed tmpdir/libpr26580-2.so" ] \
|
||||
[list "Run pr26590 (2)" \
|
||||
"" "" \
|
||||
{pr26590c.c pr26590d.c} "pr26590" "pass.out" "" "c" "" \
|
||||
"-Wl,--as-needed tmpdir/libpr26590a.so tmpdir/libpr26590b.so" ] \
|
||||
]
|
||||
|
||||
# NetBSD ELF systems do not currently support the .*_array sections.
|
||||
|
Reference in New Issue
Block a user