mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 18:08:24 +08:00
aarch64: add STO_AARCH64_VARIANT_PCS and DT_AARCH64_VARIANT_PCS
The bottom 2 bits of st_other are used for visibility, the top 6 bits are de facto reserved for processor specific use. This patch defines a bits to mark function symbols that follow a variant procedure call standard with different register usage convention. A dynamic tag is also defined that marks modules with R_<CLS>_JUMP_SLOT relocations referencing symbols marked with STO_AARCH64_VARIANT_PCS. This can be used by dynamic linkers that support lazy binding to decide what registers need to be preserved during symbol resolution. binutils/ChangeLog: * readelf.c (get_aarch64_dynamic_type): Handle DT_AARCH64_VARIANT_PCS. (get_aarch64_symbol_other): New, handles STO_AARCH64_VARIANT_PCS. (get_symbol_other): Call get_aarch64_symbol_other. include/ChangeLog: * elf/aarch64.h (DT_AARCH64_VARIANT_PCS): Define. (STO_AARCH64_VARIANT_PCS): Define.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2019-05-24 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
|
* readelf.c (get_aarch64_dynamic_type): Handle DT_AARCH64_VARIANT_PCS.
|
||||||
|
(get_aarch64_symbol_other): New, handles STO_AARCH64_VARIANT_PCS.
|
||||||
|
(get_symbol_other): Call get_aarch64_symbol_other.
|
||||||
|
|
||||||
2019-05-24 Alan Modra <amodra@gmail.com>
|
2019-05-24 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* objdump.c (disassemble_bytes): Set WIDE_OUTPUT in flags.
|
* objdump.c (disassemble_bytes): Set WIDE_OUTPUT in flags.
|
||||||
|
@ -1810,6 +1810,7 @@ get_aarch64_dynamic_type (unsigned long type)
|
|||||||
{
|
{
|
||||||
case DT_AARCH64_BTI_PLT: return "AARCH64_BTI_PLT";
|
case DT_AARCH64_BTI_PLT: return "AARCH64_BTI_PLT";
|
||||||
case DT_AARCH64_PAC_PLT: return "AARCH64_PAC_PLT";
|
case DT_AARCH64_PAC_PLT: return "AARCH64_PAC_PLT";
|
||||||
|
case DT_AARCH64_VARIANT_PCS: return "AARCH64_VARIANT_PCS";
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -11101,6 +11102,22 @@ get_solaris_symbol_visibility (unsigned int visibility)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
get_aarch64_symbol_other (unsigned int other)
|
||||||
|
{
|
||||||
|
static char buf[32];
|
||||||
|
|
||||||
|
if (other & STO_AARCH64_VARIANT_PCS)
|
||||||
|
{
|
||||||
|
other &= ~STO_AARCH64_VARIANT_PCS;
|
||||||
|
if (other == 0)
|
||||||
|
return "VARIANT_PCS";
|
||||||
|
snprintf (buf, sizeof buf, "VARIANT_PCS | %x", other);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
get_mips_symbol_other (unsigned int other)
|
get_mips_symbol_other (unsigned int other)
|
||||||
{
|
{
|
||||||
@ -11212,6 +11229,9 @@ get_symbol_other (Filedata * filedata, unsigned int other)
|
|||||||
|
|
||||||
switch (filedata->file_header.e_machine)
|
switch (filedata->file_header.e_machine)
|
||||||
{
|
{
|
||||||
|
case EM_AARCH64:
|
||||||
|
result = get_aarch64_symbol_other (other);
|
||||||
|
break;
|
||||||
case EM_MIPS:
|
case EM_MIPS:
|
||||||
result = get_mips_symbol_other (other);
|
result = get_mips_symbol_other (other);
|
||||||
break;
|
break;
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2019-05-24 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
|
* elf/aarch64.h (DT_AARCH64_VARIANT_PCS): Define.
|
||||||
|
(STO_AARCH64_VARIANT_PCS): Define.
|
||||||
|
|
||||||
2019-05-24 Alan Modra <amodra@gmail.com>
|
2019-05-24 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* elf/ppc64.h (R_PPC64_PLTSEQ_NOTOC, R_PPC64_PLTCALL_NOTOC),
|
* elf/ppc64.h (R_PPC64_PLTSEQ_NOTOC, R_PPC64_PLTCALL_NOTOC),
|
||||||
|
@ -38,6 +38,11 @@
|
|||||||
/* Processor specific dynamic array tags. */
|
/* Processor specific dynamic array tags. */
|
||||||
#define DT_AARCH64_BTI_PLT (DT_LOPROC + 1)
|
#define DT_AARCH64_BTI_PLT (DT_LOPROC + 1)
|
||||||
#define DT_AARCH64_PAC_PLT (DT_LOPROC + 3)
|
#define DT_AARCH64_PAC_PLT (DT_LOPROC + 3)
|
||||||
|
#define DT_AARCH64_VARIANT_PCS (DT_LOPROC + 5)
|
||||||
|
|
||||||
|
/* AArch64-specific values for st_other. */
|
||||||
|
#define STO_AARCH64_VARIANT_PCS 0x80 /* Symbol may follow different call
|
||||||
|
convention from the base PCS. */
|
||||||
|
|
||||||
/* Relocation types. */
|
/* Relocation types. */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user