blob: d35c24dbc43aa512e9089ff5daa63469dbe3b1af [file] [log] [blame]
from textwrap import dedent
import argparse
import socket
import json
import use_lldb_suite
from lldbsuite.test.gdbclientutils import *
class MyResponder(MockGDBServerResponder):
def cont(self):
return "W47"
class FakeEmulator(MockGDBServer):
def __init__(self, addr):
super().__init__(UnixServerSocket(addr))
self.responder = MyResponder()
def main():
parser = argparse.ArgumentParser(description=dedent("""\
Implements a fake qemu for testing purposes. The executable program
is not actually run. Instead a very basic mock process is presented
to lldb. The emulated program must accept at least one argument.
This should be a path where the emulator will dump its state. This
allows us to check the invocation parameters.
"""))
parser.add_argument('-g', metavar="unix-socket", required=True)
parser.add_argument('program', help="The program to 'emulate'.")
parser.add_argument('state_file', help="Where to dump the emulator state.")
parsed, rest = parser.parse_known_args()
with open(parsed.state_file, "w") as f:
json.dump({"program":parsed.program, "rest":rest}, f)
emulator = FakeEmulator(parsed.g)
emulator.run()
if __name__ == "__main__":
main()