< prev index next >

src/hotspot/cpu/ppc/frame_ppc.inline.hpp

Print this page
rev 55858 : 8228649: [PPC64] SA reads wrong slots from interpreter frames
Summary: Make frame layout consistent between dbg and product build and implement offsets accordingly.
Reviewed-by: goetz, gromero


 113 }
 114 
 115 // All frames have this field.
 116 inline intptr_t* frame::link() const {
 117   return (intptr_t*)callers_abi()->callers_sp;
 118 }
 119 
 120 inline intptr_t* frame::real_fp() const {
 121   return fp();
 122 }
 123 
 124 // Template Interpreter frame value accessors.
 125 
 126 inline frame::ijava_state* frame::get_ijava_state() const {
 127   return (ijava_state*) ((uintptr_t)fp() - ijava_state_size);
 128 }
 129 
 130 inline intptr_t** frame::interpreter_frame_locals_addr() const {
 131   return (intptr_t**) &(get_ijava_state()->locals);
 132 }

 133 inline intptr_t* frame::interpreter_frame_bcp_addr() const {
 134   return (intptr_t*) &(get_ijava_state()->bcp);
 135 }

 136 inline intptr_t* frame::interpreter_frame_mdp_addr() const {
 137   return (intptr_t*) &(get_ijava_state()->mdx);
 138 }

 139 // Pointer beyond the "oldest/deepest" BasicObjectLock on stack.
 140 inline BasicObjectLock* frame::interpreter_frame_monitor_end() const {
 141   return (BasicObjectLock *) get_ijava_state()->monitors;
 142 }
 143 
 144 inline BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
 145   return (BasicObjectLock *) get_ijava_state();
 146 }
 147 
 148 // Return register stack slot addr at which currently interpreted method is found.
 149 inline Method** frame::interpreter_frame_method_addr() const {
 150   return (Method**) &(get_ijava_state()->method);
 151 }
 152 
 153 inline oop* frame::interpreter_frame_mirror_addr() const {
 154   return (oop*) &(get_ijava_state()->mirror);
 155 }
 156 
 157 inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const {
 158   return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache);
 159 }
 160 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const {
 161   return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache);
 162 }
 163 
 164 inline oop* frame::interpreter_frame_temp_oop_addr() const {
 165   return (oop *) &(get_ijava_state()->oop_tmp);
 166 }

 167 inline intptr_t* frame::interpreter_frame_esp() const {
 168   return (intptr_t*) get_ijava_state()->esp;
 169 }
 170 
 171 // Convenient setters
 172 inline void frame::interpreter_frame_set_monitor_end(BasicObjectLock* end)    { get_ijava_state()->monitors = (intptr_t) end;}
 173 inline void frame::interpreter_frame_set_cpcache(ConstantPoolCache* cp)       { *frame::interpreter_frame_cpoolcache_addr() = cp; }
 174 inline void frame::interpreter_frame_set_esp(intptr_t* esp)                   { get_ijava_state()->esp = (intptr_t) esp; }
 175 inline void frame::interpreter_frame_set_top_frame_sp(intptr_t* top_frame_sp) { get_ijava_state()->top_frame_sp = (intptr_t) top_frame_sp; }
 176 inline void frame::interpreter_frame_set_sender_sp(intptr_t* sender_sp)       { get_ijava_state()->sender_sp = (intptr_t) sender_sp; }
 177 
 178 inline intptr_t* frame::interpreter_frame_expression_stack() const {
 179   return (intptr_t*)interpreter_frame_monitor_end() - 1;
 180 }
 181 
 182 // top of expression stack
 183 inline intptr_t* frame::interpreter_frame_tos_address() const {
 184   return ((intptr_t*) get_ijava_state()->esp) + Interpreter::stackElementWords;
 185 }
 186 
 187 inline intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
 188   return &interpreter_frame_tos_address()[offset];
 189 }
 190 
 191 inline int frame::interpreter_frame_monitor_size() {
 192   // Number of stack slots for a monitor.
 193   return align_up(BasicObjectLock::size(),  // number of stack slots




 113 }
 114 
 115 // All frames have this field.
 116 inline intptr_t* frame::link() const {
 117   return (intptr_t*)callers_abi()->callers_sp;
 118 }
 119 
 120 inline intptr_t* frame::real_fp() const {
 121   return fp();
 122 }
 123 
 124 // Template Interpreter frame value accessors.
 125 
 126 inline frame::ijava_state* frame::get_ijava_state() const {
 127   return (ijava_state*) ((uintptr_t)fp() - ijava_state_size);
 128 }
 129 
 130 inline intptr_t** frame::interpreter_frame_locals_addr() const {
 131   return (intptr_t**) &(get_ijava_state()->locals);
 132 }
 133 
 134 inline intptr_t* frame::interpreter_frame_bcp_addr() const {
 135   return (intptr_t*) &(get_ijava_state()->bcp);
 136 }
 137 
 138 inline intptr_t* frame::interpreter_frame_mdp_addr() const {
 139   return (intptr_t*) &(get_ijava_state()->mdx);
 140 }
 141 
 142 // Pointer beyond the "oldest/deepest" BasicObjectLock on stack.
 143 inline BasicObjectLock* frame::interpreter_frame_monitor_end() const {
 144   return (BasicObjectLock*) get_ijava_state()->monitors;
 145 }
 146 
 147 inline BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
 148   return (BasicObjectLock*) get_ijava_state();
 149 }
 150 
 151 // Return register stack slot addr at which currently interpreted method is found.
 152 inline Method** frame::interpreter_frame_method_addr() const {
 153   return (Method**) &(get_ijava_state()->method);
 154 }
 155 
 156 inline oop* frame::interpreter_frame_mirror_addr() const {
 157   return (oop*) &(get_ijava_state()->mirror);
 158 }
 159 



 160 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const {
 161   return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache);
 162 }
 163 
 164 inline oop* frame::interpreter_frame_temp_oop_addr() const {
 165   return (oop*) &(get_ijava_state()->oop_tmp);
 166 }
 167 
 168 inline intptr_t* frame::interpreter_frame_esp() const {
 169   return (intptr_t*) get_ijava_state()->esp;
 170 }
 171 
 172 // Convenient setters
 173 inline void frame::interpreter_frame_set_monitor_end(BasicObjectLock* end)    { get_ijava_state()->monitors = (intptr_t) end;}
 174 inline void frame::interpreter_frame_set_cpcache(ConstantPoolCache* cp)       { *interpreter_frame_cache_addr() = cp; }
 175 inline void frame::interpreter_frame_set_esp(intptr_t* esp)                   { get_ijava_state()->esp = (intptr_t) esp; }
 176 inline void frame::interpreter_frame_set_top_frame_sp(intptr_t* top_frame_sp) { get_ijava_state()->top_frame_sp = (intptr_t) top_frame_sp; }
 177 inline void frame::interpreter_frame_set_sender_sp(intptr_t* sender_sp)       { get_ijava_state()->sender_sp = (intptr_t) sender_sp; }
 178 
 179 inline intptr_t* frame::interpreter_frame_expression_stack() const {
 180   return (intptr_t*)interpreter_frame_monitor_end() - 1;
 181 }
 182 
 183 // top of expression stack
 184 inline intptr_t* frame::interpreter_frame_tos_address() const {
 185   return ((intptr_t*) get_ijava_state()->esp) + Interpreter::stackElementWords;
 186 }
 187 
 188 inline intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
 189   return &interpreter_frame_tos_address()[offset];
 190 }
 191 
 192 inline int frame::interpreter_frame_monitor_size() {
 193   // Number of stack slots for a monitor.
 194   return align_up(BasicObjectLock::size(),  // number of stack slots


< prev index next >