def METHOD_NAME(self, objfile, base=None):
    ALLOC_SIZE = 16*4096
    if base is None:
        base = self.u.heap.memalign(0x4000, ALLOC_SIZE)
        self._alloced_bases.append(base)
    objfile = os.path.join(self.SOURCE_ROOT, objfile)
    tmp = tempfile.mkdtemp() + os.sep
    elffile = tmp + "elf"
    ld_script = tmp + "ld"
    binfile = tmp + "bin"
    with open(ld_script, "w") as f:
        f.write("SECTIONS {\n")
        f.write(f". = 0x{base:x};\n")
        f.write(".text : { *(.text .text.*) }\n")
        f.write(".data : { *(.got .data .data.* .rodata .rodata.* .bss .bss.*) }\n")
        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("objdump", "-d", elffile)
    self._load_elf_symbols(elffile, ignore="A")
    with open(binfile, "rb") as f:
        buf = f.read()
        assert len(buf) <= ALLOC_SIZE
        self.u.iface.writemem(base, buf)
        self.u.proxy.dc_cvau(base, len(buf))
        self.u.proxy.ic_ivau(base, len(buf))