Skip to content

Commit 8446af2

Browse files
authored
Add LoongArch32 ELF basic support (gimli-rs#765)
1 parent a745792 commit 8446af2

File tree

4 files changed

+7
-1
lines changed

4 files changed

+7
-1
lines changed

src/common.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub enum Architecture {
1818
#[allow(non_camel_case_types)]
1919
X86_64_X32,
2020
Hexagon,
21+
LoongArch32,
2122
LoongArch64,
2223
M68k,
2324
Mips,
@@ -69,6 +70,7 @@ impl Architecture {
6970
Architecture::X86_64 => Some(AddressSize::U64),
7071
Architecture::X86_64_X32 => Some(AddressSize::U32),
7172
Architecture::Hexagon => Some(AddressSize::U32),
73+
Architecture::LoongArch32 => Some(AddressSize::U32),
7274
Architecture::LoongArch64 => Some(AddressSize::U64),
7375
Architecture::M68k => Some(AddressSize::U32),
7476
Architecture::Mips => Some(AddressSize::U32),

src/read/elf/file.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ where
255255
(elf::EM_X86_64, false) => Architecture::X86_64_X32,
256256
(elf::EM_X86_64, true) => Architecture::X86_64,
257257
(elf::EM_HEXAGON, _) => Architecture::Hexagon,
258+
(elf::EM_LOONGARCH, false) => Architecture::LoongArch32,
258259
(elf::EM_LOONGARCH, true) => Architecture::LoongArch64,
259260
(elf::EM_68K, false) => Architecture::M68k,
260261
(elf::EM_MIPS, false) => {

src/write/elf/object.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ impl<'a> Object<'a> {
134134
Architecture::X86_64 => true,
135135
Architecture::X86_64_X32 => true,
136136
Architecture::Hexagon => true,
137+
Architecture::LoongArch32 => true,
137138
Architecture::LoongArch64 => true,
138139
Architecture::M68k => true,
139140
Architecture::Mips => false,
@@ -252,7 +253,7 @@ impl<'a> Object<'a> {
252253
(K::Absolute, _, 32) => elf::R_HEX_32,
253254
_ => return unsupported_reloc(),
254255
},
255-
Architecture::LoongArch64 => match (kind, encoding, size) {
256+
Architecture::LoongArch32 | Architecture::LoongArch64 => match (kind, encoding, size) {
256257
(K::Absolute, _, 32) => elf::R_LARCH_32,
257258
(K::Absolute, _, 64) => elf::R_LARCH_64,
258259
(K::Relative, _, 32) => elf::R_LARCH_32_PCREL,
@@ -572,6 +573,7 @@ impl<'a> Object<'a> {
572573
(Architecture::X86_64, None) => elf::EM_X86_64,
573574
(Architecture::X86_64_X32, None) => elf::EM_X86_64,
574575
(Architecture::Hexagon, None) => elf::EM_HEXAGON,
576+
(Architecture::LoongArch32, None) => elf::EM_LOONGARCH,
575577
(Architecture::LoongArch64, None) => elf::EM_LOONGARCH,
576578
(Architecture::M68k, None) => elf::EM_68K,
577579
(Architecture::Mips, None) => elf::EM_MIPS,

tests/round_trip/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ fn elf_any() {
271271
(Architecture::X86_64, Endianness::Little),
272272
(Architecture::X86_64_X32, Endianness::Little),
273273
(Architecture::Hexagon, Endianness::Little),
274+
(Architecture::LoongArch32, Endianness::Little),
274275
(Architecture::LoongArch64, Endianness::Little),
275276
(Architecture::M68k, Endianness::Big),
276277
(Architecture::Mips, Endianness::Little),

0 commit comments

Comments
 (0)