src/share/vm/code/codeBlob.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/share/vm/code/codeBlob.hpp
src/share/vm/code/codeBlob.hpp
Print this page
rev 5903 : [mq]: deoptstackoverflowmonitor
*** 354,371 ****
--- 354,374 ----
int _unpack_with_exception;
int _unpack_with_reexecution;
int _unpack_with_exception_in_tls;
+ int _stack_overflow_offset;
+
// Creation support
DeoptimizationBlob(
CodeBuffer* cb,
int size,
OopMapSet* oop_maps,
int unpack_offset,
int unpack_with_exception_offset,
int unpack_with_reexecution_offset,
+ int stack_overflow_offset,
int frame_size
);
public:
// Creation
*** 373,404 ****
CodeBuffer* cb,
OopMapSet* oop_maps,
int unpack_offset,
int unpack_with_exception_offset,
int unpack_with_reexecution_offset,
int frame_size
);
// Typing
bool is_deoptimization_stub() const { return true; }
bool exception_address_is_unpack_entry(address pc) const {
address unpack_pc = unpack();
return (pc == unpack_pc || (pc + frame::pc_return_offset) == unpack_pc);
}
-
-
-
// GC for args
void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) { /* Nothing to do */ }
// Printing
void print_value_on(outputStream* st) const;
address unpack() const { return code_begin() + _unpack_offset; }
address unpack_with_exception() const { return code_begin() + _unpack_with_exception; }
address unpack_with_reexecution() const { return code_begin() + _unpack_with_reexecution; }
// Alternate entry point for C1 where the exception and issuing pc
// are in JavaThread::_exception_oop and JavaThread::_exception_pc
// instead of being in registers. This is needed because C1 doesn't
// model exception paths in a way that keeps these registers free so
--- 376,406 ----
CodeBuffer* cb,
OopMapSet* oop_maps,
int unpack_offset,
int unpack_with_exception_offset,
int unpack_with_reexecution_offset,
+ int stack_overflow_offset,
int frame_size
);
// Typing
bool is_deoptimization_stub() const { return true; }
bool exception_address_is_unpack_entry(address pc) const {
address unpack_pc = unpack();
return (pc == unpack_pc || (pc + frame::pc_return_offset) == unpack_pc);
}
// GC for args
void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) { /* Nothing to do */ }
// Printing
void print_value_on(outputStream* st) const;
address unpack() const { return code_begin() + _unpack_offset; }
address unpack_with_exception() const { return code_begin() + _unpack_with_exception; }
address unpack_with_reexecution() const { return code_begin() + _unpack_with_reexecution; }
+ address stack_overflow() const { return code_begin() + _stack_overflow_offset; }
// Alternate entry point for C1 where the exception and issuing pc
// are in JavaThread::_exception_oop and JavaThread::_exception_pc
// instead of being in registers. This is needed because C1 doesn't
// model exception paths in a way that keeps these registers free so
*** 417,442 ****
--- 419,450 ----
#ifdef COMPILER2
class UncommonTrapBlob: public SingletonBlob {
friend class VMStructs;
private:
+ int _stack_overflow_offset;
+
// Creation support
UncommonTrapBlob(
CodeBuffer* cb,
int size,
OopMapSet* oop_maps,
+ int stack_overflow_offset,
int frame_size
);
public:
// Creation
static UncommonTrapBlob* create(
CodeBuffer* cb,
OopMapSet* oop_maps,
+ int stack_overflow_offset,
int frame_size
);
+ address stack_overflow() const { return code_begin() + _stack_overflow_offset; }
+
// GC for args
void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) { /* nothing to do */ }
// Typing
bool is_uncommon_trap_stub() const { return true; }
src/share/vm/code/codeBlob.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File