def setUpClass(cls): # set up parser and kernels cls.parser_x86 = ParserX86ATT() cls.parser_AArch64 = ParserAArch64() with open(cls._find_file('kernel_x86.s')) as f: cls.code_x86 = f.read() with open(cls._find_file('kernel_aarch64.s')) as f: cls.code_AArch64 = f.read() cls.kernel_x86 = reduce_to_section( cls.parser_x86.parse_file(cls.code_x86), 'x86') cls.kernel_AArch64 = reduce_to_section( cls.parser_AArch64.parse_file(cls.code_AArch64), 'aarch64') # set up machine models cls.machine_model_csx = MachineModel( path_to_yaml=os.path.join(cls.MODULE_DATA_DIR, 'csx.yml')) cls.machine_model_tx2 = MachineModel( path_to_yaml=os.path.join(cls.MODULE_DATA_DIR, 'tx2.yml')) cls.semantics_csx = ArchSemantics(cls.machine_model_csx, path_to_yaml=os.path.join( cls.MODULE_DATA_DIR, 'isa/x86.yml')) cls.semantics_tx2 = ArchSemantics( cls.machine_model_tx2, path_to_yaml=os.path.join(cls.MODULE_DATA_DIR, 'isa/aarch64.yml'), ) cls.machine_model_zen = MachineModel(arch='zen1') for i in range(len(cls.kernel_x86)): cls.semantics_csx.assign_src_dst(cls.kernel_x86[i]) cls.semantics_csx.assign_tp_lt(cls.kernel_x86[i]) for i in range(len(cls.kernel_AArch64)): cls.semantics_tx2.assign_src_dst(cls.kernel_AArch64[i]) cls.semantics_tx2.assign_tp_lt(cls.kernel_AArch64[i])
def setUpClass(self): # set up parser and kernels self.parser_x86 = ParserX86ATT() self.parser_AArch64 = ParserAArch64() with open(self._find_file('kernel_x86.s')) as f: code_x86 = f.read() with open(self._find_file('kernel_aarch64.s')) as f: code_AArch64 = f.read() self.kernel_x86 = self.parser_x86.parse_file(code_x86) self.kernel_AArch64 = self.parser_AArch64.parse_file(code_AArch64) # set up machine models self.machine_model_csx = MachineModel( path_to_yaml=os.path.join(self.MODULE_DATA_DIR, 'csx.yml')) self.machine_model_tx2 = MachineModel(arch='tx2') self.semantics_csx = ArchSemantics(self.machine_model_csx, path_to_yaml=os.path.join( self.MODULE_DATA_DIR, 'isa/x86.yml')) self.semantics_tx2 = ArchSemantics( self.machine_model_tx2, path_to_yaml=os.path.join(self.MODULE_DATA_DIR, 'isa/aarch64.yml'), ) for i in range(len(self.kernel_x86)): self.semantics_csx.assign_src_dst(self.kernel_x86[i]) self.semantics_csx.assign_tp_lt(self.kernel_x86[i]) for i in range(len(self.kernel_AArch64)): self.semantics_tx2.assign_src_dst(self.kernel_AArch64[i]) self.semantics_tx2.assign_tp_lt(self.kernel_AArch64[i])
def __init__(self, isa, path_to_yaml=None): self._isa = isa.lower() path = path_to_yaml or utils.find_datafile('isa/' + self._isa + '.yml') self._isa_model = MachineModel(path_to_yaml=path) if self._isa == 'x86': self._parser = ParserX86ATT() elif self._isa == 'aarch64': self._parser = ParserAArch64()
def __init__(self, isa, path_to_yaml=None): self._isa = isa.lower() path = path_to_yaml or utils.find_datafile("isa/" + self._isa + ".yml") self._isa_model = MachineModel(path_to_yaml=path) if self._isa == "x86": self._parser = ParserX86ATT() elif self._isa == "aarch64": self._parser = ParserAArch64()
def setUpClass(self): # set up parser and kernels self.parser_x86 = ParserX86ATT() self.parser_AArch64 = ParserAArch64() with open(self._find_file('triad_x86_iaca.s')) as f: self.code_x86 = f.read() with open(self._find_file('triad_arm_iaca.s')) as f: self.code_AArch64 = f.read()
def setUpClass(self): self.parser_AArch = ParserAArch64() self.parser_x86 = ParserX86ATT() with open(self._find_file("triad_arm_iaca.s")) as f: triad_code_arm = f.read() with open(self._find_file("triad_x86_iaca.s")) as f: triad_code_x86 = f.read() self.parsed_AArch = self.parser_AArch.parse_file(triad_code_arm) self.parsed_x86 = self.parser_x86.parse_file(triad_code_x86)
def get_asm_parser(arch) -> BaseParser: """ Helper function to create the right parser for a specific architecture. :param arch: architecture code :type arch: str :returns: :class:`~osaca.parser.BaseParser` object """ isa = MachineModel.get_isa_for_arch(arch) if isa == 'x86': return ParserX86ATT() elif isa == 'aarch64': return ParserAArch64()
def __init__(self, arch, code): self.machine_model = MachineModel(arch=arch) self.semantics = ArchSemantics(self.machine_model) isa = self.machine_model.get_ISA().lower() if isa == 'aarch64': self.parser = ParserAArch64() elif isa == 'x86': self.parser = ParserX86ATT() parsed_code = self.parser.parse_file(code) self.kernel = reduce_to_section(parsed_code, self.machine_model.get_ISA()) self.semantics.add_semantics(self.kernel)
def find_marked_kernel_AArch64(lines): """ Find marked section for AArch64 :param list lines: kernel :returns: `tuple of int` -- start and end line of marked section """ nop_bytes = ['213', '3', '32', '31'] return find_marked_section( lines, ParserAArch64(), ['mov'], 'x1', [111, 222], nop_bytes, reverse=True, comments=COMMENT_MARKER, )
def find_marked_kernel_AArch64(lines): """ Find marked section for AArch64 :param list lines: kernel :returns: `tuple of int` -- start and end line of marked section """ nop_bytes = ["213", "3", "32", "31"] return find_marked_section( lines, ParserAArch64(), ["mov"], "x1", [111, 222], nop_bytes, reverse=True, comments=COMMENT_MARKER, )
def setUpClass(self): self.parser = ParserAArch64() with open(self._find_file('triad_arm_iaca.s')) as f: self.triad_code = f.read()
def setUpClass(cls): # set up parser and kernels cls.parser_x86 = ParserX86ATT() cls.parser_AArch64 = ParserAArch64() with open(cls._find_file("kernel_x86.s")) as f: cls.code_x86 = f.read() with open(cls._find_file("kernel_x86_memdep.s")) as f: cls.code_x86_memdep = f.read() with open(cls._find_file("kernel_x86_long_LCD.s")) as f: cls.code_x86_long_LCD = f.read() with open(cls._find_file("kernel_aarch64_memdep.s")) as f: cls.code_aarch64_memdep = f.read() with open(cls._find_file("kernel_aarch64.s")) as f: cls.code_AArch64 = f.read() with open(cls._find_file("kernel_aarch64_sve.s")) as f: cls.code_AArch64_SVE = f.read() cls.kernel_x86 = reduce_to_section( cls.parser_x86.parse_file(cls.code_x86), "x86") cls.kernel_x86_memdep = reduce_to_section( cls.parser_x86.parse_file(cls.code_x86_memdep), "x86") cls.kernel_x86_long_LCD = reduce_to_section( cls.parser_x86.parse_file(cls.code_x86_long_LCD), "x86") cls.kernel_AArch64 = reduce_to_section( cls.parser_AArch64.parse_file(cls.code_AArch64), "aarch64") cls.kernel_aarch64_memdep = reduce_to_section( cls.parser_AArch64.parse_file(cls.code_aarch64_memdep), "aarch64") cls.kernel_aarch64_SVE = reduce_to_section( cls.parser_AArch64.parse_file(cls.code_AArch64_SVE), "aarch64") # set up machine models cls.machine_model_csx = MachineModel( path_to_yaml=os.path.join(cls.MODULE_DATA_DIR, "csx.yml")) cls.machine_model_tx2 = MachineModel( path_to_yaml=os.path.join(cls.MODULE_DATA_DIR, "tx2.yml")) cls.machine_model_a64fx = MachineModel( path_to_yaml=os.path.join(cls.MODULE_DATA_DIR, "a64fx.yml")) cls.semantics_x86 = ISASemantics("x86") cls.semantics_csx = ArchSemantics(cls.machine_model_csx, path_to_yaml=os.path.join( cls.MODULE_DATA_DIR, "isa/x86.yml")) cls.semantics_aarch64 = ISASemantics("aarch64") cls.semantics_tx2 = ArchSemantics( cls.machine_model_tx2, path_to_yaml=os.path.join(cls.MODULE_DATA_DIR, "isa/aarch64.yml"), ) cls.semantics_a64fx = ArchSemantics( cls.machine_model_a64fx, path_to_yaml=os.path.join(cls.MODULE_DATA_DIR, "isa/aarch64.yml"), ) cls.machine_model_zen = MachineModel(arch="zen1") for i in range(len(cls.kernel_x86)): cls.semantics_csx.assign_src_dst(cls.kernel_x86[i]) cls.semantics_csx.assign_tp_lt(cls.kernel_x86[i]) for i in range(len(cls.kernel_x86_memdep)): cls.semantics_csx.assign_src_dst(cls.kernel_x86_memdep[i]) cls.semantics_csx.assign_tp_lt(cls.kernel_x86_memdep[i]) for i in range(len(cls.kernel_x86_long_LCD)): cls.semantics_csx.assign_src_dst(cls.kernel_x86_long_LCD[i]) cls.semantics_csx.assign_tp_lt(cls.kernel_x86_long_LCD[i]) for i in range(len(cls.kernel_AArch64)): cls.semantics_tx2.assign_src_dst(cls.kernel_AArch64[i]) cls.semantics_tx2.assign_tp_lt(cls.kernel_AArch64[i]) for i in range(len(cls.kernel_aarch64_memdep)): cls.semantics_tx2.assign_src_dst(cls.kernel_aarch64_memdep[i]) cls.semantics_tx2.assign_tp_lt(cls.kernel_aarch64_memdep[i]) for i in range(len(cls.kernel_aarch64_SVE)): cls.semantics_a64fx.assign_src_dst(cls.kernel_aarch64_SVE[i]) cls.semantics_a64fx.assign_tp_lt(cls.kernel_aarch64_SVE[i])