Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: overhaul the crash handler #10203

Merged
merged 35 commits into from
Apr 17, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
2a633fa
some work
paperclover Apr 10, 2024
3b33c49
linux things
paperclover Apr 10, 2024
0b6b865
linux things
paperclover Apr 10, 2024
fa34944
feat: tracestrings on Windows
paperclover Apr 11, 2024
79af8d2
bwaa
paperclover Apr 10, 2024
eb03a28
Merge remote-tracking branch 'origin/main' into dave/crash-handler
paperclover Apr 12, 2024
a9912a5
more work on the crash handler
paperclover Apr 12, 2024
c021476
Merge branch 'dave/crash-handler' of github.com:oven-sh/bun into dave…
paperclover Apr 12, 2024
455ff79
okay
paperclover Apr 12, 2024
3e5c927
adgadsgbcxcv
paperclover Apr 12, 2024
f906a08
ya
paperclover Apr 12, 2024
3e53dbb
dsafds
paperclover Apr 12, 2024
256f434
Merge remote-tracking branch 'origin/main' into dave/crash-handler
paperclover Apr 12, 2024
fb77fee
a
paperclover Apr 12, 2024
f9d1ee6
wuh
paperclover Apr 13, 2024
82e3894
Merge remote-tracking branch 'origin/main' into dave/crash-handler
paperclover Apr 13, 2024
cbd5103
a
paperclover Apr 13, 2024
2d1c830
bru h
paperclover Apr 13, 2024
2f666c6
ok
paperclover Apr 15, 2024
a5c9979
yay
paperclover Apr 16, 2024
7cc66c8
Merge remote-tracking branch 'origin/main' into dave/crash-handler
paperclover Apr 16, 2024
1b48b1d
window
paperclover Apr 15, 2024
f7dcade
Merge remote-tracking branch 'origin/main' into dave/crash-handler
paperclover Apr 16, 2024
a3c06e0
alright
paperclover Apr 16, 2024
b730add
oops
paperclover Apr 17, 2024
eb43700
yeah
paperclover Apr 17, 2024
cab8ebe
a
paperclover Apr 17, 2024
304fb98
Merge remote-tracking branch 'origin/main' into dave/crash-handler
paperclover Apr 17, 2024
fe2055a
a
paperclover Apr 17, 2024
cc5aa4d
OOM handling
paperclover Apr 17, 2024
cc4fe81
hi
paperclover Apr 17, 2024
907b900
review comments
paperclover Apr 17, 2024
739dbd6
fix on window
paperclover Apr 18, 2024
141127f
Merge branch 'dave/crash-handler' of github.com:oven-sh/bun into dave…
paperclover Apr 18, 2024
c9748fa
Merge remote-tracking branch 'origin/main' into dave/crash-handler
paperclover Apr 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
yay
  • Loading branch information
paperclover committed Apr 16, 2024
commit a5c9979ddd3adc6304890b5363076473cea55557
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1109,6 +1109,7 @@ else()
-fvisibility=hidden
-fvisibility-inlines-hidden
-fno-rtti
-fno-omit-frame-pointer
)
string(APPEND CMAKE_CXX_FLAGS " -std=c++2a")
endif()
Expand Down
6 changes: 5 additions & 1 deletion src/__global.zig → src/Global.zig
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,17 @@ pub inline fn getStartTime() i128 {
return bun.start_time;
}

extern "kernel32" fn SetThreadDescription(thread: std.os.windows.HANDLE, name: [*:0]const u16) callconv(std.os.windows.WINAPI) std.os.windows.HRESULT;

