BUILD: makefile: enable backtrace by default on musl
authorWilly Tarreau <w@1wt.eu>
Thu, 17 Apr 2025 14:11:14 +0000 (16:11 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 27 May 2025 13:13:22 +0000 (15:13 +0200)
The reason musl builds was not producing exploitable backtraces was
that the toolchain used appears to automatically omit the frame pointer
at -O2 but leaves it at -O0. This patch just makes sure to always append
-fno-omit-frame-pointer to the BACKTRACE cflags and enables the option
with musl where it now works. This will allow us to finally get
exploitable traces from docker images where core dumps are not always
available.

(cherry picked from commit f499fa3dcd24b5a17ed97842f5e867bd37739754)
[wt: this should be progressively backported to 3.0 or maybe even 2.8
 since a few users have already reported hard-to-debug issues in Docker]
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit d510825598bd5bf28d0c95b8ad5cc2873b4300c8)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

Makefile

index 1606ba2..d2f56b9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -399,7 +399,7 @@ ifeq ($(TARGET),linux-musl)
     USE_POLL USE_TPROXY USE_LIBCRYPT USE_DL USE_RT USE_CRYPT_H USE_NETFILTER  \
     USE_CPU_AFFINITY USE_THREAD USE_EPOLL USE_LINUX_TPROXY USE_LINUX_CAP      \
     USE_ACCEPT4 USE_LINUX_SPLICE USE_PRCTL USE_THREAD_DUMP USE_NS USE_TFO     \
-    USE_GETADDRINFO USE_SHM_OPEN)
+    USE_GETADDRINFO USE_SHM_OPEN USE_BACKTRACE)
   INSTALL = install -v
 endif
 
@@ -590,6 +590,7 @@ endif
 
 ifneq ($(USE_BACKTRACE:0=),)
   BACKTRACE_LDFLAGS = -Wl,$(if $(EXPORT_SYMBOL),$(EXPORT_SYMBOL),--export-dynamic)
+  BACKTRACE_CFLAGS  = -fno-omit-frame-pointer
 endif
 
 ifneq ($(USE_CPU_AFFINITY:0=),)