OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Native Client Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "common/dwarf/bytereader.h" | |
6 | |
7 #include "elf_reader/elf_object.h" | |
8 | |
9 #include "dwarf_reader/dwarf_parser.h" | |
10 #include "dwarf_reader/dwarf_parse.h" | |
11 #include "dwarf_reader/dwarf_vm.h" | |
12 | |
13 | |
14 namespace dwarf_reader { | |
15 | |
16 void DwarfParseElf(elf_reader::ElfObject *elf, IDwarfReader *reader) { | |
17 DwarfParser dwarf_parser; | |
18 if (dwarf_parser.Init(elf)) { | |
19 dwarf_parser.PopulateReader(reader); | |
20 } | |
21 } | |
22 | |
23 uint64_t DwarfParseVM(IDwarfVM* dwarf_state_machine, | |
24 uint8_t *data, | |
25 uint32_t length) { | |
26 uint64_t return_value = 0; | |
27 dwarf2reader::ByteReader *byte_reader; | |
28 if (dwarf_state_machine->IsLSB()) | |
29 byte_reader = new dwarf2reader::ByteReader( | |
30 dwarf2reader::ENDIANNESS_LITTLE); | |
31 else | |
32 byte_reader = new dwarf2reader::ByteReader( | |
33 dwarf2reader::ENDIANNESS_BIG); | |
34 | |
35 switch(dwarf_state_machine->BitWidth()) { | |
36 case 32: | |
37 byte_reader->SetAddressSize(4); | |
38 return_value = DwarfRun32(dwarf_state_machine, | |
39 byte_reader, | |
40 reinterpret_cast<const char *>(data), | |
41 length); | |
42 break; | |
43 case 64: | |
44 byte_reader->SetAddressSize(8); | |
45 return_value = DwarfRun32(dwarf_state_machine, | |
46 byte_reader, | |
47 reinterpret_cast<const char *>(data), | |
48 length); | |
49 break; | |
50 } | |
51 delete byte_reader; | |
52 return return_value; | |
53 } | |
54 | |
55 } // namespace dwarf_reader | |
56 | |
OLD | NEW |