123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
- index bd4b576..41803c2 100644
- --- a/bfd/elf32-arm.c
- +++ b/bfd/elf32-arm.c
- -13786,7 +13786,7 elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c
- index 49ef360..8346d57 100644
- --- a/bfd/elf32-bfin.c
- +++ b/bfd/elf32-bfin.c
- -4257,7 +4257,7 elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd,
- if (htab->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c
- index 3031173..5b40524 100644
- --- a/bfd/elf32-cris.c
- +++ b/bfd/elf32-cris.c
- -3764,7 +3764,7 elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c
- index b55a7ab..ef72c23 100644
- --- a/bfd/elf32-frv.c
- +++ b/bfd/elf32-frv.c
- -5444,7 +5444,7 elf32_frvfdpic_size_dynamic_sections (bfd *output_bfd,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
- index 41bf5c5..62c7cf6 100644
- --- a/bfd/elf32-hppa.c
- +++ b/bfd/elf32-hppa.c
- -2215,7 +2215,7 elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- if (htab->etab.dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- sec = bfd_get_linker_section (dynobj, ".interp");
- if (sec == NULL)
- diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c
- index 7fba4d1..458f694 100644
- --- a/bfd/elf32-i370.c
- +++ b/bfd/elf32-i370.c
- -594,7 +594,7 i370_elf_size_dynamic_sections (bfd *output_bfd,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
- index 7642d0f..b0844c8 100644
- --- a/bfd/elf32-i386.c
- +++ b/bfd/elf32-i386.c
- -2834,7 +2834,7 elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
- if (htab->elf.dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- if (s == NULL)
- diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c
- index 155d079..a2e3c7c 100644
- --- a/bfd/elf32-m32r.c
- +++ b/bfd/elf32-m32r.c
- -2170,7 +2170,7 m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- if (htab->root.dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c
- index 10d2fcb..489f3f1 100644
- --- a/bfd/elf32-m68k.c
- +++ b/bfd/elf32-m68k.c
- -3257,7 +3257,7 elf_m68k_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
- index 8415f1e..5597051 100644
- --- a/bfd/elf32-ppc.c
- +++ b/bfd/elf32-ppc.c
- -6191,7 +6191,7 ppc_elf_size_dynamic_sections (bfd *output_bfd,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (htab->elf.dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c
- index de37ca4..a1e628c 100644
- --- a/bfd/elf32-s390.c
- +++ b/bfd/elf32-s390.c
- -2039,7 +2039,7 elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- if (htab->elf.dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- if (s == NULL)
- diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c
- index 012ee4e..a51453f 100644
- --- a/bfd/elf32-sh.c
- +++ b/bfd/elf32-sh.c
- -3349,7 +3349,7 sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- if (htab->root.dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c
- index 6089e8c..893ea8d 100644
- --- a/bfd/elf32-vax.c
- +++ b/bfd/elf32-vax.c
- -1124,7 +1124,7 elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c
- index 73538cd..37ea5da 100644
- --- a/bfd/elf32-xtensa.c
- +++ b/bfd/elf32-xtensa.c
- -1637,7 +1637,7 elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- && htab->sgotloc != NULL);
-
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- if (s == NULL)
- diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
- index f67b0af..1973cd0 100644
- --- a/bfd/elf64-alpha.c
- +++ b/bfd/elf64-alpha.c
- -2877,7 +2877,7 elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c
- index 6f40b88..3b628b4 100644
- --- a/bfd/elf64-hppa.c
- +++ b/bfd/elf64-hppa.c
- -1558,7 +1558,7 elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- sec = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (sec != NULL);
- diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
- index 8cff990..851845f 100644
- --- a/bfd/elf64-ppc.c
- +++ b/bfd/elf64-ppc.c
- -9748,7 +9748,7 ppc64_elf_size_dynamic_sections (bfd *output_bfd,
- if (htab->elf.dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- if (s == NULL)
- diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
- index 2e505f3..406bb66 100644
- --- a/bfd/elf64-s390.c
- +++ b/bfd/elf64-s390.c
- -1989,7 +1989,7 elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- if (htab->elf.dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- if (s == NULL)
- diff --git a/bfd/elf64-sh64.c b/bfd/elf64-sh64.c
- index e460895..d920598 100644
- --- a/bfd/elf64-sh64.c
- +++ b/bfd/elf64-sh64.c
- -3404,7 +3404,7 sh64_elf64_size_dynamic_sections (bfd *output_bfd,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
- index f15d33e..870aadf 100644
- --- a/bfd/elf64-x86-64.c
- +++ b/bfd/elf64-x86-64.c
- -3181,7 +3181,7 elf_x86_64_size_dynamic_sections (bfd *output_bfd,
- if (htab->elf.dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- if (s == NULL)
- diff --git a/bfd/elflink.c b/bfd/elflink.c
- index 7f04271..5b3438d 100644
- --- a/bfd/elflink.c
- +++ b/bfd/elflink.c
- -246,7 +246,7 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
-
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_make_section_anyway_with_flags (abfd, ".interp",
- flags | SEC_READONLY);
- -5763,7 +5763,7 bfd_elf_size_dynamic_sections (bfd *output_bfd,
- bfd_boolean all_defined;
-
- *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
- - BFD_ASSERT (*sinterpptr != NULL || !info->executable);
- + BFD_ASSERT (*sinterpptr != NULL || !info->executable || info->nointerp);
-
- if (soname != NULL)
- {
- diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
- index be1e59a..329dec3 100644
- --- a/bfd/elfxx-mips.c
- +++ b/bfd/elfxx-mips.c
- -9579,7 +9579,7 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c
- index 9bb71a9..db0d4f1 100644
- --- a/bfd/elfxx-sparc.c
- +++ b/bfd/elfxx-sparc.c
- -2559,7 +2559,7 _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
- if (elf_hash_table (info)->dynamic_sections_created)
- {
-
- - if (info->executable)
- + if (info->executable && !info->nointerp)
- {
- s = bfd_get_linker_section (dynobj, ".interp");
- BFD_ASSERT (s != NULL);
- diff --git a/include/bfdlink.h b/include/bfdlink.h
- index 797a465..cf533dd 100644
- --- a/include/bfdlink.h
- +++ b/include/bfdlink.h
- -433,6 +433,9 struct bfd_link_info
-
- unsigned int bndplt: 1;
-
- +
- + unsigned int nointerp: 1;
- +
-
- diff --git a/ld/ld.texinfo b/ld/ld.texinfo
- index cf3b586..1e5e5cf 100644
- --- a/ld/ld.texinfo
- +++ b/ld/ld.texinfo
- -1426,6 +1426,13 generating dynamically linked ELF executables. The default dynamic
- linker is normally correct; don't use this unless you know what you are
- doing.
-
- +
- item --no-dynamic-linker
- +When producing an executable file, omit the request for a dynamic
- +linker to be used at load-time. This is only meaningful for ELF
- +executables that contain dynamic relocations, and usually requires
- +entry point code that is capable of processing these relocations.
- +
-
- kindex --no-fatal-warnings
-
|