mirror of https://github.com/Nonannet/copapy.git
Patching offset fixed in Patch aux function loop, debug prints removed
This commit is contained in:
parent
bfc3c1e399
commit
0242e32713
|
|
@ -235,7 +235,6 @@ def get_aux_function_mem_layout(function_names: Iterable[str], sdb: stencil_data
|
||||||
lengths = sdb.get_symbol_size(name)
|
lengths = sdb.get_symbol_size(name)
|
||||||
offset = (offset + 15) // 16 * 16
|
offset = (offset + 15) // 16 * 16
|
||||||
function_list.append((name, offset, lengths))
|
function_list.append((name, offset, lengths))
|
||||||
print('xx aux 0x', hex(offset), name, lengths)
|
|
||||||
offset += lengths
|
offset += lengths
|
||||||
|
|
||||||
return function_list, offset
|
return function_list, offset
|
||||||
|
|
@ -328,6 +327,7 @@ def compile_to_dag(node_list: Iterable[Node], sdb: stencil_database) -> tuple[bi
|
||||||
patch = sdb.get_patch(reloc, offset + len(data), offset, binw.Command.PATCH_FUNC.value)
|
patch = sdb.get_patch(reloc, offset + len(data), offset, binw.Command.PATCH_FUNC.value)
|
||||||
else:
|
else:
|
||||||
# Patch constants addresses on heap
|
# Patch constants addresses on heap
|
||||||
|
assert reloc.target_section_index in section_addr_lookup, f"- Function or object in {node.name} missing: {reloc.pelfy_reloc.symbol.name}"
|
||||||
obj_addr = reloc.target_symbol_offset + section_addr_lookup[reloc.target_section_index]
|
obj_addr = reloc.target_symbol_offset + section_addr_lookup[reloc.target_section_index]
|
||||||
patch = sdb.get_patch(reloc, obj_addr, offset, binw.Command.PATCH_OBJECT.value)
|
patch = sdb.get_patch(reloc, obj_addr, offset, binw.Command.PATCH_OBJECT.value)
|
||||||
#print('* constants stancils', patch.type, patch.patch_address, binw.Command.PATCH_OBJECT, node.name)
|
#print('* constants stancils', patch.type, patch.patch_address, binw.Command.PATCH_OBJECT, node.name)
|
||||||
|
|
@ -366,15 +366,16 @@ def compile_to_dag(node_list: Iterable[Node], sdb: stencil_database) -> tuple[bi
|
||||||
|
|
||||||
if reloc.target_symbol_info in {'STT_OBJECT', 'STT_NOTYPE', 'STT_SECTION'}:
|
if reloc.target_symbol_info in {'STT_OBJECT', 'STT_NOTYPE', 'STT_SECTION'}:
|
||||||
# Patch constants/variable addresses on heap
|
# Patch constants/variable addresses on heap
|
||||||
print('--> DATA ', name, reloc.pelfy_reloc.symbol.name, reloc.pelfy_reloc.symbol.info, reloc.pelfy_reloc.symbol.section.name)
|
#print('--> DATA ', name, reloc.pelfy_reloc.symbol.name, reloc.pelfy_reloc.symbol.info, reloc.pelfy_reloc.symbol.section.name)
|
||||||
|
assert reloc.target_section_index in section_addr_lookup, f"- Function or object in {name} missing: {reloc.pelfy_reloc.symbol.name}"
|
||||||
obj_addr = reloc.target_symbol_offset + section_addr_lookup[reloc.target_section_index]
|
obj_addr = reloc.target_symbol_offset + section_addr_lookup[reloc.target_section_index]
|
||||||
patch = sdb.get_patch(reloc, obj_addr, start, binw.Command.PATCH_OBJECT.value)
|
patch = sdb.get_patch(reloc, obj_addr, start, binw.Command.PATCH_OBJECT.value)
|
||||||
#print('* constants aux', patch.type, patch.patch_address, obj_addr, binw.Command.PATCH_OBJECT, name)
|
|
||||||
|
|
||||||
elif reloc.target_symbol_info == 'STT_FUNC':
|
elif reloc.target_symbol_info == 'STT_FUNC':
|
||||||
print('--> FUNC', name, reloc.pelfy_reloc.symbol.name, reloc.pelfy_reloc.symbol.info, reloc.pelfy_reloc.symbol.section.name)
|
#print('--> FUNC', name, reloc.pelfy_reloc.symbol.name, reloc.pelfy_reloc.symbol.info, reloc.pelfy_reloc.symbol.section.name)
|
||||||
func_addr = aux_func_addr_lookup[reloc.target_symbol_name]
|
func_addr = aux_func_addr_lookup[reloc.target_symbol_name]
|
||||||
patch = sdb.get_patch(reloc, func_addr, offset, binw.Command.PATCH_FUNC.value)
|
patch = sdb.get_patch(reloc, func_addr, start, binw.Command.PATCH_FUNC.value)
|
||||||
|
#print(f' FUNC {func_addr=} {start=} {patch.address=}')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unsupported: {name=} {reloc.target_symbol_info=} {reloc.target_symbol_name=} {reloc.target_section_index}")
|
raise ValueError(f"Unsupported: {name=} {reloc.target_symbol_info=} {reloc.target_symbol_name=} {reloc.target_section_index}")
|
||||||
|
|
|
||||||
|
|
@ -286,7 +286,7 @@ class stencil_database():
|
||||||
"""
|
"""
|
||||||
name_set: set[str] = set()
|
name_set: set[str] = set()
|
||||||
for name in names:
|
for name in names:
|
||||||
print('- get_sub_functions: ', name)
|
#print('- get_sub_functions: ', name)
|
||||||
if name not in name_set:
|
if name not in name_set:
|
||||||
# assert name in self.elf.symbols, f"Stencil {name} not found" <-- see: https://github.com/Nonannet/pelfy/issues/1
|
# assert name in self.elf.symbols, f"Stencil {name} not found" <-- see: https://github.com/Nonannet/pelfy/issues/1
|
||||||
func = self.elf.symbols[name]
|
func = self.elf.symbols[name]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue