| ... | ... | @@ -460,7 +460,14 @@ pub const Instruction = union(enum) { |
| 460 | 460 | .def_cfa_expression => .{ .def_cfa_expr = try reader.takeLeb128(usize) }, |
| 461 | 461 | |
| 462 | 462 | _ => switch (@backingInt(inst.low.extended)) { |
| 463 | | 0x1C...0x3F => return error.UnimplementedUserOpcode, |
| 463 | // For the moment, we just ignore these so that they don't cause unwinding to |
| 464 | // fail; `SelfUnwinder` already unconditionally strips pointer authentication |
| 465 | // codes. If this code is ever extended to be useful for remote/offline |
| 466 | // unwinding, we will have to actually model the RA sign state properly. |
| 467 | 0x2C => .nop, // DW_CFA_AARCH64_negate_ra_state_with_pc |
| 468 | 0x2D => .nop, // DW_CFA_AARCH64_negate_ra_state |
| 469 | |
| 470 | 0x1C...0x2B, 0x2E...0x3F => return error.UnimplementedUserOpcode, |
| 464 | 471 | else => return error.InvalidOpcode, |
| 465 | 472 | }, |
| 466 | 473 | }, |