1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00

Debug Break,SafeBreak,IsDebuggerPresent. [NoDebug]

This commit is contained in:
Brian Fiete 2020-10-10 07:08:30 -07:00
parent 42a361a8c0
commit 06f6c41679
6 changed files with 43 additions and 1 deletions

View file

@ -27,6 +27,11 @@ EmitObjectAccessCheck = false
Filter = "[System.UseLLVM]" Filter = "[System.UseLLVM]"
BfOptimizationLevel = "O0" BfOptimizationLevel = "O0"
[[Configs.Debug.Win64.DistinctOptions]]
Filter = "[System.NoDebug]"
BfOptimizationLevel = "O0"
EmitDebugInfo = "No"
[[Configs.Debug.Win32.DistinctOptions]] [[Configs.Debug.Win32.DistinctOptions]]
Filter = "[System.Optimize]" Filter = "[System.Optimize]"
BfOptimizationLevel = "O2" BfOptimizationLevel = "O2"

View file

@ -163,6 +163,12 @@ namespace System
} }
[AttributeUsage(.Method | .Class | .Struct | .Enum)]
public struct NoDebugAttribute : Attribute
{
}
[AttributeUsage(.Method | .Class | .Struct | .Enum)] [AttributeUsage(.Method | .Class | .Struct | .Enum)]
public struct UseLLVMAttribute : Attribute public struct UseLLVMAttribute : Attribute
{ {

View file

@ -76,5 +76,28 @@ namespace System.Diagnostics
paramStr.Append('\n'); paramStr.Append('\n');
Write(paramStr.Ptr, paramStr.Length); Write(paramStr.Ptr, paramStr.Length);
} }
static bool gIsDebuggerPresent = IsDebuggerPresent;
[LinkName("IsDebuggerPresent"), CallingConvention(.Stdcall)]
static extern int32 Internal_IsDebuggerPresent();
public static bool IsDebuggerPresent
{
#if BF_PLATFORM_WINDOWS
get => gIsDebuggerPresent = Internal_IsDebuggerPresent() != 0;
#else
get => false;
#endif
}
[Intrinsic("debugtrap")]
public static extern void Break();
[NoDebug]
public static void SafeBreak()
{
if (gIsDebuggerPresent)
Break();
}
} }
} }

View file

@ -17337,6 +17337,11 @@ void BeMCContext::Generate(BeFunction* function)
vregInfo->mIsExpr = true; vregInfo->mIsExpr = true;
} }
break; break;
case BfIRIntrinsic_DebugTrap:
{
AllocInst(BeMCInstKind_DbgBreak);
}
break;
case BfIRIntrinsic_MemSet: case BfIRIntrinsic_MemSet:
{ {
if (auto constVal = BeValueDynCast<BeConstant>(castedInst->mArgs[1].mValue)) if (auto constVal = BeValueDynCast<BeConstant>(castedInst->mArgs[1].mValue))

View file

@ -413,6 +413,7 @@ enum BfIRIntrinsic : uint8
BfIRIntrinsic_BSwap, BfIRIntrinsic_BSwap,
BfIRIntrinsic_Cast, BfIRIntrinsic_Cast,
BfIRIntrinsic_Cos, BfIRIntrinsic_Cos,
BfIRIntrinsic_DebugTrap,
BfIRIntrinsic_Div, BfIRIntrinsic_Div,
BfIRIntrinsic_Eq, BfIRIntrinsic_Eq,
BfIRIntrinsic_Floor, BfIRIntrinsic_Floor,

View file

@ -157,6 +157,7 @@ static const BuiltinEntry gIntrinEntries[] =
{"bswap"}, {"bswap"},
{"cast"}, {"cast"},
{"cos"}, {"cos"},
{"debugtrap"},
{"div"}, {"div"},
{"eq"}, {"eq"},
{"floor"}, {"floor"},
@ -2422,6 +2423,7 @@ void BfIRCodeGen::HandleNextCmd()
{ llvm::Intrinsic::bswap, -1}, { llvm::Intrinsic::bswap, -1},
{ (llvm::Intrinsic::ID)-2, -1}, // cast, { (llvm::Intrinsic::ID)-2, -1}, // cast,
{ llvm::Intrinsic::cos, 0, -1}, { llvm::Intrinsic::cos, 0, -1},
{ llvm::Intrinsic::debugtrap, -1}, // debugtrap,
{ (llvm::Intrinsic::ID)-2, -1}, // div { (llvm::Intrinsic::ID)-2, -1}, // div
{ (llvm::Intrinsic::ID)-2, -1}, // eq { (llvm::Intrinsic::ID)-2, -1}, // eq
{ llvm::Intrinsic::floor, 0, -1}, { llvm::Intrinsic::floor, 0, -1},