Began removal of platform/. The Monitor:: namespace is completely converted.
[aesalon.git] / src / monitor / dwarf / Parser.cpp
blobe226dbe595211e30cbbcd97490abac1112345cfa
1 #include <iostream>
2 #include "Message.h"
3 #include "Parser.h"
5 namespace Aesalon {
6 namespace Monitor {
7 namespace DWARF {
9 Parser::Parser(Misc::SmartPointer<ELF::Parser> elf_parser) : elf_parser(elf_parser) {
10 Misc::SmartPointer<ELF::Section> debug_info_section = elf_parser->get_section(".debug_info");
11 Misc::SmartPointer<Block> debug_info = elf_parser->get_section(".debug_info")->get_content();
14 Word Parser::parse_uleb128(Misc::SmartPointer<Block> block) {
15 Word result = 0;
16 int offset = 0;
18 while(true) {
19 Byte next = *block->get_data(offset);
20 result |= (next & 0x7f) << (offset * 7);
21 if(next & 0x80) break;
22 offset ++;
25 block->remove(0, offset);
27 return result;
30 SWord Parser::parse_sleb128(Misc::SmartPointer<Block> block) {
31 SWord result = 0;
32 /*int offset = 0;*/
34 return result;
37 Word Parser::parse_u8(Misc::SmartPointer<Block> block) {
38 Word value = 0;
39 value = (*block->get_data(0));
40 block->remove(0, 1);
41 return value;
45 Word Parser::parse_u16(Misc::SmartPointer<Block> block) {
46 Word value = 0;
47 value = (*block->get_data(0));
48 value += (*block->get_data(1)) << 8;
49 block->remove(0, 2);
50 return value;
53 Word Parser::parse_u32(Misc::SmartPointer<Block> block) {
54 Word value = 0;
55 value = (*block->get_data(0));
56 value += (*block->get_data(1)) << 8;
57 value += (*block->get_data(2)) << 16;
58 value += (*block->get_data(3)) << 24;
59 block->remove(0, 4);
60 return value;
63 Word Parser::parse_u64(Misc::SmartPointer<Block> block) {
64 Word value = 0;
65 value = (*block->get_data(0));
66 value += Word(*block->get_data(1)) << 8;
67 value += Word(*block->get_data(2)) << 16;
68 value += Word(*block->get_data(3)) << 24;
69 value += Word(*block->get_data(4)) << 32;
70 value += Word(*block->get_data(5)) << 40;
71 value += Word(*block->get_data(6)) << 48;
72 value += Word(*block->get_data(7)) << 56;
74 block->remove(0, 8);
75 return value;
78 } // namespace DWARF
79 } // namespace Monitor
80 } // namespace Aesalon