mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-28 14:22:24 +00:00
8314508: Improve how relativized pointers are printed by frame::describe
Reviewed-by: coleenp, pchilanomate
This commit is contained in:
parent
035324503f
commit
0db6231198
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -1620,6 +1620,7 @@ void FrameValues::print_on(outputStream* st, int min_index, int max_index, intpt
|
||||
intptr_t* max = MAX2(v0, v1);
|
||||
intptr_t* cur = max;
|
||||
intptr_t* last = nullptr;
|
||||
intptr_t* fp = nullptr;
|
||||
for (int i = max_index; i >= min_index; i--) {
|
||||
FrameValue fv = _values.at(i);
|
||||
while (cur > fv.location) {
|
||||
@ -1630,7 +1631,20 @@ void FrameValues::print_on(outputStream* st, int min_index, int max_index, intpt
|
||||
const char* spacer = " " LP64_ONLY(" ");
|
||||
st->print_cr(" %s %s %s", spacer, spacer, fv.description);
|
||||
} else {
|
||||
if (*fv.description == '#' && isdigit(fv.description[1])) {
|
||||
// The fv.description string starting with a '#' is the line for the
|
||||
// saved frame pointer eg. "#10 method java.lang.invoke.LambdaForm..."
|
||||
// basicaly means frame 10.
|
||||
fp = fv.location;
|
||||
}
|
||||
// To print a fp-relative value:
|
||||
// 1. The content of *fv.location must be such that we think it's a
|
||||
// fp-relative number, i.e [-100..100].
|
||||
// 2. We must have found the frame pointer.
|
||||
// 3. The line can not be the line for the saved frame pointer.
|
||||
// 4. Recognize it as being part of the "fixed frame".
|
||||
if (*fv.location != 0 && *fv.location > -100 && *fv.location < 100
|
||||
&& fp != nullptr && *fv.description != '#'
|
||||
#if !defined(PPC64)
|
||||
&& (strncmp(fv.description, "interpreter_frame_", 18) == 0 || strstr(fv.description, " method "))
|
||||
#else // !defined(PPC64)
|
||||
@ -1639,7 +1653,8 @@ void FrameValues::print_on(outputStream* st, int min_index, int max_index, intpt
|
||||
strcmp(fv.description, "locals") == 0 || strstr(fv.description, " method "))
|
||||
#endif //!defined(PPC64)
|
||||
) {
|
||||
st->print_cr(" " INTPTR_FORMAT ": %18d %s", p2i(fv.location), (int)*fv.location, fv.description);
|
||||
st->print_cr(" " INTPTR_FORMAT ": " INTPTR_FORMAT " %-32s (relativized: fp%+d)",
|
||||
p2i(fv.location), p2i(&fp[*fv.location]), fv.description, (int)*fv.location);
|
||||
} else {
|
||||
st->print_cr(" " INTPTR_FORMAT ": " INTPTR_FORMAT " %s", p2i(fv.location), *fv.location, fv.description);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user