blob: 8e293db9cf8412a19ad0dd14ae636e1cc33e0b3d [file] [log] [blame]
Eli Benderskyebe51162011-10-27 17:34:02 +02001import sys, unittest
eliben84e27b42011-11-06 15:27:57 +02002from cStringIO import StringIO
Eli Benderskyebe51162011-10-27 17:34:02 +02003
4sys.path.extend(('..', '.'))
Eli Bendersky3501f9f2011-12-09 12:29:06 +02005from elftools.dwarf.descriptions import ExprDumper, set_global_machine_arch
Eli Benderskyebe51162011-10-27 17:34:02 +02006from elftools.dwarf.structs import DWARFStructs
7
8
Eli Bendersky6c17c052011-12-07 14:43:47 +02009class TestExprDumper(unittest.TestCase):
Eli Benderskyebe51162011-10-27 17:34:02 +020010 structs32 = DWARFStructs(
11 little_endian=True,
12 dwarf_format=32,
13 address_size=4)
14
eliben84e27b42011-11-06 15:27:57 +020015 def setUp(self):
Eli Bendersky6c17c052011-12-07 14:43:47 +020016 self.visitor = ExprDumper(self.structs32)
Eli Bendersky3501f9f2011-12-09 12:29:06 +020017 set_global_machine_arch('x64')
eliben84e27b42011-11-06 15:27:57 +020018
19 def test_basic_single(self):
20 self.visitor.process_expr([0x1b])
21 self.assertEqual(self.visitor.get_str(),
22 'DW_OP_div')
23
24 self.setUp()
25 self.visitor.process_expr([0x74, 0x82, 0x01])
26 self.assertEqual(self.visitor.get_str(),
Eli Bendersky3501f9f2011-12-09 12:29:06 +020027 'DW_OP_breg4 (rsi): 130')
eliben4a4586a2011-11-06 15:49:37 +020028
29 self.setUp()
30 self.visitor.process_expr([0x91, 0x82, 0x01])
31 self.assertEqual(self.visitor.get_str(),
32 'DW_OP_fbreg: 130')
eliben84e27b42011-11-06 15:27:57 +020033
34 self.setUp()
Eli Bendersky3501f9f2011-12-09 12:29:06 +020035 self.visitor.process_expr([0x51])
36 self.assertEqual(self.visitor.get_str(),
37 'DW_OP_reg1 (rdx)')
38
39 self.setUp()
40 self.visitor.process_expr([0x90, 16])
41 self.assertEqual(self.visitor.get_str(),
42 'DW_OP_regx: 16 (rip)')
43
44 self.setUp()
eliben84e27b42011-11-06 15:27:57 +020045 self.visitor.process_expr([0x9d, 0x8f, 0x0A, 0x90, 0x01])
46 self.assertEqual(self.visitor.get_str(),
47 'DW_OP_bit_piece: 1295 144')
48
49 def test_basic_sequence(self):
50 self.visitor.process_expr([0x03, 0x01, 0x02, 0, 0, 0x06, 0x06])
51 self.assertEqual(self.visitor.get_str(),
52 'DW_OP_addr: 201; DW_OP_deref; DW_OP_deref')
53
54 self.setUp()
55 self.visitor.process_expr([0x15, 0xFF, 0x0b, 0xf1, 0xff])
56 self.assertEqual(self.visitor.get_str(),
57 'DW_OP_pick: 255; DW_OP_const2s: -15')
58
59 self.setUp()
60 self.visitor.process_expr([0x1d, 0x1e, 0x1d, 0x1e, 0x1d, 0x1e])
61 self.assertEqual(self.visitor.get_str(),
62 'DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul')
63
Eli Benderskyebe51162011-10-27 17:34:02 +020064
65if __name__ == '__main__':
66 unittest.main()
67
elibenba447bc2011-11-06 11:29:49 +020068