This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH, LD] Make import libraries relocatable objects
- From: Thomas Preudhomme <thomas dot preudhomme at foss dot arm dot com>
- To: Richard Earnshaw <richard dot earnshaw at arm dot com>, Nick Clifton <nickc at redhat dot com>, Alan Modra <amodra at gmail dot com>, binutils at sourceware dot org
- Date: Thu, 27 Apr 2017 11:41:06 +0100
- Subject: [PATCH, LD] Make import libraries relocatable objects
- Authentication-results: sourceware.org; auth=none
Hi,
For ELF targets --out-implib currently generates an executable file
(e_type is ET_EXEC) despite the file being expected to be linked against
some other object file to make an executable later. It seems therefore
more sensible to make the import library a relocatable object file
(e_type set to ET_REL).
Incidentally, as dicted by requirement 8 of
"ARM v8-M Security Extensions: Requirements on Development Tools"
(document ARM-ECM-0359818) version 1.0, import libraries generated when
using --cmse-implib *must* be relocatable object file so this commit
also adds an assert there in case the type of ELF import library is
changed again in the future.
ChangeLog entry is as follows:
*** bfd/ChangeLog ***
2017-04-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
* elflink.c (elf_output_implib): Remove executable flag from import
library bfd.
* elf32-arm.c (elf32_arm_filter_implib_symbols): Assert that the import
library is a relocatable object file.
*** ld/ChangeLog ***
2017-04-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
* testsuite/ld-arm/arm-elf.exp
(Secure gateway import library generation): Check e_type field
of import library and executable produced.
* testsuite/ld-arm/cmse-implib.type: Expectations for e_type field.
Testing: testsuite shows no regression when run for arm-none-eabi and
armeb-none-eabi.
Is this ok for master?
Best regards,
Thomas
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\)
+#...