diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index bc245f89d9f41a2e8d263b4c76a0123afdf61325..967b3b231ac18cbd865a668b5333b9e08a8400f4 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -17509,6 +17509,7 @@ elf32_arm_filter_implib_symbols (bfd *abfd ATTRIBUTE_UNUSED, { struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (info); + BFD_ASSERT (!(bfd_get_file_flags (info->out_implib_bfd) & EXEC_P)); if (globals->cmse_implib) return elf32_arm_filter_cmse_symbols (abfd, info, syms, symcount); else diff --git a/bfd/elflink.c b/bfd/elflink.c index 776357fe68521ba11a7f443f48e3b93409ae2dc4..2dd61d106c068cf49f5723bc6c690c647c8f57dd 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -11206,10 +11206,11 @@ elf_output_implib (bfd *abfd, struct bfd_link_info *info) if (!bfd_set_format (implib_bfd, bfd_object)) return FALSE; + /* Use flag from executable but make it a relocatable object. */ flags = bfd_get_file_flags (abfd); flags &= ~HAS_RELOC; if (!bfd_set_start_address (implib_bfd, 0) - || !bfd_set_file_flags (implib_bfd, flags)) + || !bfd_set_file_flags (implib_bfd, flags & ~EXEC_P)) return FALSE; /* Copy architecture of output file to import library file. */ diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index 36b58591facabe839a4209aed65deee97e46c3ab..b15316c2176198c70cea9900fce5999f4ab23ea9 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -691,7 +691,8 @@ set armeabitests_nonacl { "--section-start .gnu.sgstubs=0x20000 --out-implib=tmpdir/cmse-implib.lib --cmse-implib" "" "-march=armv8-m.base -mthumb --defsym VER=1" {cmse-implib.s} - {{readelf {-s tmpdir/cmse-implib.lib} cmse-implib.rd}} + {{readelf {-s tmpdir/cmse-implib.lib} cmse-implib.rd} + {readelf {-h tmpdir/cmse-implib.lib} cmse-implib.type}} "cmse-implib"} {"Input secure gateway import library" "--section-start .gnu.sgstubs=0x20000 --out-implib=tmpdir/cmse-new-implib.lib --in-implib=tmpdir/cmse-implib.lib --cmse-implib" "" diff --git a/ld/testsuite/ld-arm/cmse-implib.type b/ld/testsuite/ld-arm/cmse-implib.type new file mode 100644 index 0000000000000000000000000000000000000000..7bb3bccc8e5d0ee99a0b9a2674296673b1c3c349 --- /dev/null +++ b/ld/testsuite/ld-arm/cmse-implib.type @@ -0,0 +1,9 @@ +#... +File: tmpdir/cmse-implib.lib +#... +[[:space:]]+Type:[[:space:]]+REL \(Relocatable file\) +#... +File: tmpdir/cmse-implib +#... +[[:space:]]+Type:[[:space:]]+EXEC \(Executable file\) +#...