changeset 2058:8f033d37798a

Better support for array types.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Tue, 18 Jan 2011 10:19:59 +0100
parents 89bf01e6b049
children 9508a52cbd32
files c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotRuntime.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypePrimitive.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeResolved.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java c1x4hotspotsrc/hotspot/hotspot Default.launch src/share/vm/c1x/c1x_VMEntries.cpp
diffstat 7 files changed, 40 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotRuntime.java	Fri Jan 14 16:29:42 2011 +0100
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotRuntime.java	Tue Jan 18 10:19:59 2011 +0100
@@ -140,6 +140,7 @@
 
     @Override
     public RiType getRiType(Class<?> javaClass) {
+        assert javaClass != null;
         return Compiler.getVMEntries().getType(javaClass);
     }
 
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypePrimitive.java	Fri Jan 14 16:29:42 2011 +0100
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypePrimitive.java	Tue Jan 18 10:19:59 2011 +0100
@@ -20,6 +20,7 @@
  */
 package com.sun.hotspot.c1x;
 
+import com.sun.c1x.util.*;
 import com.sun.cri.ci.*;
 import com.sun.cri.ri.*;
 
@@ -49,14 +50,12 @@
 
     @Override
     public int accessFlags() {
-        // TODO Auto-generated method stub
-        return 0;
+        return javaClass().getModifiers();
     }
 
     @Override
     public RiType arrayOf() {
-        // TODO Auto-generated method stub
-        return null;
+        return Compiler.getVMEntries().getPrimitiveArrayType(kind);
     }
 
     @Override
@@ -71,9 +70,7 @@
 
     @Override
     public CiConstant getEncoding(Representation r) {
-        // TODO Auto-generated method stub
-
-        return null;
+        throw Util.unimplemented("HotSpotTypePrimitive.getEncoding");
     }
 
     @Override
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeResolved.java	Fri Jan 14 16:29:42 2011 +0100
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeResolved.java	Tue Jan 18 10:19:59 2011 +0100
@@ -55,9 +55,7 @@
 
     @Override
     public RiType arrayOf() {
-        Logger.log("arrayOf " + simpleName);
-        return null;
-        //return Compiler.getVMEntries().RiType_arrayOf(vmId);
+        return Compiler.getVMEntries().RiType_arrayOf(this);
     }
 
     @Override
@@ -82,7 +80,7 @@
     public CiConstant getEncoding(Representation r) {
         switch (r) {
             case JavaClass:
-                return CiConstant.forObject(javaMirror);
+                return CiConstant.forObject(javaClass());
             case ObjectHub:
                 return CiConstant.forObject(this);
             case StaticFields:
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java	Fri Jan 14 16:29:42 2011 +0100
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java	Tue Jan 18 10:19:59 2011 +0100
@@ -73,7 +73,7 @@
 
     RiType getPrimitiveArrayType(CiKind kind);
 
-    RiType RiType_arrayOf(long vmId);
+    RiType RiType_arrayOf(HotSpotTypeResolved klass);
 
     RiType RiType_componentType(HotSpotTypeResolved klass);
 
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java	Fri Jan 14 16:29:42 2011 +0100
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java	Tue Jan 18 10:19:59 2011 +0100
@@ -93,7 +93,7 @@
     public native RiType getPrimitiveArrayType(CiKind kind);
 
     @Override
-    public native RiType RiType_arrayOf(long vmId);
+    public native RiType RiType_arrayOf(HotSpotTypeResolved klass);
 
     @Override
     public native RiType RiType_componentType(HotSpotTypeResolved klass);
--- a/c1x4hotspotsrc/hotspot/hotspot Default.launch	Fri Jan 14 16:29:42 2011 +0100
+++ b/c1x4hotspotsrc/hotspot/hotspot Default.launch	Tue Jan 18 10:19:59 2011 +0100
@@ -1,7 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.cdt.launch.applicationLaunchType">
+<booleanAttribute key="org.eclipse.cdt.dsf.gdb.AUTO_SOLIB" value="true"/>
+<listAttribute key="org.eclipse.cdt.dsf.gdb.AUTO_SOLIB_LIST"/>
+<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="gdb"/>
+<stringAttribute key="org.eclipse.cdt.dsf.gdb.GDB_INIT" value=".gdbinit"/>
+<booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="false"/>
+<booleanAttribute key="org.eclipse.cdt.dsf.gdb.REVERSE" value="false"/>
+<listAttribute key="org.eclipse.cdt.dsf.gdb.SOLIB_PATH"/>
+<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
+<booleanAttribute key="org.eclipse.cdt.dsf.gdb.internal.ui.launching.LocalApplicationCDebuggerTab.DEFAULTS_SET" value="true"/>
 <intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
 <stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="gdb"/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/>
+<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
 <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_ARGUMENTS" value="-client -XX:+UseC1X -XX:+PrintGC -Xms1g -Xmx1g -Xbootclasspath/p:${workspace_loc:hotspot}/../../../maxine/C1X/bin:${workspace_loc:hotspot}/../../../maxine/CRI/bin:${workspace_loc:hotspot}/../../../maxine/Base/bin:${workspace_loc:hotspot}/../../../maxine/Assembler/bin:${workspace_loc:hotspot}/../HotSpotVM/bin -classpath ${workspace_loc:hotspot}/../HotSpotTest/bin C1XTest"/>
 <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="java"/>
 <stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="hotspot"/>
--- a/src/share/vm/c1x/c1x_VMEntries.cpp	Fri Jan 14 16:29:42 2011 +0100
+++ b/src/share/vm/c1x/c1x_VMEntries.cpp	Tue Jan 18 10:19:59 2011 +0100
@@ -432,13 +432,13 @@
   return NULL;
 }
 
-// public RiType RiType_arrayOf(long vmId);
-JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf(JNIEnv *, jobject, jlong vmId) {
+// public RiType RiType_arrayOf(HotSpotTypeResolved klass);
+JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf(JNIEnv *, jobject, jobject klass) {
   VM_ENTRY_MARK;
 
-  instanceKlass* klass = instanceKlass::cast(VmIds::get<klassOop>(vmId));
-  KlassHandle array = klass->array_klass(THREAD);
-  Handle name = array->name();
+  KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)));
+  KlassHandle array = klass_handle->array_klass(THREAD);
+  Handle name = VmIds::toString<Handle>(array->name(), CHECK_NULL);
   return JNIHandles::make_local(THREAD, C1XCompiler::createHotSpotTypeResolved(array, name, THREAD));
 }
 
