mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
Add relocation types for Hexagon processor; patch by Sidney Manning <sidneym@codeaurora.org>
llvm-svn: 159081
This commit is contained in:
parent
bdb7ec3dc8
commit
b34fa3efd3
@ -1414,6 +1414,98 @@ error_code ELFObjectFile<target_endianness, is64Bits>
|
||||
res = "Unknown";
|
||||
}
|
||||
break;
|
||||
case ELF::EM_HEXAGON:
|
||||
switch (type) {
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_NONE);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B22_PCREL);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B15_PCREL);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B7_PCREL);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_LO16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_HI16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_32);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_8);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GPREL16_0);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GPREL16_1);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GPREL16_2);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GPREL16_3);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_HL16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B13_PCREL);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B9_PCREL);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B32_PCREL_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_32_6_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B22_PCREL_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B15_PCREL_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B13_PCREL_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B9_PCREL_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_B7_PCREL_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_16_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_12_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_11_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_10_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_9_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_8_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_7_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_6_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_32_PCREL);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_COPY);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GLOB_DAT);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_JMP_SLOT);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_RELATIVE);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_PLT_B22_PCREL);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOTREL_LO16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOTREL_HI16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOTREL_32);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOT_LO16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOT_HI16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOT_32);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOT_16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_DTPMOD_32);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_DTPREL_LO16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_DTPREL_HI16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_DTPREL_32);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_DTPREL_16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GD_PLT_B22_PCREL);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GD_GOT_LO16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GD_GOT_HI16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GD_GOT_32);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GD_GOT_16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_LO16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_HI16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_32);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_GOT_LO16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_GOT_HI16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_GOT_32);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_GOT_16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_TPREL_LO16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_TPREL_HI16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_TPREL_32);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_TPREL_16);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_6_PCREL_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOTREL_32_6_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOTREL_16_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOTREL_11_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOT_32_6_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOT_16_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GOT_11_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_DTPREL_32_6_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_DTPREL_16_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_DTPREL_11_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GD_GOT_32_6_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GD_GOT_16_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_GD_GOT_11_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_32_6_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_16_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_GOT_32_6_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_GOT_16_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_IE_GOT_11_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_TPREL_32_6_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_TPREL_16_X);
|
||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_HEX_TPREL_11_X);
|
||||
default:
|
||||
res = "Unknown";
|
||||
}
|
||||
break;
|
||||
default:
|
||||
res = "Unknown";
|
||||
}
|
||||
@ -1489,6 +1581,9 @@ error_code ELFObjectFile<target_endianness, is64Bits>
|
||||
res = "Unknown";
|
||||
}
|
||||
break;
|
||||
case ELF::EM_HEXAGON:
|
||||
res = symname;
|
||||
break;
|
||||
default:
|
||||
res = "Unknown";
|
||||
}
|
||||
@ -1888,6 +1983,8 @@ StringRef ELFObjectFile<target_endianness, is64Bits>
|
||||
return "ELF32-x86-64";
|
||||
case ELF::EM_ARM:
|
||||
return "ELF32-arm";
|
||||
case ELF::EM_HEXAGON:
|
||||
return "ELF32-hexagon";
|
||||
default:
|
||||
return "ELF32-unknown";
|
||||
}
|
||||
@ -1915,6 +2012,8 @@ unsigned ELFObjectFile<target_endianness, is64Bits>::getArch() const {
|
||||
return Triple::x86_64;
|
||||
case ELF::EM_ARM:
|
||||
return Triple::arm;
|
||||
case ELF::EM_HEXAGON:
|
||||
return Triple::hexagon;
|
||||
default:
|
||||
return Triple::UnknownArch;
|
||||
}
|
||||
|
@ -674,6 +674,97 @@ enum {
|
||||
R_MIPS_NUM = 218
|
||||
};
|
||||
|
||||
// ELF Relocation types for Hexagon
|
||||
// Release 5 ABI - Document: 80-V9418-3 Rev. J
|
||||
enum {
|
||||
R_HEX_NONE = 0,
|
||||
R_HEX_B22_PCREL = 1,
|
||||
R_HEX_B15_PCREL = 2,
|
||||
R_HEX_B7_PCREL = 3,
|
||||
R_HEX_LO16 = 4,
|
||||
R_HEX_HI16 = 5,
|
||||
R_HEX_32 = 6,
|
||||
R_HEX_16 = 7,
|
||||
R_HEX_8 = 8,
|
||||
R_HEX_GPREL16_0 = 9,
|
||||
R_HEX_GPREL16_1 = 10,
|
||||
R_HEX_GPREL16_2 = 11,
|
||||
R_HEX_GPREL16_3 = 12,
|
||||
R_HEX_HL16 = 13,
|
||||
R_HEX_B13_PCREL = 14,
|
||||
R_HEX_B9_PCREL = 15,
|
||||
R_HEX_B32_PCREL_X = 16,
|
||||
R_HEX_32_6_X = 17,
|
||||
R_HEX_B22_PCREL_X = 18,
|
||||
R_HEX_B15_PCREL_X = 19,
|
||||
R_HEX_B13_PCREL_X = 20,
|
||||
R_HEX_B9_PCREL_X = 21,
|
||||
R_HEX_B7_PCREL_X = 22,
|
||||
R_HEX_16_X = 23,
|
||||
R_HEX_12_X = 24,
|
||||
R_HEX_11_X = 25,
|
||||
R_HEX_10_X = 26,
|
||||
R_HEX_9_X = 27,
|
||||
R_HEX_8_X = 28,
|
||||
R_HEX_7_X = 29,
|
||||
R_HEX_6_X = 30,
|
||||
R_HEX_32_PCREL = 31,
|
||||
R_HEX_COPY = 32,
|
||||
R_HEX_GLOB_DAT = 33,
|
||||
R_HEX_JMP_SLOT = 34,
|
||||
R_HEX_RELATIVE = 35,
|
||||
R_HEX_PLT_B22_PCREL = 36,
|
||||
R_HEX_GOTREL_LO16 = 37,
|
||||
R_HEX_GOTREL_HI16 = 38,
|
||||
R_HEX_GOTREL_32 = 39,
|
||||
R_HEX_GOT_LO16 = 40,
|
||||
R_HEX_GOT_HI16 = 41,
|
||||
R_HEX_GOT_32 = 42,
|
||||
R_HEX_GOT_16 = 43,
|
||||
R_HEX_DTPMOD_32 = 44,
|
||||
R_HEX_DTPREL_LO16 = 45,
|
||||
R_HEX_DTPREL_HI16 = 46,
|
||||
R_HEX_DTPREL_32 = 47,
|
||||
R_HEX_DTPREL_16 = 48,
|
||||
R_HEX_GD_PLT_B22_PCREL = 49,
|
||||
R_HEX_GD_GOT_LO16 = 50,
|
||||
R_HEX_GD_GOT_HI16 = 51,
|
||||
R_HEX_GD_GOT_32 = 52,
|
||||
R_HEX_GD_GOT_16 = 53,
|
||||
R_HEX_IE_LO16 = 54,
|
||||
R_HEX_IE_HI16 = 55,
|
||||
R_HEX_IE_32 = 56,
|
||||
R_HEX_IE_GOT_LO16 = 57,
|
||||
R_HEX_IE_GOT_HI16 = 58,
|
||||
R_HEX_IE_GOT_32 = 59,
|
||||
R_HEX_IE_GOT_16 = 60,
|
||||
R_HEX_TPREL_LO16 = 61,
|
||||
R_HEX_TPREL_HI16 = 62,
|
||||
R_HEX_TPREL_32 = 63,
|
||||
R_HEX_TPREL_16 = 64,
|
||||
R_HEX_6_PCREL_X = 65,
|
||||
R_HEX_GOTREL_32_6_X = 66,
|
||||
R_HEX_GOTREL_16_X = 67,
|
||||
R_HEX_GOTREL_11_X = 68,
|
||||
R_HEX_GOT_32_6_X = 69,
|
||||
R_HEX_GOT_16_X = 70,
|
||||
R_HEX_GOT_11_X = 71,
|
||||
R_HEX_DTPREL_32_6_X = 72,
|
||||
R_HEX_DTPREL_16_X = 73,
|
||||
R_HEX_DTPREL_11_X = 74,
|
||||
R_HEX_GD_GOT_32_6_X = 75,
|
||||
R_HEX_GD_GOT_16_X = 76,
|
||||
R_HEX_GD_GOT_11_X = 77,
|
||||
R_HEX_IE_32_6_X = 78,
|
||||
R_HEX_IE_16_X = 79,
|
||||
R_HEX_IE_GOT_32_6_X = 80,
|
||||
R_HEX_IE_GOT_16_X = 81,
|
||||
R_HEX_IE_GOT_11_X = 82,
|
||||
R_HEX_TPREL_32_6_X = 83,
|
||||
R_HEX_TPREL_16_X = 84,
|
||||
R_HEX_TPREL_11_X = 85
|
||||
};
|
||||
|
||||
// Section header.
|
||||
struct Elf32_Shdr {
|
||||
Elf32_Word sh_name; // Section name (index into string table)
|
||||
|
BIN
test/Object/Inputs/trivial-object-test.elf-hexagon
Normal file
BIN
test/Object/Inputs/trivial-object-test.elf-hexagon
Normal file
Binary file not shown.
@ -6,6 +6,8 @@ RUN: llvm-objdump -r %p/Inputs/trivial-object-test.elf-i386 \
|
||||
RUN: | FileCheck %s -check-prefix ELF-i386
|
||||
RUN: llvm-objdump -r %p/Inputs/trivial-object-test.elf-x86-64 \
|
||||
RUN: | FileCheck %s -check-prefix ELF-x86-64
|
||||
RUN: llvm-objdump -r %p/Inputs/trivial-object-test.elf-hexagon \
|
||||
RUN: | FileCheck %s -check-prefix ELF-hexagon
|
||||
|
||||
COFF-i386: .text
|
||||
COFF-i386: IMAGE_REL_I386_DIR32 L_.str
|
||||
@ -26,3 +28,11 @@ ELF-x86-64: .text
|
||||
ELF-x86-64: R_X86_64_32S .rodata.str1.1
|
||||
ELF-x86-64: R_X86_64_PC32 puts
|
||||
ELF-x86-64: R_X86_64_PC32 SomeOtherFunction
|
||||
|
||||
ELF-hexagon: .text
|
||||
ELF-hexagon: R_HEX_GOTREL_HI16 .main
|
||||
ELF-hexagon: R_HEX_GOTREL_LO16 .main
|
||||
ELF-hexagon: R_HEX_HI16 puts
|
||||
ELF-hexagon: R_HEX_LO16 puts
|
||||
ELF-hexagon: R_HEX_B15_PCREL testf
|
||||
ELF-hexagon: R_HEX_B22_PCREL puts
|
||||
|
Loading…
Reference in New Issue
Block a user