[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