mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-11-07 04:36:52 -10:00
LoongArch: elftoolchain: add support
According to the latest elftoolchain r4191, add support for Loongarch Co-authored-by: haowuge <[email protected]> Co-authored-by: xiaoqiang zhao <[email protected]> Signed-off-by: yu shan wei <[email protected]> Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1682 Closes: https://github.com/freebsd/freebsd-src/pull/1682
This commit is contained in:
1 parent
342e9f2f30
commit
1ae6faf164
6 files changed
+167
No files matched your search
@@ -442,6 +442,7 @@ enum Dwarf_ISA {
|
||||
DW_ISA_X86_64,
|
||||
DW_ISA_AARCH64,
|
||||
DW_ISA_RISCV,
|
||||
DW_ISA_LOONGARCH,
|
||||
DW_ISA_MAX
|
||||
};
|
||||
|
||||
|
||||
@@ -51,6 +51,8 @@ _dwarf_get_reloc_type(Dwarf_P_Debug dbg, int is64)
|
||||
return (is64 ? R_MIPS_64 : R_MIPS_32);
|
||||
case DW_ISA_RISCV:
|
||||
return (is64 ? R_RISCV_64 : R_RISCV_32);
|
||||
case DW_ISA_LOONGARCH:
|
||||
return (is64 ? R_LARCH_64 : R_LARCH_32);
|
||||
case DW_ISA_IA64:
|
||||
return (is64 ? R_IA_64_DIR64LSB : R_IA_64_DIR32LSB);
|
||||
default:
|
||||
@@ -115,6 +117,12 @@ _dwarf_get_reloc_size(Dwarf_Debug dbg, Dwarf_Unsigned rel_type)
|
||||
else if (rel_type == R_RISCV_64)
|
||||
return (8);
|
||||
break;
|
||||
case EM_LOONGARCH:
|
||||
if (rel_type == R_LARCH_32)
|
||||
return (4);
|
||||
else if (rel_type == R_LARCH_64)
|
||||
return (8);
|
||||
break;
|
||||
case EM_IA_64:
|
||||
if (rel_type == R_IA_64_SECREL32LSB)
|
||||
return (4);
|
||||
|
||||
@@ -105,6 +105,12 @@
|
||||
#define LIBELF_BYTEORDER ELFDATA2LSB
|
||||
#define LIBELF_CLASS ELFCLASS64
|
||||
|
||||
#elif defined(__loongarch64)
|
||||
|
||||
#define LIBELF_ARCH EM_LOONGARCH
|
||||
#define LIBELF_BYTEORDER ELFDATA2LSB
|
||||
#define LIBELF_CLASS ELFCLASS64
|
||||
|
||||
#elif defined(__sparc__)
|
||||
|
||||
#define LIBELF_ARCH EM_SPARCV9
|
||||
|
||||
@@ -670,6 +670,125 @@ elftc_reloc_type_str(unsigned int mach, unsigned int type)
|
||||
case 58: return "R_RISCV_IRELATIVE";
|
||||
}
|
||||
break;
|
||||
case EM_LOONGARCH:
|
||||
switch (type) {
|
||||
case 0: return "R_LARCH_NONE";
|
||||
case 1: return "R_LARCH_32";
|
||||
case 2: return "R_LARCH_64";
|
||||
case 3: return "R_LARCH_RELATIVE";
|
||||
case 4: return "R_LARCH_COPY";
|
||||
case 5: return "R_LARCH_JUMP_SLOT";
|
||||
case 6: return "R_LARCH_TLS_DTPMOD32";
|
||||
case 7: return "R_LARCH_TLS_DTPMOD64";
|
||||
case 8: return "R_LARCH_TLS_DTPREL32";
|
||||
case 9: return "R_LARCH_TLS_DTPREL64";
|
||||
case 10: return "R_LARCH_TLS_TPREL32";
|
||||
case 11: return "R_LARCH_TLS_TPREL64";
|
||||
case 12: return "R_LARCH_IRELATIVE";
|
||||
case 13: return "R_LARCH_TLS_DESC32";
|
||||
case 14: return "R_LARCH_TLS_DESC64";
|
||||
case 20: return "R_LARCH_MARK_LA";
|
||||
case 21: return "R_LARCH_MARK_PCREL";
|
||||
case 22: return "R_LARCH_SOP_PUSH_PCREL";
|
||||
case 23: return "R_LARCH_SOP_PUSH_ABSOLUTE";
|
||||
case 24: return "R_LARCH_SOP_PUSH_DUP";
|
||||
case 25: return "R_LARCH_SOP_PUSH_GPREL";
|
||||
case 26: return "R_LARCH_SOP_PUSH_TLS_TPREL";
|
||||
case 27: return "R_LARCH_SOP_PUSH_TLS_GOT";
|
||||
case 28: return "R_LARCH_SOP_PUSH_TLS_GD";
|
||||
case 29: return "R_LARCH_SOP_PUSH_PLT_PCREL";
|
||||
case 30: return "R_LARCH_SOP_ASSERT";
|
||||
case 31: return "R_LARCH_SOP_NOT";
|
||||
case 32: return "R_LARCH_SOP_SUB";
|
||||
case 33: return "R_LARCH_SOP_SL";
|
||||
case 34: return "R_LARCH_SOP_SR";
|
||||
case 35: return "R_LARCH_SOP_ADD";
|
||||
case 36: return "R_LARCH_SOP_AND";
|
||||
case 37: return "R_LARCH_SOP_IF_ELSE";
|
||||
case 38: return "R_LARCH_SOP_POP_32_S_10_5";
|
||||
case 39: return "R_LARCH_SOP_POP_32_U_10_12";
|
||||
case 40: return "R_LARCH_SOP_POP_32_S_10_12";
|
||||
case 41: return "R_LARCH_SOP_POP_32_S_10_16";
|
||||
case 42: return "R_LARCH_SOP_POP_32_S_10_16_S2";
|
||||
case 43: return "R_LARCH_SOP_POP_32_S_5_20";
|
||||
case 44: return "R_LARCH_SOP_POP_32_S_0_5_10_16_S2";
|
||||
case 45: return "R_LARCH_SOP_POP_32_S_0_10_10_16_S2";
|
||||
case 46: return "R_LARCH_SOP_POP_32_U";
|
||||
case 47: return "R_LARCH_ADD8";
|
||||
case 48: return "R_LARCH_ADD16";
|
||||
case 49: return "R_LARCH_ADD24";
|
||||
case 50: return "R_LARCH_ADD32";
|
||||
case 51: return "R_LARCH_ADD64";
|
||||
case 52: return "R_LARCH_SUB8";
|
||||
case 53: return "R_LARCH_SUB16";
|
||||
case 54: return "R_LARCH_SUB24";
|
||||
case 55: return "R_LARCH_SUB32";
|
||||
case 56: return "R_LARCH_SUB64";
|
||||
case 57: return "R_LARCH_GNU_VTINHERIT";
|
||||
case 58: return "R_LARCH_GNU_VTENTRY";
|
||||
case 64: return "R_LARCH_B16";
|
||||
case 65: return "R_LARCH_B21";
|
||||
case 66: return "R_LARCH_B26";
|
||||
case 67: return "R_LARCH_ABS_HI20";
|
||||
case 68: return "R_LARCH_ABS_LO12";
|
||||
case 69: return "R_LARCH_ABS64_LO20";
|
||||
case 70: return "R_LARCH_ABS64_HI12";
|
||||
case 71: return "R_LARCH_PCALA_HI20";
|
||||
case 72: return "R_LARCH_PCALA_LO12";
|
||||
case 73: return "R_LARCH_PCALA64_LO20";
|
||||
case 74: return "R_LARCH_PCALA64_HI12";
|
||||
case 75: return "R_LARCH_GOT_PC_HI20";
|
||||
case 76: return "R_LARCH_GOT_PC_LO12";
|
||||
case 77: return "R_LARCH_GOT64_PC_LO20";
|
||||
case 78: return "R_LARCH_GOT64_PC_HI12";
|
||||
case 79: return "R_LARCH_GOT_HI20";
|
||||
case 80: return "R_LARCH_GOT_LO12";
|
||||
case 81: return "R_LARCH_GOT64_LO20";
|
||||
case 82: return "R_LARCH_GOT64_HI12";
|
||||
case 83: return "R_LARCH_TLS_LE_HI20";
|
||||
case 84: return "R_LARCH_TLS_LE_LO12";
|
||||
case 85: return "R_LARCH_TLS_LE64_LO20";
|
||||
case 86: return "R_LARCH_TLS_LE64_HI12";
|
||||
case 87: return "R_LARCH_TLS_IE_PC_HI20";
|
||||
case 88: return "R_LARCH_TLS_IE_PC_LO12";
|
||||
case 89: return "R_LARCH_TLS_IE64_PC_LO20";
|
||||
case 90: return "R_LARCH_TLS_IE64_PC_HI12";
|
||||
case 91: return "R_LARCH_TLS_IE_HI20";
|
||||
case 92: return "R_LARCH_TLS_IE_LO12";
|
||||
case 93: return "R_LARCH_TLS_IE64_LO20";
|
||||
case 94: return "R_LARCH_TLS_IE64_HI12";
|
||||
case 95: return "R_LARCH_TLS_LD_PC_HI20";
|
||||
case 96: return "R_LARCH_TLS_LD_HI20";
|
||||
case 97: return "R_LARCH_TLS_GD_PC_HI20";
|
||||
case 98: return "R_LARCH_TLS_GD_HI20";
|
||||
case 99: return "R_LARCH_32_PCREL";
|
||||
case 100: return "R_LARCH_RELAX";
|
||||
case 102: return "R_LARCH_ALIGN";
|
||||
case 103: return "R_LARCH_PCREL20_S2";
|
||||
case 105: return "R_LARCH_ADD6";
|
||||
case 106: return "R_LARCH_SUB6";
|
||||
case 107: return "R_LARCH_ADD_ULEB128";
|
||||
case 108: return "R_LARCH_SUB_ULEB128";
|
||||
case 109: return "R_LARCH_64_PCREL";
|
||||
case 110: return "R_LARCH_CALL36";
|
||||
case 111: return "R_LARCH_TLS_DESC_PC_HI20";
|
||||
case 112: return "R_LARCH_TLS_DESC_PC_LO12";
|
||||
case 113: return "R_LARCH_TLS_DESC64_PC_LO20";
|
||||
case 114: return "R_LARCH_TLS_DESC64_PC_HI12";
|
||||
case 115: return "R_LARCH_TLS_DESC_HI20";
|
||||
case 116: return "R_LARCH_TLS_DESC_LO12";
|
||||
case 117: return "R_LARCH_TLS_DESC64_LO20";
|
||||
case 118: return "R_LARCH_TLS_DESC64_HI12";
|
||||
case 119: return "R_LARCH_TLS_DESC_LD";
|
||||
case 120: return "R_LARCH_TLS_DESC_CALL";
|
||||
case 121: return "R_LARCH_TLS_LE_HI20_R";
|
||||
case 122: return "R_LARCH_TLS_LE_ADD_R";
|
||||
case 123: return "R_LARCH_TLS_LE_LO12_R";
|
||||
case 124: return "R_LARCH_TLS_LD_PCREL20_S2";
|
||||
case 125: return "R_LARCH_TLS_GD_PCREL20_S2";
|
||||
case 126: return "R_LARCH_TLS_DESC_PCREL20_S2";
|
||||
}
|
||||
break;
|
||||
case EM_S390:
|
||||
switch (type) {
|
||||
case 0: return "R_390_NONE";
|
||||
|
||||
@@ -340,6 +340,31 @@ struct _Elftc_Bfd_Target _libelftc_targets[] = {
|
||||
.bt_osabi = ELFOSABI_FREEBSD,
|
||||
},
|
||||
|
||||
{
|
||||
.bt_name = "elf32-loongarch",
|
||||
.bt_type = ETF_ELF,
|
||||
.bt_byteorder = ELFDATA2LSB,
|
||||
.bt_elfclass = ELFCLASS32,
|
||||
.bt_machine = EM_LOONGARCH,
|
||||
},
|
||||
|
||||
{
|
||||
.bt_name = "elf64-loongarch",
|
||||
.bt_type = ETF_ELF,
|
||||
.bt_byteorder = ELFDATA2LSB,
|
||||
.bt_elfclass = ELFCLASS64,
|
||||
.bt_machine = EM_LOONGARCH,
|
||||
},
|
||||
|
||||
{
|
||||
.bt_name = "elf64-loongarch-freebsd",
|
||||
.bt_type = ETF_ELF,
|
||||
.bt_byteorder = ELFDATA2LSB,
|
||||
.bt_elfclass = ELFCLASS64,
|
||||
.bt_machine = EM_LOONGARCH,
|
||||
.bt_osabi = ELFOSABI_FREEBSD,
|
||||
},
|
||||
|
||||
{
|
||||
.bt_name = "elf64-sh64",
|
||||
.bt_type = ETF_ELF,
|
||||
@@ -469,6 +494,12 @@ struct _Elftc_Bfd_Target _libelftc_targets[] = {
|
||||
.bt_machine = EM_X86_64,
|
||||
},
|
||||
|
||||
{
|
||||
.bt_name = "efi-app-loongarch64",
|
||||
.bt_type = ETF_EFI,
|
||||
.bt_machine = EM_LOONGARCH,
|
||||
},
|
||||
|
||||
{
|
||||
.bt_name = "pei-i386",
|
||||
.bt_type = ETF_PE,
|
||||
|
||||
@@ -81,6 +81,8 @@ typedef struct _PE_RichHdr {
|
||||
#define IMAGE_FILE_MACHINE_EBC 0xebc /* EFI byte code */
|
||||
#define IMAGE_FILE_MACHINE_I386 0x14c /* x86 */
|
||||
#define IMAGE_FILE_MACHINE_IA64 0x200 /* IA64 */
|
||||
#define IMAGE_FILE_MACHINE_LOONGARCH32 0x6232 /* LoongArch 32-bit */
|
||||
#define IMAGE_FILE_MACHINE_LOONGARCH64 0x6264 /* LoongArch 64-bit */
|
||||
#define IMAGE_FILE_MACHINE_M32R 0x9041 /* Mitsubishi M32R LE */
|
||||
#define IMAGE_FILE_MACHINE_MIPS16 0x266 /* MIPS16 */
|
||||
#define IMAGE_FILE_MACHINE_MIPSFPU 0x366 /* MIPS with FPU */
|
||||
|
||||
Reference in new issue
Block a user