Hi, In the gcc.backtrace module, either one of LibBacktrace or UnwindBacktrace will always be defined. This patch gives UnwindBacktrace a higher precedence over the libc backtrace as the default backtrace handler as the latter depends on a rt.backtrace module that is not compiled in.
Only useful if building --without-libbacktrace or libbacktrace is unsupported for whatever reason. Bootstrapped and regression tested on x86_64-linux-gnu. Committed to trunk as r268836. -- Iain --- libphobos/ChangeLog: * libdruntime/core/runtime.d (defaultTraceHandler): Give UnwindBacktrace handler precedence over backtrace. ---
diff --git a/libphobos/libdruntime/core/runtime.d b/libphobos/libdruntime/core/runtime.d index a78363cf477..0ead04752e4 100644 --- a/libphobos/libdruntime/core/runtime.d +++ b/libphobos/libdruntime/core/runtime.d @@ -619,6 +619,22 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null ) } return new LibBacktrace(FIRSTFRAME); } + else static if ( __traits( compiles, new UnwindBacktrace(0) ) ) + { + version (Posix) + { + static enum FIRSTFRAME = 5; + } + else version (Win64) + { + static enum FIRSTFRAME = 4; + } + else + { + static enum FIRSTFRAME = 0; + } + return new UnwindBacktrace(FIRSTFRAME); + } else static if ( __traits( compiles, backtrace ) ) { import core.demangle; @@ -885,22 +901,6 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null ) auto s = new StackTrace(FIRSTFRAME, cast(CONTEXT*)ptr); return s; } - else static if ( __traits( compiles, new UnwindBacktrace(0) ) ) - { - version (Posix) - { - static enum FIRSTFRAME = 5; - } - else version (Win64) - { - static enum FIRSTFRAME = 4; - } - else - { - static enum FIRSTFRAME = 0; - } - return new UnwindBacktrace(FIRSTFRAME); - } else { return null;