1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Linux fixes

This commit is contained in:
Brian Fiete 2019-08-30 05:16:25 -07:00
parent aad0a640c5
commit f6226150ad
4 changed files with 24 additions and 20 deletions

View file

@ -32,6 +32,7 @@ add_definitions(
-DFT2_BUILD_LIBRARY -DFT2_BUILD_LIBRARY
-DBFSYSLIB_DYNAMIC -DBFSYSLIB_DYNAMIC
-DBFRT_NODBGFLAGS -DBFRT_NODBGFLAGS
-DBFRTMERGED
) )
include_directories( include_directories(

View file

@ -159,7 +159,7 @@ Beefy::StringT<0> gDbgErrorString;
extern DbgRawAllocData sEmptyAllocData; extern DbgRawAllocData sEmptyAllocData;
extern DbgRawAllocData sObjectAllocData; extern DbgRawAllocData sObjectAllocData;
#define SETUP_ERROR(str, skip) gDbgErrorString = str; gBfRtDbgCallbacks.DebugMessageData_SetupError(str, skip) #define SETUP_ERROR(str, skip) gDbgErrorString = str; BFRTCALLBACKS.DebugMessageData_SetupError(str, skip)
#ifdef BF_PLATFORM_WINDOWS #ifdef BF_PLATFORM_WINDOWS
#define BF_CAPTURE_STACK(skipCount, outFrames, wantCount) (int)RtlCaptureStackBackTrace(skipCount, wantCount, (void**)outFrames, NULL) #define BF_CAPTURE_STACK(skipCount, outFrames, wantCount) (int)RtlCaptureStackBackTrace(skipCount, wantCount, (void**)outFrames, NULL)
@ -181,7 +181,7 @@ static void GetCrashInfo()
void bf::System::Runtime::Dbg_Init(int version, int flags, BfRtCallbacks* callbacks) void bf::System::Runtime::Dbg_Init(int version, int flags, BfRtCallbacks* callbacks)
{ {
//BfpSystem_Init(BFP_VERSION, BfpSystemInitFlag_None); #ifndef BFRTMERGED
if (version != BFRT_VERSION) if (version != BFRT_VERSION)
{ {
@ -198,6 +198,8 @@ void bf::System::Runtime::Dbg_Init(int version, int flags, BfRtCallbacks* callba
#ifdef BF_GC_SUPPORTED #ifdef BF_GC_SUPPORTED
gGCDbgData.mDbgFlags = gBfRtDbgFlags; gGCDbgData.mDbgFlags = gBfRtDbgFlags;
#endif #endif
#endif
} }
void* bf::System::Runtime::Dbg_GetCrashInfoFunc() void* bf::System::Runtime::Dbg_GetCrashInfoFunc()
@ -210,8 +212,8 @@ void* bf::System::Runtime::Dbg_GetCrashInfoFunc()
void Internal::Dbg_MarkObjectDeleted(bf::System::Object* object) void Internal::Dbg_MarkObjectDeleted(bf::System::Object* object)
{ {
BF_ASSERT((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0); BF_ASSERT((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0);
if ((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0) if ((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0)
object->mObjectFlags = (BfObjectFlags)((object->mObjectFlags & ~BfObjectFlag_StackAlloc) | BfObjectFlag_Deleted); object->mObjectFlags = (BfObjectFlags)((object->mObjectFlags & ~BfObjectFlag_StackAlloc) | BfObjectFlag_Deleted);
#ifdef BF_GC_SUPPORTED #ifdef BF_GC_SUPPORTED
gBFGC.ObjectDeleteRequested(object); gBFGC.ObjectDeleteRequested(object);
@ -288,7 +290,7 @@ intptr Internal::Dbg_PrepareStackTrace(intptr baseAllocSize, intptr maxStackTrac
bf::System::Object* Internal::Dbg_ObjectAlloc(bf::System::Reflection::TypeInstance* typeInst, intptr size) bf::System::Object* Internal::Dbg_ObjectAlloc(bf::System::Reflection::TypeInstance* typeInst, intptr size)
{ {
BF_ASSERT((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0); BF_ASSERT((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0);
Object* result; Object* result;
int allocSize = BF_ALIGN(size, typeInst->mInstAlign); int allocSize = BF_ALIGN(size, typeInst->mInstAlign);
uint8* allocBytes = (uint8*)BfObjectAllocate(allocSize, typeInst->_GetType()); uint8* allocBytes = (uint8*)BfObjectAllocate(allocSize, typeInst->_GetType());
@ -317,7 +319,7 @@ bf::System::Object* Internal::Dbg_ObjectAlloc(bf::System::ClassVData* classVData
intptr allocSize = size; intptr allocSize = size;
bool largeAllocInfo = false; bool largeAllocInfo = false;
if ((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0) if ((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0)
{ {
if (maxStackTraceDepth > 1) if (maxStackTraceDepth > 1)
{ {
@ -338,7 +340,7 @@ bf::System::Object* Internal::Dbg_ObjectAlloc(bf::System::ClassVData* classVData
#endif #endif
bf::System::Object* result; bf::System::Object* result;
if ((gBfRtDbgFlags & BfRtFlags_LeakCheck) != 0) if ((BFRTFLAGS & BfRtFlags_LeakCheck) != 0)
{ {
allocSize = BF_ALIGN(allocSize, align); allocSize = BF_ALIGN(allocSize, align);
uint8* allocBytes = (uint8*)BfObjectAllocate(allocSize, classVData->mType); uint8* allocBytes = (uint8*)BfObjectAllocate(allocSize, classVData->mType);
@ -357,21 +359,21 @@ bf::System::Object* Internal::Dbg_ObjectAlloc(bf::System::ClassVData* classVData
sAllocSizes[classVData->mType->mTypeId] += size; sAllocSizes[classVData->mType->mTypeId] += size;
result = (bf::System::Object*)(allocPtr + 16); result = (bf::System::Object*)(allocPtr + 16);
#else #else
if ((gBfRtDbgFlags & BfRtFlags_DebugAlloc) != 0) if ((BFRTFLAGS & BfRtFlags_DebugAlloc) != 0)
{ {
uint8* allocBytes = (uint8*)BfRawAllocate(allocSize, &sObjectAllocData, NULL, 0); uint8* allocBytes = (uint8*)BfRawAllocate(allocSize, &sObjectAllocData, NULL, 0);
result = (bf::System::Object*)allocBytes; result = (bf::System::Object*)allocBytes;
} }
else else
{ {
uint8* allocBytes = (uint8*)gBfRtDbgCallbacks.Alloc(allocSize); uint8* allocBytes = (uint8*)BFRTCALLBACKS.Alloc(allocSize);
result = (bf::System::Object*)allocBytes; result = (bf::System::Object*)allocBytes;
} }
#endif #endif
} }
#ifndef BFRT_NODBGFLAGS #ifndef BFRT_NODBGFLAGS
if ((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0) if ((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0)
{ {
// The order is very important here- // The order is very important here-
// Once we set mDbgAllocInfo, the memory will be recognized by the GC as being a valid object. // Once we set mDbgAllocInfo, the memory will be recognized by the GC as being a valid object.
@ -424,7 +426,7 @@ bf::System::Object* Internal::Dbg_ObjectAlloc(bf::System::ClassVData* classVData
void Internal::Dbg_ObjectStackInit(bf::System::Object* result, bf::System::ClassVData* classVData) void Internal::Dbg_ObjectStackInit(bf::System::Object* result, bf::System::ClassVData* classVData)
{ {
BF_ASSERT((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0); BF_ASSERT((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0);
result->mClassVData = (intptr)classVData | (intptr)BfObjectFlag_StackAlloc; result->mClassVData = (intptr)classVData | (intptr)BfObjectFlag_StackAlloc;
#ifndef BFRT_NODBGFLAGS #ifndef BFRT_NODBGFLAGS
@ -463,7 +465,7 @@ static void SetupDbgAllocInfo(bf::System::Object* result, intptr origSize)
void Internal::Dbg_ObjectCreated(bf::System::Object* result, intptr size, bf::System::ClassVData* classVData) void Internal::Dbg_ObjectCreated(bf::System::Object* result, intptr size, bf::System::ClassVData* classVData)
{ {
BF_ASSERT((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0); BF_ASSERT((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0);
#ifndef BFRT_NODBGFLAGS #ifndef BFRT_NODBGFLAGS
BF_ASSERT_REL((result->mClassVData & ~(BfObjectFlag_Allocated | BfObjectFlag_Mark3)) == (intptr)classVData); BF_ASSERT_REL((result->mClassVData & ~(BfObjectFlag_Allocated | BfObjectFlag_Mark3)) == (intptr)classVData);
result->mDbgAllocInfo = (intptr)BF_RETURN_ADDRESS; result->mDbgAllocInfo = (intptr)BF_RETURN_ADDRESS;
@ -472,7 +474,7 @@ void Internal::Dbg_ObjectCreated(bf::System::Object* result, intptr size, bf::Sy
void Internal::Dbg_ObjectCreatedEx(bf::System::Object* result, intptr origSize, bf::System::ClassVData* classVData) void Internal::Dbg_ObjectCreatedEx(bf::System::Object* result, intptr origSize, bf::System::ClassVData* classVData)
{ {
BF_ASSERT((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0); BF_ASSERT((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0);
#ifndef BFRT_NODBGFLAGS #ifndef BFRT_NODBGFLAGS
BF_ASSERT_REL((result->mClassVData & ~(BfObjectFlag_Allocated | BfObjectFlag_Mark3)) == (intptr)classVData); BF_ASSERT_REL((result->mClassVData & ~(BfObjectFlag_Allocated | BfObjectFlag_Mark3)) == (intptr)classVData);
SetupDbgAllocInfo(result, origSize); SetupDbgAllocInfo(result, origSize);
@ -481,7 +483,7 @@ void Internal::Dbg_ObjectCreatedEx(bf::System::Object* result, intptr origSize,
void Internal::Dbg_ObjectAllocated(bf::System::Object* result, intptr size, bf::System::ClassVData* classVData) void Internal::Dbg_ObjectAllocated(bf::System::Object* result, intptr size, bf::System::ClassVData* classVData)
{ {
BF_ASSERT((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0); BF_ASSERT((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0);
result->mClassVData = (intptr)classVData; result->mClassVData = (intptr)classVData;
#ifndef BFRT_NODBGFLAGS #ifndef BFRT_NODBGFLAGS
result->mDbgAllocInfo = (intptr)BF_RETURN_ADDRESS; result->mDbgAllocInfo = (intptr)BF_RETURN_ADDRESS;
@ -490,14 +492,14 @@ void Internal::Dbg_ObjectAllocated(bf::System::Object* result, intptr size, bf::
void Internal::Dbg_ObjectAllocatedEx(bf::System::Object* result, intptr origSize, bf::System::ClassVData* classVData) void Internal::Dbg_ObjectAllocatedEx(bf::System::Object* result, intptr origSize, bf::System::ClassVData* classVData)
{ {
BF_ASSERT((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0); BF_ASSERT((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0);
result->mClassVData = (intptr)classVData; result->mClassVData = (intptr)classVData;
SetupDbgAllocInfo(result, origSize); SetupDbgAllocInfo(result, origSize);
} }
void Internal::Dbg_ObjectPreDelete(bf::System::Object* object) void Internal::Dbg_ObjectPreDelete(bf::System::Object* object)
{ {
BF_ASSERT((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0); BF_ASSERT((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0);
#ifndef BFRT_NODBGFLAGS #ifndef BFRT_NODBGFLAGS
const char* errorPtr = NULL; const char* errorPtr = NULL;
@ -534,7 +536,7 @@ void Internal::Dbg_ObjectPreDelete(bf::System::Object* object)
errorStr += StrFormat(" (%s)0x%@\n", typeName.c_str(), object); errorStr += StrFormat(" (%s)0x%@\n", typeName.c_str(), object);
SETUP_ERROR(errorStr.c_str(), 2); SETUP_ERROR(errorStr.c_str(), 2);
BF_DEBUG_BREAK(); BF_DEBUG_BREAK();
gBfRtDbgCallbacks.DebugMessageData_Fatal(); BFRTCALLBACKS.DebugMessageData_Fatal();
return; return;
} }
#endif #endif
@ -542,7 +544,7 @@ void Internal::Dbg_ObjectPreDelete(bf::System::Object* object)
void Internal::Dbg_ObjectPreCustomDelete(bf::System::Object* object) void Internal::Dbg_ObjectPreCustomDelete(bf::System::Object* object)
{ {
BF_ASSERT((gBfRtDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0); BF_ASSERT((BFRTFLAGS & BfRtFlags_ObjectHasDebugFlags) != 0);
const char* errorPtr = NULL; const char* errorPtr = NULL;
@ -561,7 +563,7 @@ void Internal::Dbg_ObjectPreCustomDelete(bf::System::Object* object)
errorStr += StrFormat(" (%s)0x%@\n", typeName.c_str(), object); errorStr += StrFormat(" (%s)0x%@\n", typeName.c_str(), object);
SETUP_ERROR(errorStr.c_str(), 2); SETUP_ERROR(errorStr.c_str(), 2);
BF_DEBUG_BREAK(); BF_DEBUG_BREAK();
gBfRtDbgCallbacks.DebugMessageData_Fatal(); BFRTCALLBACKS.DebugMessageData_Fatal();
return; return;
} }
} }

View file

@ -31,6 +31,7 @@ add_definitions(
-DBF_NO_FBX -DBF_NO_FBX
-DFT2_BUILD_LIBRARY -DFT2_BUILD_LIBRARY
-DBFSYSLIB_DYNAMIC -DBFSYSLIB_DYNAMIC
-DBP_DYNAMIC
) )
include_directories( include_directories(

View file

@ -315,7 +315,7 @@ public:
#endif #endif
#ifdef BP_DYNAMIC #if (defined BP_DYNAMIC) || (!defined BF_PLATFORM_WINDOWS)
#define BP_EXPORT BF_EXPORT #define BP_EXPORT BF_EXPORT
#define BP_CALLTYPE BF_CALLTYPE #define BP_CALLTYPE BF_CALLTYPE
#else #else