From e7f750aee198dbfc7a19411623988a4e56352cd0 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Sun, 4 Jan 2009 15:49:28 +0100 Subject: [PATCH] Apply BlueZeniX's patch for OpenSolaris compatibility. Fixes #158. --- dmd/array.c | 4 ++++ dmd/inifile.c | 4 ++++ dmd/lexer.c | 2 ++ dmd/mars.c | 11 ++++++++++- dmd/mars.h | 3 ++- dmd/module.c | 4 ++++ dmd/mtype.c | 6 ++++++ dmd/root.c | 4 ++++ runtime/internal/critical.c | 2 +- runtime/internal/eh.d | 2 ++ runtime/internal/memory.d | 17 +++++++++++++++++ runtime/internal/monitor.c | 2 +- 12 files changed, 57 insertions(+), 4 deletions(-) diff --git a/dmd/array.c b/dmd/array.c index 35586f2f..97f6fd95 100644 --- a/dmd/array.c +++ b/dmd/array.c @@ -13,6 +13,10 @@ #include #include +#if (defined (__SVR4) && defined (__sun)) +#include +#endif + #if _MSC_VER || __MINGW32__ #include #endif diff --git a/dmd/inifile.c b/dmd/inifile.c index 0bc37ada..b3d5b8c7 100644 --- a/dmd/inifile.c +++ b/dmd/inifile.c @@ -10,6 +10,10 @@ #include #include +#if (defined (__SVR4) && defined (__sun)) +#include +#endif + #include "root.h" #include "mem.h" diff --git a/dmd/lexer.c b/dmd/lexer.c index 63f9fa57..d715241a 100644 --- a/dmd/lexer.c +++ b/dmd/lexer.c @@ -8,6 +8,8 @@ // in artistic.txt, or the GNU General Public License in gnu.txt. // See the included readme.txt for details. +#define __C99FEATURES__ 1 + /* Lexical Analyzer */ #include diff --git a/dmd/mars.c b/dmd/mars.c index 11141045..13f69325 100644 --- a/dmd/mars.c +++ b/dmd/mars.c @@ -338,8 +338,10 @@ int main(int argc, char *argv[]) global.params.os = OSMacOSX; #elif __FreeBSD__ global.params.os = OSFreeBSD; +#elif defined (__SVR4) && defined (__sun) + global.params.os = OSSolaris; #else -#error Unsupported OS + #error Unsupported OS #endif /* linux */ assert(global.params.os != OSinvalid); @@ -694,6 +696,8 @@ int main(int argc, char *argv[]) global.params.os = OSMacOSX; else if(strcmp(p + 2, "FreeBSD") == 0) global.params.os = OSFreeBSD; + else if(strcmp(p + 2, "Solaris") == 0) + global.params.os = OSSolaris; else error("unrecognized target os '%s'", p + 2); } @@ -929,6 +933,11 @@ int main(int argc, char *argv[]) VersionCondition::addPredefinedGlobalIdent("Posix"); break; + case OSSolaris: + VersionCondition::addPredefinedGlobalIdent("solaris"); + VersionCondition::addPredefinedGlobalIdent("Posix"); + break; + default: assert(false && "Target OS not supported"); } diff --git a/dmd/mars.h b/dmd/mars.h index 78d05cc7..02cbb798 100644 --- a/dmd/mars.h +++ b/dmd/mars.h @@ -61,7 +61,8 @@ enum OS OSLinux, OSWindows, OSMacOSX, - OSFreeBSD + OSFreeBSD, + OSSolaris, }; // Put command line switches in here diff --git a/dmd/module.c b/dmd/module.c index f5b5a6de..5b9784a2 100644 --- a/dmd/module.c +++ b/dmd/module.c @@ -12,6 +12,10 @@ #include #include +#if (defined (__SVR4) && defined (__sun)) +#include +#endif + #if _MSC_VER || __MINGW32__ #include #endif diff --git a/dmd/mtype.c b/dmd/mtype.c index fc2e1742..1f17846a 100644 --- a/dmd/mtype.c +++ b/dmd/mtype.c @@ -8,7 +8,13 @@ // in artistic.txt, or the GNU General Public License in gnu.txt. // See the included readme.txt for details. +#define __C99FEATURES__ 1 // Needed on Solaris for NaN and more #define __USE_ISOC99 1 // so signbit() gets defined + +#if (defined (__SVR4) && defined (__sun)) +#include +#endif + #include #include diff --git a/dmd/root.c b/dmd/root.c index 43a87889..8c280262 100644 --- a/dmd/root.c +++ b/dmd/root.c @@ -14,6 +14,10 @@ #include #include +#if (defined (__SVR4) && defined (__sun)) +#include +#endif + #if _MSC_VER ||__MINGW32__ #include #include diff --git a/runtime/internal/critical.c b/runtime/internal/critical.c index 56231d61..0d1d082a 100644 --- a/runtime/internal/critical.c +++ b/runtime/internal/critical.c @@ -75,7 +75,7 @@ void _STD_critical_term() /* ================================= linux ============================ */ -#if linux || __APPLE__ || __FreeBSD__ +#if linux || __APPLE__ || __FreeBSD__ || (defined(__SVR4) && defined (__sun)) #include #include diff --git a/runtime/internal/eh.d b/runtime/internal/eh.d index 5d098a84..d67d564a 100644 --- a/runtime/internal/eh.d +++ b/runtime/internal/eh.d @@ -14,9 +14,11 @@ import ldc.cstdarg; version(X86) { version(linux) version=X86_UNWIND; version(darwin) version=X86_UNWIND; + version(solaris) version=X86_UNWIND; } version(X86_64) { version(linux) version=X86_UNWIND; + version(solaris) version=X86_UNWIND; } private extern(C) void abort(); diff --git a/runtime/internal/memory.d b/runtime/internal/memory.d index d1d5a16d..9c53ed33 100644 --- a/runtime/internal/memory.d +++ b/runtime/internal/memory.d @@ -73,6 +73,13 @@ private /** * */ + +version( solaris ) { + version(X86_64) { + extern (C) void* _userlimit; + } +} + extern (C) void* rt_stackBottom() { version( Win32 ) @@ -110,6 +117,16 @@ extern (C) void* rt_stackBottom() // darwin has a fixed stack bottom return cast(void*) 0xc0000000; } + else version( solaris ) + { + version(X86_64) { + return _userlimit; + } + else { + // + return cast(void*) 0x8048000; + } + } else { static assert( false, "Operating system not supported." ); diff --git a/runtime/internal/monitor.c b/runtime/internal/monitor.c index 3f5a22fb..b36948b7 100644 --- a/runtime/internal/monitor.c +++ b/runtime/internal/monitor.c @@ -12,7 +12,7 @@ #include #if _WIN32 -#elif linux || __APPLE__ +#elif linux || __APPLE__ || (defined (__SVR4) && defined (__sun)) #define USE_PTHREADS 1 #else #endif