Skip to content

Commit bb9fb34

Browse files
committed
Refactor.
1 parent 4e8f342 commit bb9fb34

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

monoasm/src/jit_memory.rs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -422,29 +422,33 @@ impl JitMemory {
422422
self.labels[dest].target.push(TargetType::Abs { page, pos });
423423
}
424424

425+
fn write_reloc(&mut self, src_page: Page, src_pos: Pos, target: TargetType) {
426+
let src_ptr = self[src_page].contents + src_pos.0;
427+
match target {
428+
TargetType::Rel { page, offset, pos } => {
429+
let target_ptr = self[page].contents + pos.0 + (offset as usize);
430+
let disp = (src_ptr as i128) - (target_ptr as i128);
431+
match i32::try_from(disp) {
432+
Ok(disp) => self[page].write32(pos, disp),
433+
Err(_) => panic!(
434+
"Relocation overflow. src:{:016x} dest:{:016x}",
435+
src_ptr, target_ptr
436+
),
437+
}
438+
}
439+
TargetType::Abs { page, pos } => {
440+
self[page].write64(pos, src_ptr as _);
441+
}
442+
}
443+
}
444+
425445
/// Resolve and fill all relocations.
426446
fn fill_relocs(&mut self) {
427447
let mut reloc = std::mem::take(&mut self.labels);
428448
for rel in reloc.iter_mut() {
429449
if let Some((src_page, src_pos)) = rel.loc {
430-
let src_ptr = self[src_page].contents + src_pos.0;
431450
for target in std::mem::take(&mut rel.target) {
432-
match target {
433-
TargetType::Rel { page, offset, pos } => {
434-
let target_ptr = self[page].contents + pos.0 + (offset as usize);
435-
let disp = (src_ptr as i128) - (target_ptr as i128);
436-
match i32::try_from(disp) {
437-
Ok(disp) => self[page].write32(pos, disp),
438-
Err(_) => panic!(
439-
"Relocation overflow. src:{:016x} dest:{:016x}",
440-
src_ptr, target_ptr
441-
),
442-
}
443-
}
444-
TargetType::Abs { page, pos } => {
445-
self[page].write64(pos, src_ptr as _);
446-
}
447-
}
451+
self.write_reloc(src_page, src_pos, target);
448452
}
449453
}
450454
}

0 commit comments

Comments
 (0)