blob: 22a250fe2b8795abf4a5b566f114a6fa79a42888 [file] [log] [blame]
Eli Benderskydb51f262013-03-23 06:33:09 -07001#-------------------------------------------------------------------------------
2# elftools tests
3#
4# Eli Bendersky (eliben@gmail.com)
5# This code is in the public domain
6#-------------------------------------------------------------------------------
Eli Bendersky62ae3282011-12-24 06:55:59 +02007try:
8 import unittest2 as unittest
9except ImportError:
10 import unittest
Eli Benderskyebe51162011-10-27 17:34:02 +020011
Eli Benderskydd71c432013-04-08 06:38:57 -070012from utils import setup_syspath; setup_syspath()
Eli Bendersky3501f9f2011-12-09 12:29:06 +020013from elftools.dwarf.descriptions import ExprDumper, set_global_machine_arch
Eli Benderskyebe51162011-10-27 17:34:02 +020014from elftools.dwarf.structs import DWARFStructs
15
16
Eli Bendersky6c17c052011-12-07 14:43:47 +020017class TestExprDumper(unittest.TestCase):
Eli Benderskyebe51162011-10-27 17:34:02 +020018 structs32 = DWARFStructs(
19 little_endian=True,
20 dwarf_format=32,
21 address_size=4)
22
eliben84e27b42011-11-06 15:27:57 +020023 def setUp(self):
Eli Bendersky6c17c052011-12-07 14:43:47 +020024 self.visitor = ExprDumper(self.structs32)
Eli Bendersky3501f9f2011-12-09 12:29:06 +020025 set_global_machine_arch('x64')
eliben84e27b42011-11-06 15:27:57 +020026
27 def test_basic_single(self):
28 self.visitor.process_expr([0x1b])
29 self.assertEqual(self.visitor.get_str(),
30 'DW_OP_div')
Eli Benderskydb51f262013-03-23 06:33:09 -070031
eliben84e27b42011-11-06 15:27:57 +020032 self.setUp()
33 self.visitor.process_expr([0x74, 0x82, 0x01])
34 self.assertEqual(self.visitor.get_str(),
Eli Bendersky3501f9f2011-12-09 12:29:06 +020035 'DW_OP_breg4 (rsi): 130')
Eli Benderskydb51f262013-03-23 06:33:09 -070036
eliben4a4586a2011-11-06 15:49:37 +020037 self.setUp()
38 self.visitor.process_expr([0x91, 0x82, 0x01])
39 self.assertEqual(self.visitor.get_str(),
40 'DW_OP_fbreg: 130')
eliben84e27b42011-11-06 15:27:57 +020041
42 self.setUp()
Eli Bendersky3501f9f2011-12-09 12:29:06 +020043 self.visitor.process_expr([0x51])
44 self.assertEqual(self.visitor.get_str(),
45 'DW_OP_reg1 (rdx)')
46
47 self.setUp()
48 self.visitor.process_expr([0x90, 16])
49 self.assertEqual(self.visitor.get_str(),
50 'DW_OP_regx: 16 (rip)')
51
52 self.setUp()
eliben84e27b42011-11-06 15:27:57 +020053 self.visitor.process_expr([0x9d, 0x8f, 0x0A, 0x90, 0x01])
54 self.assertEqual(self.visitor.get_str(),
55 'DW_OP_bit_piece: 1295 144')
56
57 def test_basic_sequence(self):
58 self.visitor.process_expr([0x03, 0x01, 0x02, 0, 0, 0x06, 0x06])
59 self.assertEqual(self.visitor.get_str(),
60 'DW_OP_addr: 201; DW_OP_deref; DW_OP_deref')
61
62 self.setUp()
63 self.visitor.process_expr([0x15, 0xFF, 0x0b, 0xf1, 0xff])
64 self.assertEqual(self.visitor.get_str(),
65 'DW_OP_pick: 255; DW_OP_const2s: -15')
66
67 self.setUp()
68 self.visitor.process_expr([0x1d, 0x1e, 0x1d, 0x1e, 0x1d, 0x1e])
69 self.assertEqual(self.visitor.get_str(),
70 'DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul')
71
Eli Benderskyebe51162011-10-27 17:34:02 +020072
73if __name__ == '__main__':
74 unittest.main()
75
elibenba447bc2011-11-06 11:29:49 +020076