@@ -454,11 +454,19 @@
 // public RiType getType(Class<?> javaClass);
 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_getType(JNIEnv *env, jobject, jobject javaClass) {
   VM_ENTRY_MARK;
-  KlassHandle klass = java_lang_Class::as_klassOop(JNIHandles::resolve(javaClass));
-  Handle name = java_lang_String::create_from_symbol(klass->name(), CHECK_NULL);
+  oop javaClassOop = JNIHandles::resolve(javaClass);
+  if (javaClassOop == NULL) {
+    fatal("argument to VMEntries.getType must not be NULL");
+  } else if (java_lang_Class::is_primitive(javaClassOop)) {
+    BasicType basicType = java_lang_Class::primitive_type(javaClassOop);
+    return JNIHandles::make_local(THREAD, VMExits::createRiTypePrimitive((int) basicType, THREAD));
+  } else {
+    KlassHandle klass = java_lang_Class::as_klassOop(javaClassOop);
+    Handle name = java_lang_String::create_from_symbol(klass->name(), CHECK_NULL);
 
-  oop type = C1XCompiler::createHotSpotTypeResolved(klass, name, CHECK_NULL);
-  return JNIHandles::make_local(THREAD, type);
+    oop type = C1XCompiler::createHotSpotTypeResolved(klass, name, CHECK_NULL);
+    return JNIHandles::make_local(THREAD, type);
+  }
 }
 
 
@@ -635,7 +643,7 @@
   {CC"RiType_isSubtypeOf",              CC"("RESOLVED_TYPE TYPE")Z",                FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_2isSubtypeOf)},
   {CC"RiType_componentType",            CC"("RESOLVED_TYPE")"TYPE,                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1componentType)},
   {CC"RiType_uniqueConcreteSubtype",    CC"("RESOLVED_TYPE")"TYPE,                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1uniqueConcreteSubtype)},
-  {CC"RiType_arrayOf",                  CC"("PROXY")"TYPE,                          FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf)},
+  {CC"RiType_arrayOf",                  CC"("RESOLVED_TYPE")"TYPE,                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf)},
   {CC"getPrimitiveArrayType",           CC"("CI_KIND")"TYPE,                        FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getPrimitiveArrayType)},
   {CC"getType",                         CC"("CLASS")"TYPE,                          FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getType)},
   {CC"getConfiguration",                CC"()"CONFIG,                               FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getConfiguration)},