diff options
Diffstat (limited to 'net-fs/samba/files/samba-4.15.9-libunwind-automagic.patch')
-rw-r--r-- | net-fs/samba/files/samba-4.15.9-libunwind-automagic.patch | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/net-fs/samba/files/samba-4.15.9-libunwind-automagic.patch b/net-fs/samba/files/samba-4.15.9-libunwind-automagic.patch new file mode 100644 index 000000000000..c3a2c802e6e9 --- /dev/null +++ b/net-fs/samba/files/samba-4.15.9-libunwind-automagic.patch @@ -0,0 +1,118 @@ +https://gitlab.com/samba-team/samba/-/commit/14feb93d481011765f62614ab49b304e17e4f6fd +https://gitlab.com/samba-team/samba/-/merge_requests/2401?commit_id=ac8064cb0d79db377df75a22a240632dbc37f99f +https://bugs.gentoo.org/791349 + +From 14feb93d481011765f62614ab49b304e17e4f6fd Mon Sep 17 00:00:00 2001 +From: Andrew Bartlett <abartlet@samba.org> +Date: Tue, 7 Jun 2022 15:07:59 +1200 +Subject: [PATCH] lib/util: Prefer backtrace_symbols() for internal backtraces + +Backtraces when Samba is in PANIC state are better with +backtrace_symbols() than with libunwind on Ubuntu 20.04 x86_64 +so move libunwind to a off-by-default option, prompted for +if backtrace_symbols() is not available. + +Based on a request by Fco Javier Felix <ffelix@inode64.com> + +Signed-off-by: Andrew Bartlett <abartlet@samba.org> +Reviewed-by: Joseph Sutton <josephsutton@catalyst.net.nz> +--- a/lib/util/fault.c ++++ b/lib/util/fault.c +@@ -222,9 +222,13 @@ _PUBLIC_ void smb_panic(const char *why) + void log_stack_trace(void) + { + #ifdef HAVE_LIBUNWIND +- /* Try to use libunwind before any other technique since on ia64 +- * libunwind correctly walks the stack in more circumstances than +- * backtrace. ++ /* ++ * --with-libunwind is required to use libunwind, the ++ * backtrace_symbols() code below is the default. ++ * ++ * This code is available because a previous version of this ++ * comment asserted that on ia64 libunwind correctly walks the ++ * stack in more circumstances than backtrace. + */ + unw_cursor_t cursor; + unw_context_t uc; +--- a/lib/util/wscript ++++ b/lib/util/wscript +@@ -2,6 +2,15 @@ def options(opt): + ''' This is a bit strange, but disable is the flag, not enable. ''' + opt.add_option('--disable-fault-handling', action='store_true', dest='disable_fault_handling', help=('disable the fault handlers'), default=False) + ++ # We do not want libunwind by default (backtrace_symbols() in ++ # glibc is better) but allow (eg) IA-64 to build with it where it ++ # might be better (per old comment in fault.c) ++ opt.samba_add_onoff_option('libunwind', ++ default=None, ++ help='''Use libunwind instead of the default backtrace_symbols() ++ from libc, for example on IA-64 where it might give a better ++ backtrace.''') ++ + opt.add_option('--with-systemd', + help=("Enable systemd integration"), + action='store_true', dest='enable_systemd') +--- a/lib/util/wscript_configure ++++ b/lib/util/wscript_configure +@@ -1,23 +1,35 @@ + #!/usr/bin/env python +-from waflib import Logs, Options ++from waflib import Logs, Options, Errors + + import os, sys + + if Options.options.disable_fault_handling: + conf.DEFINE('HAVE_DISABLE_FAULT_HANDLING',1) + +-# backtrace could be in libexecinfo or in libc ++# backtrace could be in libexecinfo or in libc. ++# This is our preferred backtrace handler (more useful output than libunwind as at Ubuntu 20.04 x86_64) + conf.CHECK_FUNCS_IN('backtrace backtrace_symbols', 'execinfo', checklibc=True, headers='execinfo.h') + conf.CHECK_HEADERS('execinfo.h') + + conf.SET_TARGET_TYPE('LIBUNWIND', 'EMPTY') +-if conf.check_cfg(package='libunwind-generic', +- args='--cflags --libs', +- msg='Checking for libunwind', +- uselib_store='LIBUNWIND', +- mandatory=False): +- if conf.CHECK_HEADERS('libunwind.h'): +- conf.SET_TARGET_TYPE('LIBUNWIND', 'SYSLIB') ++if Options.options.with_libunwind: ++ if conf.check_cfg(package='libunwind-generic', ++ args='--cflags --libs', ++ msg='Checking for libunwind', ++ uselib_store='LIBUNWIND', ++ mandatory=False): ++ if conf.CHECK_HEADERS('libunwind.h'): ++ conf.SET_TARGET_TYPE('LIBUNWIND', 'SYSLIB') ++ else: ++ raise Errors.WafError('--with-libunwind specified but libunwind not found') ++elif Options.options.with_libunwind == None: ++ if not conf.CONFIG_SET('HAVE_BACKTRACE_SYMBOLS') \ ++ and not Options.options.disable_fault_handling: ++ raise Errors.WafError( ++'''backtrace_symbols() not found but ++--with-libunwind not specified. ++Use --without-libunwind to build without internal backtrace support or ++--disable-fault-handling to totally defer fault handling to the OS.''') + + conf.CHECK_STRUCTURE_MEMBER('struct statvfs', 'f_frsize', define='HAVE_FRSIZE', headers='sys/statvfs.h') + +--- a/script/autobuild.py ++++ b/script/autobuild.py +@@ -480,10 +480,11 @@ tasks = { + # MIT Kerberos from the current system. Runtime behaviour is + # confirmed via the ktest (static ccache and keytab) environment + ++ # This environment also used to confirm we can still build with --with-libunwind + "samba-ktest-mit": { + "sequence": [ + ("random-sleep", random_sleep(300, 900)), +- ("configure", "./configure.developer --without-ad-dc --with-system-mitkrb5 " + samba_configure_params), ++ ("configure", "./configure.developer --without-ad-dc --with-libunwind --with-system-mitkrb5 " + samba_configure_params), + ("make", "make -j"), + ("test", make_test(include_envs=[ + "ktest", # ktest is also tested in fileserver, samba and +GitLab |