Commit 18a20338 authored by Christophe Lyon's avatar Christophe Lyon Committed by Christophe Lyon

[ARM] Add FDPIC OSABI flag support.

ELF files targetting ARM FDPIC use the ELFOSABI_ARM_FDPIC flag.
Set it appropriately in file generators (eg. gas), and handle it in
readers (eg. readelf).

2018-04-25  Christophe Lyon  <christophe.lyon@st.com>
	Mickaël Guêné  <mickael.guene@st.com>

	bfd/
	* elf32-arm.c (elf32_arm_print_private_bfd_data): Support
	EF_ARM_PIC and ELFOSABI_ARM_FDPIC.
	(elf32_arm_post_process_headers): Support ELFOSABI_ARM_FDPIC.
	(ELF_OSABI): Define to ELFOSABI_ARM_FDPIC.

	binutils/
	* readelf.c (decode_ARM_machine_flags): Support EF_ARM_PIC.
	(get_osabi_name): Support ELFOSABI_ARM_FDPIC.

	gas/
	* config/tc-arm.c (arm_fdpic): New.
	(elf32_arm_target_format): Support FDPIC.
	(OPTION_FDPIC): New.
	(md_longopts): Support FDPIC.
	(md_parse_option): Likewise.
	(md_show_usage): Likewise.

	include/
	* elf/arm.h (EF_ARM_FDPIC): New.
