Hi

Here a little patch for FreeBSD systems.

Thanks.

Regards.
From 82d3338206dd25cb046032d1b8f005228b8d0a76 Mon Sep 17 00:00:00 2001
From: DC <devne...@gmail.com>
Date: Sat, 21 Aug 2021 09:13:10 +0100
Subject: [PATCH] MINOR: proc: setting the process to produce a core dump on
 FreeBSD.

using the procctl api to set the current process as traceable, thus being able to produce a core dump as well.

making it as compile option if not wished or using freebsd prior to 11.x (last no EOL release).
---
 Makefile      | 7 ++++---
 src/haproxy.c | 9 +++++++++
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index 84b1bc0ea..f6d813c27 100644
--- a/Makefile
+++ b/Makefile
@@ -36,6 +36,7 @@
 #   USE_ACCEPT4          : enable use of accept4() on linux. Automatic.
 #   USE_CLOSEFROM        : enable use of closefrom() on *bsd, solaris. Automatic.
 #   USE_PRCTL            : enable use of prctl(). Automatic.
+#   USE_PROCCTL          : enable use of procctl().
 #   USE_ZLIB             : enable zlib library support and disable SLZ
 #   USE_SLZ              : enable slz library instead of zlib (default=enabled)
 #   USE_CPU_AFFINITY     : enable pinning processes to CPU on Linux. Automatic.
@@ -311,8 +312,8 @@ use_opts = USE_EPOLL USE_KQUEUE USE_NETFILTER                                 \
            USE_GETADDRINFO USE_OPENSSL USE_LUA USE_ACCEPT4                    \
            USE_CLOSEFROM USE_ZLIB USE_SLZ USE_CPU_AFFINITY USE_TFO USE_NS     \
            USE_DL USE_RT USE_DEVICEATLAS USE_51DEGREES USE_WURFL USE_SYSTEMD  \
-           USE_OBSOLETE_LINKER USE_PRCTL USE_THREAD_DUMP USE_EVPORTS USE_OT   \
-           USE_QUIC USE_PROMEX USE_MEMORY_PROFILING
+           USE_OBSOLETE_LINKER USE_PRCTL USE_PROCCTL USE_THREAD_DUMP          \
+           USE_EVPORTS USE_OT USE_QUIC USE_PROMEX USE_MEMORY_PROFILING
 
 #### Target system options
 # Depending on the target platform, some options are set, as well as some
@@ -391,7 +392,7 @@ endif
 ifeq ($(TARGET),freebsd)
   set_target_defaults = $(call default_opts, \
     USE_POLL USE_TPROXY USE_LIBCRYPT USE_THREAD USE_CPU_AFFINITY USE_KQUEUE   \
-    USE_ACCEPT4 USE_CLOSEFROM USE_GETADDRINFO)
+    USE_ACCEPT4 USE_CLOSEFROM USE_GETADDRINFO USE_PROCCTL)
 endif
 
 # DragonFlyBSD 4.3 and above
diff --git a/src/haproxy.c b/src/haproxy.c
index 047861ca9..db957256e 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -70,6 +70,10 @@
 #include <sys/prctl.h>
 #endif
 
+#if defined(USE_PROCCTL)
+#include <sys/procctl.h>
+#endif
+
 #ifdef DEBUG_FULL
 #include <assert.h>
 #endif
@@ -3401,6 +3405,11 @@ int main(int argc, char **argv)
 		if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) == -1)
 			ha_warning("[%s.main()] Failed to set the dumpable flag, "
 				   "no core will be dumped.\n", argv[0]);
+#elif defined(USE_PROCCTL)
+		int traceable = PROC_TRACE_CTL_ENABLE;
+		if (procctl(P_PID, getpid(), PROC_TRACE_CTL, &traceable) == -1)
+			ha_warning("[%s.main()] Failed to set the traceable flag, "
+				   "no core will be dumped.\n", argv[0]);
 #endif
 	}
 
-- 
2.32.0

Reply via email to