< prev index next >
src/share/vm/ci/ciMethodData.hpp
Print this page
rev 9358 : 8057038: Speculative traps not robust when compilation and class unloading are concurrent
Summary: speculative traps can be removed from MDO while being copied by compiler
Reviewed-by: kvn, iveresov
@@ -405,13 +405,16 @@
int _backedge_counter;
// Coherent snapshot of original header.
MethodData _orig;
- // Dedicated area dedicated to parameters. Null if no parameter
+ // Area dedicated to parameters. Null if no parameter
// profiling for this method.
DataLayout* _parameters;
+ int parameters_size() const {
+ return _parameters == NULL ? 0 : parameters_type_data()->size_in_bytes();
+ }
ciMethodData(MethodData* md);
ciMethodData();
// Accessors
@@ -459,13 +462,10 @@
ciArgInfoData *arg_info() const;
address data_base() const {
return (address) _data;
}
- DataLayout* limit_data_position() const {
- return (DataLayout*)((address)data_base() + _data_size);
- }
void load_extra_data();
ciProfileData* bci_to_extra_data(int bci, ciMethod* m, bool& two_free_slots);
public:
@@ -517,11 +517,13 @@
// Walk through the data in order.
ciProfileData* first_data() { return data_at(first_di()); }
ciProfileData* next_data(ciProfileData* current);
bool is_valid(ciProfileData* current) { return current != NULL; }
- DataLayout* extra_data_base() const { return limit_data_position(); }
+ DataLayout* extra_data_base() const { return data_layout_at(data_size()); }
+ DataLayout* args_data_limit() const { return data_layout_at(data_size() + extra_data_size() -
+ parameters_size()); }
// Get the data at an arbitrary bci, or NULL if there is none. If m
// is not NULL look for a SpeculativeTrapData if any first.
ciProfileData* bci_to_data(int bci, ciMethod* m = NULL);
< prev index next >