blob: 67cfc484f5042aebd5c8fd7471ca6fe182a04a71 [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 Bendersky6c17c052011-12-07 14:43:47 +02005from elftools.dwarf.dwarf_expr import ExprDumper
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)
eliben84e27b42011-11-06 15:27:57 +020017
18 def test_basic_single(self):
19 self.visitor.process_expr([0x1b])
20 self.assertEqual(self.visitor.get_str(),
21 'DW_OP_div')
22
23 self.setUp()
24 self.visitor.process_expr([0x74, 0x82, 0x01])
25 self.assertEqual(self.visitor.get_str(),
26 'DW_OP_breg4: 130')
eliben4a4586a2011-11-06 15:49:37 +020027
28 self.setUp()
29 self.visitor.process_expr([0x91, 0x82, 0x01])
30 self.assertEqual(self.visitor.get_str(),
31 'DW_OP_fbreg: 130')
eliben84e27b42011-11-06 15:27:57 +020032
33 self.setUp()
34 self.visitor.process_expr([0x9d, 0x8f, 0x0A, 0x90, 0x01])
35 self.assertEqual(self.visitor.get_str(),
36 'DW_OP_bit_piece: 1295 144')
37
38 def test_basic_sequence(self):
39 self.visitor.process_expr([0x03, 0x01, 0x02, 0, 0, 0x06, 0x06])
40 self.assertEqual(self.visitor.get_str(),
41 'DW_OP_addr: 201; DW_OP_deref; DW_OP_deref')
42
43 self.setUp()
44 self.visitor.process_expr([0x15, 0xFF, 0x0b, 0xf1, 0xff])
45 self.assertEqual(self.visitor.get_str(),
46 'DW_OP_pick: 255; DW_OP_const2s: -15')
47
48 self.setUp()
49 self.visitor.process_expr([0x1d, 0x1e, 0x1d, 0x1e, 0x1d, 0x1e])
50 self.assertEqual(self.visitor.get_str(),
51 'DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul')
52
Eli Benderskyebe51162011-10-27 17:34:02 +020053
54if __name__ == '__main__':
55 unittest.main()
56
elibenba447bc2011-11-06 11:29:49 +020057