224 // returns the OopMap at a given index
225 OopMap* at(int index) const { assert((index >= 0) && (index <= om_count()),"bad index"); return _om_data[index]; }
226
227 // Collect OopMaps.
228 void add_gc_map(int pc, OopMap* map);
229
230 // Returns the only oop map. Used for reconstructing
231 // Adapter frames during deoptimization
232 OopMap* singular_oop_map();
233
234 // returns OopMap in that is anchored to the pc
235 OopMap* find_map_at_offset(int pc_offset) const;
236
237 int heap_size() const;
238
239 // Methods oops_do() and all_do() filter out NULL oops and
240 // oop == Universe::narrow_oop_base() before passing oops
241 // to closures.
242
243 // Iterates through frame for a compiled method
244 static void oops_do (const frame* fr,
245 const RegisterMap* reg_map, OopClosure* f);
246 static void update_register_map(const frame* fr, RegisterMap *reg_map);
247
248 // Iterates through frame for a compiled method for dead ones and values, too
249 static void all_do(const frame* fr, const RegisterMap* reg_map,
250 OopClosure* oop_fn,
251 void derived_oop_fn(oop* base, oop* derived),
252 OopClosure* value_fn);
253
254 // Printing
255 void print_on(outputStream* st) const;
256 void print() const { print_on(tty); }
257 };
258
259 class ImmutableOopMapBuilder;
260
261 class ImmutableOopMap {
262 friend class OopMapStream;
263 friend class VMStructs;
264 #ifdef ASSERT
265 friend class ImmutableOopMapBuilder;
266 #endif
267 private:
268 int _count; // contains the number of entries in this OopMap
269
270 address data_addr() const { return (address) this + sizeof(ImmutableOopMap); }
271 public:
|
224 // returns the OopMap at a given index
225 OopMap* at(int index) const { assert((index >= 0) && (index <= om_count()),"bad index"); return _om_data[index]; }
226
227 // Collect OopMaps.
228 void add_gc_map(int pc, OopMap* map);
229
230 // Returns the only oop map. Used for reconstructing
231 // Adapter frames during deoptimization
232 OopMap* singular_oop_map();
233
234 // returns OopMap in that is anchored to the pc
235 OopMap* find_map_at_offset(int pc_offset) const;
236
237 int heap_size() const;
238
239 // Methods oops_do() and all_do() filter out NULL oops and
240 // oop == Universe::narrow_oop_base() before passing oops
241 // to closures.
242
243 // Iterates through frame for a compiled method
244 static void oops_do (const frame* fr, const RegisterMap* reg_map,
245 OopClosure* f, DerivedOopClosure* df);
246 static void oops_do (const frame* fr,
247 const RegisterMap* reg_map, OopClosure* f) { oops_do(fr, reg_map, f, NULL); }
248 static void update_register_map(const frame* fr, RegisterMap *reg_map);
249
250 // Iterates through frame for a compiled method for dead ones and values, too
251 static void all_do(const frame* fr, const RegisterMap* reg_map,
252 OopClosure* oop_fn,
253 DerivedOopClosure* derived_oop_fn,
254 OopClosure* value_fn);
255
256 // Printing
257 void print_on(outputStream* st) const;
258 void print() const { print_on(tty); }
259 };
260
261 class ImmutableOopMapBuilder;
262
263 class ImmutableOopMap {
264 friend class OopMapStream;
265 friend class VMStructs;
266 #ifdef ASSERT
267 friend class ImmutableOopMapBuilder;
268 #endif
269 private:
270 int _count; // contains the number of entries in this OopMap
271
272 address data_addr() const { return (address) this + sizeof(ImmutableOopMap); }
273 public:
|