aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-10-12 02:36:40 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2025-10-12 12:59:06 +0200
commitea694bfdb762a4dd18654c73aaaaf1b917d99cc3 (patch)
tree3aa1ecb92b5fc4a24e306a13368302c472e49d94 /lib/std
parent9b4f2b40e36a2b59d0550e22f7b3fcfc06d70135 (diff)
downloadzig-ea694bfdb762a4dd18654c73aaaaf1b917d99cc3.tar.gz
zig-ea694bfdb762a4dd18654c73aaaaf1b917d99cc3.zip
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 (limited to 'lib/std')
-rw-r--r--lib/std/debug/cpu_context.zig6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/std/debug/cpu_context.zig b/lib/std/debug/cpu_context.zig
index febe94cae6..dc77b41c9d 100644
--- 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