proxyclient:loadobjs:wire toolchain abstraction
Signed-off-by: Alexis Deruelle <alexis.deruelle@gmail.com>
diff --git a/proxyclient/m1n1/loadobjs.py b/proxyclient/m1n1/loadobjs.py
index ef567b3..c06fc16 100644
--- a/proxyclient/m1n1/loadobjs.py
+++ b/proxyclient/m1n1/loadobjs.py
@@ -5,13 +5,14 @@
import tempfile
import bisect
-from .asm import NM, LD, OBJCOPY, ARMAsm
+from .toolchain import Toolchain
__all__ = ["LinkedProgram"]
+_toolchain = Toolchain()
def tool_output_lines(progname, *args):
- with subprocess.Popen([progname.replace("%ARCH", ARMAsm.ARCH)] + list(args),
+ with subprocess.Popen([progname] + list(args),
stdout=subprocess.PIPE) as proc:
for line in proc.stdout:
yield line.decode("ascii")
@@ -20,7 +21,7 @@
raise Exception(f"{progname} (args: {args}) exited with status {proc.returncode}")
def run_tool(progname, *args, silent=False):
- subprocess.check_call([progname.replace("%ARCH", ARMAsm.ARCH)] + list(args),
+ subprocess.check_call([progname] + list(args),
stdout=subprocess.DEVNULL if silent else None)
@@ -50,7 +51,7 @@
tmp = os.path.join(tempfile.mkdtemp(), "bin")
path = os.path.join(self.SOURCE_ROOT, self.base_object)
- run_tool(OBJCOPY, "-O", "binary", path, tmp, "--only-section=.rela.dyn")
+ run_tool(_toolchain.OBJCOPY, "-O", "binary", path, tmp, "--only-section=.rela.dyn")
rela_objfile = open(tmp, "rb").read()
if rela_objfile[:len(rela_target)] != rela_target:
@@ -65,7 +66,7 @@
path = pathlib.Path(self.SOURCE_ROOT, relpath)
symaddrs = dict()
- for line in tool_output_lines(NM, "-g", path):
+ for line in tool_output_lines(_toolchain.NM, "-g", path):
addr_str, t, name = line.split()
addr = int(addr_str, 16) + offset
if t in ignore:
@@ -99,8 +100,8 @@
f.write("}\n")
for sym in self.symbols:
f.write(f"{sym[1]} = 0x{sym[0]:x};\n")
- run_tool(LD, "-EL", "-maarch64elf", "-T", ld_script, "-o", elffile, objfile)
- run_tool(OBJCOPY, "-O", "binary", elffile, binfile)
+ run_tool(_toolchain.LD, "-EL", "-maarch64elf", "-T", ld_script, "-o", elffile, objfile)
+ run_tool(_toolchain.OBJCOPY, "-O", "binary", elffile, binfile)
#run_tool("objdump", "-d", elffile)
self._load_elf_symbols(elffile, ignore="A")
with open(binfile, "rb") as f: