Skip to content

Commit 3f22ae0

Browse files
[GR-59521] Tag stack trace with method layer information.
PullRequest: graal/21846
2 parents b397545 + 7bae8e0 commit 3f22ae0

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

substratevm/debug/gdbpy/gdb-debughelpers.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1736,8 +1736,17 @@ def function(self) -> str:
17361736
else:
17371737
eclipse_filename = ''
17381738

1739+
sal = frame.find_sal()
1740+
objfile_filename = ''
1741+
if sal and sal.symtab and sal.symtab.objfile:
1742+
objfile = sal.symtab.objfile
1743+
if objfile.owner:
1744+
# avoid showing the '.debug' file
1745+
objfile = objfile.owner
1746+
objfile_filename = ' in ' + os.path.basename(objfile.filename)
1747+
17391748
prefix = '[LAZY DEOPT FRAME] ' if self.__lazy_deopt else ''
1740-
return prefix + func_name + eclipse_filename
1749+
return prefix + func_name + eclipse_filename + objfile_filename
17411750

17421751

17431752
class SymValueWrapper:

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import com.oracle.svm.core.heap.RestrictHeapAccess;
7575
import com.oracle.svm.core.hub.DynamicHub;
7676
import com.oracle.svm.core.hub.LayoutEncoding;
77+
import com.oracle.svm.core.imagelayer.ImageLayerBuildingSupport;
7778
import com.oracle.svm.core.jdk.UninterruptibleUtils;
7879
import com.oracle.svm.core.jdk.UninterruptibleUtils.AtomicWord;
7980
import com.oracle.svm.core.locks.VMLockSupport;
@@ -941,12 +942,18 @@ public void printDiagnostics(Log log, ErrorContext context, int maxDiagnosticLev
941942
}
942943

943944
CodeInfo info = CodeInfoTable.getFirstImageCodeInfo();
945+
int layerNumber = 0;
944946
do {
945947
Pointer codeStart = (Pointer) CodeInfoAccess.getCodeStart(info);
946948
UnsignedWord codeSize = CodeInfoAccess.getCodeSize(info);
947949
Pointer codeEnd = codeStart.add(codeSize).subtract(1);
948-
log.string("AOT compiled code: ").zhex(codeStart).string(" - ").zhex(codeEnd).newline();
950+
log.string("AOT compiled code");
951+
if (ImageLayerBuildingSupport.buildingImageLayer()) {
952+
log.string(" - Layer ").unsigned(layerNumber);
953+
}
954+
log.string(": ").zhex(codeStart).string(" - ").zhex(codeEnd).newline();
949955
info = CodeInfoAccess.getNextImageCodeInfo(info);
956+
layerNumber++;
950957
} while (info.isNonNull());
951958

952959
log.indent(false);

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/stack/ThreadStackPrinter.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.oracle.svm.core.deopt.DeoptimizationSupport;
4141
import com.oracle.svm.core.deopt.DeoptimizedFrame;
4242
import com.oracle.svm.core.heap.RestrictHeapAccess;
43+
import com.oracle.svm.core.imagelayer.ImageLayerBuildingSupport;
4344
import com.oracle.svm.core.log.Log;
4445

4546
import jdk.graal.compiler.word.Word;
@@ -224,6 +225,7 @@ private void logFrameRaw(Log log, Pointer sp, CodePointer ip, CodeInfo codeInfo)
224225
}
225226

226227
private void logFrameRaw(Log log, Pointer sp, CodePointer ip, long frameSize) {
228+
logLayer(log, ip);
227229
logSPAndIP(log, sp, ip);
228230
log.string(" size=");
229231
if (frameSize >= 0) {
@@ -237,6 +239,23 @@ private void logFrameRaw(Log log, Pointer sp, CodePointer ip, long frameSize) {
237239
printedFrames++;
238240
}
239241

242+
private static void logLayer(Log log, CodePointer ip) {
243+
if (ImageLayerBuildingSupport.buildingImageLayer()) {
244+
CodeInfo info = CodeInfoTable.getFirstImageCodeInfo();
245+
int layerNumber = 0;
246+
while (info.isNonNull()) {
247+
if (CodeInfoAccess.contains(info, ip)) {
248+
log.string("L").unsigned(layerNumber).spaces(2);
249+
return;
250+
}
251+
info = CodeInfoAccess.getNextImageCodeInfo(info);
252+
layerNumber++;
253+
}
254+
// No layer information found, print spaces for alignment.
255+
log.spaces(4);
256+
}
257+
}
258+
240259
private static void logSPAndIP(Log log, Pointer sp, CodePointer ip) {
241260
log.string("SP ").zhex(sp).spaces(1);
242261
log.string("IP ").zhex(ip);

0 commit comments

Comments
 (0)