libphobos: Fallback on UnwindBacktrace if LibBacktrace not defined.
authorIain Buclaw <ibuclaw@gdcproject.org>
Wed, 13 Feb 2019 07:14:46 +0000 (07:14 +0000)
committerIain Buclaw <ibuclaw@gcc.gnu.org>
Wed, 13 Feb 2019 07:14:46 +0000 (07:14 +0000)
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

libphobos/ChangeLog
libphobos/libdruntime/core/runtime.d

index 2aa99a426f85924089a40d196f25cac7eb5a1572..e43b8559d27f539579d5a118a691151ba5b2dc1c 100644 (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
index a78363cf477728b0d2211fabc41c8e6304e89eff..0ead04752e4b349ecafe0437012bdf5d0270effb 100644 (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;