Skip to content

Commit aaa9d5d

Browse files
committed
Refactor: Migrate isDeoptTarget to DebugMethodInfo
And cache value in MethodEntry
1 parent 1ba0de4 commit aaa9d5d

File tree

6 files changed

+32
-20
lines changed

6 files changed

+32
-20
lines changed

substratevm/src/com.oracle.objectfile/src/com/oracle/objectfile/debugentry/ClassEntry.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ protected MethodEntry processMethod(DebugMethodInfo debugMethodInfo, DebugInfoBa
294294
* substitution
295295
*/
296296
FileEntry methodFileEntry = debugInfoBase.ensureFileEntry(fileName, filePath, cachePath);
297-
final MethodEntry methodEntry = new MethodEntry(methodFileEntry, methodName, this, resultType, paramTypeArray, paramNameArray, modifiers);
297+
final MethodEntry methodEntry = new MethodEntry(methodFileEntry, methodName, this, resultType, paramTypeArray, paramNameArray, modifiers, debugMethodInfo.isDeoptTarget());
298298
methods.add(methodEntry);
299299
return methodEntry;
300300
}
@@ -338,7 +338,7 @@ public ClassEntry getSuperClass() {
338338
}
339339

340340
public Range makePrimaryRange(String methodName, String symbolName, String paramSignature, String returnTypeName, StringTable stringTable, MethodEntry method, int lo,
341-
int hi, int primaryLine, boolean isDeoptTarget) {
341+
int hi, int primaryLine) {
342342
FileEntry fileEntryToUse = method.fileEntry;
343343
if (fileEntryToUse == null) {
344344
/*
@@ -357,7 +357,7 @@ public Range makePrimaryRange(String methodName, String symbolName, String param
357357
fileEntryToUse = this.fileEntry;
358358
}
359359
}
360-
return new Range(symbolName, stringTable, method, fileEntryToUse, lo, hi, primaryLine, isDeoptTarget);
360+
return new Range(symbolName, stringTable, method, fileEntryToUse, lo, hi, primaryLine);
361361
}
362362

363363
public MethodEntry ensureMethodEntry(DebugInfoProvider.DebugMethodInfo debugMethodInfo, DebugInfoBase debugInfoBase, DebugContext debugContext) {

substratevm/src/com.oracle.objectfile/src/com/oracle/objectfile/debugentry/DebugInfoBase.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,12 +244,11 @@ public void installDebugInfo(DebugInfoProvider debugInfoProvider) {
244244
int lo = debugCodeInfo.addressLo();
245245
int hi = debugCodeInfo.addressHi();
246246
int primaryLine = debugCodeInfo.line();
247-
boolean isDeoptTarget = debugCodeInfo.isDeoptTarget();
248247

249248
/* Search for a method defining this primary range. */
250249
ClassEntry classEntry = ensureClassEntry(className);
251250
MethodEntry methodEntry = classEntry.ensureMethodEntry(debugCodeInfo, this, debugContext);
252-
Range primaryRange = classEntry.makePrimaryRange(methodName, symbolName, paramSignature, returnTypeName, stringTable, methodEntry, lo, hi, primaryLine, isDeoptTarget);
251+
Range primaryRange = classEntry.makePrimaryRange(methodName, symbolName, paramSignature, returnTypeName, stringTable, methodEntry, lo, hi, primaryLine);
253252
debugContext.log(DebugContext.INFO_LEVEL, "PrimaryRange %s.%s %s %s:%d [0x%x, 0x%x]", className, methodName, filePath, fileName, primaryLine, lo, hi);
254253
classEntry.indexPrimary(primaryRange, debugCodeInfo.getFrameSizeChanges(), debugCodeInfo.getFrameSize());
255254
debugCodeInfo.lineInfoProvider().forEach(debugLineInfo -> {

substratevm/src/com.oracle.objectfile/src/com/oracle/objectfile/debugentry/MethodEntry.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@
2929
public class MethodEntry extends MemberEntry {
3030
TypeEntry[] paramTypes;
3131
String[] paramNames;
32+
final boolean isDeoptTarget;
3233

33-
public MethodEntry(FileEntry fileEntry, String methodName, ClassEntry ownerType, TypeEntry valueType, TypeEntry[] paramTypes, String[] paramNames, int modifiers) {
34+
public MethodEntry(FileEntry fileEntry, String methodName, ClassEntry ownerType, TypeEntry valueType, TypeEntry[] paramTypes, String[] paramNames, int modifiers, boolean isDeoptTarget) {
3435
super(fileEntry, methodName, ownerType, valueType, modifiers);
3536
assert ((paramTypes == null && paramNames == null) ||
3637
(paramTypes != null && paramNames != null && paramTypes.length == paramNames.length));
3738
this.paramTypes = paramTypes;
3839
this.paramNames = paramNames;
40+
this.isDeoptTarget = isDeoptTarget;
3941
}
4042

4143
public String methodName() {
@@ -94,4 +96,8 @@ public boolean match(String methodName, String paramSignature, String returnType
9496
}
9597
return true;
9698
}
99+
100+
public boolean isDeoptTarget() {
101+
return isDeoptTarget;
102+
}
97103
}

substratevm/src/com.oracle.objectfile/src/com/oracle/objectfile/debugentry/Range.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ public class Range {
4141
private final int lo;
4242
private final int hi;
4343
private final int line;
44-
private final boolean isDeoptTarget;
4544
/*
4645
* This is null for a primary range.
4746
*/
@@ -50,23 +49,22 @@ public class Range {
5049
/*
5150
* Create a primary range.
5251
*/
53-
public Range(String symbolName, StringTable stringTable, MethodEntry methodEntry, FileEntry fileEntry, int lo, int hi, int line,
54-
boolean isDeoptTarget) {
55-
this(symbolName, stringTable, methodEntry, fileEntry, lo, hi, line, isDeoptTarget, null);
52+
public Range(String symbolName, StringTable stringTable, MethodEntry methodEntry, FileEntry fileEntry, int lo, int hi, int line) {
53+
this(symbolName, stringTable, methodEntry, fileEntry, lo, hi, line, null);
5654
}
5755

5856
/*
5957
* Create a secondary range.
6058
*/
6159
public Range(String symbolName, StringTable stringTable, MethodEntry methodEntry, int lo, int hi, int line, Range primary) {
62-
this(symbolName, stringTable, methodEntry, methodEntry.fileEntry, lo, hi, line, false, primary);
60+
this(symbolName, stringTable, methodEntry, methodEntry.fileEntry, lo, hi, line, primary);
6361
}
6462

6563
/*
6664
* Create a primary or secondary range.
6765
*/
6866
private Range(String symbolName, StringTable stringTable, MethodEntry methodEntry, FileEntry fileEntry, int lo, int hi, int line,
69-
boolean isDeoptTarget, Range primary) {
67+
Range primary) {
7068
this.fileEntry = fileEntry; // TODO remove and use fileEntry from MethodEntry
7169
if (fileEntry != null) {
7270
stringTable.uniqueDebugString(fileEntry.getFileName());
@@ -79,7 +77,6 @@ private Range(String symbolName, StringTable stringTable, MethodEntry methodEntr
7977
this.lo = lo;
8078
this.hi = hi;
8179
this.line = line;
82-
this.isDeoptTarget = isDeoptTarget;
8380
this.primary = primary;
8481
}
8582

@@ -128,7 +125,7 @@ public String getFullMethodNameWithParams() {
128125
}
129126

130127
public boolean isDeoptTarget() {
131-
return isDeoptTarget;
128+
return methodEntry.isDeoptTarget;
132129
}
133130

134131
private String getExtendedMethodName(boolean includeClass, boolean includeParams, boolean includeReturnType) {

substratevm/src/com.oracle.objectfile/src/com/oracle/objectfile/debuginfo/DebugInfoProvider.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ interface DebugFieldInfo extends DebugMemberInfo {
200200
int size();
201201
}
202202

203-
interface DebugMethodInfo extends DebugMemberInfo{
203+
interface DebugMethodInfo extends DebugMemberInfo {
204204
/**
205205
* @return a string identifying the method parameters.
206206
*/
@@ -220,6 +220,11 @@ interface DebugMethodInfo extends DebugMemberInfo{
220220
* @return the symbolNameForMethod string
221221
*/
222222
String symbolNameForMethod();
223+
224+
/**
225+
* @return true if this method has been compiled in as a deoptimization target
226+
*/
227+
boolean isDeoptTarget();
223228
}
224229

225230
/**
@@ -261,11 +266,6 @@ interface DebugCodeInfo extends DebugMethodInfo {
261266
* to an empty frame
262267
*/
263268
List<DebugFrameSizeChange> getFrameSizeChanges();
264-
265-
/**
266-
* @return true if this method has been compiled in as a deoptimization target
267-
*/
268-
boolean isDeoptTarget();
269269
}
270270

271271
/**

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageDebugInfoProvider.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,11 @@ public String symbolNameForMethod() {
718718
return NativeImage.localSymbolNameForMethod(hostedMethod);
719719
}
720720

721+
@Override
722+
public boolean isDeoptTarget() {
723+
return name().endsWith(HostedMethod.METHOD_NAME_DEOPT_SUFFIX);
724+
}
725+
721726
@Override
722727
public int modifiers() {
723728
return hostedMethod.getModifiers();
@@ -1116,6 +1121,11 @@ public String symbolNameForMethod() {
11161121
return NativeImage.localSymbolNameForMethod(method);
11171122
}
11181123

1124+
@Override
1125+
public boolean isDeoptTarget() {
1126+
return name().endsWith(HostedMethod.METHOD_NAME_DEOPT_SUFFIX);
1127+
}
1128+
11191129
@Override
11201130
public int addressLo() {
11211131
return lo;

0 commit comments

Comments
 (0)