Tue May 26 17:46:14 CEST 2009 Tobias Rautenkranz * Workaround segfault on exit & run test on commit diff -rN -u old-kde.ui/CMakeLists.txt new-kde.ui/CMakeLists.txt --- old-kde.ui/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new-kde.ui/CMakeLists.txt 2014-10-30 07:22:42.000000000 +0100 @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.6) + +project(cl-smoke.kde) + +add_subdirectory(util) diff -rN -u old-kde.ui/src/application.lisp new-kde.ui/src/application.lisp --- old-kde.ui/src/application.lisp 2014-10-30 07:22:42.000000000 +0100 +++ new-kde.ui/src/application.lisp 2014-10-30 07:22:42.000000000 +0100 @@ -2,6 +2,14 @@ (declaim (optimize (debug 3))) +;;; FIXME crash on quit, Called from ~KIconLoader(): +;;; CL-USER> (cffi:defcfun (kbacktrace "_Z14kRealBacktracei") :pointer +;;; (levels :int)) +;;; KBACKTRACE +;;; CL-USER> (kbacktrace -1) +;;; +;;; Unhandled memory fault at #x0. + (defun app () (assert (app-p)) (qt:app)) diff -rN -u old-kde.ui/test.lisp new-kde.ui/test.lisp --- old-kde.ui/test.lisp 1970-01-01 01:00:00.000000000 +0100 +++ new-kde.ui/test.lisp 2014-10-30 07:22:42.000000000 +0100 @@ -0,0 +1,31 @@ +#| +cmake ./ && make || exit 1 +# LD_PRELOAD causes utf8 decoding errors in sbcl +# in run-progam used by sysdef.cmake +sbcl --noinform --noprint --disable-debugger --load $0 --end-toplevel-options -c || exit 1 +LD_PRELOAD=./util/libcl-smoke-disable-backtrace.so exec -a "$0" sbcl --noinform --noprint --disable-debugger --load $0 --end-toplevel-options +# do not use --script to allow loading mudballs with ${HOME}/.sbclrc +# Used for testing on darcs record. +|# + +(in-package :sysdef-user) + +(defun load-sysdef (pathname system) + (load pathname) + (setf (mb.sysdef::pathname-of (find-system system)) pathname)) + +(defun load-sysdef-file (system-name) + "Loads a mbd file in the current directory." + (load-sysdef (make-pathname :defaults *default-pathname-defaults* + :name (string-downcase system-name) + :type "mbd") + system-name)) + +(load-sysdef-file :kde) +(when (= 2 (length sb-ext:*posix-argv*)) + (mb:load :kde) + (sb-ext:quit)) + +(mb:test :kde) + +(sb-ext:quit) diff -rN -u old-kde.ui/util/CMakeLists.txt new-kde.ui/util/CMakeLists.txt --- old-kde.ui/util/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new-kde.ui/util/CMakeLists.txt 2014-10-30 07:22:42.000000000 +0100 @@ -0,0 +1,15 @@ +find_package(Qt4) +set(QT_DONT_USE_QTGUI true) +include(${QT_USE_FILE}) + +include(CheckCXXCompilerFlag) +check_cxx_compiler_flag("-fvisibility=hidden" CXX_VISIBILITY) +if(CXX_VISIBILITY) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") +endif(CXX_VISIBILITY) + +add_library(cl-smoke-disable-backtrace SHARED backtrace.cpp) +target_link_libraries(cl-smoke-disable-backtrace ${QT_LIBRARIES}) + +#install(TARGETS cl-smoke-disable-backtrace +# LIBRARY DESTINATION lib) diff -rN -u old-kde.ui/util/backtrace.cpp new-kde.ui/util/backtrace.cpp --- old-kde.ui/util/backtrace.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new-kde.ui/util/backtrace.cpp 2014-10-30 07:22:42.000000000 +0100 @@ -0,0 +1,27 @@ +#include + +#define BT_EXPORT __attribute__((visibility("default"))) + +extern "C" { +/** Overwrites backtrace_symbols in execinfo.h and does nothing. + * Work around segfault in: + * ~KIconLoader() + * kRealBacktrace(int) + * backtrace_symbols + * + * ~KIconLoader() is called at exit when an KApplication has been constructed. + * Somehow a negative number is pased as size to backtrace_symbols: + * void* trace[256]; + * backtrace_symbols(trace, -1219315128); // => SIGSEGV + * and segfaults in sysdeps/generic/elf/backtracesyms.c:65 + */ +BT_EXPORT char** +backtrace_symbols(void* const* buffer, int size) +{ + qDebug() << "libcl-smoke-disable-backtrace: backtrace_symbols workaround\n" + << "\tbuffer: " << buffer << "size: " << size; + return NULL; +} + +// overwriting backtrace(void** buffer, int size) does not work!? +}