build: check for 'backtrace' presence in meson

This commit is contained in:
Riccardo Schirone 2022-06-22 22:38:51 +02:00 committed by Anton Kochkov
parent 416f1650cd
commit d4a2a28bd5
3 changed files with 7 additions and 25 deletions

View file

@ -47,6 +47,7 @@
#define WITH_SWIFT_DEMANGLER @WITH_SWIFT_DEMANGLER@
#define HAVE_COPYFILE @HAVE_COPYFILE@
#define HAVE_COPY_FILE_RANGE @HAVE_COPY_FILE_RANGE@
#define HAVE_BACKTRACE @HAVE_BACKTRACE@
#define HAVE_HEADER_LINUX_ASHMEM_H @HAVE_HEADER_LINUX_ASHMEM_H@
#define HAVE_HEADER_SYS_SHM_H @HAVE_HEADER_SYS_SHM_H@

View file

@ -7,16 +7,10 @@
#if defined(__NetBSD__)
#include <sys/param.h>
#include <sys/sysctl.h>
#if __NetBSD_Prereq__(7, 0, 0)
#define NETBSD_WITH_BACKTRACE
#endif
#endif
#if defined(__FreeBSD__)
#include <sys/param.h>
#include <sys/sysctl.h>
#if __FreeBSD_version >= 1000000
#define FREEBSD_WITH_BACKTRACE
#endif
#endif
#if defined(__DragonFly__)
#include <sys/param.h>
@ -37,8 +31,7 @@
static char **env = NULL;
#if (__linux__ && __GNU_LIBRARY__) || defined(NETBSD_WITH_BACKTRACE) || \
defined(FREEBSD_WITH_BACKTRACE) || __DragonFly__ || __sun || __HAIKU__
#if HAVE_BACKTRACE
#include <execinfo.h>
#endif
#if __APPLE__
@ -266,21 +259,8 @@ RZ_API char *rz_sys_cmd_strf(const char *fmt, ...) {
return ret;
}
#ifdef __MAC_10_7
#define APPLE_WITH_BACKTRACE 1
#endif
#ifdef __IPHONE_4_0
#define APPLE_WITH_BACKTRACE 1
#endif
#if (__linux__ && __GNU_LIBRARY__) || (__APPLE__ && APPLE_WITH_BACKTRACE) || \
defined(NETBSD_WITH_BACKTRACE) || defined(FREEBSD_WITH_BACKTRACE) || \
__DragonFly__ || __sun || __HAIKU__
#define HAVE_BACKTRACE 1
#endif
RZ_API void rz_sys_backtrace(void) {
#ifdef HAVE_BACKTRACE
#if HAVE_BACKTRACE
void *array[10];
size_t size = backtrace(array, 10);
eprintf("Backtrace %zd stack frames.\n", size);
@ -291,7 +271,7 @@ RZ_API void rz_sys_backtrace(void) {
void *saved_fp = __builtin_frame_address(1);
int depth = 0;
printf("[%d] pc == %p fp == %p\n", depth++, saved_pc, saved_fp);
eprintf("[%d] pc == %p fp == %p\n", depth++, saved_pc, saved_fp);
fp = saved_fp;
while (fp) {
saved_fp = *fp;
@ -300,7 +280,7 @@ RZ_API void rz_sys_backtrace(void) {
break;
}
saved_pc = *(fp + 2);
printf("[%d] pc == %p fp == %p\n", depth++, saved_pc, saved_fp);
eprintf("[%d] pc == %p fp == %p\n", depth++, saved_pc, saved_fp);
}
#else
#ifdef _MSC_VER
@ -438,7 +418,7 @@ RZ_API int rz_sys_crash_handler(const char *cmd) {
if (!checkcmd(cmd)) {
return false;
}
#ifdef HAVE_BACKTRACE
#if HAVE_BACKTRACE
void *array[1];
/* call this outside of the signal handler to init it safely */
backtrace(array, 1);

View file

@ -485,6 +485,7 @@ foreach item : [
['pipe2', '#define _GNU_SOURCE\n#include <fcntl.h>\n#include <unistd.h>', []],
# copy_file_range for now disable on freebsd as it s not reliable even for small chunks
['copy_file_range', '#ifdef __linux__\n#define _GNU_SOURCE\n#include <unistd.h>\n#endif', []],
['backtrace', '', []],
]
func = item[0]
ok = cc.has_function(func, prefix: item[1], dependencies: item[2])