aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Thread.zig
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-10-23 19:35:54 +0200
committerGitHub <noreply@github.com>2025-10-23 19:35:54 +0200
commit70206af4829964420d7902488c66ba0edc37ba76 (patch)
tree217d18cc05cd69c06e4f9f367a6ca2c3492e5c6d /lib/std/Thread.zig
parente5fcc8192da248b890b5f3c8eb65ddec010ba0ef (diff)
parent07d764dc301d4547a6dab131cd6b687fef3278c7 (diff)
downloadzig-70206af4829964420d7902488c66ba0edc37ba76.tar.gz
zig-70206af4829964420d7902488c66ba0edc37ba76.zip
Merge pull request #25640 from alexrp/std-target-more-arches
`std.Target`: add tags and info for alpha, hppa, microblaze, sh + some bonus commits
Diffstat (limited to 'lib/std/Thread.zig')
-rw-r--r--lib/std/Thread.zig70
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig
index ce4abada7d..dfefeceea0 100644
--- a/lib/std/Thread.zig
+++ b/lib/std/Thread.zig
@@ -1235,6 +1235,18 @@ const LinuxThreadImpl = struct {
: [ptr] "r" (@intFromPtr(self.mapped.ptr)),
[len] "r" (self.mapped.len),
: .{ .memory = true }),
+ .alpha => asm volatile (
+ \\ ldi $0, 73 # SYS_munmap
+ \\ mov %[ptr], $16
+ \\ mov %[len], $17
+ \\ callsys
+ \\ ldi $0, 1 # SYS_exit
+ \\ ldi $16, 0
+ \\ callsys
+ :
+ : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
+ [len] "r" (self.mapped.len),
+ : .{ .memory = true }),
.hexagon => asm volatile (
\\ r6 = #215 // SYS_munmap
\\ r0 = %[ptr]
@@ -1247,6 +1259,42 @@ const LinuxThreadImpl = struct {
: [ptr] "r" (@intFromPtr(self.mapped.ptr)),
[len] "r" (self.mapped.len),
: .{ .memory = true }),
+ .hppa => asm volatile (
+ \\ ldi 91, %%r20 /* SYS_munmap */
+ \\ copy %[ptr], %%r26
+ \\ copy %[len], %%r25
+ \\ ble 0x100(%%sr2, %%r0)
+ \\ ldi 1, %%r20 /* SYS_exit */
+ \\ ldi 0, %%r26
+ \\ ble 0x100(%%sr2, %%r0)
+ :
+ : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
+ [len] "r" (self.mapped.len),
+ : .{ .memory = true }),
+ .m68k => asm volatile (
+ \\ move.l #91, %%d0 // SYS_munmap
+ \\ move.l %[ptr], %%d1
+ \\ move.l %[len], %%d2
+ \\ trap #0
+ \\ move.l #1, %%d0 // SYS_exit
+ \\ move.l #0, %%d1
+ \\ trap #0
+ :
+ : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
+ [len] "r" (self.mapped.len),
+ : .{ .memory = true }),
+ .microblaze, .microblazeel => asm volatile (
+ \\ ori r12, r0, 91 # SYS_munmap
+ \\ ori r5, %[ptr], 0
+ \\ ori r6, %[len], 0
+ \\ brki r14, 0x8
+ \\ ori r12, r0, 1 # SYS_exit
+ \\ or r5, r0, r0
+ \\ brki r14, 0x8
+ :
+ : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
+ [len] "r" (self.mapped.len),
+ : .{ .memory = true }),
// We set `sp` to the address of the current function as a workaround for a Linux
// kernel bug that caused syscalls to return EFAULT if the stack pointer is invalid.
// The bug was introduced in 46e12c07b3b9603c60fc1d421ff18618241cb081 and fixed in
@@ -1335,6 +1383,28 @@ const LinuxThreadImpl = struct {
: [ptr] "r" (@intFromPtr(self.mapped.ptr)),
[len] "r" (self.mapped.len),
: .{ .memory = true }),
+ .sh, .sheb => asm volatile (
+ \\ mov #91, r3 ! SYS_munmap
+ \\ mov %[ptr], r4
+ \\ mov %[len], r5
+ \\ trapa #31
+ \\ or r0, r0
+ \\ or r0, r0
+ \\ or r0, r0
+ \\ or r0, r0
+ \\ or r0, r0
+ \\ mov #1, r3 ! SYS_exit
+ \\ mov #0, r4
+ \\ trapa #31
+ \\ or r0, r0
+ \\ or r0, r0
+ \\ or r0, r0
+ \\ or r0, r0
+ \\ or r0, r0
+ :
+ : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
+ [len] "r" (self.mapped.len),
+ : .{ .memory = true }),
.sparc => asm volatile (
\\ # See sparc64 comments below.
\\ 1: