Using the _DEBUG macro for *nix debug builds as well; trying to force 8-byte alignment on critical sections ( http://forum.mc-server.org/showthread.php?tid=384 )
git-svn-id: http://mc-server.googlecode.com/svn/trunk@387 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
effe9647cc
commit
11810e05e4
@ -30,8 +30,8 @@ CCE_OPTIONS = -s -x c -O3
|
|||||||
LNK_OPTIONS = -lstdc++ -pthread -O3
|
LNK_OPTIONS = -lstdc++ -pthread -O3
|
||||||
BUILDDIR = build/release/
|
BUILDDIR = build/release/
|
||||||
else
|
else
|
||||||
CC_OPTIONS = -s -ggdb
|
CC_OPTIONS = -s -ggdb -D_DEBUG
|
||||||
CCE_OPTIONS = -s -x c -ggdb
|
CCE_OPTIONS = -s -x c -ggdb -D_DEBUG
|
||||||
LNK_OPTIONS = -lstdc++ -pthread -ggdb
|
LNK_OPTIONS = -lstdc++ -pthread -ggdb
|
||||||
BUILDDIR = build/debug/
|
BUILDDIR = build/debug/
|
||||||
endif
|
endif
|
||||||
|
@ -8,101 +8,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Compiler-dependent stuff:
|
#include "../source/Globals.h"
|
||||||
#ifndef _MSC_VER
|
|
||||||
// Non-MS compilers don't know the override keyword
|
|
||||||
#define override
|
|
||||||
#else
|
|
||||||
// MSVC produces warning C4481 on the override keyword usage, so disable the warning altogether
|
|
||||||
#pragma warning(disable:4481)
|
|
||||||
#endif // _MSC_VER
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// A macro to disallow the copy constructor and operator= functions
|
|
||||||
// This should be used in the private: declarations for any class that shouldn't allow copying itself
|
|
||||||
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
|
|
||||||
TypeName(const TypeName &); \
|
|
||||||
void operator=(const TypeName &)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// OS-dependent stuff:
|
|
||||||
#ifdef _WIN32
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include <Windows.h>
|
|
||||||
#include <Winsock2.h>
|
|
||||||
#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h> // for mkdir
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include <cstdio>
|
|
||||||
#include <cstring>
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <semaphore.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <tr1/memory>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// CRT stuff:
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// STL stuff:
|
|
||||||
#include <vector>
|
|
||||||
#include <list>
|
|
||||||
#include <string>
|
|
||||||
#include <map>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Common headers:
|
|
||||||
#include "../source/StringUtils.h"
|
|
||||||
#include "../source/cCriticalSection.h"
|
|
||||||
#include "../source/cMCLogger.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Common definitions:
|
|
||||||
|
|
||||||
/// Evaluates to the number of elements in an array (compile-time!)
|
|
||||||
#define ARRAYCOUNT(X) (sizeof(X) / sizeof(*(X)))
|
|
||||||
|
|
||||||
// sprintf_s is the preferred call in MSVC ("secure"); make it *nix-compatible:
|
|
||||||
#ifndef _WIN32
|
|
||||||
#define sprintf_s(dst, size, format, ...) sprintf(dst, format, __VA_ARGS__ )
|
|
||||||
#define vsnprintf_s(buffer, buffer_size, maxcount, stringbuffer, ...) (vsnprintf(buffer, maxcount, stringbuffer, __VA_ARGS__))
|
|
||||||
#endif // _WIN32
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
|
|
||||||
# _X: These settings produce a debug build, with gdb symbols:
|
# _X: These settings produce a debug build, with gdb symbols:
|
||||||
CC_OPTIONS = -s -ggdb
|
CC_OPTIONS = -s -ggdb -D_DEBUG
|
||||||
CCE_OPTIONS = -s -x c -ggdb
|
CCE_OPTIONS = -s -x c -ggdb -D_DEBUG
|
||||||
LNK_OPTIONS = -lstdc++ -pthread -ggdb
|
LNK_OPTIONS = -lstdc++ -pthread -ggdb
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,18 +9,57 @@
|
|||||||
|
|
||||||
|
|
||||||
// Compiler-dependent stuff:
|
// Compiler-dependent stuff:
|
||||||
#ifndef _MSC_VER
|
#if defined(_MSC_VER)
|
||||||
// Non-MS compilers don't know the override keyword
|
|
||||||
#define override
|
|
||||||
#define abstract
|
|
||||||
#define stricmp strcasecmp
|
|
||||||
#else
|
|
||||||
// MSVC produces warning C4481 on the override keyword usage, so disable the warning altogether
|
// MSVC produces warning C4481 on the override keyword usage, so disable the warning altogether
|
||||||
#pragma warning(disable:4481)
|
#pragma warning(disable:4481)
|
||||||
|
|
||||||
// Disable some warnings that we don't care about:
|
// Disable some warnings that we don't care about:
|
||||||
#pragma warning(disable:4100)
|
#pragma warning(disable:4100)
|
||||||
#endif // _MSC_VER
|
|
||||||
|
#define OBSOLETE __declspec(deprecated)
|
||||||
|
|
||||||
|
// No alignment needed in MSVC
|
||||||
|
#define ALIGN_8
|
||||||
|
#define ALIGN_16
|
||||||
|
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
|
||||||
|
// TODO: Can GCC explicitly mark classes as abstract (no instances can be created)?
|
||||||
|
#define abstract
|
||||||
|
|
||||||
|
// TODO: Can GCC mark virtual methods as overriding (forcing them to have a virtual function of the same signature in the base class)
|
||||||
|
#define override
|
||||||
|
|
||||||
|
#define OBSOLETE __attribute__((deprecated))
|
||||||
|
|
||||||
|
#define ALIGN_8 __attribute__((aligned(8)))
|
||||||
|
#define ALIGN_16 __attribute__((aligned(16)))
|
||||||
|
|
||||||
|
// Some portability macros :)
|
||||||
|
#define stricmp strcasecmp
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error "You are using an unsupported compiler, you might need to #define some stuff here for your compiler"
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Copy and uncomment this into another #elif section based on your compiler identification
|
||||||
|
|
||||||
|
// Explicitly mark classes as abstract (no instances can be created)
|
||||||
|
#define abstract
|
||||||
|
|
||||||
|
// Mark virtual methods as overriding (forcing them to have a virtual function of the same signature in the base class)
|
||||||
|
#define override
|
||||||
|
|
||||||
|
// Mark functions as obsolete, so that their usage results in a compile-time warning
|
||||||
|
#define OBSOLETE
|
||||||
|
|
||||||
|
// Mark types / variables for alignment. Do the platforms need it?
|
||||||
|
#define ALIGN_8
|
||||||
|
#define ALIGN_16
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -40,7 +79,7 @@
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <winsock.h>
|
#include <winsock2.h>
|
||||||
#else
|
#else
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h> // for mkdir
|
#include <sys/stat.h> // for mkdir
|
||||||
@ -112,16 +151,6 @@
|
|||||||
/// Allows arithmetic expressions like "32 KiB" (but consider using parenthesis around it, "(32 KiB)" )
|
/// Allows arithmetic expressions like "32 KiB" (but consider using parenthesis around it, "(32 KiB)" )
|
||||||
#define KiB * 1024
|
#define KiB * 1024
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#define OBSOLETE __declspec(deprecated)
|
|
||||||
#define ABSTRACT abstract
|
|
||||||
#else
|
|
||||||
// TODO: how do other compilers mark functions as obsolete, so that their usage results in a compile-time warning?
|
|
||||||
#define OBSOLETE
|
|
||||||
// TODO: Can other compilers explicitly mark classes as abstract (no instances can be created)?
|
|
||||||
#define ABSTRACT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// Faster than (int)floorf((float)x / (float)div)
|
/// Faster than (int)floorf((float)x / (float)div)
|
||||||
#define FAST_FLOOR_DIV( x, div ) ( (x) < 0 ? (((int)x / div) - 1) : ((int)x / div) )
|
#define FAST_FLOOR_DIV( x, div ) ( (x) < 0 ? (((int)x / div) - 1) : ((int)x / div) )
|
||||||
|
|
||||||
|
@ -622,7 +622,7 @@ cNBTTree * cNBTParser::Parse(const char * a_Data, int a_Length)
|
|||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Dumping the NBT tree (debug-only)
|
// Dumping the NBT tree (debug-only)
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#if (defined(_DEBUG) && defined(_WIN32))
|
||||||
|
|
||||||
#define CASE_SIMPLE_TAG(TYPE,FMT) \
|
#define CASE_SIMPLE_TAG(TYPE,FMT) \
|
||||||
case cNBTTag::TAG_##TYPE: \
|
case cNBTTag::TAG_##TYPE: \
|
||||||
@ -696,7 +696,7 @@ void DumpTree(const cNBTTree * a_Tree, int a_Level)
|
|||||||
|
|
||||||
#undef CASE_SIMPLE_TAG
|
#undef CASE_SIMPLE_TAG
|
||||||
|
|
||||||
#endif // _DEBUG
|
#endif // (_DEBUG && _WIN32)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -203,9 +203,9 @@ public:
|
|||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Dumping the tree (DEBUG-only)
|
// Dumping the tree (DEBUG-only)
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#if (defined(_DEBUG) && defined(_WIN32))
|
||||||
void DumpTree(const cNBTTree * a_Tree, int a_Level = 0);
|
void DumpTree(const cNBTTree * a_Tree, int a_Level = 0);
|
||||||
#endif // _DEBUG
|
#endif // (_DEBUG && _WIN32)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ class cBlockEntity;
|
|||||||
|
|
||||||
|
|
||||||
/// Interface that all the world storage schemas need to implement
|
/// Interface that all the world storage schemas need to implement
|
||||||
class cWSSchema ABSTRACT
|
class cWSSchema abstract
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cWSSchema(cWorld * a_World) : m_World(a_World) {}
|
cWSSchema(cWorld * a_World) : m_World(a_World) {}
|
||||||
|
@ -19,10 +19,10 @@ private:
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
CRITICAL_SECTION m_CriticalSection;
|
CRITICAL_SECTION m_CriticalSection;
|
||||||
#else // _WIN32
|
#else // _WIN32
|
||||||
void* m_CriticalSectionPtr; // Pointer to a CRITICAL_SECTION object
|
void* m_CriticalSectionPtr ALIGN_8; // Pointer to a CRITICAL_SECTION object
|
||||||
void* m_Attributes;
|
void* m_Attributes ALIGN_8;
|
||||||
#endif // else _WIN32
|
#endif // else _WIN32
|
||||||
};
|
} ALIGN_8;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -158,14 +158,14 @@ int main( int argc, char **argv )
|
|||||||
#endif // _WIN32 && !_WIN64
|
#endif // _WIN32 && !_WIN64
|
||||||
// End of dump-file magic
|
// End of dump-file magic
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#if defined(_DEBUG) && defined(_MSC_VER)
|
||||||
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
|
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
|
||||||
|
|
||||||
// _X: The simple built-in CRT leak finder - simply break when allocating the Nth block ({N} is listed in the leak output)
|
// _X: The simple built-in CRT leak finder - simply break when allocating the Nth block ({N} is listed in the leak output)
|
||||||
// Only useful when the leak is in the same sequence all the time
|
// Only useful when the leak is in the same sequence all the time
|
||||||
// _CrtSetBreakAlloc(85950);
|
// _CrtSetBreakAlloc(85950);
|
||||||
|
|
||||||
#endif
|
#endif // _DEBUG && _MSC_VER
|
||||||
|
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
std::signal(SIGSEGV, ShowCrashReport);
|
std::signal(SIGSEGV, ShowCrashReport);
|
||||||
|
Loading…
Reference in New Issue
Block a user