From 01fd99fd71637eacc7082e5b1937d917fdd62a29 Mon Sep 17 00:00:00 2001
From: slava <slava@solaris.(none)>
Date: Sat, 29 Mar 2008 05:30:25 -0500
Subject: [PATCH] Starting work on Solaris port

---
 vm/os-solaris-x86.32.h | 10 ++++++++++
 vm/os-solaris-x86.64.h | 10 ++++++++++
 vm/os-solaris.h        |  2 ++
 vm/platform.h          | 10 +++++++++-
 4 files changed, 31 insertions(+), 1 deletion(-)
 create mode 100644 vm/os-solaris-x86.32.h
 create mode 100644 vm/os-solaris-x86.64.h

diff --git a/vm/os-solaris-x86.32.h b/vm/os-solaris-x86.32.h
new file mode 100644
index 0000000000..1f4ec74e17
--- /dev/null
+++ b/vm/os-solaris-x86.32.h
@@ -0,0 +1,10 @@
+#include <ucontext.h>
+
+INLINE void *ucontext_stack_pointer(void *uap)
+{
+        ucontext_t *ucontext = (ucontext_t *)uap;
+        return (void *)ucontext->uc_mcontext.gregs[ESP];
+}
+
+#define UAP_PROGRAM_COUNTER(ucontext) \
+	(((ucontext_t *)(ucontext))->uc_mcontext.gregs[EIP])
diff --git a/vm/os-solaris-x86.64.h b/vm/os-solaris-x86.64.h
new file mode 100644
index 0000000000..54d1866d50
--- /dev/null
+++ b/vm/os-solaris-x86.64.h
@@ -0,0 +1,10 @@
+#include <ucontext.h>
+
+INLINE void *ucontext_stack_pointer(void *uap)
+{
+        ucontext_t *ucontext = (ucontext_t *)uap;
+        return (void *)ucontext->uc_mcontext.gregs[RSP];
+}
+
+#define UAP_PROGRAM_COUNTER(ucontext) \
+	(((ucontext_t *)(ucontext))->uc_mcontext.gregs[RIP])
diff --git a/vm/os-solaris.h b/vm/os-solaris.h
index 788a78090b..909cc3f4e9 100644
--- a/vm/os-solaris.h
+++ b/vm/os-solaris.h
@@ -1,2 +1,4 @@
 #define UNKNOWN_TYPE_P(file) 1
 #define DIRECTORY_P(file) 0
+
+extern char **environ;
diff --git a/vm/platform.h b/vm/platform.h
index 7678d483d6..a8c8ba756f 100644
--- a/vm/platform.h
+++ b/vm/platform.h
@@ -95,8 +95,16 @@
 			#endif
 		#elif defined(__SVR4) && defined(sun)
 			#define FACTOR_OS_STRING "solaris"
+
+			#if defined(FACTOR_X86)
+				#include "os-solaris-x86.32.h"
+			#elif defined(FACTOR_AMD64)
+				#incluide "os-solaris-x86.64.h"
+			#else
+				#error "Unsupported Solaris flavor"
+			#endif
+
 			#include "os-solaris.h"
-			#include "os-unix-ucontext.h"
 		#else
 			#error "Unsupported OS"
 		#endif