"vscode:/vscode.git/clone" did not exist on "0f64080dcb9f44c923379f909aae82f6c2b2ed19"
Commit ac086b19 authored by David Carlier's avatar David Carlier
Browse files

OpenBSD support.

Special treatment here as backtrace support is optional,
cannot be found via pkg-config and similar neither.
parent 69ca9078
...@@ -102,6 +102,12 @@ else ...@@ -102,6 +102,12 @@ else
ifeq ($(uname_S),OpenBSD) ifeq ($(uname_S),OpenBSD)
# OpenBSD # OpenBSD
FINAL_LIBS+= -lpthread FINAL_LIBS+= -lpthread
ifeq ($(USE_BACKTRACE),yes)
FINAL_CFLAGS+= -DUSE_BACKTRACE -I/usr/local/include
FINAL_LDFLAGS+= -L/usr/local/lib
FINAL_LIBS+= -lexecinfo
endif
else else
ifeq ($(uname_S),FreeBSD) ifeq ($(uname_S),FreeBSD)
# FreeBSD # FreeBSD
......
...@@ -63,7 +63,8 @@ ...@@ -63,7 +63,8 @@
/* Test for backtrace() */ /* Test for backtrace() */
#if defined(__APPLE__) || (defined(__linux__) && defined(__GLIBC__)) || \ #if defined(__APPLE__) || (defined(__linux__) && defined(__GLIBC__)) || \
defined(__FreeBSD__) || defined(__DragonFly__) defined(__FreeBSD__) || (defined(__OpenBSD__) && defined(USE_BACKTRACE))\
|| defined(__DragonFly__)
#define HAVE_BACKTRACE 1 #define HAVE_BACKTRACE 1
#endif #endif
......
...@@ -37,7 +37,11 @@ ...@@ -37,7 +37,11 @@
#ifdef HAVE_BACKTRACE #ifdef HAVE_BACKTRACE
#include <execinfo.h> #include <execinfo.h>
#ifndef __OpenBSD__
#include <ucontext.h> #include <ucontext.h>
#else
typedef ucontext_t sigcontext_t;
#endif
#include <fcntl.h> #include <fcntl.h>
#include "bio.h" #include "bio.h"
#include <unistd.h> #include <unistd.h>
...@@ -736,6 +740,13 @@ static void *getMcontextEip(ucontext_t *uc) { ...@@ -736,6 +740,13 @@ static void *getMcontextEip(ucontext_t *uc) {
#elif defined(__x86_64__) #elif defined(__x86_64__)
return (void*) uc->uc_mcontext.mc_rip; return (void*) uc->uc_mcontext.mc_rip;
#endif #endif
#elif defined(__OpenBSD__)
/* OpenBSD */
#if defined(__i386__)
return (void*) uc->sc_eip;
#elif defined(__x86_64__)
return (void*) uc->sc_rip;
#endif
#elif defined(__DragonFly__) #elif defined(__DragonFly__)
return (void*) uc->uc_mcontext.mc_rip; return (void*) uc->uc_mcontext.mc_rip;
#else #else
...@@ -934,6 +945,61 @@ void logRegisters(ucontext_t *uc) { ...@@ -934,6 +945,61 @@ void logRegisters(ucontext_t *uc) {
); );
logStackContent((void**)uc->uc_mcontext.mc_esp); logStackContent((void**)uc->uc_mcontext.mc_esp);
#endif #endif
#elif defined(__OpenBSD__)
#if defined(__x86_64__)
serverLog(LL_WARNING,
"\n"
"RAX:%016lx RBX:%016lx\nRCX:%016lx RDX:%016lx\n"
"RDI:%016lx RSI:%016lx\nRBP:%016lx RSP:%016lx\n"
"R8 :%016lx R9 :%016lx\nR10:%016lx R11:%016lx\n"
"R12:%016lx R13:%016lx\nR14:%016lx R15:%016lx\n"
"RIP:%016lx EFL:%016lx\nCSGSFS:%016lx",
(unsigned long) uc->sc_rax,
(unsigned long) uc->sc_rbx,
(unsigned long) uc->sc_rcx,
(unsigned long) uc->sc_rdx,
(unsigned long) uc->sc_rdi,
(unsigned long) uc->sc_rsi,
(unsigned long) uc->sc_rbp,
(unsigned long) uc->sc_rsp,
(unsigned long) uc->sc_r8,
(unsigned long) uc->sc_r9,
(unsigned long) uc->sc_r10,
(unsigned long) uc->sc_r11,
(unsigned long) uc->sc_r12,
(unsigned long) uc->sc_r13,
(unsigned long) uc->sc_r14,
(unsigned long) uc->sc_r15,
(unsigned long) uc->sc_rip,
(unsigned long) uc->sc_rflags,
(unsigned long) uc->sc_cs
);
logStackContent((void**)uc->sc_rsp);
#elif defined(__i386__)
serverLog(LL_WARNING,
"\n"
"EAX:%08lx EBX:%08lx ECX:%08lx EDX:%08lx\n"
"EDI:%08lx ESI:%08lx EBP:%08lx ESP:%08lx\n"
"SS :%08lx EFL:%08lx EIP:%08lx CS:%08lx\n"
"DS :%08lx ES :%08lx FS :%08lx GS:%08lx",
(unsigned long) uc->sc_eax,
(unsigned long) uc->sc_ebx,
(unsigned long) uc->sc_ebx,
(unsigned long) uc->sc_edx,
(unsigned long) uc->sc_edi,
(unsigned long) uc->sc_esi,
(unsigned long) uc->sc_ebp,
(unsigned long) uc->sc_esp,
(unsigned long) uc->sc_ss,
(unsigned long) uc->sc_eflags,
(unsigned long) uc->sc_eip,
(unsigned long) uc->sc_cs,
(unsigned long) uc->sc_es,
(unsigned long) uc->sc_fs,
(unsigned long) uc->sc_gs
);
logStackContent((void**)uc->sc_esp);
#endif
#elif defined(__DragonFly__) #elif defined(__DragonFly__)
serverLog(LL_WARNING, serverLog(LL_WARNING,
"\n" "\n"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment