freebsd: backtrace

pull/2906/head
M 2019-11-25 11:54:56 +01:00 committed by Alexander Medvednikov
parent 30042ab54b
commit 837af9b230
3 changed files with 17 additions and 1 deletions

View File

@ -99,6 +99,12 @@ pub fn eprintln(s string) {
C.fflush(stderr)
return
}
$if freebsd {
C.fprintf(stderr, '%.*s\n', s.len, s.str)
C.fflush(stderr)
return
}
// TODO issues with stderr and cross compiling for Linux
println(s)
}
@ -171,4 +177,3 @@ pub fn is_atty(fd int) int {
return C.isatty(fd)
}
}

View File

@ -18,6 +18,7 @@ fn print_backtrace_skipping_top_frames_nix(xskipframes int) bool {
skipframes := xskipframes + 2
$if mac { return print_backtrace_skipping_top_frames_mac(skipframes) }
$if linux { return print_backtrace_skipping_top_frames_linux(skipframes) }
$if freebsd { return print_backtrace_skipping_top_frames_freebsd(skipframes) }
return false
}
@ -32,6 +33,15 @@ fn print_backtrace_skipping_top_frames_mac(skipframes int) bool {
return true
}
fn print_backtrace_skipping_top_frames_freebsd(skipframes int) bool {
$if freebsd {
buffer := [100]byteptr
nr_ptrs := C.backtrace(*voidptr(buffer), 100)
C.backtrace_symbols_fd(*voidptr(&buffer[skipframes]), nr_ptrs-skipframes, 1)
}
return true
}
fn print_backtrace_skipping_top_frames_linux(skipframes int) bool {
$if tinyc {
println('TODO: print_backtrace_skipping_top_frames_linux $skipframes with tcc fails tests with "stack smashing detected" .')

View File

@ -309,6 +309,7 @@ fn platform_postfix_to_ifdefguard(name string) string {
'_nix.v' { '#ifndef _WIN32' }
'_lin.v', '_linux.v' { '#ifdef __linux__' }
'_mac.v', '_darwin.v' { '#ifdef __APPLE__' }
'_bsd.v', '_freebsd.v '{ '#ifdef __FreeBSD__'}
'_solaris.v' { '#ifdef __sun' }
'_haiku.v' { '#ifdef __haiku__' }
else {