Always create dynamic sections for -E/--dynamic-list

In embedded environments, including boot loaders, the non-PIC executable
needs to export its symbols to modules loaded in the future.  We should
always create dynamic sections for -E/--dynamic-list.

bfd/

	PR ld/19617
	* elflink.c (elf_link_add_object_symbols): Always create dynamic
	sections for -E/--dynamic-list.

ld/

	PR ld/19617
	* testsuite/ld-elf/pr19617.s: New file.
	* testsuite/ld-elf/pr19617a.d: Likewise.
	* testsuite/ld-elf/pr19617b.d: Likewise.
	* testsuite/ld-elf/pr19617c.d: Likewise.
This commit is contained in:
H.J. Lu 2016-02-18 03:13:19 -08:00
parent 06ea285dcb
commit bf89386a86
7 changed files with 68 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2016-02-18 H.J. Lu <hongjiu.lu@intel.com>
PR ld/19617
* elflink.c (elf_link_add_object_symbols): Always create dynamic
sections for -E/--dynamic-list.
2016-02-17 H.J. Lu <hongjiu.lu@intel.com>
* elf64-x86-64.c (elf_backend_omit_section_dynsym): New. Defined

View File

@ -3598,11 +3598,14 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
/* If we are creating a shared library, create all the dynamic
sections immediately. We need to attach them to something,
so we attach them to this BFD, provided it is the right
format and is not from ld --just-symbols. FIXME: If there
format and is not from ld --just-symbols. Always create the
dynamic sections for -E/--dynamic-list. FIXME: If there
are no input BFD's of the same format as the output, we can't
make a shared library. */
if (!just_syms
&& bfd_link_pic (info)
&& (bfd_link_pic (info)
|| info->export_dynamic
|| info->dynamic)
&& is_elf_hash_table (htab)
&& info->output_bfd->xvec == abfd->xvec
&& !htab->dynamic_sections_created)

View File

@ -1,3 +1,11 @@
2016-02-18 H.J. Lu <hongjiu.lu@intel.com>
PR ld/19617
* testsuite/ld-elf/pr19617.s: New file.
* testsuite/ld-elf/pr19617a.d: Likewise.
* testsuite/ld-elf/pr19617b.d: Likewise.
* testsuite/ld-elf/pr19617c.d: Likewise.
2016-02-18 Nick Clifton <nickc@redhat.com>
* Makefile.am (CXX_FOR_TARGET): Check for the presence of an

View File

@ -0,0 +1,19 @@
.data
.global bar
bar:
.type bar,"object"
.long 0
.text
.type start,"function"
.global start
start:
.type _start,"function"
.global _start
_start:
.type __start,"function"
.global __start
__start:
.type main,"function"
.global main
main:
.long 0

View File

@ -0,0 +1,12 @@
#source: pr19617.s
#ld: -E
#readelf : --dyn-syms --wide
Symbol table '\.dynsym' contains [0-9]+ entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
+0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND +
#...
+[0-9]+: +[a-f0-9]+ +0 +FUNC +GLOBAL +DEFAULT +[0-9]+ +start
#...
+[0-9]+: +[a-f0-9]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +bar
#pass

View File

@ -0,0 +1,10 @@
#source: pr19617.s
#ld: --dynamic-list-data
#readelf : --dyn-syms --wide
Symbol table '\.dynsym' contains [0-9]+ entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
+0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND +
#...
+[0-9]+: +[a-f0-9]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +bar
#pass

View File

@ -0,0 +1,8 @@
#source: pr19617.s
#ld: --dynamic-list-data
#readelf : --dyn-syms --wide
#failif
#...
+[0-9]+: +[a-f0-9]+ +0 +FUNC +GLOBAL +DEFAULT +[0-9]+ +start
#...