mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 10:35:12 +08:00
ELF: Properly handle section symbols
When defining the section symbol, __start_FOO, for the section FOO: 1. Treat the common symbol, __start_FOO, in input object file as definition. 2. Clear verinfo.verdef. bfd/ PR ld/26094 * elflink.c (bfd_elf_define_start_stop): Handle common symbols. Clear verinfo.verdef. ld/ PR ld/26094 * testsuite/ld-elf/pr26094-1.ver: New fike. * testsuite/ld-elf/pr26094-1a.c: Likewise. * testsuite/ld-elf/pr26094-1a.rd: Likewise. * testsuite/ld-elf/pr26094-1b.c: Likewise. * testsuite/ld-elf/pr26094-1b.rd: Likewise. * testsuite/ld-elf/pr26094-1c.c: Likewise. * testsuite/ld-elf/shared.exp: Run ld/26094 tests.
This commit is contained in:
parent
25065fcd19
commit
e1b5d517d1
@ -1,3 +1,9 @@
|
||||
2020-06-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/26094
|
||||
* elflink.c (bfd_elf_define_start_stop): Handle common symbols.
|
||||
Clear verinfo.verdef.
|
||||
|
||||
2020-06-09 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/18801
|
||||
|
@ -14802,12 +14802,16 @@ bfd_elf_define_start_stop (struct bfd_link_info *info,
|
||||
|
||||
h = elf_link_hash_lookup (elf_hash_table (info), symbol,
|
||||
FALSE, FALSE, TRUE);
|
||||
/* NB: Common symbols will be turned into definition later. */
|
||||
if (h != NULL
|
||||
&& (h->root.type == bfd_link_hash_undefined
|
||||
|| h->root.type == bfd_link_hash_undefweak
|
||||
|| ((h->ref_regular || h->def_dynamic) && !h->def_regular)))
|
||||
|| ((h->ref_regular || h->def_dynamic)
|
||||
&& !h->def_regular
|
||||
&& h->root.type != bfd_link_hash_common)))
|
||||
{
|
||||
bfd_boolean was_dynamic = h->ref_dynamic || h->def_dynamic;
|
||||
h->verinfo.verdef = NULL;
|
||||
h->root.type = bfd_link_hash_defined;
|
||||
h->root.u.def.section = sec;
|
||||
h->root.u.def.value = 0;
|
||||
|
11
ld/ChangeLog
11
ld/ChangeLog
@ -1,3 +1,14 @@
|
||||
2020-06-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/26094
|
||||
* testsuite/ld-elf/pr26094-1.ver: New fike.
|
||||
* testsuite/ld-elf/pr26094-1a.c: Likewise.
|
||||
* testsuite/ld-elf/pr26094-1a.rd: Likewise.
|
||||
* testsuite/ld-elf/pr26094-1b.c: Likewise.
|
||||
* testsuite/ld-elf/pr26094-1b.rd: Likewise.
|
||||
* testsuite/ld-elf/pr26094-1c.c: Likewise.
|
||||
* testsuite/ld-elf/shared.exp: Run ld/26094 tests.
|
||||
|
||||
2020-06-09 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/18801
|
||||
|
3
ld/testsuite/ld-elf/pr26094-1.ver
Normal file
3
ld/testsuite/ld-elf/pr26094-1.ver
Normal file
@ -0,0 +1,3 @@
|
||||
SOME_VERSION_NAME {
|
||||
global: *;
|
||||
};
|
7
ld/testsuite/ld-elf/pr26094-1a.c
Normal file
7
ld/testsuite/ld-elf/pr26094-1a.c
Normal file
@ -0,0 +1,7 @@
|
||||
char foo_data __attribute__(( section("FOO") )) = { 0 };
|
||||
|
||||
extern void * __start_FOO;
|
||||
|
||||
void * foo() {
|
||||
return __start_FOO;
|
||||
}
|
8
ld/testsuite/ld-elf/pr26094-1a.rd
Normal file
8
ld/testsuite/ld-elf/pr26094-1a.rd
Normal file
@ -0,0 +1,8 @@
|
||||
#ld: -shared
|
||||
#readelf: --dyn-syms --wide
|
||||
#target: *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi
|
||||
#xfail: ![check_shared_lib_support]
|
||||
|
||||
#...
|
||||
+[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +NOTYPE +GLOBAL +PROTECTED +[0-9]+ +___?start_FOO@@SOME_VERSION_NAME
|
||||
#pass
|
6
ld/testsuite/ld-elf/pr26094-1b.c
Normal file
6
ld/testsuite/ld-elf/pr26094-1b.c
Normal file
@ -0,0 +1,6 @@
|
||||
extern void *foo();
|
||||
|
||||
void main()
|
||||
{
|
||||
foo();
|
||||
}
|
8
ld/testsuite/ld-elf/pr26094-1b.rd
Normal file
8
ld/testsuite/ld-elf/pr26094-1b.rd
Normal file
@ -0,0 +1,8 @@
|
||||
#ld:
|
||||
#readelf: --dyn-syms --wide
|
||||
#target: *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi
|
||||
#xfail: ![check_shared_lib_support]
|
||||
|
||||
#...
|
||||
+[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +OBJECT +GLOBAL +PROTECTED +[0-9]+ +___?start_FOO@@SOME_VERSION_NAME
|
||||
#pass
|
7
ld/testsuite/ld-elf/pr26094-1c.c
Normal file
7
ld/testsuite/ld-elf/pr26094-1c.c
Normal file
@ -0,0 +1,7 @@
|
||||
char foo_data __attribute__(( section("FOO") )) = { 0 };
|
||||
|
||||
void * __start_FOO;
|
||||
|
||||
void * foo() {
|
||||
return __start_FOO;
|
||||
}
|
@ -832,6 +832,25 @@ append build_tests {
|
||||
|
||||
run_cc_link_tests $build_tests
|
||||
|
||||
run_cc_link_tests [list \
|
||||
[list \
|
||||
"Build pr26094-1.so" \
|
||||
"-shared -Wl,--version-script=pr26094-1.ver" \
|
||||
"-fPIC" \
|
||||
{pr26094-1a.c} \
|
||||
{{readelf {--dyn-syms --wide} pr26094-1a.rd}} \
|
||||
"pr26094-1.so" \
|
||||
] \
|
||||
[list \
|
||||
"Build pr26094-1" \
|
||||
"-Wl,--no-as-needed tmpdir/pr26094-1.so" \
|
||||
"-fcommon" \
|
||||
{pr26094-1b.c pr26094-1c.c} \
|
||||
{{readelf {--dyn-syms --wide} pr26094-1b.rd}} \
|
||||
"pr26094-1" \
|
||||
] \
|
||||
]
|
||||
|
||||
run_ld_link_tests [list \
|
||||
[list \
|
||||
"pr22269-1 (static pie undefined weak)" \
|
||||
|
Loading…
Reference in New Issue
Block a user