Add support for 64-bit ARM architecture: AArch64
This commit is contained in:
parent
f47f77df4e
commit
a06ea96464
307 changed files with 68333 additions and 39 deletions
|
@ -91,6 +91,7 @@
|
|||
|
||||
#define RELOC_MACROS_GEN_FUNC
|
||||
|
||||
#include "elf/aarch64.h"
|
||||
#include "elf/alpha.h"
|
||||
#include "elf/arc.h"
|
||||
#include "elf/arm.h"
|
||||
|
@ -551,6 +552,7 @@ guess_is_rela (unsigned int e_machine)
|
|||
/* Targets that use RELA relocations. */
|
||||
case EM_68K:
|
||||
case EM_860:
|
||||
case EM_AARCH64:
|
||||
case EM_ADAPTEVA_EPIPHANY:
|
||||
case EM_ALPHA:
|
||||
case EM_ALTERA_NIOS2:
|
||||
|
@ -983,6 +985,10 @@ dump_relocations (FILE * file,
|
|||
rtype = NULL;
|
||||
break;
|
||||
|
||||
case EM_AARCH64:
|
||||
rtype = elf_aarch64_reloc_type (type);
|
||||
break;
|
||||
|
||||
case EM_M32R:
|
||||
case EM_CYGNUS_M32R:
|
||||
rtype = elf_m32r_reloc_type (type);
|
||||
|
@ -1830,6 +1836,7 @@ get_machine_name (unsigned e_machine)
|
|||
switch (e_machine)
|
||||
{
|
||||
case EM_NONE: return _("None");
|
||||
case EM_AARCH64: return "AArch64";
|
||||
case EM_M32: return "WE32100";
|
||||
case EM_SPARC: return "Sparc";
|
||||
case EM_SPU: return "SPU";
|
||||
|
@ -2694,6 +2701,20 @@ get_osabi_name (unsigned int osabi)
|
|||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_aarch64_segment_type (unsigned long type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case PT_AARCH64_ARCHEXT:
|
||||
return "AARCH64_ARCHEXT";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_arm_segment_type (unsigned long type)
|
||||
{
|
||||
|
@ -2816,6 +2837,9 @@ get_segment_type (unsigned long p_type)
|
|||
|
||||
switch (elf_header.e_machine)
|
||||
{
|
||||
case EM_AARCH64:
|
||||
result = get_aarch64_segment_type (p_type);
|
||||
break;
|
||||
case EM_ARM:
|
||||
result = get_arm_segment_type (p_type);
|
||||
break;
|
||||
|
@ -2976,6 +3000,19 @@ get_x86_64_section_type_name (unsigned int sh_type)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_aarch64_section_type_name (unsigned int sh_type)
|
||||
{
|
||||
switch (sh_type)
|
||||
{
|
||||
case SHT_AARCH64_ATTRIBUTES:
|
||||
return "AARCH64_ATTRIBUTES";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_arm_section_type_name (unsigned int sh_type)
|
||||
{
|
||||
|
@ -3075,6 +3112,9 @@ get_section_type_name (unsigned int sh_type)
|
|||
case EM_K1OM:
|
||||
result = get_x86_64_section_type_name (sh_type);
|
||||
break;
|
||||
case EM_AARCH64:
|
||||
result = get_aarch64_section_type_name (sh_type);
|
||||
break;
|
||||
case EM_ARM:
|
||||
result = get_arm_section_type_name (sh_type);
|
||||
break;
|
||||
|
@ -9770,6 +9810,8 @@ is_32bit_abs_reloc (unsigned int reloc_type)
|
|||
return reloc_type == 1; /* R_860_32. */
|
||||
case EM_960:
|
||||
return reloc_type == 2; /* R_960_32. */
|
||||
case EM_AARCH64:
|
||||
return reloc_type == 258; /* R_AARCH64_ABS32 */
|
||||
case EM_ALPHA:
|
||||
return reloc_type == 1; /* R_ALPHA_REFLONG. */
|
||||
case EM_ARC:
|
||||
|
@ -9924,6 +9966,8 @@ is_32bit_pcrel_reloc (unsigned int reloc_type)
|
|||
return reloc_type == 2; /* R_386_PC32. */
|
||||
case EM_68K:
|
||||
return reloc_type == 4; /* R_68K_PC32. */
|
||||
case EM_AARCH64:
|
||||
return reloc_type == 261; /* R_AARCH64_PREL32 */
|
||||
case EM_ADAPTEVA_EPIPHANY:
|
||||
return reloc_type == 6;
|
||||
case EM_ALPHA:
|
||||
|
@ -9978,6 +10022,8 @@ is_64bit_abs_reloc (unsigned int reloc_type)
|
|||
{
|
||||
switch (elf_header.e_machine)
|
||||
{
|
||||
case EM_AARCH64:
|
||||
return reloc_type == 257; /* R_AARCH64_ABS64. */
|
||||
case EM_ALPHA:
|
||||
return reloc_type == 2; /* R_ALPHA_REFQUAD. */
|
||||
case EM_IA_64:
|
||||
|
@ -10014,6 +10060,8 @@ is_64bit_pcrel_reloc (unsigned int reloc_type)
|
|||
{
|
||||
switch (elf_header.e_machine)
|
||||
{
|
||||
case EM_AARCH64:
|
||||
return reloc_type == 260; /* R_AARCH64_PREL64. */
|
||||
case EM_ALPHA:
|
||||
return reloc_type == 11; /* R_ALPHA_SREL64. */
|
||||
case EM_IA_64:
|
||||
|
@ -10143,6 +10191,8 @@ is_none_reloc (unsigned int reloc_type)
|
|||
case EM_XC16X:
|
||||
case EM_C166: /* R_XC16X_NONE. */
|
||||
return reloc_type == 0;
|
||||
case EM_AARCH64:
|
||||
return reloc_type == 0 || reloc_type == 256;
|
||||
case EM_XTENSA_OLD:
|
||||
case EM_XTENSA:
|
||||
return (reloc_type == 0 /* R_XTENSA_NONE. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue