@@ -588,6 +588,8 @@ extern (C) UnitTestResult runModuleUnitTests()
588588 import core.sys.freebsd.execinfo ;
589589 else version ( NetBSD )
590590 import core.sys.netbsd.execinfo ;
591+ else version ( DragonFlyBSD )
592+ import core.sys.dragonflybsd.execinfo ;
591593 else version ( Windows )
592594 import core.sys.windows.stacktrace ;
593595 else version ( Solaris )
@@ -705,6 +707,8 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
705707 import core.sys.freebsd.execinfo ;
706708 else version ( NetBSD )
707709 import core.sys.netbsd.execinfo ;
710+ else version ( DragonFlyBSD )
711+ import core.sys.dragonflybsd.execinfo ;
708712 else version ( Windows )
709713 import core.sys.windows.stacktrace ;
710714 else version ( Solaris )
@@ -791,6 +795,7 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
791795
792796 version (linux ) enum enableDwarf = true ;
793797 else version (FreeBSD ) enum enableDwarf = true ;
798+ else version (DragonFlyBSD ) enum enableDwarf = true ;
794799 else enum enableDwarf = false ;
795800
796801 static if (enableDwarf)
@@ -914,6 +919,18 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
914919 symEnd = eptr - buf.ptr;
915920 }
916921 }
922+ else version ( DragonFlyBSD )
923+ {
924+ // format is: 0x00000000 <_D6module4funcAFZv+0x78> at module
925+ auto bptr = cast (char * ) memchr( buf.ptr, ' <' , buf.length );
926+ auto eptr = cast (char * ) memchr( buf.ptr, ' +' , buf.length );
927+
928+ if ( bptr++ && eptr )
929+ {
930+ symBeg = bptr - buf.ptr;
931+ symEnd = eptr - buf.ptr;
932+ }
933+ }
917934 else version ( Solaris )
918935 {
919936 // format is object'symbol+offset [pc]
0 commit comments