authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-07-18 14:02:09-04:00
committergravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-07-20 22:58:16-04:00
log4421b14878eb722da8a57069b2152f7b43ba7ffc
treef5566067e42dcc156780c6e91083268792cf5008
parent2bc2b01dbc0757c5381dd79c32c2f607a6bcc270

dwarf: fixup rules for setting ip


1 files changed, 10 insertions(+), 5 deletions(-)

lib/std/dwarf.zig+10-5
......@@ -1796,6 +1796,7 @@ pub const DwarfInfo = struct {
17961796 };
17971797
17981798 var update_tail: ?*RegisterUpdate = null;
1799 var has_next_ip = true;
17991800 for (context.vm.rowColumns(row)) |column| {
18001801 if (column.register) |register| {
18011802 if (register == cie.return_address_register) {
......@@ -1828,11 +1829,15 @@ pub const DwarfInfo = struct {
18281829 update_tail = tail.prev;
18291830 }
18301831
1831 context.pc = abi.stripInstructionPtrAuthCode(mem.readIntSliceNative(usize, try abi.regBytes(
1832 context.thread_context,
1833 cie.return_address_register,
1834 context.reg_context,
1835 )));
1832 if (has_next_ip) {
1833 context.pc = abi.stripInstructionPtrAuthCode(mem.readIntSliceNative(usize, try abi.regBytes(
1834 context.thread_context,
1835 cie.return_address_register,
1836 context.reg_context,
1837 )));
1838 } else {
1839 context.pc = 0;
1840 }
18361841 (try abi.regValueNative(usize, context.thread_context, abi.ipRegNum(), context.reg_context)).* = context.pc;
18371842 std.debug.print(" new context.pc: 0x{x}\n", .{context.pc});
18381843