Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/elf/constants_header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,9 @@ pub const EM_BPF: u16 = 247;
/// C-SKY
pub const EM_CSKY: u16 = 252;

// Loongarch 64
pub const EM_LOONGARCH: u16 = 258;

pub const EM_NUM: u16 = 248;

/// Convert machine to str representation
Expand Down Expand Up @@ -558,6 +561,7 @@ pub fn machine_to_str (machine: u16) -> &'static str {
EM_AMDGPU => "AMDGPU",
EM_RISCV => "RISCV",
EM_BPF => "BPF",
EM_LOONGARCH => "LOONGARCH",
_val => "EM_UNKNOWN",
}
}
242 changes: 242 additions & 0 deletions src/elf/constants_relocation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -987,6 +987,127 @@ pub const R_PPC_EMB_SPE_DOUBLE_SDA: u32 = 213;
pub const R_PPC_EMB_SPE_WORD_SDA: u32 = 214;
pub const R_PPC_EMB_SPE_HALF_SDA: u32 = 215;

/////////////////////
// LOONGARCH
/////////////////////
pub const R_LARCH_NONE: u32 = 0;
pub const R_LARCH_32: u32 = 1;
pub const R_LARCH_64: u32 = 2;
pub const R_LARCH_RELATIVE: u32 = 3;
pub const R_LARCH_COPY: u32 = 4;
pub const R_LARCH_JUMP_SLOT: u32 = 5;
pub const R_LARCH_TLS_DTPMOD32: u32 = 6;
pub const R_LARCH_TLS_DTPMOD64: u32 = 7;
pub const R_LARCH_TLS_DTPREL32: u32 = 8;
pub const R_LARCH_TLS_DTPREL64: u32 = 9;
pub const R_LARCH_TLS_TPREL32: u32 = 10;
pub const R_LARCH_TLS_TPREL64: u32 = 11;
pub const R_LARCH_IRELATIVE: u32 = 12;
pub const R_LARCH_TLS_DESC32: u32 = 13;
pub const R_LARCH_TLS_DESC64: u32 = 14;
pub const R_LARCH_MARK_LA: u32 = 20;
pub const R_LARCH_MARK_PCREL: u32 = 21;
pub const R_LARCH_SOP_PUSH_PCREL: u32 = 22;
pub const R_LARCH_SOP_PUSH_ABSOLUTE: u32 = 23;
pub const R_LARCH_SOP_PUSH_DUP: u32 = 24;
pub const R_LARCH_SOP_PUSH_GPREL: u32 = 25;
pub const R_LARCH_SOP_PUSH_TLS_TPREL: u32 = 26;
pub const R_LARCH_SOP_PUSH_TLS_GOT: u32 = 27;
pub const R_LARCH_SOP_PUSH_TLS_GD: u32 = 28;
pub const R_LARCH_SOP_PUSH_PLT_PCREL: u32 = 29;
pub const R_LARCH_SOP_ASSERT: u32 = 30;
pub const R_LARCH_SOP_NOT: u32 = 31;
pub const R_LARCH_SOP_SUB: u32 = 32;
pub const R_LARCH_SOP_SL: u32 = 33;
pub const R_LARCH_SOP_SR: u32 = 34;
pub const R_LARCH_SOP_ADD: u32 = 35;
pub const R_LARCH_SOP_AND: u32 = 36;
pub const R_LARCH_SOP_IF_ELSE: u32 = 37;
pub const R_LARCH_SOP_POP_32_S_10_5: u32 = 38;
pub const R_LARCH_SOP_POP_32_U_10_12: u32 = 39;
pub const R_LARCH_SOP_POP_32_S_10_12: u32 = 40;
pub const R_LARCH_SOP_POP_32_S_10_16: u32 = 41;
pub const R_LARCH_SOP_POP_32_S_10_16_S2: u32 = 42;
pub const R_LARCH_SOP_POP_32_S_5_20: u32 = 43;
pub const R_LARCH_SOP_POP_32_S_0_5_10_16_S2: u32 = 44;
pub const R_LARCH_SOP_POP_32_S_0_10_10_16_S2: u32 = 45;
pub const R_LARCH_SOP_POP_32_U: u32 = 46;
pub const R_LARCH_ADD8: u32 = 47;
pub const R_LARCH_ADD16: u32 = 48;
pub const R_LARCH_ADD24: u32 = 49;
pub const R_LARCH_ADD32: u32 = 50;
pub const R_LARCH_ADD64: u32 = 51;
pub const R_LARCH_SUB8: u32 = 52;
pub const R_LARCH_SUB16: u32 = 53;
pub const R_LARCH_SUB24: u32 = 54;
pub const R_LARCH_SUB32: u32 = 55;
pub const R_LARCH_SUB64: u32 = 56;
pub const R_LARCH_GNU_VTINHERIT: u32 = 57;
pub const R_LARCH_GNU_VTENTRY: u32 = 58;
pub const R_LARCH_B16: u32 = 64;
pub const R_LARCH_B21: u32 = 65;
pub const R_LARCH_B26: u32 = 66;
pub const R_LARCH_ABS_HI20: u32 = 67;
pub const R_LARCH_ABS_LO12: u32 = 68;
pub const R_LARCH_ABS64_LO20: u32 = 69;
pub const R_LARCH_ABS64_HI12: u32 = 70;
pub const R_LARCH_PCALA_HI20: u32 = 71;
pub const R_LARCH_PCALA_LO12: u32 = 72;
pub const R_LARCH_PCALA64_LO20: u32 = 73;
pub const R_LARCH_PCALA64_HI12: u32 = 74;
pub const R_LARCH_GOT_PC_HI20: u32 = 75;
pub const R_LARCH_GOT_PC_LO12: u32 = 76;
pub const R_LARCH_GOT64_PC_LO20: u32 = 77;
pub const R_LARCH_GOT64_PC_HI12: u32 = 78;
pub const R_LARCH_GOT_HI20: u32 = 79;
pub const R_LARCH_GOT_LO12: u32 = 80;
pub const R_LARCH_GOT64_LO20: u32 = 81;
pub const R_LARCH_GOT64_HI12: u32 = 82;
pub const R_LARCH_TLS_LE_HI20: u32 = 83;
pub const R_LARCH_TLS_LE_LO12: u32 = 84;
pub const R_LARCH_TLS_LE64_LO20: u32 = 85;
pub const R_LARCH_TLS_LE64_HI12: u32 = 86;
pub const R_LARCH_TLS_IE_PC_HI20: u32 = 87;
pub const R_LARCH_TLS_IE_PC_LO12: u32 = 88;
pub const R_LARCH_TLS_IE64_PC_LO20: u32 = 89;
pub const R_LARCH_TLS_IE64_PC_HI12: u32 = 90;
pub const R_LARCH_TLS_IE_HI20: u32 = 91;
pub const R_LARCH_TLS_IE_LO12: u32 = 92;
pub const R_LARCH_TLS_IE64_LO20: u32 = 93;
pub const R_LARCH_TLS_IE64_HI12: u32 = 94;
pub const R_LARCH_TLS_LD_PC_HI20: u32 = 95;
pub const R_LARCH_TLS_LD_HI20: u32 = 96;
pub const R_LARCH_TLS_GD_PC_HI20: u32 = 97;
pub const R_LARCH_TLS_GD_HI20: u32 = 98;
pub const R_LARCH_32_PCREL: u32 = 99;
pub const R_LARCH_RELAX: u32 = 100;
pub const R_LARCH_DELETE: u32 = 101;
pub const R_LARCH_ALIGN: u32 = 102;
pub const R_LARCH_PCREL20_S2: u32 = 103;
pub const R_LARCH_CFA: u32 = 104;
pub const R_LARCH_ADD6: u32 = 105;
pub const R_LARCH_SUB6: u32 = 106;
pub const R_LARCH_ADD_ULEB128: u32 = 107;
pub const R_LARCH_SUB_ULEB128: u32 = 108;
pub const R_LARCH_64_PCREL: u32 = 109;
pub const R_LARCH_CALL36: u32 = 110;
pub const R_LARCH_TLS_DESC_PC_HI20: u32 = 111;
pub const R_LARCH_TLS_DESC_PC_LO12: u32 = 112;
pub const R_LARCH_TLS_DESC64_PC_LO20: u32 = 113;
pub const R_LARCH_TLS_DESC64_PC_HI12: u32 = 114;
pub const R_LARCH_TLS_DESC_HI20: u32 = 115;
pub const R_LARCH_TLS_DESC_LO12: u32 = 116;
pub const R_LARCH_TLS_DESC64_LO20: u32 = 117;
pub const R_LARCH_TLS_DESC64_HI12: u32 = 118;
pub const R_LARCH_TLS_DESC_LD: u32 = 119;
pub const R_LARCH_TLS_DESC_CALL: u32 = 120;
pub const R_LARCH_TLS_LE_HI20_R: u32 = 121;
pub const R_LARCH_TLS_LE_ADD_R: u32 = 122;
pub const R_LARCH_TLS_LE_LO12_R: u32 = 123;
pub const R_LARCH_TLS_LD_PCREL20_S2: u32 = 124;
pub const R_LARCH_TLS_GD_PCREL20_S2: u32 = 125;
pub const R_LARCH_TLS_DESC_PCREL20_S2: u32 = 126;


