Skip to content

Commit 137b92a

Browse files
committed
default_panic: handle ".other" OS like ".freestanding"
The default panic handler needs to handle .other like .freestanding (i.e., infinite loop), as it cannot expect any of the std.debug.panicImpl code to work (which brings in Locks, Threads and Progress, etc). Also, update the unwind_freestanding.zig test case to also run on the .other OS target, too. This should keep the stacktrace generation in debug.zig working with that target.
1 parent 11c95a1 commit 137b92a

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

lib/std/builtin.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ pub fn default_panic(msg: []const u8, error_return_trace: ?*StackTrace, ret_addr
801801
}
802802

803803
switch (builtin.os.tag) {
804-
.freestanding => {
804+
.freestanding, .other => {
805805
while (true) {
806806
@breakpoint();
807807
}

test/standalone/stack_iterator/build.zig

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,14 @@ pub fn build(b: *std.Build) void {
113113
// Unwinding without libc/posix
114114
//
115115
// No "getcontext" or "ucontext_t"
116-
{
116+
const no_os_targets = [_]std.Target.Os.Tag{ .freestanding, .other };
117+
inline for (no_os_targets) |os_tag| {
117118
const exe = b.addExecutable(.{
118119
.name = "unwind_freestanding",
119120
.root_source_file = b.path("unwind_freestanding.zig"),
120121
.target = b.resolveTargetQuery(.{
121122
.cpu_arch = .x86_64,
122-
.os_tag = .freestanding,
123+
.os_tag = os_tag,
123124
}),
124125
.optimize = optimize,
125126
.unwind_tables = null,

test/standalone/stack_iterator/unwind_freestanding.zig

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ noinline fn frame0(expected: *[4]usize, unwound: *[4]usize) void {
3636
frame1(expected, unwound);
3737
}
3838

39-
// Freestanding entrypoint
39+
// No-OS entrypoint
4040
export fn _start() callconv(.C) noreturn {
4141
var expected: [4]usize = undefined;
4242
var unwound: [4]usize = undefined;
@@ -50,8 +50,9 @@ export fn _start() callconv(.C) noreturn {
5050
}
5151
}
5252

53-
// Need to compile as "freestanding" to exercise the StackIterator code, but when run as a
54-
// regression test need to actually exit. So assume we're running on x86_64-linux ...
53+
// Need to compile with the target OS as "freestanding" or "other" to
54+
// exercise the StackIterator code, but when run as a regression test
55+
// need to actually exit. So assume we're running on x86_64-linux ...
5556
asm volatile (
5657
\\movl $60, %%eax
5758
\\syscall

0 commit comments

Comments
 (0)