mirror of
https://github.com/ziglang/zig.git
synced 2026-02-14 13:30:45 +00:00
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.
This commit is contained in:
parent
a47aa9dd9d
commit
5e1a83ad29
@ -480,7 +480,7 @@ pub fn defaultPanic(
|
||||
}
|
||||
|
||||
switch (builtin.os.tag) {
|
||||
.freestanding => {
|
||||
.freestanding, .other => {
|
||||
@trap();
|
||||
},
|
||||
.uefi => {
|
||||
|
||||
@ -80,7 +80,7 @@ pub fn load(ma: *MemoryAccessor, comptime Type: type, address: usize) ?Type {
|
||||
|
||||
pub fn isValidMemory(address: usize) bool {
|
||||
// We are unable to determine validity of memory for freestanding targets
|
||||
if (native_os == .freestanding or native_os == .uefi) return true;
|
||||
if (native_os == .freestanding or native_os == .other or native_os == .uefi) return true;
|
||||
|
||||
const aligned_address = address & ~@as(usize, @intCast((page_size - 1)));
|
||||
if (aligned_address == 0) return false;
|
||||
|
||||
@ -113,13 +113,14 @@ pub fn build(b: *std.Build) void {
|
||||
// Unwinding without libc/posix
|
||||
//
|
||||
// No "getcontext" or "ucontext_t"
|
||||
{
|
||||
const no_os_targets = [_]std.Target.Os.Tag{ .freestanding, .other };
|
||||
inline for (no_os_targets) |os_tag| {
|
||||
const exe = b.addExecutable(.{
|
||||
.name = "unwind_freestanding",
|
||||
.root_source_file = b.path("unwind_freestanding.zig"),
|
||||
.target = b.resolveTargetQuery(.{
|
||||
.cpu_arch = .x86_64,
|
||||
.os_tag = .freestanding,
|
||||
.os_tag = os_tag,
|
||||
}),
|
||||
.optimize = optimize,
|
||||
.unwind_tables = null,
|
||||
|
||||
@ -36,7 +36,7 @@ noinline fn frame0(expected: *[4]usize, unwound: *[4]usize) void {
|
||||
frame1(expected, unwound);
|
||||
}
|
||||
|
||||
// Freestanding entrypoint
|
||||
// No-OS entrypoint
|
||||
export fn _start() callconv(.C) noreturn {
|
||||
var expected: [4]usize = undefined;
|
||||
var unwound: [4]usize = undefined;
|
||||
@ -50,8 +50,9 @@ export fn _start() callconv(.C) noreturn {
|
||||
}
|
||||
}
|
||||
|
||||
// Need to compile as "freestanding" to exercise the StackIterator code, but when run as a
|
||||
// regression test need to actually exit. So assume we're running on x86_64-linux ...
|
||||
// Need to compile with the target OS as "freestanding" or "other" to
|
||||
// exercise the StackIterator code, but when run as a regression test
|
||||
// need to actually exit. So assume we're running on x86_64-linux ...
|
||||
asm volatile (
|
||||
\\movl $60, %%eax
|
||||
\\syscall
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user