#[inline]
pub fn r_to_str(typ: u32, machine: u16) -> &'static str {
Expand Down Expand Up @@ -1576,6 +1697,127 @@ pub fn r_to_str(typ: u32, machine: u16) -> &'static str {
R_PPC_EMB_SPE_HALF_SDA => "R_PPC_EMB_SPE_HALF_SDA",
_ => "R_UNKNOWN_PPC",
}},
// Loongarch 64
EM_LOONGARCH => { match typ {
R_LARCH_NONE => "LARCH_NONE",
R_LARCH_32 => "LARCH_32",
R_LARCH_64 => "LARCH_64",
R_LARCH_RELATIVE => "LARCH_RELATIVE",
R_LARCH_COPY => "LARCH_COPY",
R_LARCH_JUMP_SLOT => "LARCH_JUMP_SLOT",
R_LARCH_TLS_DTPMOD32 => "LARCH_TLS_DTPMOD32",
R_LARCH_TLS_DTPMOD64 => "LARCH_TLS_DTPMOD64",
R_LARCH_TLS_DTPREL32 => "LARCH_TLS_DTPREL32",
R_LARCH_TLS_DTPREL64 => "LARCH_TLS_DTPREL64",
R_LARCH_TLS_TPREL32 => "LARCH_TLS_TPREL32",
R_LARCH_TLS_TPREL64 => "LARCH_TLS_TPREL64",
R_LARCH_IRELATIVE => "LARCH_IRELATIVE",
R_LARCH_TLS_DESC32 => "LARCH_TLS_DESC32",
R_LARCH_TLS_DESC64 => "LARCH_TLS_DESC64",
R_LARCH_MARK_LA => "LARCH_MARK_LA",
R_LARCH_MARK_PCREL => "LARCH_MARK_PCREL",
R_LARCH_SOP_PUSH_PCREL => "LARCH_SOP_PUSH_PCREL",
R_LARCH_SOP_PUSH_ABSOLUTE => "LARCH_SOP_PUSH_ABSOLUTE",
R_LARCH_SOP_PUSH_DUP => "LARCH_SOP_PUSH_DUP",
R_LARCH_SOP_PUSH_GPREL => "LARCH_SOP_PUSH_GPREL",
R_LARCH_SOP_PUSH_TLS_TPREL => "LARCH_SOP_PUSH_TLS_TPREL",
R_LARCH_SOP_PUSH_TLS_GOT => "LARCH_SOP_PUSH_TLS_GOT",
R_LARCH_SOP_PUSH_TLS_GD => "LARCH_SOP_PUSH_TLS_GD",
R_LARCH_SOP_PUSH_PLT_PCREL => "LARCH_SOP_PUSH_PLT_PCREL",
R_LARCH_SOP_ASSERT => "LARCH_SOP_ASSERT",
R_LARCH_SOP_NOT => "LARCH_SOP_NOT",
R_LARCH_SOP_SUB => "LARCH_SOP_SUB",
R_LARCH_SOP_SL => "LARCH_SOP_SL",
R_LARCH_SOP_SR => "LARCH_SOP_SR",
R_LARCH_SOP_ADD => "LARCH_SOP_ADD",
R_LARCH_SOP_AND => "LARCH_SOP_AND",
R_LARCH_SOP_IF_ELSE => "LARCH_SOP_IF_ELSE",
R_LARCH_SOP_POP_32_S_10_5 => "LARCH_SOP_POP_32_S_10_5",
R_LARCH_SOP_POP_32_U_10_12 => "LARCH_SOP_POP_32_U_10_12",
R_LARCH_SOP_POP_32_S_10_12 => "LARCH_SOP_POP_32_S_10_12",
R_LARCH_SOP_POP_32_S_10_16 => "LARCH_SOP_POP_32_S_10_16",
R_LARCH_SOP_POP_32_S_10_16_S2 => "LARCH_SOP_POP_32_S_10_16_S2",
R_LARCH_SOP_POP_32_S_5_20 => "LARCH_SOP_POP_32_S_5_20",
R_LARCH_SOP_POP_32_S_0_5_10_16_S2 => "LARCH_SOP_POP_32_S_0_5_10_16_S2",
R_LARCH_SOP_POP_32_S_0_10_10_16_S2 => "LARCH_SOP_POP_32_S_0_10_10_16_S2",
R_LARCH_SOP_POP_32_U => "LARCH_SOP_POP_32_U",
R_LARCH_ADD8 => "LARCH_ADD8",
R_LARCH_ADD16 => "LARCH_ADD16",
R_LARCH_ADD24 => "LARCH_ADD24",
R_LARCH_ADD32 => "LARCH_ADD32",
R_LARCH_ADD64 => "LARCH_ADD64",
R_LARCH_SUB8 => "LARCH_SUB8",
R_LARCH_SUB16 => "LARCH_SUB16",
R_LARCH_SUB24 => "LARCH_SUB24",
R_LARCH_SUB32 => "LARCH_SUB32",
R_LARCH_SUB64 => "LARCH_SUB64",
R_LARCH_GNU_VTINHERIT => "LARCH_GNU_VTINHERIT",
R_LARCH_GNU_VTENTRY => "LARCH_GNU_VTENTRY",
R_LARCH_B16 => "LARCH_B16",
R_LARCH_B21 => "LARCH_B21",
R_LARCH_B26 => "LARCH_B26",
R_LARCH_ABS_HI20 => "LARCH_ABS_HI20",
R_LARCH_ABS_LO12 => "LARCH_ABS_LO12",
R_LARCH_ABS64_LO20 => "LARCH_ABS64_LO20",
R_LARCH_ABS64_HI12 => "LARCH_ABS64_HI12",
R_LARCH_PCALA_HI20 => "LARCH_PCALA_HI20",
R_LARCH_PCALA_LO12 => "LARCH_PCALA_LO12",
R_LARCH_PCALA64_LO20 => "LARCH_PCALA64_LO20",
R_LARCH_PCALA64_HI12 => "LARCH_PCALA64_HI12",
R_LARCH_GOT_PC_HI20 => "LARCH_GOT_PC_HI20",
R_LARCH_GOT_PC_LO12 => "LARCH_GOT_PC_LO12",
R_LARCH_GOT64_PC_LO20 => "LARCH_GOT64_PC_LO20",
R_LARCH_GOT64_PC_HI12 => "LARCH_GOT64_PC_HI12",
R_LARCH_GOT_HI20 => "LARCH_GOT_HI20",
R_LARCH_GOT_LO12 => "LARCH_GOT_LO12",
R_LARCH_GOT64_LO20 => "LARCH_GOT64_LO20",
R_LARCH_GOT64_HI12 => "LARCH_GOT64_HI12",
R_LARCH_TLS_LE_HI20 => "LARCH_TLS_LE_HI20",
R_LARCH_TLS_LE_LO12 => "LARCH_TLS_LE_LO12",
R_LARCH_TLS_LE64_LO20 => "LARCH_TLS_LE64_LO20",
R_LARCH_TLS_LE64_HI12 => "LARCH_TLS_LE64_HI12",
R_LARCH_TLS_IE_PC_HI20 => "LARCH_TLS_IE_PC_HI20",
R_LARCH_TLS_IE_PC_LO12 => "LARCH_TLS_IE_PC_LO12",
R_LARCH_TLS_IE64_PC_LO20 => "LARCH_TLS_IE64_PC_LO20",
R_LARCH_TLS_IE64_PC_HI12 => "LARCH_TLS_IE64_PC_HI12",
R_LARCH_TLS_IE_HI20 => "LARCH_TLS_IE_HI20",
R_LARCH_TLS_IE_LO12 => "LARCH_TLS_IE_LO12",
R_LARCH_TLS_IE64_LO20 => "LARCH_TLS_IE64_LO20",
R_LARCH_TLS_IE64_HI12 => "LARCH_TLS_IE64_HI12",
R_LARCH_TLS_LD_PC_HI20 => "LARCH_TLS_LD_PC_HI20",
R_LARCH_TLS_LD_HI20 => "LARCH_TLS_LD_HI20",
R_LARCH_TLS_GD_PC_HI20 => "LARCH_TLS_GD_PC_HI20",
R_LARCH_TLS_GD_HI20 => "LARCH_TLS_GD_HI20",
R_LARCH_32_PCREL => "LARCH_32_PCREL",
R_LARCH_RELAX => "LARCH_RELAX",
R_LARCH_DELETE => "LARCH_DELETE",
R_LARCH_ALIGN => "LARCH_ALIGN",
R_LARCH_PCREL20_S2 => "LARCH_PCREL20_S2",
R_LARCH_CFA => "LARCH_CFA",
R_LARCH_ADD6 => "LARCH_ADD6",
R_LARCH_SUB6 => "LARCH_SUB6",
R_LARCH_ADD_ULEB128 => "LARCH_ADD_ULEB128",
R_LARCH_SUB_ULEB128 => "LARCH_SUB_ULEB128",
R_LARCH_64_PCREL => "LARCH_64_PCREL",
R_LARCH_CALL36 => "LARCH_CALL36",
R_LARCH_TLS_DESC_PC_HI20 => "LARCH_TLS_DESC_PC_HI20",
R_LARCH_TLS_DESC_PC_LO12 => "LARCH_TLS_DESC_PC_LO12",
R_LARCH_TLS_DESC64_PC_LO20 => "LARCH_TLS_DESC64_PC_LO20",
R_LARCH_TLS_DESC64_PC_HI12 => "LARCH_TLS_DESC64_PC_HI12",
R_LARCH_TLS_DESC_HI20 => "LARCH_TLS_DESC_HI20",
R_LARCH_TLS_DESC_LO12 => "LARCH_TLS_DESC_LO12",
R_LARCH_TLS_DESC64_LO20 => "LARCH_TLS_DESC64_LO20",
R_LARCH_TLS_DESC64_HI12 => "LARCH_TLS_DESC64_HI12",
R_LARCH_TLS_DESC_LD => "LARCH_TLS_DESC_LD",
R_LARCH_TLS_DESC_CALL => "LARCH_TLS_DESC_CALL",
R_LARCH_TLS_LE_HI20_R => "LARCH_TLS_LE_HI20_R",
R_LARCH_TLS_LE_ADD_R => "LARCH_TLS_LE_ADD_R",
R_LARCH_TLS_LE_LO12_R => "LARCH_TLS_LE_LO12_R",
R_LARCH_TLS_LD_PCREL20_S2 => "LARCH_TLS_LD_PCREL20_S2",
R_LARCH_TLS_GD_PCREL20_S2 => "LARCH_TLS_GD_PCREL20_S2",
R_LARCH_TLS_DESC_PCREL20_S2 => "LARCH_TLS_DESC_PCREL20_S2",
_ => "R_UNKNOWN_LOONGARCH",
}},
_ => "R_UNKNOWN",
}
}