Skip to content

Commit fd693f4

Browse files
authored
Add Architecture::Sparc (#699)
1 parent 2bdb81d commit fd693f4

File tree

4 files changed

+13
-0
lines changed

4 files changed

+13
-0
lines changed

Diff for: src/common.rs

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ pub enum Architecture {
2727
S390x,
2828
Sbf,
2929
Sharc,
30+
Sparc,
3031
Sparc64,
3132
Wasm32,
3233
Wasm64,
@@ -70,6 +71,7 @@ impl Architecture {
7071
Architecture::S390x => Some(AddressSize::U64),
7172
Architecture::Sbf => Some(AddressSize::U64),
7273
Architecture::Sharc => Some(AddressSize::U32),
74+
Architecture::Sparc => Some(AddressSize::U32),
7375
Architecture::Sparc64 => Some(AddressSize::U64),
7476
Architecture::Wasm32 => Some(AddressSize::U32),
7577
Architecture::Wasm64 => Some(AddressSize::U64),

Diff for: src/read/elf/file.rs

+1
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ where
226226
(elf::EM_S390, true) => Architecture::S390x,
227227
(elf::EM_SBF, _) => Architecture::Sbf,
228228
(elf::EM_SHARC, false) => Architecture::Sharc,
229+
(elf::EM_SPARC, false) => Architecture::Sparc,
229230
(elf::EM_SPARCV9, true) => Architecture::Sparc64,
230231
(elf::EM_XTENSA, false) => Architecture::Xtensa,
231232
_ => Architecture::Unknown,

Diff for: src/write/elf/object.rs

+9
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ impl<'a> Object<'a> {
141141
Architecture::S390x => true,
142142
Architecture::Sbf => false,
143143
Architecture::Sharc => true,
144+
Architecture::Sparc => true,
144145
Architecture::Sparc64 => true,
145146
Architecture::Xtensa => true,
146147
_ => {
@@ -411,6 +412,13 @@ impl<'a> Object<'a> {
411412
return Err(Error(format!("unimplemented relocation {:?}", reloc)));
412413
}
413414
},
415+
Architecture::Sparc => match (kind, encoding, size) {
416+
// TODO: use R_SPARC_32 if aligned.
417+
(RelocationKind::Absolute, _, 32) => elf::R_SPARC_UA32,
418+
_ => {
419+
return Err(Error(format!("unimplemented relocation {:?}", reloc)));
420+
}
421+
},
414422
Architecture::Sparc64 => match (kind, encoding, size) {
415423
// TODO: use R_SPARC_32/R_SPARC_64 if aligned.
416424
(RelocationKind::Absolute, _, 32) => elf::R_SPARC_UA32,
@@ -631,6 +639,7 @@ impl<'a> Object<'a> {
631639
(Architecture::S390x, None) => elf::EM_S390,
632640
(Architecture::Sbf, None) => elf::EM_SBF,
633641
(Architecture::Sharc, None) => elf::EM_SHARC,
642+
(Architecture::Sparc, None) => elf::EM_SPARC,
634643
(Architecture::Sparc64, None) => elf::EM_SPARCV9,
635644
(Architecture::Xtensa, None) => elf::EM_XTENSA,
636645
_ => {

Diff for: tests/round_trip/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ fn elf_any() {
279279
(Architecture::Riscv64, Endianness::Little),
280280
(Architecture::S390x, Endianness::Big),
281281
(Architecture::Sbf, Endianness::Little),
282+
(Architecture::Sparc, Endianness::Big),
282283
(Architecture::Sparc64, Endianness::Big),
283284
(Architecture::Xtensa, Endianness::Little),
284285
]

0 commit comments

Comments
 (0)