diff --git a/libc-test/build.rs b/libc-test/build.rs index 182dd5669f9a8..335976bd5c0cd 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -393,6 +393,7 @@ fn test_openbsd(target: &str) { headers! { cfg: "elf.h", "errno.h", + "execinfo.h", "fcntl.h", "limits.h", "link.h", diff --git a/libc-test/semver/openbsd.txt b/libc-test/semver/openbsd.txt index 5bd387c24017b..c2053ccc9688a 100644 --- a/libc-test/semver/openbsd.txt +++ b/libc-test/semver/openbsd.txt @@ -913,6 +913,10 @@ arc4random_buf arc4random_uniform arphdr atof +backtrace +backtrace_symbols +backtrace_symbols_fd +backtrace_symbols_fmt bsearch caddr_t calloc_conceal diff --git a/src/unix/bsd/netbsdlike/openbsd/mod.rs b/src/unix/bsd/netbsdlike/openbsd/mod.rs index c88dad31e030c..1228683f63b76 100644 --- a/src/unix/bsd/netbsdlike/openbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/openbsd/mod.rs @@ -1606,6 +1606,22 @@ extern "C" { pub fn calloc_conceal(nmemb: ::size_t, size: ::size_t) -> *mut ::c_void; } +#[link(name = "execinfo")] +extern "C" { + pub fn backtrace(addrlist: *mut *mut ::c_void, len: ::size_t) -> ::size_t; + pub fn backtrace_symbols(addrlist: *const *mut ::c_void, len: ::size_t) -> *mut *mut ::c_char; + pub fn backtrace_symbols_fd( + addrlist: *const *mut ::c_void, + len: ::size_t, + fd: ::c_int, + ) -> ::c_int; + pub fn backtrace_symbols_fmt( + addrlist: *const *mut ::c_void, + len: ::size_t, + fmt: *const ::c_char, + ) -> *mut *mut ::c_char; +} + cfg_if! { if #[cfg(libc_union)] { extern {