177
178 // The exclusive end of the last object that was copied into the buffer.
179 static address buffer_top() {
180 return buffer_bottom() + _buffer_used;
181 }
182
183 static bool in_buffer(address buffered_addr) {
184 return (buffer_bottom() <= buffered_addr) && (buffered_addr < buffer_top());
185 }
186
187 static size_t buffered_address_to_offset(address buffered_addr) {
188 assert(in_buffer(buffered_addr), "sanity");
189 return buffered_addr - buffer_bottom();
190 }
191
192 static void root_segment_at_put(objArrayOop segment, int index, oop root);
193 static objArrayOop allocate_root_segment(size_t offset, int element_count);
194 static void copy_roots_to_buffer(GrowableArrayCHeap<oop, mtClassShared>* roots);
195 static void copy_source_objs_to_buffer(GrowableArrayCHeap<oop, mtClassShared>* roots);
196 static size_t copy_one_source_obj_to_buffer(oop src_obj);
197
198 static void maybe_fill_gc_region_gap(size_t required_byte_size);
199 static size_t filler_array_byte_size(int length);
200 static int filler_array_length(size_t fill_bytes);
201 static HeapWord* init_filler_array_at_buffer_top(int array_length, size_t fill_bytes);
202
203 static void set_requested_address(ArchiveMappedHeapInfo* info);
204 static void mark_native_pointers(oop orig_obj);
205 static void relocate_embedded_oops(GrowableArrayCHeap<oop, mtClassShared>* roots, ArchiveMappedHeapInfo* info);
206 static void compute_ptrmap(ArchiveMappedHeapInfo *info);
207 static bool is_in_requested_range(oop o);
208 static oop requested_obj_from_buffer_offset(size_t offset);
209
210 static oop load_oop_from_buffer(oop* buffered_addr);
211 static oop load_oop_from_buffer(narrowOop* buffered_addr);
212 inline static void store_oop_in_buffer(oop* buffered_addr, oop requested_obj);
213 inline static void store_oop_in_buffer(narrowOop* buffered_addr, oop requested_obj);
214
215 template <typename T> static oop load_source_oop_from_buffer(T* buffered_addr);
216 template <typename T> static void store_requested_oop_in_buffer(T* buffered_addr, oop request_oop);
|
177
178 // The exclusive end of the last object that was copied into the buffer.
179 static address buffer_top() {
180 return buffer_bottom() + _buffer_used;
181 }
182
183 static bool in_buffer(address buffered_addr) {
184 return (buffer_bottom() <= buffered_addr) && (buffered_addr < buffer_top());
185 }
186
187 static size_t buffered_address_to_offset(address buffered_addr) {
188 assert(in_buffer(buffered_addr), "sanity");
189 return buffered_addr - buffer_bottom();
190 }
191
192 static void root_segment_at_put(objArrayOop segment, int index, oop root);
193 static objArrayOop allocate_root_segment(size_t offset, int element_count);
194 static void copy_roots_to_buffer(GrowableArrayCHeap<oop, mtClassShared>* roots);
195 static void copy_source_objs_to_buffer(GrowableArrayCHeap<oop, mtClassShared>* roots);
196 static size_t copy_one_source_obj_to_buffer(oop src_obj);
197 static void update_stats(oop src_obj);
198
199 static void maybe_fill_gc_region_gap(size_t required_byte_size);
200 static size_t filler_array_byte_size(int length);
201 static int filler_array_length(size_t fill_bytes);
202 static HeapWord* init_filler_array_at_buffer_top(int array_length, size_t fill_bytes);
203
204 static void set_requested_address(ArchiveMappedHeapInfo* info);
205 static void mark_native_pointers(oop orig_obj);
206 static void relocate_embedded_oops(GrowableArrayCHeap<oop, mtClassShared>* roots, ArchiveMappedHeapInfo* info);
207 static void compute_ptrmap(ArchiveMappedHeapInfo *info);
208 static bool is_in_requested_range(oop o);
209 static oop requested_obj_from_buffer_offset(size_t offset);
210
211 static oop load_oop_from_buffer(oop* buffered_addr);
212 static oop load_oop_from_buffer(narrowOop* buffered_addr);
213 inline static void store_oop_in_buffer(oop* buffered_addr, oop requested_obj);
214 inline static void store_oop_in_buffer(narrowOop* buffered_addr, oop requested_obj);
215
216 template <typename T> static oop load_source_oop_from_buffer(T* buffered_addr);
217 template <typename T> static void store_requested_oop_in_buffer(T* buffered_addr, oop request_oop);
|