diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2025-10-23 19:35:54 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-23 19:35:54 +0200 |
| commit | 70206af4829964420d7902488c66ba0edc37ba76 (patch) | |
| tree | 217d18cc05cd69c06e4f9f367a6ca2c3492e5c6d /lib/std/Thread.zig | |
| parent | e5fcc8192da248b890b5f3c8eb65ddec010ba0ef (diff) | |
| parent | 07d764dc301d4547a6dab131cd6b687fef3278c7 (diff) | |
| download | zig-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.zig | 70 |
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: |
