summaryrefslogtreecommitdiff
path: root/tools/dump_function.py
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2020-11-09 19:13:35 +0100
committerLéo Lam <leo@leolam.fr>2020-11-09 19:16:37 +0100
commit5d09d99b1bbee904b03e3f0b86cf166d5aea2c2a (patch)
tree1805c6c8c98e5cfc87aa92b429ac9d72c890456f /tools/dump_function.py
parentd5bdc23ef530bea4dc6705ac779710367ae5d839 (diff)
tools: Deduplicate code
Diffstat (limited to 'tools/dump_function.py')
-rwxr-xr-xtools/dump_function.py41
1 files changed, 4 insertions, 37 deletions
diff --git a/tools/dump_function.py b/tools/dump_function.py
index c26901a1..638cc501 100755
--- a/tools/dump_function.py
+++ b/tools/dump_function.py
@@ -1,48 +1,15 @@
#!/usr/bin/env python3
import argparse
-from elftools.elf.elffile import ELFFile
-import diff_settings
-from pathlib import Path
-from typing import Any, Dict
-import utils
-config: Dict[str, Any] = {}
-diff_settings.apply(config, {})
-
-root = Path(__file__).parent.parent
-my_elf = ELFFile((root / config["myimg"]).open("rb"))
-my_symtab = my_elf.get_section_by_name(".symtab")
-if not my_symtab:
- utils.fail(f'{config["myimg"]} has no symbol table')
-
-
-def get_file_offset(elf, addr: int) -> int:
- for seg in elf.iter_segments():
- if seg.header["p_type"] != "PT_LOAD":
- continue
- if seg["p_vaddr"] <= addr < seg["p_vaddr"] + seg["p_filesz"]:
- return addr - seg["p_vaddr"] + seg["p_offset"]
- assert False
-
-
-def get_symbol_file_offset_and_size(elf, table, name: str) -> (int, int):
- syms = table.get_symbol_by_name(name)
- if not syms or len(syms) != 1:
- raise KeyError(name)
- return get_file_offset(elf, syms[0]["st_value"]), syms[0]["st_size"]
-
-
-def get_fn_from_my_elf(name: str) -> bytes:
- offset, size = get_symbol_file_offset_and_size(my_elf, my_symtab, name)
- my_elf.stream.seek(offset)
- return my_elf.stream.read(size)
+import util.elf
+from util import utils
def dump_fn(name: str) -> None:
- expected_dir = root / "expected"
+ expected_dir = utils.get_repo_root() / "expected"
try:
- fn = get_fn_from_my_elf(name)
+ fn = util.elf.get_fn_from_my_elf(name)
path = expected_dir / f"{name}.bin"
path.parent.mkdir(exist_ok=True)
path.write_bytes(fn)