221 PcDesc* pc_desc_near(address pc) { return find_pc_desc(pc, true); } 222 223 // ScopeDesc for an instruction 224 ScopeDesc* scope_desc_at(address pc); 225 ScopeDesc* scope_desc_near(address pc); 226 227 bool is_at_poll_return(address pc); 228 bool is_at_poll_or_poll_return(address pc); 229 230 bool is_marked_for_deoptimization() const { return _mark_for_deoptimization_status != not_marked; } 231 void mark_for_deoptimization(bool inc_recompile_counts = true) { 232 _mark_for_deoptimization_status = (inc_recompile_counts ? deoptimize : deoptimize_noupdate); 233 } 234 bool update_recompile_counts() const { 235 // Update recompile counts when either the update is explicitly requested (deoptimize) 236 // or the nmethod is not marked for deoptimization at all (not_marked). 237 // The latter happens during uncommon traps when deoptimized nmethod is made not entrant. 238 return _mark_for_deoptimization_status != deoptimize_noupdate; 239 } 240 241 static bool nmethod_access_is_safe(nmethod* nm); 242 243 // tells whether frames described by this nmethod can be deoptimized 244 // note: native wrappers cannot be deoptimized. 245 bool can_be_deoptimized() const { return is_java_method(); } 246 247 virtual oop oop_at(int index) const = 0; 248 virtual Metadata* metadata_at(int index) const = 0; 249 250 address scopes_data_begin() const { return _scopes_data_begin; } 251 virtual address scopes_data_end() const = 0; 252 int scopes_data_size() const { return scopes_data_end() - scopes_data_begin(); } 253 254 virtual PcDesc* scopes_pcs_begin() const = 0; 255 virtual PcDesc* scopes_pcs_end() const = 0; 256 int scopes_pcs_size() const { return (intptr_t) scopes_pcs_end() - (intptr_t) scopes_pcs_begin(); } 257 258 address insts_begin() const { return code_begin(); } 259 address insts_end() const { return stub_begin(); } 260 // Returns true if a given address is in the 'insts' section. The method 261 // insts_contains_inclusive() is end-inclusive. 262 bool insts_contains(address addr) const { return insts_begin() <= addr && addr < insts_end(); } | 221 PcDesc* pc_desc_near(address pc) { return find_pc_desc(pc, true); } 222 223 // ScopeDesc for an instruction 224 ScopeDesc* scope_desc_at(address pc); 225 ScopeDesc* scope_desc_near(address pc); 226 227 bool is_at_poll_return(address pc); 228 bool is_at_poll_or_poll_return(address pc); 229 230 bool is_marked_for_deoptimization() const { return _mark_for_deoptimization_status != not_marked; } 231 void mark_for_deoptimization(bool inc_recompile_counts = true) { 232 _mark_for_deoptimization_status = (inc_recompile_counts ? deoptimize : deoptimize_noupdate); 233 } 234 bool update_recompile_counts() const { 235 // Update recompile counts when either the update is explicitly requested (deoptimize) 236 // or the nmethod is not marked for deoptimization at all (not_marked). 237 // The latter happens during uncommon traps when deoptimized nmethod is made not entrant. 238 return _mark_for_deoptimization_status != deoptimize_noupdate; 239 } 240 241 // tells whether frames described by this nmethod can be deoptimized 242 // note: native wrappers cannot be deoptimized. 243 bool can_be_deoptimized() const { return is_java_method(); } 244 245 virtual oop oop_at(int index) const = 0; 246 virtual Metadata* metadata_at(int index) const = 0; 247 248 address scopes_data_begin() const { return _scopes_data_begin; } 249 virtual address scopes_data_end() const = 0; 250 int scopes_data_size() const { return scopes_data_end() - scopes_data_begin(); } 251 252 virtual PcDesc* scopes_pcs_begin() const = 0; 253 virtual PcDesc* scopes_pcs_end() const = 0; 254 int scopes_pcs_size() const { return (intptr_t) scopes_pcs_end() - (intptr_t) scopes_pcs_begin(); } 255 256 address insts_begin() const { return code_begin(); } 257 address insts_end() const { return stub_begin(); } 258 // Returns true if a given address is in the 'insts' section. The method 259 // insts_contains_inclusive() is end-inclusive. 260 bool insts_contains(address addr) const { return insts_begin() <= addr && addr < insts_end(); } |