From: <cap...@us...> - 2007-08-30 13:30:02
|
Revision: 13413 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=13413&view=rev Author: captain5050 Date: 2007-08-30 06:29:41 -0700 (Thu, 30 Aug 2007) Log Message: ----------- Patch 1780253 from Georgios Gousios with some minor changes. This patch adds support for compiling and running the RVM on IA32 Solaris. Currently this only passes basic tests and partly runs DaCapo antlr. Modified Paths: -------------- rvmroot/trunk/build/components/classpath.xml rvmroot/trunk/build.xml rvmroot/trunk/libraryInterface/GNUClasspath/CPL/src/java/lang/VMRuntime.java rvmroot/trunk/rvm/src/org/jikesrvm/runtime/VM_Memory.java rvmroot/trunk/rvm/src-generated/vm-configuration/VM_Configuration.template rvmroot/trunk/tools/bootImageRunner/RunBootImage.C rvmroot/trunk/tools/bootImageRunner/ia32/bootThread.S rvmroot/trunk/tools/bootImageRunner/ia32/ihnpdsm.c rvmroot/trunk/tools/bootImageRunner/ia32/libvm.c rvmroot/trunk/tools/bootImageRunner/sys.C Added Paths: ----------- rvmroot/trunk/build/components/patches/classpath-web.RVM-solaris.patch rvmroot/trunk/build/hosts/ia32-solaris.properties rvmroot/trunk/build/targets/ia32-solaris.properties rvmroot/trunk/tools/bootImageRunner/ia32/solaris_ucontext.h Modified: rvmroot/trunk/build/components/classpath.xml =================================================================== --- rvmroot/trunk/build/components/classpath.xml 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/build/components/classpath.xml 2007-08-30 13:29:41 UTC (rev 13413) @@ -133,6 +133,8 @@ dir="${classpath.package.dir}/classpath/" strip="0"/> <patch patchfile="${components.patch.dir}/classpath-web.RVM-185.patch" dir="${classpath.package.dir}/classpath/" strip="0"/> + <patch patchfile="${components.patch.dir}/classpath-web.RVM-solaris.patch" + dir="${classpath.package.dir}/classpath/" strip="0"/> </target> <target name="patch" depends="patch-classpath-web,patch-classpath-cvs"/> @@ -145,6 +147,7 @@ <and> <not> <or> + <equals arg1="${target.os}" arg2="Solaris"/> <equals arg1="${target.os}" arg2="AIX"/> <equals arg1="${target.name}" arg2="ppc64-linux"/> </or> @@ -216,6 +219,9 @@ <condition property="library.suffix" value=".dylib"> <equals arg1="${target.os}" arg2="OSX"/> </condition> + <condition property="library.suffix" value=".so"> + <equals arg1="${target.os}" arg2="Solaris"/> + </condition> <copy todir="${classpath.package.dir}/${target.name}/lib" flatten="true"> <regexpmapper from="^(.*${file.separator})lib([^${file.separator}]+)${library.suffix}$$" Added: rvmroot/trunk/build/components/patches/classpath-web.RVM-solaris.patch =================================================================== --- rvmroot/trunk/build/components/patches/classpath-web.RVM-solaris.patch (rev 0) +++ rvmroot/trunk/build/components/patches/classpath-web.RVM-solaris.patch 2007-08-30 13:29:41 UTC (rev 13413) @@ -0,0 +1,15 @@ +--- native/jni/native-lib/cpio.c 2007-02-09 21:51:07.000000000 +0200 ++++ native/jni/native-lib/cpio.c 2007-08-21 23:52:15.352763000 +0300 +@@ -526,7 +526,12 @@ + struct dirent *dBuf; + + #ifdef HAVE_READDIR_R ++#if defined (__SVR4) && defined (__sun) ++ /*The solaris version of readdir_r is somewhat different*/ ++ dBuf = readdir_r((DIR *)handle, &dent); ++#else + readdir_r ((DIR *) handle, &dent, &dBuf); ++#endif /*__sun__*/ + #else + dBuf = readdir((DIR *)handle); + #endif /* HAVE_READDIR_R */ Added: rvmroot/trunk/build/hosts/ia32-solaris.properties =================================================================== --- rvmroot/trunk/build/hosts/ia32-solaris.properties (rev 0) +++ rvmroot/trunk/build/hosts/ia32-solaris.properties 2007-08-30 13:29:41 UTC (rev 13413) @@ -0,0 +1,19 @@ +bison.exe=/opt/csw/bin/bison +c++.exe=/usr/sfw/bin/g++ +c++.args=-I/usr/X11/include -pipe -ggdb -fPIC -lnsl -lsocket +c.exe=/usr/sfw/bin/gcc +c.args=-I/usr/X11/include ${c++.args} +shld.args=${c++.args} -shared +perl.exe=/usr/bin/perl +bash.exe=/usr/bin/bash + +# optional unless downloading and installing classpath or gcspy +make.exe=/opt/csw/bin/gmake + +# optional unless downloading and installing classpath +tar.exe=/opt/csw/bin/gtar +cvs.exe=/usr/bin/cvs +autoconf.exe=/usr/bin/autoconf + +# required for running tests +awk.exe=/opt/csw/bin/awk Added: rvmroot/trunk/build/targets/ia32-solaris.properties =================================================================== --- rvmroot/trunk/build/targets/ia32-solaris.properties (rev 0) +++ rvmroot/trunk/build/targets/ia32-solaris.properties 2007-08-30 13:29:41 UTC (rev 13413) @@ -0,0 +1,11 @@ +target.arch=ia32 +target.os=Solaris +target.bootimage.code.address=0x25000000 +target.bootimage.data.address=0x21000000 +target.bootimage.rmap.address=0x28000000 +target.max-mappable.address=0xb0000000 +target.address.size=32 +target.dll-ext=.so +target.dll-prefix=lib +target.jni-suffix=${target.dll-ext} +target.arch.sse2=full Modified: rvmroot/trunk/build.xml =================================================================== --- rvmroot/trunk/build.xml 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/build.xml 2007-08-30 13:29:41 UTC (rev 13413) @@ -1,7 +1,6 @@ <!-- ~ This file is part of the Jikes RVM project (http://jikesrvm.org). ~ - ~ This file is licensed to You under the Common Public License (CPL); ~ You may not use this file except in compliance with the License. You ~ may obtain a copy of the License at ~ @@ -276,6 +275,9 @@ <condition property="os.filter" value="-DRVM_FOR_OSX=1"> <equals arg1="${target.os}" arg2="OSX"/> </condition> + <condition property="os.filter" value="-DRVM_FOR_SOLARIS=1"> + <equals arg1="${target.os}" arg2="Solaris"/> + </condition> <condition property="gctrace.filter" value="-DRVM_WITH_GCTRACE=1" else=""> <equals arg1="${config.mmtk.plan}" arg2="org.mmtk.plan.semispace.gctrace.GCTrace"/> @@ -725,6 +727,9 @@ <condition property="pp_RVM_FOR_LINUX" value="true" else="false"> <equals arg1="${target.os}" arg2="Linux"/> </condition> + <condition property="pp_RVM_FOR_SOLARIS" value="true" else="false"> + <equals arg1="${target.os}" arg2="Solaris" /> + </condition> <condition property="pp_RVM_FOR_SSE2" value="true" else="false"> <not> <equals arg1="${target.arch.sse2}" arg2="none"/> @@ -759,7 +764,8 @@ <filter token="_RVM_FOR_32_ADDR_" value="${pp_RVM_FOR_32_ADDR}"/> <filter token="_RVM_FOR_AIX_" value="${pp_RVM_FOR_AIX}"/> <filter token="_RVM_FOR_LINUX_" value="${pp_RVM_FOR_LINUX}"/> - <filter token="_RVM_FOR_SSE2_" value="${pp_RVM_FOR_SSE2}"/> + <filter token="_RVM_FOR_SOLARIS_" value="${pp_RVM_FOR_SOLARIS}" /> + <filter token="_RVM_FOR_SSE2_" value="${pp_RVM_FOR_SSE2}"/> <filter token="_RVM_FOR_SSE2_FULL_" value="${pp_RVM_FOR_SSE2_FULL}"/> <filter token="_RVM_WITH_ALL_CLASSES_" value="${config.include.all-classes}"/> <filter token="_RVM_WITH_ASSERTIONS_" value="${pp_RVM_WITH_ASSERTIONS}"/> @@ -1189,7 +1195,10 @@ </condition> <condition property="include.syswrap" value="true"> - <equals arg1="${target.os}" arg2="Linux"/> + <or> + <equals arg1="${target.os}" arg2="Linux"/> + <equals arg1="${target.os}" arg2="Solaris"/> + </or> </condition> <condition property="gcspy.includes.dir" value="-I${jikesrvm.dir}/tools/gcspy-stub/src"> @@ -1246,7 +1255,7 @@ <property name="syswrap.dll" value="${target.dll-prefix}syswrap${target.dll-ext}"/> <exec executable="${c++.exe}" failonerror="true"> <arg line="${rvm.c++.args}"/> - <arg line="-nostartfiles -Wl,--export-dynamic"/> + <arg line="-nostartfiles -shared"/> <arg value="-o"/> <arg value="${build.base}/${syswrap.dll}"/> <arg value="${bl.dir}/syswrap.C"/> Modified: rvmroot/trunk/libraryInterface/GNUClasspath/CPL/src/java/lang/VMRuntime.java =================================================================== --- rvmroot/trunk/libraryInterface/GNUClasspath/CPL/src/java/lang/VMRuntime.java 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/libraryInterface/GNUClasspath/CPL/src/java/lang/VMRuntime.java 2007-08-30 13:29:41 UTC (rev 13413) @@ -111,7 +111,7 @@ */ static String mapLibraryName(String libname) { String libSuffix; - if (VM.BuildForLinux) { + if (VM.BuildForLinux || VM.BuildForSolaris) { libSuffix = ".so"; } else if (VM.BuildForOsx) { libSuffix = ".jnilib"; Modified: rvmroot/trunk/rvm/src/org/jikesrvm/runtime/VM_Memory.java =================================================================== --- rvmroot/trunk/rvm/src/org/jikesrvm/runtime/VM_Memory.java 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/rvm/src/org/jikesrvm/runtime/VM_Memory.java 2007-08-30 13:29:41 UTC (rev 13413) @@ -412,8 +412,8 @@ public static final int PROT_EXEC = 4; public static final int MAP_PRIVATE = 2; - public static final int MAP_FIXED = (VM.BuildForLinux) ? 16 : (VM.BuildForOsx) ? 16 : 256; - public static final int MAP_ANONYMOUS = (VM.BuildForLinux) ? 32 : (VM.BuildForOsx) ? 0x1000 : 16; + public static final int MAP_FIXED = (VM.BuildForLinux) ? 16 : (VM.BuildForOsx) ? 16 : (VM.BuildForSolaris) ? 0x10 :256; + public static final int MAP_ANONYMOUS = (VM.BuildForLinux) ? 32 : (VM.BuildForOsx) ? 0x1000 : (VM.BuildForSolaris) ? 0x100 : 16; public static boolean isPageMultiple(int val) { int pagesizeMask = getPagesize() - 1; Modified: rvmroot/trunk/rvm/src-generated/vm-configuration/VM_Configuration.template =================================================================== --- rvmroot/trunk/rvm/src-generated/vm-configuration/VM_Configuration.template 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/rvm/src-generated/vm-configuration/VM_Configuration.template 2007-08-30 13:29:41 UTC (rev 13413) @@ -33,7 +33,8 @@ public static final boolean BuildForAix = @_RVM_FOR_AIX_@; public static final boolean BuildForLinux = @_RVM_FOR_LINUX_@; - public static final boolean BuildForOsx = !BuildForAix && !BuildForLinux; + public static final boolean BuildForSolaris = @_RVM_FOR_SOLARIS_@; + public static final boolean BuildForOsx = !BuildForAix && !BuildForLinux && !BuildForSolaris; public static final boolean LittleEndian = BuildForIA32; @@ -43,7 +44,7 @@ public static final boolean BuildForSVR4ABI = !(BuildForPowerOpenABI || BuildForMachOABI); /** Do we have the facilities to intercept blocking system calls? */ - public static final boolean withoutInterceptBlockingSystemCalls = BuildForAix || BuildForOsx; + public static final boolean withoutInterceptBlockingSystemCalls = BuildForAix || BuildForOsx || BuildForSolaris; /** * Can a dereference of a null pointer result in an access Modified: rvmroot/trunk/tools/bootImageRunner/RunBootImage.C =================================================================== --- rvmroot/trunk/tools/bootImageRunner/RunBootImage.C 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/tools/bootImageRunner/RunBootImage.C 2007-08-30 13:29:41 UTC (rev 13413) @@ -42,7 +42,7 @@ #include <strings.h> /* bzero */ #include <libgen.h> /* basename */ #include <sys/utsname.h> // for uname(2) -#if (defined __linux__) || (defined __MACH__) +#if (defined __linux__) || (defined __MACH__) || (defined (__SVR4) && defined (__sun)) #include <ucontext.h> #include <signal.h> #else Modified: rvmroot/trunk/tools/bootImageRunner/ia32/bootThread.S =================================================================== --- rvmroot/trunk/tools/bootImageRunner/ia32/bootThread.S 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/tools/bootImageRunner/ia32/bootThread.S 2007-08-30 13:29:41 UTC (rev 13413) @@ -23,7 +23,7 @@ #define NEED_ASSEMBLER_DECLARATIONS #include "InterfaceDeclarations.h" -#ifdef __linux__ +#if defined(__linux__) || (defined(__SVR4) && defined(__sun)) .text .align 4 .globl bootThread # external visibility Modified: rvmroot/trunk/tools/bootImageRunner/ia32/ihnpdsm.c =================================================================== --- rvmroot/trunk/tools/bootImageRunner/ia32/ihnpdsm.c 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/tools/bootImageRunner/ia32/ihnpdsm.c 2007-08-30 13:29:41 UTC (rev 13413) @@ -73,6 +73,22 @@ #include "ihnpdsm.h" #include "../cAttributePortability.h" +#if defined (__SVR4) && defined (__sun) +#undef CS +#undef SS +#undef FS +#undef GS +#undef ES +#undef EAX +#undef ECX +#undef EDX +#undef EBX +#undef ESP +#undef EBP +#undef ESI +#undef EDI +#endif + /***************************************************************************/ /* Set the default state of the conditionally invalid opcodes */ /***************************************************************************/ Modified: rvmroot/trunk/tools/bootImageRunner/ia32/libvm.c =================================================================== --- rvmroot/trunk/tools/bootImageRunner/ia32/libvm.c 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/tools/bootImageRunner/ia32/libvm.c 2007-08-30 13:29:41 UTC (rev 13413) @@ -43,10 +43,17 @@ #ifdef __APPLE__ #include "osx_ucontext.h" -#else +#endif + +#ifdef __linux__ #include "linux_ucontext.h" #endif +#if defined (__SVR4) && defined (__sun) +typedef unsigned int u_int32_t; +#include "solaris_ucontext.h" +#endif + #define __STDC_FORMAT_MACROS // include PRIxPTR #include <inttypes.h> // PRIxPTR, uintptr_t @@ -374,7 +381,10 @@ * There are 8 floating point registers, each 10 bytes wide. * See /usr/include/asm/sigcontext.h */ - if (IA32_FPREGS(context)) { + +//Solaris doesn't seem to support these +#if !(defined (__SVR4) && defined (__sun)) + if (IA32_FPREGS(context)) { writeErr("fp%d 0x%04x%04x%04x%04x%04x\n", 0, IA32_STMM(context, 0, 0) & 0xffff, @@ -432,7 +442,7 @@ IA32_STMM(context, 7, 3) & 0xffff, IA32_STMMEXP(context, 7) & 0xffff); } - +#endif if (isRecoverable) { fprintf(SysTraceFile, "%s: normal trap\n", Me); } else { Added: rvmroot/trunk/tools/bootImageRunner/ia32/solaris_ucontext.h =================================================================== --- rvmroot/trunk/tools/bootImageRunner/ia32/solaris_ucontext.h (rev 0) +++ rvmroot/trunk/tools/bootImageRunner/ia32/solaris_ucontext.h 2007-08-30 13:29:41 UTC (rev 13413) @@ -0,0 +1,56 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Common Public License (CPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/cpl1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +#ifndef JRVM_SOLARIS_IA32_UCONTEXT +#define JRVM_SOLARIS_IA32_UCONTEXT + +#define __MC(context) ((ucontext_t*)context)->uc_mcontext +#define __GREGS(context) (__MC(context).gregs) + +#define IA32_ESP(context) (__GREGS(context)[ESP]) + +#define IA32_EAX(context) (__GREGS(context)[EAX]) +#define IA32_EBX(context) (__GREGS(context)[EBX]) +#define IA32_ECX(context) (__GREGS(context)[ECX]) +#define IA32_EDX(context) (__GREGS(context)[EDX]) +#define IA32_EDI(context) (__GREGS(context)[EDI]) +#define IA32_ESI(context) (__GREGS(context)[ESI]) +#define IA32_EBP(context) (__GREGS(context)[EBP]) +#define IA32_ESP(context) (__GREGS(context)[ESP]) +#define IA32_SS(context) (__GREGS(context)[SS]) +#define IA32_EFLAGS(context) (__GREGS(context)[EFL]) +#define IA32_EIP(context) (__GREGS(context)[EIP]) +#define IA32_CS(context) (__GREGS(context)[CS]) +#define IA32_DS(context) (__GREGS(context)[DS]) +#define IA32_ES(context) (__GREGS(context)[ES]) +#define IA32_FS(context) (__GREGS(context)[FS]) +#define IA32_GS(context) (__GREGS(context)[GS]) +#define IA32_TRAPNO(context) (__GREGS(context)[TRAPNO]) +#define IA32_ERR(context) (__GREGS(context)[ERR]) +#define IA32_FALUTVADDR(context) (__GREGS(context)[CS]) + +#define IA32_FPREGS(context) (__MC(context).fpregs) + +// FIXME: These don't seem to have a Solaris equivalent +#define IA32_FPFAULTDATA(context) (0xFFFFFFFF) +#define IA32_FPSTATE(context) (0xFFFFFFF) +#define IA32_OLDMASK(context) (0xFFFFFFFF) + +// reg = 0..7, n = 0 .. 3 +#define IA32_STMM(context, reg, n) (IA32_FPREGS(context)->_st[reg].significand[n]) +#define IA32_STMMEXP(context, reg) (IA32_FPREGS(context)->_st[reg].exponent) + +/* Currently unused +#define IA32_XMM(context, reg, n) \ +*/ + +#endif Modified: rvmroot/trunk/tools/bootImageRunner/sys.C =================================================================== --- rvmroot/trunk/tools/bootImageRunner/sys.C 2007-08-30 10:55:45 UTC (rev 13412) +++ rvmroot/trunk/tools/bootImageRunner/sys.C 2007-08-30 13:29:41 UTC (rev 13413) @@ -21,6 +21,11 @@ // Only called externally from Java programs. extern "C" void sysExit(int) __attribute__((noreturn)); +//Solaris needs BSD_COMP to be set to enable the FIONREAD ioctl +#if defined (__SVR4) && defined (__sun) +#define BSD_COMP +#endif + // AIX needs this to get errno right. JTD #define _THREAD_SAFE_ERRNO @@ -48,13 +53,15 @@ # include "perfctr.h" #endif -#ifdef RVM_FOR_LINUX +#if (defined RVM_FOR_LINUX) || (defined RVM_FOR_SOLARIS) #include <sys/stat.h> #include <sys/sysinfo.h> #include <netinet/in.h> #include <signal.h> #include <sys/ioctl.h> +#ifdef RVM_FOR_LINUX #include <asm/ioctls.h> +#endif # include <sched.h> @@ -107,7 +114,7 @@ #include "bootImageRunner.h" // In tools/bootImageRunner. #include <pthread.h> -#ifdef RVM_FOR_LINUX +#if (defined RVM_FOR_LINUX) || (defined RVM_FOR_SOLARIS) # include "syswrap.h" #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |