commit ea694bfdb762a4dd18654c73aaaaf1b917d99cc3 (tree)
parent 9b4f2b40e36a2b59d0550e22f7b3fcfc06d70135
Author: Alex Rønne Petersen <alex@alexrp.com>
Date: Sun, 12 Oct 2025 02:36:40 +0200
std.debug.cpu_context: consider arm and aarch64 reserved register ranges unsupported
If these ever get allocated, it's most likely going to be for things that don't
matter to us anyway, so completely abandoning DWARF unwinding just because we
see these doesn't seem justified. We will still do so if we're actually asked to
read from such a register, which is the only actually problematic case; see
c23a5ccd19 for more details.
Diffstat:
1 file changed, 6 insertions(+), 0 deletions(-)
diff --git a/lib/std/debug/cpu_context.zig b/lib/std/debug/cpu_context.zig
@@ -322,6 +322,7 @@ const Arm = struct {
131 => return error.UnsupportedRegister, // SPSR_ABT
132 => return error.UnsupportedRegister, // SPSR_UND
133 => return error.UnsupportedRegister, // SPSR_SVC
+ 134...142 => return error.UnsupportedRegister, // Reserved
143 => return error.UnsupportedRegister, // RA_AUTH_CODE
144...150 => return error.UnsupportedRegister, // R8_USR - R14_USR
151...157 => return error.UnsupportedRegister, // R8_FIQ - R14_FIQ
@@ -329,12 +330,16 @@ const Arm = struct {
160...161 => return error.UnsupportedRegister, // R13_ABT - R14_ABT
162...163 => return error.UnsupportedRegister, // R13_UND - R14_UND
164...165 => return error.UnsupportedRegister, // R13_SVC - R14_SVC
+ 166...191 => return error.UnsupportedRegister, // Reserved
192...199 => return error.UnsupportedRegister, // wC0 - wC7
+ 200...255 => return error.UnsupportedRegister, // Reserved
256...287 => return error.UnsupportedRegister, // D0 - D31
+ 288...319 => return error.UnsupportedRegister, // Reserved for FP/NEON
320 => return error.UnsupportedRegister, // TPIDRURO
321 => return error.UnsupportedRegister, // TPIDRURW
322 => return error.UnsupportedRegister, // TPIDPR
323 => return error.UnsupportedRegister, // HTPIDPR
+ 324...8191 => return error.UnsupportedRegister, // Reserved
8192...16383 => return error.UnsupportedRegister, // Unspecified vendor co-processor register
else => return error.InvalidRegister,
@@ -393,6 +398,7 @@ const Aarch64 = extern struct {
37 => return error.UnsupportedRegister, // TPIDR_EL1
38 => return error.UnsupportedRegister, // TPIDR_EL2
39 => return error.UnsupportedRegister, // TPIDR_EL3
+ 40...45 => return error.UnsupportedRegister, // Reserved
46 => return error.UnsupportedRegister, // VG
47 => return error.UnsupportedRegister, // FFR
48...63 => return error.UnsupportedRegister, // P0 - P15