[vmkit-commits] [PATCH] Refactor out property-setting from GNUCP to shared 'SetProperties.inc'
Nicolas Geoffray
nicolas.geoffray at gmail.com
Tue Oct 25 10:38:06 PDT 2011
looks good!
On Tue, Oct 25, 2011 at 12:48 AM, Will Dietz <wdietz2 at illinois.edu> wrote:
> Inlined below.
>
> ~Will
>
> >From 2dc8172b60301f98bf98d1ab2e17237f5da8540c Mon Sep 17 00:00:00 2001
> From: Will Dietz <w at wdtz.org>
> Date: Fri, 14 Oct 2011 04:08:44 -0500
> Subject: [PATCH 12/29] Refactor out property-setting from GNUCP to shared
> 'SetProperties.inc'.
>
> ---
> .../GNUClasspath/ClasspathVMSystemProperties.inc | 105
> +-----------------
> lib/J3/ClassLib/SetProperties.inc | 117
> ++++++++++++++++++++
> 2 files changed, 121 insertions(+), 101 deletions(-)
> create mode 100644 lib/J3/ClassLib/SetProperties.inc
>
> diff --git a/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystemProperties.inc
> b/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystemProperties.inc
> index 7e9e5c1..e126122 100644
> --- a/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystemProperties.inc
> +++ b/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystemProperties.inc
> @@ -20,41 +20,12 @@
> #include "JavaUpcalls.h"
> #include "Jnjvm.h"
>
> +#include "SetProperties.inc"
> +
> using namespace j3;
>
> extern "C" {
>
> -void setProperty(Jnjvm* vm, JavaObject* prop, const char* key,
> - const char* val) {
> -
> - JavaString* Val = 0;
> - JavaString* Key = 0;
> - llvm_gcroot(prop, 0);
> - llvm_gcroot(Val, 0);
> - llvm_gcroot(Key, 0);
> -
> - Val = vm->asciizToStr(val);
> - Key = vm->asciizToStr(key);
> -
> - vm->upcalls->setProperty->invokeIntSpecial(
> - vm, (UserClass*)JavaObject::getClass(prop), prop, &Key, &Val);
> -}
> -
> -void setUnameProp(Jnjvm* vm, JavaObject* prop) {
> -
> - llvm_gcroot(prop, 0);
> -
> - struct utsname infos;
> - uname(&infos);
> - setProperty(vm, prop, "os.name", infos.sysname);
> - setProperty(vm, prop, "os.arch", infos.machine);
> - setProperty(vm, prop, "os.version", infos.release);
> - if (!strcmp(infos.machine, "ppc")) {
> - setProperty(vm, prop, "gnu.cpu.endian","big");
> - } else {
> - setProperty(vm, prop, "gnu.cpu.endian","little");
> - }
> -}
>
> JNIEXPORT void JNICALL Java_gnu_classpath_VMSystemProperties_preInit(
> #ifdef NATIVE_JNI
> @@ -67,71 +38,7 @@ JavaObject* prop) {
>
> BEGIN_NATIVE_EXCEPTION(0)
>
> - Jnjvm* vm = JavaThread::get()->getJVM();
> - const char* tmp;
> - setProperty(vm, prop, "java.vm.specification.version", "1.0");
> - setProperty(vm, prop, "java.vm.specification.vendor",
> - "Sun Microsystems, Inc");
> - setProperty(vm, prop, "java.vm.specification.name",
> - "Java Virtual Machine Specification");
> - setProperty(vm, prop, "java.specification.version", "1.5");
> - setProperty(vm, prop, "java.specification.vendor", "Sun Microsystems,
> Inc");
> - setProperty(vm, prop, "java.specification.name",
> - "Java Platform API Specification");
> - setProperty(vm, prop, "java.version", "1.5");
> - setProperty(vm, prop, "java.runtime.version", "1.5");
> - setProperty(vm, prop, "java.vendor", "The VMKit Project");
> - setProperty(vm, prop, "java.vendor.url", "http://vmkit.llvm.org");
> -
> - tmp = getenv("JAVA_HOME");
> - if (!tmp) tmp = "";
> - setProperty(vm, prop, "java.home", tmp);
> -
> - JnjvmBootstrapLoader* JCL = vm->bootstrapLoader;
> - setProperty(vm, prop, "java.class.version", "49.0");
> - setProperty(vm, prop, "java.class.path", vm->classpath);
> - setProperty(vm, prop, "java.boot.class.path", JCL->bootClasspathEnv);
> - setProperty(vm, prop, "sun.boot.class.path", JCL->bootClasspathEnv);
> - setProperty(vm, prop, "java.vm.version", "0.28");
> - setProperty(vm, prop, "java.vm.vendor", "The VMKit Project");
> - setProperty(vm, prop, "java.vm.name", "J3");
> - setProperty(vm, prop, "java.specification.version", "1.5");
> - setProperty(vm, prop, "java.io.tmpdir", "/tmp");
> -
> - tmp = getenv("JAVA_COMPILER");
> - if (!tmp) tmp = "gcj";
> - setProperty(vm, prop, "java.compiler", tmp);
> -
> - setProperty(vm, prop, "build.compiler", "gcj");
> - setProperty(vm, prop, "gcj.class.path", JCL->bootClasspathEnv);
> - setProperty(vm, prop, "gnu.classpath.boot.library.path",
> - JCL->libClasspathEnv);
> -
> - setUnameProp(vm, prop);
> -
> - setProperty(vm, prop, "file.separator", vm->dirSeparator);
> - setProperty(vm, prop, "path.separator", vm->envSeparator);
> - setProperty(vm, prop, "line.separator", "\n");
> -
> - tmp = getenv("USERNAME");
> - if (!tmp) tmp = getenv("LOGNAME");
> - if (!tmp) tmp = getenv("NAME");
> - if (!tmp) tmp = "";
> - setProperty(vm, prop, "user.name", tmp);
> -
> - tmp = getenv("HOME");
> - if (!tmp) tmp = "";
> - setProperty(vm, prop, "user.home", tmp);
> -
> - tmp = getenv("PWD");
> - if (!tmp) tmp = "";
> - setProperty(vm, prop, "user.dir", tmp);
> -
> - // Disable this property. The Classpath iconv implementation is really
> - // not optimized (it over-abuses JNI calls).
> - //setProperty(vm, prop, "gnu.classpath.nio.charset.provider.iconv",
> "true");
> - setProperty(vm, prop, "file.encoding", "ISO8859_1");
> - setProperty(vm, prop, "gnu.java.util.zoneinfo.dir",
> "/usr/share/zoneinfo");
> + setProperties(prop);
>
> END_NATIVE_EXCEPTION
> }
> @@ -142,11 +49,7 @@ extern "C" void
> Java_gnu_classpath_VMSystemProperties_postInit__Ljava_util_Prope
>
> BEGIN_NATIVE_EXCEPTION(0)
>
> - Jnjvm* vm = JavaThread::get()->getJVM();
> - for (std::vector<std::pair<char*, char*> >::iterator i =
> - vm->postProperties.begin(), e = vm->postProperties.end(); i!= e;
> i++) {
> - setProperty(vm, prop, i->first, i->second);
> - }
> + setCommandLineProperties(prop);
>
> END_NATIVE_EXCEPTION
> }
> diff --git a/lib/J3/ClassLib/SetProperties.inc
> b/lib/J3/ClassLib/SetProperties.inc
> new file mode 100644
> index 0000000..7f3063f
> --- /dev/null
> +++ b/lib/J3/ClassLib/SetProperties.inc
> @@ -0,0 +1,117 @@
> +#include <sys/utsname.h>
> +
> +extern "C" {
> +
> +void setProperty(Jnjvm* vm, JavaObject* prop, const char* key,
> + const char* val) {
> +
> + JavaString* Val = 0;
> + JavaString* Key = 0;
> + llvm_gcroot(prop, 0);
> + llvm_gcroot(Val, 0);
> + llvm_gcroot(Key, 0);
> +
> + Val = vm->asciizToStr(val);
> + Key = vm->asciizToStr(key);
> +
> + vm->upcalls->setProperty->invokeIntSpecial(
> + vm, (UserClass*)JavaObject::getClass(prop), prop, &Key, &Val);
> +}
> +
> +void setUnameProp(Jnjvm* vm, JavaObject* prop) {
> +
> + llvm_gcroot(prop, 0);
> +
> + struct utsname infos;
> + uname(&infos);
> + setProperty(vm, prop, "os.name", infos.sysname);
> + setProperty(vm, prop, "os.arch", infos.machine);
> + setProperty(vm, prop, "os.version", infos.release);
> + if (!strcmp(infos.machine, "ppc")) {
> + setProperty(vm, prop, "gnu.cpu.endian","big");
> + } else {
> + setProperty(vm, prop, "gnu.cpu.endian","little");
> + }
> +}
> +void setProperties(JavaObject * prop) {
> + llvm_gcroot(prop, 0);
> + Jnjvm* vm = JavaThread::get()->getJVM();
> + const char* tmp;
> + setProperty(vm, prop, "java.vm.specification.version", "1.0");
> + setProperty(vm, prop, "java.vm.specification.vendor",
> + "Sun Microsystems, Inc");
> + setProperty(vm, prop, "java.vm.specification.name",
> + "Java Virtual Machine Specification");
> + setProperty(vm, prop, "java.specification.version", "1.5");
> + setProperty(vm, prop, "java.specification.vendor", "Sun Microsystems,
> Inc");
> + setProperty(vm, prop, "java.specification.name",
> + "Java Platform API Specification");
> + setProperty(vm, prop, "java.version", "1.5");
> + setProperty(vm, prop, "java.runtime.version", "1.5");
> + setProperty(vm, prop, "java.vendor", "The VMKit Project");
> + setProperty(vm, prop, "java.vendor.url", "http://vmkit.llvm.org");
> +
> + tmp = getenv("JAVA_HOME");
> + if (!tmp) tmp = "";
> + setProperty(vm, prop, "java.home", tmp);
> +
> + JnjvmBootstrapLoader* JCL = vm->bootstrapLoader;
> + setProperty(vm, prop, "java.class.version", "49.0");
> + setProperty(vm, prop, "java.class.path", vm->classpath);
> + setProperty(vm, prop, "java.boot.class.path", JCL->bootClasspathEnv);
> + setProperty(vm, prop, "sun.boot.class.path", JCL->bootClasspathEnv);
> + setProperty(vm, prop, "java.vm.version", "0.28");
> + setProperty(vm, prop, "java.vm.vendor", "The VMKit Project");
> + setProperty(vm, prop, "java.vm.name", "J3");
> + setProperty(vm, prop, "java.specification.version", "1.5");
> + setProperty(vm, prop, "java.io.tmpdir", "/tmp");
> +
> + tmp = getenv("JAVA_COMPILER");
> + if (!tmp) tmp = "gcj";
> + setProperty(vm, prop, "java.compiler", tmp);
> +
> + setProperty(vm, prop, "build.compiler", "gcj");
> + setProperty(vm, prop, "gcj.class.path", JCL->bootClasspathEnv);
> + setProperty(vm, prop, "gnu.classpath.boot.library.path",
> + JCL->libClasspathEnv);
> + //setProperty(vm, prop, "java.library.path", TODO:
> getenv("LD_LIBRARY_PATH"))
> + setProperty(vm, prop, "sun.boot.library.path", JCL->libClasspathEnv);
> +
> +
> + setUnameProp(vm, prop);
> +
> + setProperty(vm, prop, "file.separator", vm->dirSeparator);
> + setProperty(vm, prop, "path.separator", vm->envSeparator);
> + setProperty(vm, prop, "line.separator", "\n");
> +
> + tmp = getenv("USERNAME");
> + if (!tmp) tmp = getenv("LOGNAME");
> + if (!tmp) tmp = getenv("NAME");
> + if (!tmp) tmp = "";
> + setProperty(vm, prop, "user.name", tmp);
> +
> + tmp = getenv("HOME");
> + if (!tmp) tmp = "";
> + setProperty(vm, prop, "user.home", tmp);
> +
> + tmp = getenv("PWD");
> + if (!tmp) tmp = "";
> + setProperty(vm, prop, "user.dir", tmp);
> +
> + // Disable this property. The Classpath iconv implementation is really
> + // not optimized (it over-abuses JNI calls).
> + //setProperty(vm, prop, "gnu.classpath.nio.charset.provider.iconv",
> "true");
> + setProperty(vm, prop, "file.encoding", "ISO8859_1");
> + setProperty(vm, prop, "gnu.java.util.zoneinfo.dir",
> "/usr/share/zoneinfo");
> +}
> +
> +void setCommandLineProperties(JavaObject * prop) {
> + llvm_gcroot(prop, 0);
> + Jnjvm* vm = JavaThread::get()->getJVM();
> + for (std::vector<std::pair<char*, char*> >::iterator i =
> + vm->postProperties.begin(), e = vm->postProperties.end(); i!= e;
> i++) {
> + setProperty(vm, prop, i->first, i->second);
> + }
> +
> +}
> +}
> --
> 1.7.5.1
> _______________________________________________
> vmkit-commits mailing list
> vmkit-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/vmkit-commits/attachments/20111025/f8d58c57/attachment.html>
More information about the vmkit-commits
mailing list