make debug safety stuff lazy
parent
3cbd0065fa
commit
cff5358f60
|
@ -381,10 +381,10 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
|
||||||
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMExternalLinkage);
|
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMExternalLinkage);
|
||||||
break;
|
break;
|
||||||
case GlobalLinkageIdWeak:
|
case GlobalLinkageIdWeak:
|
||||||
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakODRLinkage);
|
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakAnyLinkage);
|
||||||
break;
|
break;
|
||||||
case GlobalLinkageIdLinkOnce:
|
case GlobalLinkageIdLinkOnce:
|
||||||
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceODRLinkage);
|
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceAnyLinkage);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,8 @@ pub fn writeStackTrace(out_stream: &io.OutStream, allocator: &mem.Allocator, tty
|
||||||
const ptr_hex = if (@sizeOf(usize) == 4) "0x{x8}" else "0x{x16}";
|
const ptr_hex = if (@sizeOf(usize) == 4) "0x{x8}" else "0x{x16}";
|
||||||
|
|
||||||
const compile_unit = findCompileUnit(st, return_address) ?? {
|
const compile_unit = findCompileUnit(st, return_address) ?? {
|
||||||
%return out_stream.print(DIM ++ ptr_hex ++ " in ??? (???)" ++ RESET ++ "\n\n\n", return_address);
|
%return out_stream.print("???:?:?: " ++ DIM ++ ptr_hex ++ " in ??? (???)" ++ RESET ++ "\n ???\n\n",
|
||||||
|
return_address);
|
||||||
%return out_stream.flush();
|
%return out_stream.flush();
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
|
@ -52,6 +52,7 @@ error ReadOnlyFileSystem;
|
||||||
error LinkQuotaExceeded;
|
error LinkQuotaExceeded;
|
||||||
error RenameAcrossMountPoints;
|
error RenameAcrossMountPoints;
|
||||||
error DirNotEmpty;
|
error DirNotEmpty;
|
||||||
|
error WouldBlock;
|
||||||
|
|
||||||
/// Fills `buf` with random bytes. If linking against libc, this calls the
|
/// Fills `buf` with random bytes. If linking against libc, this calls the
|
||||||
/// appropriate OS-specific library call. Otherwise it uses the zig standard
|
/// appropriate OS-specific library call. Otherwise it uses the zig standard
|
||||||
|
@ -128,6 +129,11 @@ pub fn posixClose(fd: i32) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error WouldBlock;
|
||||||
|
error FileClosed;
|
||||||
|
error DestinationAddressRequired;
|
||||||
|
error FileSystem;
|
||||||
|
|
||||||
/// Calls POSIX write, and keeps trying if it gets interrupted.
|
/// Calls POSIX write, and keeps trying if it gets interrupted.
|
||||||
pub fn posixWrite(fd: i32, bytes: []const u8) -> %void {
|
pub fn posixWrite(fd: i32, bytes: []const u8) -> %void {
|
||||||
while (true) {
|
while (true) {
|
||||||
|
@ -136,12 +142,15 @@ pub fn posixWrite(fd: i32, bytes: []const u8) -> %void {
|
||||||
if (write_err > 0) {
|
if (write_err > 0) {
|
||||||
return switch (write_err) {
|
return switch (write_err) {
|
||||||
errno.EINTR => continue,
|
errno.EINTR => continue,
|
||||||
errno.EINVAL => unreachable,
|
errno.EINVAL, errno.EFAULT => unreachable,
|
||||||
|
errno.EAGAIN => error.WouldBlock,
|
||||||
|
errno.EBADF => error.FileClosed,
|
||||||
|
errno.EDESTADDRREQ => error.DestinationAddressRequired,
|
||||||
errno.EDQUOT => error.DiskQuota,
|
errno.EDQUOT => error.DiskQuota,
|
||||||
errno.EFBIG => error.FileTooBig,
|
errno.EFBIG => error.FileTooBig,
|
||||||
errno.EIO => error.Io,
|
errno.EIO => error.FileSystem,
|
||||||
errno.ENOSPC => error.NoSpaceLeft,
|
errno.ENOSPC => error.NoSpaceLeft,
|
||||||
errno.EPERM => error.BadPerm,
|
errno.EPERM => error.AccessDenied,
|
||||||
errno.EPIPE => error.PipeFail,
|
errno.EPIPE => error.PipeFail,
|
||||||
else => error.Unexpected,
|
else => error.Unexpected,
|
||||||
}
|
}
|
||||||
|
@ -185,7 +194,7 @@ pub fn posixOpen(file_path: []const u8, flags: usize, perm: usize, allocator: ?&
|
||||||
|
|
||||||
errno.EFAULT => unreachable,
|
errno.EFAULT => unreachable,
|
||||||
errno.EINVAL => unreachable,
|
errno.EINVAL => unreachable,
|
||||||
errno.EACCES => error.BadPerm,
|
errno.EACCES => error.AccessDenied,
|
||||||
errno.EFBIG, errno.EOVERFLOW => error.FileTooBig,
|
errno.EFBIG, errno.EOVERFLOW => error.FileTooBig,
|
||||||
errno.EISDIR => error.IsDir,
|
errno.EISDIR => error.IsDir,
|
||||||
errno.ELOOP => error.SymLinkLoop,
|
errno.ELOOP => error.SymLinkLoop,
|
||||||
|
@ -197,7 +206,7 @@ pub fn posixOpen(file_path: []const u8, flags: usize, perm: usize, allocator: ?&
|
||||||
errno.ENOMEM => error.SystemResources,
|
errno.ENOMEM => error.SystemResources,
|
||||||
errno.ENOSPC => error.NoSpaceLeft,
|
errno.ENOSPC => error.NoSpaceLeft,
|
||||||
errno.ENOTDIR => error.NotDir,
|
errno.ENOTDIR => error.NotDir,
|
||||||
errno.EPERM => error.BadPerm,
|
errno.EPERM => error.AccessDenied,
|
||||||
else => error.Unexpected,
|
else => error.Unexpected,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Note that these functions do not return `dest`, like the libc API.
|
// Note that these functions do not return `dest`, like the libc API.
|
||||||
// The semantics of these functions is dictated by the corresponding
|
// The semantics of these functions is dictated by the corresponding
|
||||||
// LLVM intrinsics, not by the libc API.
|
// LLVM intrinsics, not by the libc API.
|
||||||
|
const builtin = @import("builtin");
|
||||||
|
|
||||||
export fn memset(dest: ?&u8, c: u8, n: usize) {
|
export fn memset(dest: ?&u8, c: u8, n: usize) {
|
||||||
@setDebugSafety(this, false);
|
@setDebugSafety(this, false);
|
||||||
|
@ -31,5 +32,9 @@ export fn memcpy(noalias dest: ?&u8, noalias src: ?&const u8, n: usize) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export fn __stack_chk_fail() {
|
export fn __stack_chk_fail() {
|
||||||
|
if (builtin.is_release) {
|
||||||
|
@setGlobalLinkage(__stack_chk_fail, builtin.GlobalLinkage.Internal);
|
||||||
|
unreachable;
|
||||||
|
}
|
||||||
@panic("stack smashing detected");
|
@panic("stack smashing detected");
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
|
|
||||||
export coldcc fn __zig_panic(message_ptr: &const u8, message_len: usize) -> noreturn {
|
export coldcc fn __zig_panic(message_ptr: &const u8, message_len: usize) -> noreturn {
|
||||||
@setGlobalLinkage(__zig_panic, builtin.GlobalLinkage.Weak);
|
@setGlobalLinkage(__zig_panic, builtin.GlobalLinkage.LinkOnce);
|
||||||
@setDebugSafety(this, false);
|
@setDebugSafety(this, false);
|
||||||
|
|
||||||
if (builtin.__zig_panic_implementation_provided) {
|
if (builtin.__zig_panic_implementation_provided) {
|
||||||
|
|
Loading…
Reference in New Issue