From 0242e327133111af3fff863eecea0c662099457e Mon Sep 17 00:00:00 2001 From: Nicolas Date: Wed, 12 Nov 2025 21:55:57 +0100 Subject: [PATCH] Patching offset fixed in Patch aux function loop, debug prints removed --- src/copapy/_compiler.py | 11 ++++++----- src/copapy/_stencils.py | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/copapy/_compiler.py b/src/copapy/_compiler.py index c0015fa..7143a19 100644 --- a/src/copapy/_compiler.py +++ b/src/copapy/_compiler.py @@ -235,7 +235,6 @@ def get_aux_function_mem_layout(function_names: Iterable[str], sdb: stencil_data lengths = sdb.get_symbol_size(name) offset = (offset + 15) // 16 * 16 function_list.append((name, offset, lengths)) - print('xx aux 0x', hex(offset), name, lengths) offset += lengths 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) else: # 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] 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) @@ -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'}: # 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] 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': - 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] - 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: raise ValueError(f"Unsupported: {name=} {reloc.target_symbol_info=} {reloc.target_symbol_name=} {reloc.target_section_index}") diff --git a/src/copapy/_stencils.py b/src/copapy/_stencils.py index 06a4372..747f2f5 100644 --- a/src/copapy/_stencils.py +++ b/src/copapy/_stencils.py @@ -286,7 +286,7 @@ class stencil_database(): """ name_set: set[str] = set() for name in names: - print('- get_sub_functions: ', name) + #print('- get_sub_functions: ', name) 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 func = self.elf.symbols[name]