8252467: AOT need to process new markId DEOPT_MH_HANDLER_ENTRY in compiled code
Reviewed-by: dlong
This commit is contained in:
parent
0504064717
commit
edf36d90c3
src
hotspot/share/aot
jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc
@ -40,6 +40,7 @@ private:
|
||||
int _verified_entry;
|
||||
int _exception_handler_offset;
|
||||
int _deopt_handler_offset;
|
||||
int _deopt_mh_handler_offset;
|
||||
int _stubs_offset;
|
||||
int _frame_size;
|
||||
// location in frame (offset for sp) that deopt can store the original
|
||||
@ -78,6 +79,7 @@ public:
|
||||
int verified_entry_offset() const { return _verified_entry; }
|
||||
int exception_handler_offset() const { return _exception_handler_offset; }
|
||||
int deopt_handler_offset() const { return _deopt_handler_offset; }
|
||||
int deopt_mh_handler_offset() const { return _deopt_mh_handler_offset; }
|
||||
int orig_pc_offset() const { return _orig_pc_offset; }
|
||||
|
||||
int handler_table_size() const { return handler_table_end() - handler_table_begin(); }
|
||||
@ -148,7 +150,11 @@ private:
|
||||
|
||||
_scopes_data_begin = (address) _meta->scopes_data_begin();
|
||||
_deopt_handler_begin = (address) _code + _meta->deopt_handler_offset();
|
||||
_deopt_mh_handler_begin = (address) this;
|
||||
if (_meta->deopt_mh_handler_offset() != -1) {
|
||||
_deopt_mh_handler_begin = (address) _code + _meta->deopt_mh_handler_offset();
|
||||
} else {
|
||||
_deopt_mh_handler_begin = (address) this;
|
||||
}
|
||||
|
||||
_pc_desc_container.reset_to(scopes_pcs_begin());
|
||||
|
||||
|
@ -35,12 +35,14 @@ final class CodeOffsets {
|
||||
private final int verifiedEntry;
|
||||
private final int exceptionHandler;
|
||||
private final int deoptHandler;
|
||||
private final int deoptMHHandler;
|
||||
|
||||
private CodeOffsets(int entry, int verifiedEntry, int exceptionHandler, int deoptHandler) {
|
||||
private CodeOffsets(int entry, int verifiedEntry, int exceptionHandler, int deoptHandler, int deoptMHHandler) {
|
||||
this.entry = entry;
|
||||
this.verifiedEntry = verifiedEntry;
|
||||
this.exceptionHandler = exceptionHandler;
|
||||
this.deoptHandler = deoptHandler;
|
||||
this.deoptMHHandler = deoptMHHandler;
|
||||
}
|
||||
|
||||
static CodeOffsets buildFrom(List<CompilationResult.CodeMark> marks) {
|
||||
@ -48,6 +50,7 @@ final class CodeOffsets {
|
||||
int verifiedEntry = 0;
|
||||
int exceptionHandler = -1;
|
||||
int deoptHandler = -1;
|
||||
int deoptMHHandler = -1;
|
||||
|
||||
for (CompilationResult.CodeMark mark : marks) {
|
||||
HotSpotMarkId markId = (HotSpotMarkId) mark.id;
|
||||
@ -67,11 +70,14 @@ final class CodeOffsets {
|
||||
case DEOPT_HANDLER_ENTRY:
|
||||
deoptHandler = mark.pcOffset;
|
||||
break;
|
||||
case DEOPT_MH_HANDLER_ENTRY:
|
||||
deoptMHHandler = mark.pcOffset;
|
||||
break;
|
||||
default:
|
||||
break; // Ignore others
|
||||
}
|
||||
}
|
||||
return new CodeOffsets(entry, verifiedEntry, exceptionHandler, deoptHandler);
|
||||
return new CodeOffsets(entry, verifiedEntry, exceptionHandler, deoptHandler, deoptMHHandler);
|
||||
}
|
||||
|
||||
int entry() {
|
||||
@ -89,4 +95,8 @@ final class CodeOffsets {
|
||||
int deoptHandler() {
|
||||
return deoptHandler;
|
||||
}
|
||||
|
||||
int deoptMHHandler() {
|
||||
return deoptMHHandler;
|
||||
}
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ final class MarkProcessor {
|
||||
switch (markId) {
|
||||
case EXCEPTION_HANDLER_ENTRY:
|
||||
case DEOPT_HANDLER_ENTRY:
|
||||
case DEOPT_MH_HANDLER_ENTRY:
|
||||
break;
|
||||
case POLL_FAR:
|
||||
case POLL_RETURN_FAR:
|
||||
|
@ -114,6 +114,7 @@ final class MetadataBuilder {
|
||||
int verifiedEntry = co.verifiedEntry();
|
||||
int exceptionHandler = co.exceptionHandler();
|
||||
int deoptHandler = co.deoptHandler();
|
||||
int deoptMHHandler = co.deoptMHHandler();
|
||||
int frameSize = methodInfo.getCompilationResult().getTotalFrameSize();
|
||||
StackSlot deoptRescueSlot = methodInfo.getCompilationResult().getCustomStackArea();
|
||||
int origPcOffset = deoptRescueSlot != null ? deoptRescueSlot.getOffset(frameSize) : -1;
|
||||
@ -135,6 +136,7 @@ final class MetadataBuilder {
|
||||
putInt(verifiedEntry).
|
||||
putInt(exceptionHandler).
|
||||
putInt(deoptHandler).
|
||||
putInt(deoptMHHandler).
|
||||
putInt(stubsOffset).
|
||||
putInt(frameSize).
|
||||
putInt(origPcOffset).
|
||||
|
Loading…
x
Reference in New Issue
Block a user