From 1b74cf992986287a510fe3b28a8ee7554e8b0992 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Sat, 21 Jun 2014 02:00:23 -0700 Subject: porting: Port for FreeBSD rebased from Mike Ma's efforts - Provides a working Gluster Management Daemon, CLI - Provides a working GlusterFS server, GlusterNFS server - Provides a working GlusterFS client - execinfo port from FreeBSD is moved into ./contrib/libexecinfo for ease of portability on NetBSD. (FreeBSD 10 and OSX provide execinfo natively) - More portability cleanups for Darwin, FreeBSD and NetBSD - Provides a new rc script for FreeBSD Change-Id: I8dff336f97479ca5a7f9b8c6b730051c0f8ac46f BUG: 1111774 Original-Author: Mike Ma Signed-off-by: Harshavardhana Reviewed-on: http://review.gluster.org/8141 Tested-by: Gluster Build System Reviewed-by: Kaleb KEITHLEY --- libglusterfs/src/common-utils.c | 89 +++++++++-------------------------------- 1 file changed, 18 insertions(+), 71 deletions(-) (limited to 'libglusterfs/src/common-utils.c') diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 6ba5223da0b..124b312f4a1 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -15,6 +15,8 @@ #ifdef HAVE_BACKTRACE #include +#else +#include "execinfo_compat.h" #endif #include @@ -33,7 +35,7 @@ #include #include -#if defined GF_BSD_HOST_OS || defined GF_DARWIN_HOST_OS +#if defined(GF_BSD_HOST_OS) || defined(GF_DARWIN_HOST_OS) #include #endif @@ -531,11 +533,9 @@ gf_print_trace (int32_t signum, glusterfs_ctx_t *ctx) } gf_dump_config_flags (); -#if HAVE_BACKTRACE gf_msg_backtrace_nomem (GF_LOG_ALERT, 200); sprintf (msg, "---------"); gf_msg_plain_nomem (GF_LOG_ALERT, msg); -#endif /* HAVE_BACKTRACE */ /* Send a signal to terminate the process */ signal (signum, SIG_DFL); @@ -3062,82 +3062,29 @@ gf_set_log_ident (cmd_args_t *cmd_args) int gf_thread_create (pthread_t *thread, const pthread_attr_t *attr, - void *(*start_routine)(void *), void *arg) -{ - sigset_t set, old; - int ret; - - sigemptyset (&set); - - sigfillset (&set); - sigdelset (&set, SIGSEGV); - sigdelset (&set, SIGBUS); - sigdelset (&set, SIGILL); - sigdelset (&set, SIGSYS); - sigdelset (&set, SIGFPE); - sigdelset (&set, SIGABRT); - - pthread_sigmask (SIG_BLOCK, &set, &old); - - ret = pthread_create (thread, attr, start_routine, arg); - - pthread_sigmask (SIG_SETMASK, &old, NULL); - - return ret; -} - -#ifdef __NetBSD__ -#ifdef __MACHINE_STACK_GROWS_UP -#define BELOW > -#else -#define BELOW < -#endif - -struct frameinfo { - struct frameinfo *next; - void *return_address; -}; - -size_t -backtrace(void **trace, size_t len) + void *(*start_routine)(void *), void *arg) { - const struct frameinfo *frame = __builtin_frame_address(0); - void *stack = &stack; - size_t i; + sigset_t set, old; + int ret; - for (i = 0; i < len; i++) { - if ((void *)frame BELOW stack) - return i; - trace[i] = frame->return_address; - frame = frame->next; - } + sigemptyset (&set); - return len; -} + sigfillset (&set); + sigdelset (&set, SIGSEGV); + sigdelset (&set, SIGBUS); + sigdelset (&set, SIGILL); + sigdelset (&set, SIGSYS); + sigdelset (&set, SIGFPE); + sigdelset (&set, SIGABRT); -char ** -backtrace_symbols(void *const *trace, size_t len) -{ - static const size_t slen = sizeof("0x123456789abcdef"); - char **ptr = calloc(len, sizeof(*ptr) + slen); - size_t i; + pthread_sigmask (SIG_BLOCK, &set, &old); - if (ptr == NULL) - return NULL; + ret = pthread_create (thread, attr, start_routine, arg); - char *str = (void *)(ptr + len); - size_t cur = 0, left = len * slen; + pthread_sigmask (SIG_SETMASK, &old, NULL); - for (i = 0; i < len; i++) { - ptr[i] = str + cur; - cur += snprintf(str + cur, left - cur, "%p", trace[i]) + 1; - assert(cur < left); - } - - return ptr; + return ret; } -#undef BELOW -#endif /* __NetBSD__ */ int gf_skip_header_section (int fd, int header_len) -- cgit