aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Preud'homme <thomas.preudhomme@arm.com>2017-06-20 11:21:49 +0100
committerThomas Preud'homme <thomas.preudhomme@arm.com>2017-06-20 11:23:24 +0100
commit01106f569a3acb935447a2a7b3ee7f6866c7ea6c (patch)
treec6a53a514997ce9224cf4731ead49eb70c3c24b7
parenta3e00a8704fee31d815aeb5983a881eed490969e (diff)
Make import libraries relocatable objects
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. 2017-06-20 Thomas Preud'homme <thomas.preudhomme@arm.com> Backport from mainline 2017-05-08 Thomas Preud'homme <thomas.preudhomme@arm.com> bfd/ * 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. gas/ * 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.
-rw-r--r--bfd/ChangeLog10
-rw-r--r--bfd/elf32-arm.c4
-rw-r--r--bfd/elflink.c3
-rw-r--r--gas/ChangeLog10
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp3
-rw-r--r--ld/testsuite/ld-arm/cmse-implib.type9
6 files changed, 37 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 7d7416941fd..cae30e6b20e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+2017-06-20 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ Backport from mainline
+ 2017-05-08 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.
+
2017-06-13 Nick Clifton <nickc@redhat.com>
Import this fix from the mainline sources:
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index cc8fd15cade..90286a84fa6 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -17500,6 +17500,10 @@ elf32_arm_filter_implib_symbols (bfd *abfd ATTRIBUTE_UNUSED,
{
struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (info);
+ /* Requirement 8 of "ARM v8-M Security Extensions: Requirements on
+ Development Tools" (ARM-ECM-0359818) mandates Secure Gateway import
+ library to be a relocatable object file. */
+ 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 cd03a137577..f82bd8202ba 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -11146,10 +11146,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/gas/ChangeLog b/gas/ChangeLog
index a05355a1484..e75237552bb 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,13 @@
+2017-06-20 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ Backport from mainline
+ 2017-05-08 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.
+
2017-06-05 Alan Modra <amodra@gmail.com>
Apply from master
diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index 1a4d262e608..2e193324907 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -685,7 +685,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 00000000000..7bb3bccc8e5
--- /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\)
+#...