60 assert(pc != NULL, "no pc?");
61 _cb = CodeCache::find_blob(pc);
62 adjust_unextended_sp();
63
64 address original_pc = nmethod::get_deopt_original_pc(this);
65 if (original_pc != NULL) {
66 _pc = original_pc;
67 _deopt_state = is_deoptimized;
68 } else {
69 _deopt_state = not_deoptimized;
70 }
71 }
72
73 inline frame::frame(intptr_t* sp, intptr_t* fp, address pc) {
74 init(sp, fp, pc);
75 }
76
77 inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
78 intptr_t a = intptr_t(sp);
79 intptr_t b = intptr_t(fp);
80 #ifndef PRODUCT
81 if (fp)
82 if (sp > fp || (fp - sp > 0x100000))
83 for(;;)
84 asm("nop");
85 #endif
86 _sp = sp;
87 _unextended_sp = unextended_sp;
88 _fp = fp;
89 _pc = pc;
90 assert(pc != NULL, "no pc?");
91 _cb = CodeCache::find_blob(pc);
92 adjust_unextended_sp();
93
94 address original_pc = nmethod::get_deopt_original_pc(this);
95 if (original_pc != NULL) {
96 _pc = original_pc;
97 assert(((nmethod*)_cb)->insts_contains(_pc), "original PC must be in nmethod");
98 _deopt_state = is_deoptimized;
99 } else {
100 _deopt_state = not_deoptimized;
101 }
102 }
103
104 inline frame::frame(intptr_t* sp, intptr_t* fp) {
105 intptr_t a = intptr_t(sp);
106 intptr_t b = intptr_t(fp);
107 #ifndef PRODUCT
108 if (fp)
109 if (sp > fp || (fp - sp > 0x100000))
110 for(;;)
111 asm("nop");
112 #endif
113 _sp = sp;
114 _unextended_sp = sp;
115 _fp = fp;
116 _pc = (address)(sp[-1]);
117
118 // Here's a sticky one. This constructor can be called via AsyncGetCallTrace
119 // when last_Java_sp is non-null but the pc fetched is junk. If we are truly
120 // unlucky the junk value could be to a zombied method and we'll die on the
121 // find_blob call. This is also why we can have no asserts on the validity
122 // of the pc we find here. AsyncGetCallTrace -> pd_get_top_frame_for_signal_handler
123 // -> pd_last_frame should use a specialized version of pd_last_frame which could
124 // call a specilaized frame constructor instead of this one.
125 // Then we could use the assert below. However this assert is of somewhat dubious
126 // value.
127 // assert(_pc != NULL, "no pc?");
128
129 _cb = CodeCache::find_blob(_pc);
130 adjust_unextended_sp();
131
132 address original_pc = nmethod::get_deopt_original_pc(this);
|
60 assert(pc != NULL, "no pc?");
61 _cb = CodeCache::find_blob(pc);
62 adjust_unextended_sp();
63
64 address original_pc = nmethod::get_deopt_original_pc(this);
65 if (original_pc != NULL) {
66 _pc = original_pc;
67 _deopt_state = is_deoptimized;
68 } else {
69 _deopt_state = not_deoptimized;
70 }
71 }
72
73 inline frame::frame(intptr_t* sp, intptr_t* fp, address pc) {
74 init(sp, fp, pc);
75 }
76
77 inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
78 intptr_t a = intptr_t(sp);
79 intptr_t b = intptr_t(fp);
80 _sp = sp;
81 _unextended_sp = unextended_sp;
82 _fp = fp;
83 _pc = pc;
84 assert(pc != NULL, "no pc?");
85 _cb = CodeCache::find_blob(pc);
86 adjust_unextended_sp();
87
88 address original_pc = nmethod::get_deopt_original_pc(this);
89 if (original_pc != NULL) {
90 _pc = original_pc;
91 assert(((nmethod*)_cb)->insts_contains(_pc), "original PC must be in nmethod");
92 _deopt_state = is_deoptimized;
93 } else {
94 _deopt_state = not_deoptimized;
95 }
96 }
97
98 inline frame::frame(intptr_t* sp, intptr_t* fp) {
99 intptr_t a = intptr_t(sp);
100 intptr_t b = intptr_t(fp);
101 _sp = sp;
102 _unextended_sp = sp;
103 _fp = fp;
104 _pc = (address)(sp[-1]);
105
106 // Here's a sticky one. This constructor can be called via AsyncGetCallTrace
107 // when last_Java_sp is non-null but the pc fetched is junk. If we are truly
108 // unlucky the junk value could be to a zombied method and we'll die on the
109 // find_blob call. This is also why we can have no asserts on the validity
110 // of the pc we find here. AsyncGetCallTrace -> pd_get_top_frame_for_signal_handler
111 // -> pd_last_frame should use a specialized version of pd_last_frame which could
112 // call a specilaized frame constructor instead of this one.
113 // Then we could use the assert below. However this assert is of somewhat dubious
114 // value.
115 // assert(_pc != NULL, "no pc?");
116
117 _cb = CodeCache::find_blob(_pc);
118 adjust_unextended_sp();
119
120 address original_pc = nmethod::get_deopt_original_pc(this);
|