pub fn setThreadName(name: [:0]const u8) void {
if (Environment.isLinux) {
_ = std.os.prctl(.SET_NAME, .{@intFromPtr(name.ptr)}) catch {};
} else if (Environment.isMac) {
_ = std.c.pthread_setname_np(name);
} else if (Environment.isWindows) {
_ = std.os.SetThreadDescription(std.os.GetCurrentThread(), name);
var name_buf: [1024]u16 = undefined;
const name_wide = bun.strings.convertUTF8toUTF16InBufferZ(&name_buf, name);
_ = SetThreadDescription(std.os.windows.kernel32.GetCurrentThread(), name_wide);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/bun.zig
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ pub const shell = struct {
};

pub const Output = @import("./output.zig");
pub const Global = @import("./__global.zig");
pub const Global = @import("./global.zig");

// make this non-pub after https://github.com/ziglang/zig/issues/18462 is resolved
pub const FileDescriptorInt = if (Environment.isBrowser)
Expand Down
16 changes: 7 additions & 9 deletions src/crash_handler.zig
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ pub fn crashHandler(
if (Output.enable_ansi_colors) {
writer.print(Output.prettyFmt("<cyan>", true), .{}) catch std.os.abort();
}

encodeTraceString(
.{
.trace = trace,
Expand Down Expand Up @@ -559,8 +560,6 @@ const metadata_version_line = std.fmt.comptimePrint(
);

fn handleSegfaultPosix(sig: i32, info: *const std.os.siginfo_t, _: ?*const anyopaque) callconv(.C) noreturn {
resetSegfaultHandler();

const addr = switch (bun.Environment.os) {
.linux => @intFromPtr(info.fields.sigfault.addr),
.mac => @intFromPtr(info.addr),
Expand Down Expand Up @@ -628,8 +627,7 @@ pub fn resetSegfaultHandler() void {
updatePosixSegfaultHandler(&act) catch {};
}

pub fn handleSegfaultWindows(info: windows.EXCEPTION_POINTERS) callconv(windows.WINAPI) c_long {
resetSegfaultHandler();
pub fn handleSegfaultWindows(info: *windows.EXCEPTION_POINTERS) callconv(windows.WINAPI) c_long {
crashHandler(
switch (info.ExceptionRecord.ExceptionCode) {
windows.EXCEPTION_DATATYPE_MISALIGNMENT => .{ .datatype_misalignment = {} },
Expand Down Expand Up @@ -753,7 +751,7 @@ const StackLine = union(enum) {
},
javascript,

pub fn fromAddress(addr: usize, name_bytes: []const u8) StackLine {
pub fn fromAddress(addr: usize, name_bytes: []u8) StackLine {
return switch (bun.Environment.os) {
.windows => {
const module = bun.windows.getModuleHandleFromAddress(addr) orelse {
Expand All @@ -770,13 +768,13 @@ const StackLine = union(enum) {
const image_path = bun.windows.exePathW();

return .{
.mapped = .{
.known = .{
// To remap this, `pdb-addr2line --exe bun.pdb 0x123456`
.address = addr - base_address,
.address = @intCast(addr - base_address),

.object = if (!std.mem.eql(u16, name, image_path)) name: {
const basename = name[std.mem.lastIndexOfAny(u16, name, "\\/") orelse 0 ..];
break :name bun.strings.convertUTF8toUTF16InBuffer(&name_bytes, basename);
const basename = name[std.mem.lastIndexOfAny(u16, name, &[_]u16{ '\\', '/' }) orelse 0 ..];
break :name bun.strings.convertUTF16toUTF8InBuffer(name_bytes, basename) catch null;
} else null,
},
};
Expand Down
2 changes: 1 addition & 1 deletion src/deps/zig
14 changes: 14 additions & 0 deletions src/string_immutable.zig
Original file line number Diff line number Diff line change
Expand Up @@ -5402,6 +5402,20 @@ pub fn convertUTF8toUTF16InBuffer(
return buf[0..result];
}

pub fn convertUTF8toUTF16InBufferZ(
buf: []u16,
input: []const u8,
) [:0]u16 {
// TODO: see convertUTF8toUTF16InBuffer
if (input.len == 0) {
buf[0] = 0;
return buf[0..0 :0];
}
const result = bun.simdutf.convert.utf8.to.utf16.le(input, buf);
buf[result] = 0;
return buf[0..result :0];
}

pub fn convertUTF16toUTF8InBuffer(
buf: []u8,
input: []const u16,
Expand Down
Loading