diff --git a/osaca/parser/parser_x86att.py b/osaca/parser/parser_x86att.py index d7489ea..e1689bc 100755 --- a/osaca/parser/parser_x86att.py +++ b/osaca/parser/parser_x86att.py @@ -23,7 +23,7 @@ class ParserX86ATT(BaseParser): # Define x86 assembly identifier id_offset = pp.Word(pp.nums) + pp.Suppress(pp.Literal('+')) first = pp.Word(pp.alphas + '_.', exact=1) - rest = pp.Word(pp.alphanums + '$_.') + rest = pp.Word(pp.alphanums + '$_.+-') identifier = pp.Group( pp.Optional(id_offset).setResultsName('offset') + pp.Combine(first + pp.Optional(rest)).setResultsName('name') diff --git a/tests/test_parser_x86att.py b/tests/test_parser_x86att.py index 16d43c8..2ee6423 100755 --- a/tests/test_parser_x86att.py +++ b/tests/test_parser_x86att.py @@ -45,6 +45,15 @@ class TestParserX86ATT(unittest.TestCase): self.assertEqual(len(self._get_directive(self.parser, '\t.text').parameters), 0) self.assertEqual(self._get_directive(self.parser, '\t.align\t16,0x90').name, 'align') self.assertEqual(len(self._get_directive(self.parser, '\t.align\t16,0x90').parameters), 2) + self.assertEqual( + self._get_directive(self.parser, '\t.set\tL$set$0,LECIE1-LSCIE1').parameters, + [{'name': 'L$set$0'}, {'name': 'LECIE1-LSCIE1'}]) + self.assertEqual( + self._get_directive(self.parser, + '\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support' + ).parameters, + [{'name': v} for v in + ['__TEXT', '__eh_frame', 'coalesced', 'no_toc+strip_static_syms+live_support']]) self.assertEqual( self._get_directive(self.parser, '\t.align\t16,0x90').parameters[1], '0x90' )