in scripts/symcryptasm_processor.py [0:0]
def process_file(assembler, architecture, calling_convention, infilename, outfilename):
normal_calling_convention = None
if assembler == "masm":
if architecture == "amd64" and calling_convention == "msft":
normal_calling_convention = CALLING_CONVENTION_AMD64_MSFT
mul_calling_convention = CALLING_CONVENTION_AMD64_MSFT_MUL
nested_calling_convention = CALLING_CONVENTION_AMD64_MSFT_NESTED
elif assembler == "gas":
if architecture == "amd64" and calling_convention == "systemv":
normal_calling_convention = CALLING_CONVENTION_AMD64_SYSTEMV
mul_calling_convention = CALLING_CONVENTION_AMD64_SYSTEMV_MUL
nested_calling_convention = CALLING_CONVENTION_AMD64_SYSTEMV_NESTED
elif architecture == "arm64" and calling_convention == "aapcs64":
normal_calling_convention = CALLING_CONVENTION_ARM64_AAPCS64
mul_calling_convention = None
nested_calling_convention = None
elif assembler == "armasm64":
if architecture == "arm64" and calling_convention == "aapcs64":
normal_calling_convention = CALLING_CONVENTION_ARM64_AAPCS64
mul_calling_convention = None
nested_calling_convention = None
elif architecture == "arm64" and calling_convention == "arm64ec":
normal_calling_convention = CALLING_CONVENTION_ARM64EC_MSFT
mul_calling_convention = None
nested_calling_convention = None
else:
logging.error("Unhandled assembler (%s) in process_file" % assembler)
exit(1)
if normal_calling_convention is None:
logging.error("Unhandled combination (%s + %s + %s) in process_file"
% (assembler, architecture, calling_convention))
exit(1)
# iterate through file line by line in one pass
file_processing_state = ProcessingStateMachine(
assembler, normal_calling_convention, mul_calling_convention, nested_calling_convention)
with open(infilename) as infile:
with open(outfilename, "w") as outfile:
for line_num, line in enumerate(infile):
processed_line = file_processing_state.process_line(line, line_num)
outfile.write(processed_line)