| 109 | } |
| 110 | |
| 111 | void DwarfParser::parseFde() { |
| 112 | u32 fde_len = get32(); |
| 113 | if (fde_len == 0 || fde_len == 0xffffffff) { |
| 114 | return; |
| 115 | } |
| 116 | |
| 117 | const char* fde_start = _ptr; |
| 118 | u32 cie_offset = get32(); |
| 119 | if (_count == 0) { |
| 120 | _ptr = fde_start - cie_offset; |
| 121 | parseCie(); |
| 122 | _ptr = fde_start + 4; |
| 123 | } |
| 124 | |
| 125 | u32 range_start = getPtr() - _image_base; |
| 126 | u32 range_len = get32(); |
| 127 | _ptr += getLeb(); |
| 128 | parseInstructions(range_start, fde_start + fde_len); |
| 129 | addRecord(range_start + range_len, DW_REG_FP, LINKED_FRAME_SIZE, -LINKED_FRAME_SIZE, -LINKED_FRAME_SIZE + DW_STACK_SLOT); |
| 130 | } |
| 131 | |
| 132 | void DwarfParser::parseInstructions(u32 loc, const char* end) { |
| 133 | const u32 code_align = _code_align; |
nothing calls this directly
no outgoing calls
no test coverage detected