Skip to content

Commit eafd483

Browse files
committed
WIP
1 parent 9e79f06 commit eafd483

File tree

37 files changed

+1896
-2111
lines changed

37 files changed

+1896
-2111
lines changed

compiler/src/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/util/UnsafeArrayTypeWriter.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,13 @@ protected Chunk(int arrayLength) {
7474
protected int totalSize;
7575

7676
public static UnsafeArrayTypeWriter create(boolean supportsUnalignedMemoryAccess) {
77-
if (supportsUnalignedMemoryAccess) {
77+
return create(supportsUnalignedMemoryAccess, false);
78+
}
79+
80+
public static UnsafeArrayTypeWriter create(boolean supportsUnalignedMemoryAccess, boolean bigEndian) {
81+
if (bigEndian) {
82+
return new BigEndianUnsafeArrayTypeWriter();
83+
} else if (supportsUnalignedMemoryAccess) {
7884
return new UnalignedUnsafeArrayTypeWriter();
7985
} else {
8086
return new AlignedUnsafeArrayTypeWriter();
@@ -287,3 +293,35 @@ protected void putS8(long value, Chunk chunk, long offset) {
287293
UNSAFE.putByte(chunk.data, offset + 7, (byte) (value >> 56));
288294
}
289295
}
296+
297+
final class BigEndianUnsafeArrayTypeWriter extends UnsafeArrayTypeWriter {
298+
private static final Unsafe UNSAFE = getUnsafe();
299+
300+
@Override
301+
protected void putS2(long value, Chunk chunk, long offset) {
302+
assert TypeConversion.isS2(value);
303+
UNSAFE.putByte(chunk.data, offset + 0, (byte) (value >> 8));
304+
UNSAFE.putByte(chunk.data, offset + 1, (byte) (value >> 0));
305+
}
306+
307+
@Override
308+
protected void putS4(long value, Chunk chunk, long offset) {
309+
assert TypeConversion.isS4(value);
310+
UNSAFE.putByte(chunk.data, offset + 0, (byte) (value >> 24));
311+
UNSAFE.putByte(chunk.data, offset + 1, (byte) (value >> 16));
312+
UNSAFE.putByte(chunk.data, offset + 2, (byte) (value >> 8));
313+
UNSAFE.putByte(chunk.data, offset + 3, (byte) (value >> 0));
314+
}
315+
316+
@Override
317+
protected void putS8(long value, Chunk chunk, long offset) {
318+
UNSAFE.putByte(chunk.data, offset + 0, (byte) (value >> 56));
319+
UNSAFE.putByte(chunk.data, offset + 1, (byte) (value >> 48));
320+
UNSAFE.putByte(chunk.data, offset + 2, (byte) (value >> 40));
321+
UNSAFE.putByte(chunk.data, offset + 3, (byte) (value >> 32));
322+
UNSAFE.putByte(chunk.data, offset + 4, (byte) (value >> 24));
323+
UNSAFE.putByte(chunk.data, offset + 5, (byte) (value >> 16));
324+
UNSAFE.putByte(chunk.data, offset + 6, (byte) (value >> 8));
325+
UNSAFE.putByte(chunk.data, offset + 7, (byte) (value >> 0));
326+
}
327+
}

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeReflectionSupport.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,29 @@
4040
*/
4141
package org.graalvm.nativeimage.impl;
4242

43+
import java.lang.reflect.AccessibleObject;
4344
import java.lang.reflect.Executable;
45+
import java.lang.reflect.Field;
4446
import java.util.Set;
4547

4648
public interface RuntimeReflectionSupport extends ReflectionRegistry {
47-
// specific to java.lang.reflect reflection
48-
Set<Executable> getQueriedOnlyMethods();
49+
Set<Field> getReflectionFields();
50+
51+
Set<Executable> getReflectionExecutables();
52+
53+
Object getAccessor(Executable method);
4954

5055
/*
5156
* Returns the methods that shadow a superclass method registered for reflection, to be excluded
5257
* from reflection queries.
5358
*/
54-
Set<?> getHidingMethods();
59+
Set<?> getHidingReflectionMethods();
60+
61+
Object[] getRecordComponents(Class<?> type);
62+
63+
void registerHeapReflectionObject(AccessibleObject object);
64+
65+
Set<AccessibleObject> getHeapReflectionObjects();
5566

5667
int getReflectionClassesCount();
5768

substratevm/mx.substratevm/suite.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,9 @@
194194
"sun.invoke.util",
195195
"sun.net",
196196
"sun.reflect.annotation",
197+
"sun.reflect.generics.factory",
197198
"sun.reflect.generics.reflectiveObjects",
199+
"sun.reflect.generics.repository",
198200
"sun.reflect.generics.tree",
199201
"sun.security.jca",
200202
"sun.security.ssl",

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageHeapScanner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ private boolean notifyAnalysis(JavaConstant array, AnalysisType arrayType, JavaC
373373
return analysisModified;
374374
}
375375

376-
void onObjectReachable(ImageHeapObject imageHeapObject) {
376+
protected void onObjectReachable(ImageHeapObject imageHeapObject) {
377377
AnalysisType objectType = metaAccess.lookupJavaType(imageHeapObject.getObject());
378378
imageHeap.add(objectType, imageHeapObject);
379379

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -657,10 +657,6 @@ protected void onValueUpdate(EconomicMap<OptionKey<?>, Object> values, String ol
657657
}
658658
};
659659

660-
@APIOption(name = "configure-reflection-metadata")//
661-
@Option(help = "Enable runtime instantiation of reflection objects for non-invoked methods.", type = OptionType.Expert)//
662-
public static final HostedOptionKey<Boolean> ConfigureReflectionMetadata = new HostedOptionKey<>(true);
663-
664660
@Option(help = "Include a list of methods included in the image for runtime inspection.", type = OptionType.Expert)//
665661
public static final HostedOptionKey<Boolean> IncludeMethodData = new HostedOptionKey<>(true);
666662

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/CodeInfoEncoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public void addToReferenceMapSize(long size) {
106106
}
107107

108108
public static final class Encoders {
109-
final FrequencyEncoder<JavaConstant> objectConstants;
109+
public final FrequencyEncoder<JavaConstant> objectConstants;
110110
public final FrequencyEncoder<Class<?>> sourceClasses;
111111
public final FrequencyEncoder<String> sourceMethodNames;
112112
final FrequencyEncoder<String> names;

0 commit comments

Comments
 (0)