Skip to content

Commit 523f215

Browse files
committed
defaultPanic: @trap on 'other' target
The freestanding and other OS targets by default need to just @trap in the default Panic implementation. And `isValidMemory` won't work with freestanding or other targets. Update the unwind_freestanding.zig test case to also run on the 'other' OS target, too. This should keep the Zig's stacktrace generation from regressing on the standalone targets.
1 parent b2030cb commit 523f215

File tree

4 files changed

+9
-7
lines changed

4 files changed

+9
-7
lines changed

lib/std/debug.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ pub fn defaultPanic(
480480
}
481481

482482
switch (builtin.os.tag) {
483-
.freestanding => {
483+
.freestanding, .other => {
484484
@trap();
485485
},
486486
.uefi => {

lib/std/debug/MemoryAccessor.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ pub fn load(ma: *MemoryAccessor, comptime Type: type, address: usize) ?Type {
8080

8181
pub fn isValidMemory(address: usize) bool {
8282
// We are unable to determine validity of memory for freestanding targets
83-
if (native_os == .freestanding or native_os == .uefi) return true;
83+
if (native_os == .freestanding or native_os == .other or native_os == .uefi) return true;
8484

8585
const aligned_address = address & ~@as(usize, @intCast((page_size - 1)));
8686
if (aligned_address == 0) return false;

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)