mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 19:50:13 +08:00
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-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. ld/ * 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.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
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-05-01 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
2017-05-01 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
||||||
|
|
||||||
PR ld/21404
|
PR ld/21404
|
||||||
|
@ -17498,6 +17498,10 @@ elf32_arm_filter_implib_symbols (bfd *abfd ATTRIBUTE_UNUSED,
|
|||||||
{
|
{
|
||||||
struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (info);
|
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)
|
if (globals->cmse_implib)
|
||||||
return elf32_arm_filter_cmse_symbols (abfd, info, syms, symcount);
|
return elf32_arm_filter_cmse_symbols (abfd, info, syms, symcount);
|
||||||
else
|
else
|
||||||
|
@ -11277,10 +11277,11 @@ elf_output_implib (bfd *abfd, struct bfd_link_info *info)
|
|||||||
if (!bfd_set_format (implib_bfd, bfd_object))
|
if (!bfd_set_format (implib_bfd, bfd_object))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
/* Use flag from executable but make it a relocatable object. */
|
||||||
flags = bfd_get_file_flags (abfd);
|
flags = bfd_get_file_flags (abfd);
|
||||||
flags &= ~HAS_RELOC;
|
flags &= ~HAS_RELOC;
|
||||||
if (!bfd_set_start_address (implib_bfd, 0)
|
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;
|
return FALSE;
|
||||||
|
|
||||||
/* Copy architecture of output file to import library file. */
|
/* Copy architecture of output file to import library file. */
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
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-04-28 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
2017-04-28 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
||||||
|
|
||||||
PR ld/21404
|
PR ld/21404
|
||||||
|
@ -685,7 +685,8 @@ set armeabitests_nonacl {
|
|||||||
"--section-start .gnu.sgstubs=0x20000 --out-implib=tmpdir/cmse-implib.lib --cmse-implib" ""
|
"--section-start .gnu.sgstubs=0x20000 --out-implib=tmpdir/cmse-implib.lib --cmse-implib" ""
|
||||||
"-march=armv8-m.base -mthumb --defsym VER=1"
|
"-march=armv8-m.base -mthumb --defsym VER=1"
|
||||||
{cmse-implib.s}
|
{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"}
|
"cmse-implib"}
|
||||||
{"Input secure gateway import library"
|
{"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" ""
|
"--section-start .gnu.sgstubs=0x20000 --out-implib=tmpdir/cmse-new-implib.lib --in-implib=tmpdir/cmse-implib.lib --cmse-implib" ""
|
||||||
|
9
ld/testsuite/ld-arm/cmse-implib.type
Normal file
9
ld/testsuite/ld-arm/cmse-implib.type
Normal file
@ -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\)
|
||||||
|
#...
|
Reference in New Issue
Block a user