diff options
author | pommicket <pommicket@gmail.com> | 2022-11-07 18:55:13 -0500 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2022-11-07 18:55:13 -0500 |
commit | e02ed40851251064e907b91eec7cea6b89d3c186 (patch) | |
tree | adad90f37de0353a1055e027be21b8a283d0cbe7 /src/linker.rs | |
parent | 92d99e53620fa9d8ff8d2a8a453bb3089f78e661 (diff) |
working almost the same as before
Diffstat (limited to 'src/linker.rs')
-rw-r--r-- | src/linker.rs | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/linker.rs b/src/linker.rs index 9666a87..2a7ef42 100644 --- a/src/linker.rs +++ b/src/linker.rs @@ -857,16 +857,17 @@ impl<'a> Linker<'a> { symbol: &elf::Symbol, ) -> Result<(), ObjectError> { let name = elf.symbol_name(symbol)?; +// let dbg_name = name.clone(); let name_id = self.symbol_names.add(name); let size = symbol.size; let value = match symbol.value { elf::SymbolValue::Undefined => None, elf::SymbolValue::Absolute(n) => Some(SymbolValue::Absolute(n)), - elf::SymbolValue::SectionOffset(shndx, offset) => { + elf::SymbolValue::SectionOffset(shndx, sec_offset) => { match elf.section_type(shndx) { Some(elf::SectionType::ProgBits) => { - let offset = elf.section_offset(shndx).unwrap() + offset; + let offset = elf.section_offset(shndx).unwrap() + sec_offset; Some(SymbolValue::Data { source, offset, size }) } Some(elf::SectionType::NoBits) => { @@ -1117,6 +1118,7 @@ impl<'a> Linker<'a> { if let Some(symbol) = self.get_symbol_id(rel.r#where.0, rel.sym) { let value = &self.symbols.get_info_from_id(symbol).value; if let SymbolValue::Data { source: req_source, offset: req_offset, size: req_size } = value { + // @TODO: check addend self.require_range(ranges, *req_source, *req_offset, *req_size) } // else, it's okay, it's a bss relocation or something hopefully } // else, we'll deal with it in apply_relocation @@ -1166,15 +1168,13 @@ impl<'a> Linker<'a> { let dest_end = dest_start + size as usize; let src_start = src_offset as usize; let src_end = src_start + size as usize; - let dest_addr = dest_offset + exec.data_addr(); - println!("{source:?}@{src_offset:x} => {:x}..{:x}", dest_addr,dest_addr+size); + //let dest_addr = dest_offset + exec.data_addr(); + //println!("{source:?}@{src_offset:x} => {:x}..{:x}", dest_addr,dest_addr+size); data_section[dest_start..dest_end].copy_from_slice( &self.source_data[source.0 as usize][src_start..src_end] ); }); - println!("{:?}", data_section); - exec.set_data(data_section); for rel_map in self.relocations.iter() { @@ -1182,7 +1182,6 @@ impl<'a> Linker<'a> { self.apply_relocation(&mut exec, &offset_map, rel)?; } } - println!("{:?}", exec.data); // this should never panic, since we did require_range on the entry point. let entry_addr = offset_map.translate_offset(entry_source, entry_offset).unwrap() + exec.data_addr(); |