diff --git a/osaca/parser/parser_AArch64.py b/osaca/parser/parser_AArch64.py index d75d3ed..98d40da 100755 --- a/osaca/parser/parser_AArch64.py +++ b/osaca/parser/parser_AArch64.py @@ -347,6 +347,8 @@ class ParserAArch64(BaseParser): """Post-process memory address operand""" # Remove unnecessarily created dictionary entries during parsing offset = None if 'offset' not in memory_address else memory_address['offset'] + if isinstance(offset, list) and len(offset) == 1: + offset = offset[0] base = None if 'base' not in memory_address else memory_address['base'] index = None if 'index' not in memory_address else memory_address['index'] scale = 1 diff --git a/tests/all_tests.py b/tests/all_tests.py index 355e322..720932f 100755 --- a/tests/all_tests.py +++ b/tests/all_tests.py @@ -8,7 +8,7 @@ suite = unittest.TestLoader().loadTestsFromNames( [ 'test_base_parser', 'test_parser_x86att', - 'test_parser_AArch64v81', + 'test_parser_AArch64', 'test_marker_utils', 'test_semantics', 'test_frontend', diff --git a/tests/test_cli.py b/tests/test_cli.py index 5c3a3dd..8e44a2e 100755 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -11,7 +11,7 @@ from shutil import copyfile from unittest.mock import patch import osaca.osaca as osaca -from osaca.parser import ParserAArch64v81, ParserX86ATT +from osaca.parser import ParserAArch64, ParserX86ATT from osaca.semantics import MachineModel @@ -71,7 +71,7 @@ class TestCLI(unittest.TestCase): def test_get_parser(self): self.assertTrue(isinstance(osaca.get_asm_parser('csx'), ParserX86ATT)) - self.assertTrue(isinstance(osaca.get_asm_parser('tx2'), ParserAArch64v81)) + self.assertTrue(isinstance(osaca.get_asm_parser('tx2'), ParserAArch64)) with self.assertRaises(ValueError): osaca.get_asm_parser('UNKNOWN') diff --git a/tests/test_frontend.py b/tests/test_frontend.py index 4ef43af..eb1ca86 100755 --- a/tests/test_frontend.py +++ b/tests/test_frontend.py @@ -7,7 +7,7 @@ import os import unittest from osaca.frontend import Frontend -from osaca.parser import ParserAArch64v81, ParserX86ATT +from osaca.parser import ParserAArch64, ParserX86ATT from osaca.semantics import ArchSemantics, KernelDG, MachineModel @@ -20,7 +20,7 @@ class TestFrontend(unittest.TestCase): def setUpClass(self): # set up parser and kernels self.parser_x86 = ParserX86ATT() - self.parser_AArch64 = ParserAArch64v81() + 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: diff --git a/tests/test_kerncraftAPI.py b/tests/test_kerncraftAPI.py index 82bea70..06621d4 100755 --- a/tests/test_kerncraftAPI.py +++ b/tests/test_kerncraftAPI.py @@ -9,7 +9,7 @@ import unittest from collections import OrderedDict from osaca.api import KerncraftAPI -from osaca.parser import ParserAArch64v81, ParserX86ATT +from osaca.parser import ParserAArch64, ParserX86ATT class TestKerncraftAPI(unittest.TestCase): @@ -17,7 +17,7 @@ class TestKerncraftAPI(unittest.TestCase): def setUpClass(self): # set up parser and kernels self.parser_x86 = ParserX86ATT() - self.parser_AArch64 = ParserAArch64v81() + 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: diff --git a/tests/test_marker_utils.py b/tests/test_marker_utils.py index b3125eb..bf06afc 100755 --- a/tests/test_marker_utils.py +++ b/tests/test_marker_utils.py @@ -8,13 +8,13 @@ from collections import OrderedDict from osaca.semantics import reduce_to_section, find_basic_blocks, find_jump_labels, \ find_basic_loop_bodies -from osaca.parser import ParserAArch64v81, ParserX86ATT +from osaca.parser import ParserAArch64, ParserX86ATT class TestMarkerUtils(unittest.TestCase): @classmethod def setUpClass(self): - self.parser_AArch = ParserAArch64v81() + self.parser_AArch = ParserAArch64() self.parser_x86 = ParserX86ATT() with open(self._find_file('triad_arm_iaca.s')) as f: triad_code_arm = f.read() diff --git a/tests/test_parser_AArch64v81.py b/tests/test_parser_AArch64.py similarity index 96% rename from tests/test_parser_AArch64v81.py rename to tests/test_parser_AArch64.py index cf600f5..ee1fbff 100755 --- a/tests/test_parser_AArch64v81.py +++ b/tests/test_parser_AArch64.py @@ -8,13 +8,13 @@ import unittest from pyparsing import ParseException -from osaca.parser import AttrDict, ParserAArch64v81 +from osaca.parser import AttrDict, ParserAArch64 -class TestParserAArch64v81(unittest.TestCase): +class TestParserAArch64(unittest.TestCase): @classmethod def setUpClass(self): - self.parser = ParserAArch64v81() + self.parser = ParserAArch64() with open(self._find_file('triad_arm_iaca.s')) as f: self.triad_code = f.read() @@ -147,7 +147,7 @@ class TestParserAArch64v81(unittest.TestCase): line_comment = '// -- Begin main' line_label = '.LBB0_1: // =>This Inner Loop Header: Depth=1' line_directive = '\t.cfi_def_cfa w29, -16' - line_instruction = '\tldr s0, [x11, w10, sxtw #2]\t\t// = <<2' + line_instruction = '\tldr s0, [x11, w10, sxtw #2] // = <<2' line_prefetch = 'prfm pldl1keep, [x26, #2048] //HPL' line_preindexed = 'stp x29, x30, [sp, #-16]!' line_postindexed = 'ldp q2, q3, [x11], #64' @@ -201,7 +201,7 @@ class TestParserAArch64v81(unittest.TestCase): 'directive': None, 'comment': '= <<2', 'label': None, - 'line': 'ldr s0, [x11, w10, sxtw #2]\t\t// = <<2', + 'line': 'ldr s0, [x11, w10, sxtw #2] // = <<2', 'line_number': 4, } instruction_form_5 = { @@ -309,23 +309,23 @@ class TestParserAArch64v81(unittest.TestCase): self.assertEqual(self.parser.normalize_imd(identifier), identifier) def test_multiple_regs(self): - instr_range = 'PUSH {r5-r7}' + instr_range = 'PUSH {x5-x7}' reg_range = AttrDict({ 'register': { 'range': [ - {'prefix': 'r', 'name': '5'}, - {'prefix': 'r', 'name': '7'} + {'prefix': 'x', 'name': '5'}, + {'prefix': 'x', 'name': '7'} ], 'index': None } }) - instr_list = 'POP {r5, r7, r9}' + instr_list = 'POP {x5, x7, x9}' reg_list = AttrDict({ 'register': { 'list': [ - {'prefix': 'r', 'name': '5'}, - {'prefix': 'r', 'name': '7'}, - {'prefix': 'r', 'name': '9'} + {'prefix': 'x', 'name': '5'}, + {'prefix': 'x', 'name': '7'}, + {'prefix': 'x', 'name': '9'} ], 'index': None } @@ -411,5 +411,5 @@ class TestParserAArch64v81(unittest.TestCase): if __name__ == '__main__': - suite = unittest.TestLoader().loadTestsFromTestCase(TestParserAArch64v81) + suite = unittest.TestLoader().loadTestsFromTestCase(TestParserAArch64) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/tests/test_semantics.py b/tests/test_semantics.py index 752760b..d8ffa26 100755 --- a/tests/test_semantics.py +++ b/tests/test_semantics.py @@ -11,7 +11,7 @@ from subprocess import call import networkx as nx from osaca.osaca import get_unmatched_instruction_ratio -from osaca.parser import AttrDict, ParserAArch64v81, ParserX86ATT +from osaca.parser import AttrDict, ParserAArch64, ParserX86ATT from osaca.semantics import (INSTR_FLAGS, ArchSemantics, KernelDG, MachineModel, reduce_to_section) @@ -30,7 +30,7 @@ class TestSemanticTools(unittest.TestCase): call(['cp', '-r', self.MODULE_DATA_DIR, self.USER_DATA_DIR]) # set up parser and kernels self.parser_x86 = ParserX86ATT() - self.parser_AArch64 = ParserAArch64v81() + self.parser_AArch64 = ParserAArch64() with open(self._find_file('kernel_x86.s')) as f: self.code_x86 = f.read() with open(self._find_file('kernel_aarch64.s')) as f: