From 576d151194c4d17a18152e1796db3776b92f6931 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 21 Apr 2017 12:00:55 -0700 Subject: [PATCH] Require --no-dynamic-linker with -static -E/--dynamic-list When -static -E/--dynamic-list are passed to linker, linker may create executable with dynamic sections which aren't supported by run-time. We require --no-dynamic-linker together with -static -E/--dynamic-list before adding dynamic symbol table to static executable. bfd/ PR ld/19617 PR ld/21086 * elflink.c (elf_link_add_object_symbols): Require --no-dynamic-linker with -E/--dynamic-list when creating dynamic sections. ld/ PR ld/19617 PR ld/21086 * testsuite/ld-elf/pr19617a.d: Pass --no-dynamic-linker to ld. * testsuite/ld-elf/pr19617b.d: Likewise. * testsuite/ld-elf/pr19617c.d: Likewise. *testsuite/ld-i386/pr19636-4d.d: Likewise. * testsuite/ld-elf/readelf.exp: Pass --no-dynamic-linker to ld with --export-dynamic. * testsuite/ld-elf/shared.exp: Pass --no-dynamic-linker to ld with -E. Cherry-pick of 3c5fce9bc29b216af7d10f8d6e4d8c3f11a48359. Change-Id: Ia85dd5cd783d60a63164ae34ea096d73806b9987 --- bfd/ChangeLog.linaro | 12 +++++++++++- bfd/elflink.c | 1 + ld/ChangeLog.linaro | 11 +++++++++++ ld/testsuite/ld-elf/pr19617a.d | 2 +- ld/testsuite/ld-elf/pr19617b.d | 2 +- ld/testsuite/ld-elf/pr19617c.d | 2 +- ld/testsuite/ld-elf/pr21086.c | 8 ++++++++ ld/testsuite/ld-elf/pr21086.list | 3 +++ ld/testsuite/ld-i386/pr19636-4d.d | 2 +- 9 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 ld/ChangeLog.linaro create mode 100644 ld/testsuite/ld-elf/pr21086.c create mode 100644 ld/testsuite/ld-elf/pr21086.list diff --git a/bfd/ChangeLog.linaro b/bfd/ChangeLog.linaro index 56e1de759fc..c5d711785ff 100644 --- a/bfd/ChangeLog.linaro +++ b/bfd/ChangeLog.linaro @@ -1,3 +1,14 @@ +2017-04-27 Adhemerval Zanella + + Backport from mainline: + 2017-04-21 H.J. Lu + + PR ld/19617 + PR ld/21086 + * elflink.c (elf_link_add_object_symbols): Require + --no-dynamic-linker with -E/--dynamic-list when creating + dynamic sections. + 2016-09-15 Christophe Lyon Backport from mainline: @@ -5,4 +16,3 @@ * elf32-arm.c (elf32_arm_count_additional_relocs): Return zero if there is no arm data associated with the section. - diff --git a/bfd/elflink.c b/bfd/elflink.c index 3e249400f67..c6b69929c6f 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -3750,6 +3750,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) if (!just_syms && (bfd_link_pic (info) || (!bfd_link_relocatable (info) + && info->nointerp && (info->export_dynamic || info->dynamic))) && is_elf_hash_table (htab) && info->output_bfd->xvec == abfd->xvec diff --git a/ld/ChangeLog.linaro b/ld/ChangeLog.linaro new file mode 100644 index 00000000000..65f006df836 --- /dev/null +++ b/ld/ChangeLog.linaro @@ -0,0 +1,11 @@ +2017-04-27 Adhemerval Zanella + + Backport from mainline: + 2017-04-21 H.J. Lu + + PR ld/19617 + PR ld/21086 + * testsuite/ld-elf/pr19617a.d: Pass --no-dynamic-linker to ld. + * testsuite/ld-elf/pr19617b.d: Likewise. + * testsuite/ld-elf/pr19617c.d: Likewise. + *testsuite/ld-i386/pr19636-4d.d: Likewise. diff --git a/ld/testsuite/ld-elf/pr19617a.d b/ld/testsuite/ld-elf/pr19617a.d index 784aacb940b..132021fbb55 100644 --- a/ld/testsuite/ld-elf/pr19617a.d +++ b/ld/testsuite/ld-elf/pr19617a.d @@ -1,5 +1,5 @@ #source: pr19617.s -#ld: -E +#ld: -E --no-dynamic-linker #readelf : --dyn-syms --wide #target: *-*-linux* *-*-gnu* *-*-solaris* diff --git a/ld/testsuite/ld-elf/pr19617b.d b/ld/testsuite/ld-elf/pr19617b.d index e1dcb714383..4d1886f2bd6 100644 --- a/ld/testsuite/ld-elf/pr19617b.d +++ b/ld/testsuite/ld-elf/pr19617b.d @@ -1,5 +1,5 @@ #source: pr19617.s -#ld: --dynamic-list-data +#ld: --dynamic-list-data --no-dynamic-linker #readelf : --dyn-syms --wide #target: *-*-linux* *-*-gnu* *-*-solaris* diff --git a/ld/testsuite/ld-elf/pr19617c.d b/ld/testsuite/ld-elf/pr19617c.d index 00e2e7e2bbb..9ac8fc1941f 100644 --- a/ld/testsuite/ld-elf/pr19617c.d +++ b/ld/testsuite/ld-elf/pr19617c.d @@ -1,5 +1,5 @@ #source: pr19617.s -#ld: --dynamic-list-data +#ld: --dynamic-list-data --no-dynamic-linker #readelf : --dyn-syms --wide #target: *-*-linux* *-*-gnu* *-*-solaris* diff --git a/ld/testsuite/ld-elf/pr21086.c b/ld/testsuite/ld-elf/pr21086.c new file mode 100644 index 00000000000..8fb892c6aaa --- /dev/null +++ b/ld/testsuite/ld-elf/pr21086.c @@ -0,0 +1,8 @@ +#include + +int +main () +{ + printf ("PASS\n"); + return 0; +} diff --git a/ld/testsuite/ld-elf/pr21086.list b/ld/testsuite/ld-elf/pr21086.list new file mode 100644 index 00000000000..a4e712f3acf --- /dev/null +++ b/ld/testsuite/ld-elf/pr21086.list @@ -0,0 +1,3 @@ +{ + main; +}; diff --git a/ld/testsuite/ld-i386/pr19636-4d.d b/ld/testsuite/ld-i386/pr19636-4d.d index a9487f0be64..e3db6098929 100644 --- a/ld/testsuite/ld-i386/pr19636-4d.d +++ b/ld/testsuite/ld-i386/pr19636-4d.d @@ -1,6 +1,6 @@ #source: pr19636-4.s #as: --32 -#ld: -E --defsym foobar=0x100 -m elf_i386 +#ld: -E --defsym foobar=0x100 -m elf_i386 --no-dynamic-linker #readelf : --dyn-syms --wide Symbol table '\.dynsym' contains [0-9]+ entries: -- 2.47.2