libphobos: Fallback on UnwindBacktrace if LibBacktrace not defined.

In the gcc.backtrace module, either one of LibBacktrace or
UnwindBacktrace will always be defined.  Giving UnwindBacktrace a higher
precedence over the libc backtrace as the default handler because the
latter depends on a rt.backtrace module that is not compiled in.

libphobos/ChangeLog:

	* libdruntime/core/runtime.d (defaultTraceHandler): Give
	UnwindBacktrace handler precedence over backtrace.

From-SVN: r268836
This commit is contained in:
Iain Buclaw 2019-02-13 07:14:46 +00:00 committed by Iain Buclaw
parent 91c50487de
commit 5522686e52
2 changed files with 21 additions and 16 deletions

View File

@ -1,3 +1,8 @@
2019-02-13 Iain Buclaw <ibuclaw@gdcproject.org>
* libdruntime/core/runtime.d (defaultTraceHandler): Give
UnwindBacktrace handler precedence over backtrace.
2019-02-10 Iain Buclaw <ibuclaw@gdcproject.org>
* libdruntime/Makefile.am (DRUNTIME_DSOURCES): Remove rt/util/hash.d

View File

@ -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;