parent 617a5ada
2018-04-25 Christophe Lyon <christophe.lyon@st.com>
Mickaël Guêné <mickael.guene@st.com>
* elf32-arm.c (elf32_arm_print_private_bfd_data): Support
EF_ARM_PIC and ELFOSABI_ARM_FDPIC.
(elf32_arm_post_process_headers): Support ELFOSABI_ARM_FDPIC.
(ELF_OSABI): Define to ELFOSABI_ARM_FDPIC.
2018-04-25 Christophe Lyon <christophe.lyon@st.com>
Mickaël Guêné <mickael.guene@st.com>
......
......@@ -14280,7 +14280,13 @@ elf32_arm_print_private_bfd_data (bfd *abfd, void * ptr)
if (flags & EF_ARM_RELEXEC)
fprintf (file, _(" [relocatable executable]"));
flags &= ~EF_ARM_RELEXEC;
if (flags & EF_ARM_PIC)
fprintf (file, _(" [position independent]"));
if (elf_elfheader (abfd)->e_ident[EI_OSABI] == ELFOSABI_ARM_FDPIC)
fprintf (file, _(" [FDPIC ABI supplement]"));
flags &= ~ (EF_ARM_RELEXEC | EF_ARM_PIC);
if (flags)
fprintf (file, _("<Unrecognised flag bits set>"));
......@@ -16642,6 +16648,9 @@ elf32_arm_post_process_headers (bfd * abfd, struct bfd_link_info * link_info ATT
globals = elf32_arm_hash_table (link_info);
if (globals != NULL && globals->byteswap_code)
i_ehdrp->e_flags |= EF_ARM_BE8;
if (globals->fdpic_p)
i_ehdrp->e_ident[EI_OSABI] |= ELFOSABI_ARM_FDPIC;
}
if (EF_ARM_EABI_VERSION (i_ehdrp->e_flags) == EF_ARM_EABI_VER5
......@@ -19427,6 +19436,8 @@ elf32_arm_nacl_plt_sym_val (bfd_vma i, const asection *plt,
#define TARGET_BIG_NAME "elf32-bigarm-fdpic"
#undef elf_match_priority
#define elf_match_priority 128
#undef ELF_OSABI
#define ELF_OSABI ELFOSABI_ARM_FDPIC
/* Like elf32_arm_link_hash_table_create -- but overrides
appropriately for FDPIC. */
......@@ -19454,6 +19465,7 @@ elf32_arm_fdpic_link_hash_table_create (bfd *abfd)
#include "elf32-target.h"
#undef elf_match_priority
#undef ELF_OSABI
/* VxWorks Targets. */
......
2018-04-25 Christophe Lyon <christophe.lyon@st.com>
Mickaël Guêné <mickael.guene@st.com>
* readelf.c (decode_ARM_machine_flags): Support EF_ARM_PIC.
(get_osabi_name): Support ELFOSABI_ARM_FDPIC.
2018-04-25 Alan Modra <amodra@gmail.com>
* testsuite/binutils-all/arm/objdump.exp: Remove arm-aout and
......
......@@ -2578,6 +2578,12 @@ decode_ARM_machine_flags (unsigned e_flags, char buf[])
e_flags &= ~ EF_ARM_RELEXEC;
}
if (e_flags & EF_ARM_PIC)
{
strcat (buf, ", position independent");
e_flags &= ~ EF_ARM_PIC;
}
/* Now handle EABI specific flags. */
switch (eabi)
{
......@@ -3718,6 +3724,7 @@ get_osabi_name (Filedata * filedata, unsigned int osabi)
switch (osabi)
{
case ELFOSABI_ARM: return "ARM";
case ELFOSABI_ARM_FDPIC: return "ARM FDPIC";
default:
break;
}
......
2018-04-25 Christophe Lyon <christophe.lyon@st.com>
Mickaël Guêné <mickael.guene@st.com>
* config/tc-arm.c (arm_fdpic): New.
(elf32_arm_target_format): Support FDPIC.
(OPTION_FDPIC): New.
(md_longopts): Support FDPIC.
(md_parse_option): Likewise.
(md_show_usage): Likewise.
2018-04-25 Tamar Christina <tamar.christina@arm.com>
* testsuite/gas/aarch64/rdma.s: Test for larger register numbers.
......
......@@ -75,6 +75,9 @@ static struct
unsigned sp_restored:1;
} unwind;
/* Whether --fdpic was given. */
static int arm_fdpic;
#endif /* OBJ_ELF */
/* Results from operand parsing worker functions. */
......@@ -25079,10 +25082,20 @@ elf32_arm_target_format (void)
? "elf32-bigarm-nacl"
: "elf32-littlearm-nacl");
#else
if (target_big_endian)
return "elf32-bigarm";
if (arm_fdpic)
{
if (target_big_endian)
return "elf32-bigarm-fdpic";
else
return "elf32-littlearm-fdpic";
}
else
return "elf32-littlearm";
{
if (target_big_endian)
return "elf32-bigarm";
else
return "elf32-littlearm";
}
#endif
}
......@@ -25602,6 +25615,7 @@ const char * md_shortopts = "m:k";
#endif
#endif
#define OPTION_FIX_V4BX (OPTION_MD_BASE + 2)
#define OPTION_FDPIC (OPTION_MD_BASE + 3)
struct option md_longopts[] =
{
......@@ -25612,6 +25626,9 @@ struct option md_longopts[] =
{"EL", no_argument, NULL, OPTION_EL},
#endif
{"fix-v4bx", no_argument, NULL, OPTION_FIX_V4BX},
#ifdef OBJ_ELF
{"fdpic", no_argument, NULL, OPTION_FDPIC},
#endif
{NULL, no_argument, NULL, 0}
};
......@@ -26783,6 +26800,12 @@ md_parse_option (int c, const char * arg)
fix_v4bx = TRUE;
break;
#ifdef OBJ_ELF
case OPTION_FDPIC:
arm_fdpic = TRUE;
break;
#endif /* OBJ_ELF */
case 'a':
/* Listing option. Just ignore these, we don't support additional
ones. */
......@@ -26877,6 +26900,11 @@ md_show_usage (FILE * fp)
fprintf (fp, _("\
--fix-v4bx Allow BX in ARMv4 code\n"));
#ifdef OBJ_ELF
fprintf (fp, _("\
--fdpic generate an FDPIC object file\n"));
#endif /* OBJ_ELF */
}
#ifdef OBJ_ELF
......
2018-04-25 Christophe Lyon <christophe.lyon@st.com>
Mickaël Guêné <mickael.guene@st.com>
* elf/arm.h (EF_ARM_FDPIC): New.
2018-04-18 Alan Modra <amodra@gmail.com>
* coff/mipspe.h: Delete.
......
......@@ -78,6 +78,7 @@
#define ELFOSABI_C6000_ELFABI 64 /* Bare-metal TMS320C6000 */
#define ELFOSABI_C6000_LINUX 65 /* Linux TMS320C6000 */
#define ELFOSABI_ARM_FDPIC 65 /* ARM FDPIC */
#define ELFOSABI_ARM 97 /* ARM */
#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment