(mem: &[u8])
| 117 | |
| 118 | impl UnwindInfo { |
| 119 | fn from_slice(mem: &[u8]) -> Self { |
| 120 | let version_and_flags = mem[0]; |
| 121 | let prologue_size = mem[1]; |
| 122 | let unwind_code_count_raw = mem[2]; |
| 123 | let frame_register_and_offset = mem[3]; |
| 124 | let mut unwind_codes = Vec::new(); |
| 125 | |
| 126 | let mut i = 0; |
| 127 | while i < unwind_code_count_raw { |
| 128 | let code = UnwindCode::from_slice(&mem[(4 + (i * 2) as usize)..]); |
| 129 | |
| 130 | i += match &code.value { |
| 131 | UnwindValue::None => 1, |
| 132 | UnwindValue::U16(_) => 2, |
| 133 | UnwindValue::U32(_) => 3, |
| 134 | }; |
| 135 | |
| 136 | unwind_codes.push(code); |
| 137 | } |
| 138 | |
| 139 | Self { |
| 140 | version: version_and_flags & 0x3, |
| 141 | flags: (version_and_flags & 0xF8) >> 3, |
| 142 | prologue_size, |
| 143 | unwind_code_count_raw, |
| 144 | frame_register: frame_register_and_offset & 0xF, |
| 145 | frame_register_offset: (frame_register_and_offset & 0xF0) >> 4, |
| 146 | unwind_codes, |
| 147 | } |
| 148 | } |
| 149 | } |
| 150 | |
| 151 | #[derive(Debug)] |
nothing calls this directly
no test coverage detected