@@ -63,15 +63,15 @@ address ArchiveHeapWriter::_requested_top;
63
63
GrowableArrayCHeap<ArchiveHeapWriter::NativePointerInfo, mtClassShared>* ArchiveHeapWriter::_native_pointers;
64
64
GrowableArrayCHeap<oop, mtClassShared>* ArchiveHeapWriter::_source_objs;
65
65
66
- static GrowableArrayCHeap<address , mtClassShared> *_permobj_seg_buffered_addrs = nullptr ;
66
+ static GrowableArrayCHeap<size_t , mtClassShared> *_permobj_seg_buffered_addrs = nullptr ;
67
67
static GrowableArrayCHeap<size_t , mtClassShared> *_permobj_seg_bytesizes = nullptr ;
68
68
static GrowableArrayCHeap<int , mtClassShared> *_permobj_seg_lengths = nullptr ;
69
69
70
70
ArchiveHeapWriter::BufferOffsetToSourceObjectTable*
71
71
ArchiveHeapWriter::_buffer_offset_to_source_obj_table = nullptr ;
72
72
73
73
74
- typedef ResourceHashtable<address , size_t ,
74
+ typedef ResourceHashtable<size_t , size_t ,
75
75
127 , // prime number
76
76
AnyObj::C_HEAP,
77
77
mtClassShared> FillersTable;
@@ -88,7 +88,7 @@ void ArchiveHeapWriter::init() {
88
88
89
89
_native_pointers = new GrowableArrayCHeap<NativePointerInfo, mtClassShared>(2048 );
90
90
_source_objs = new GrowableArrayCHeap<oop, mtClassShared>(10000 );
91
- _permobj_seg_buffered_addrs = new GrowableArrayCHeap<address , mtClassShared>(5 );
91
+ _permobj_seg_buffered_addrs = new GrowableArrayCHeap<size_t , mtClassShared>(5 );
92
92
_permobj_seg_bytesizes = new GrowableArrayCHeap<size_t , mtClassShared>(5 );
93
93
_permobj_seg_lengths = new GrowableArrayCHeap<int , mtClassShared>(5 );
94
94
@@ -272,7 +272,7 @@ int ArchiveHeapWriter::copy_source_objs_to_buffer(GrowableArrayCHeap<oop, mtClas
272
272
size_t word_size;
273
273
size_t permobj_seg_bottom_offset = create_objarray_in_buffer (permobjs, from, num_elems, 0 , word_size);
274
274
permobj_seg_offsets->append (permobj_seg_bottom_offset);
275
- _permobj_seg_buffered_addrs->append (offset_to_buffered_address<address>( permobj_seg_bottom_offset) );
275
+ _permobj_seg_buffered_addrs->append (permobj_seg_bottom_offset);
276
276
_permobj_seg_bytesizes->append (word_size * HeapWordSize);
277
277
_permobj_seg_lengths->append (num_elems);
278
278
}
@@ -347,13 +347,13 @@ void ArchiveHeapWriter::maybe_fill_gc_region_gap(size_t required_byte_size) {
347
347
log_info (cds, heap)(" Inserting filler obj array of %d elements (" SIZE_FORMAT " bytes total) @ buffer offset " SIZE_FORMAT,
348
348
array_length, fill_bytes, _buffer_used);
349
349
HeapWord* filler = init_filler_array_at_buffer_top (array_length, fill_bytes);
350
+ _fillers->put (_buffer_used, fill_bytes);
350
351
_buffer_used = filler_end;
351
- _fillers->put ((address)filler, fill_bytes);
352
352
}
353
353
}
354
354
355
355
size_t ArchiveHeapWriter::get_filler_size_at (address buffered_addr) {
356
- size_t * p = _fillers->get (buffered_addr);
356
+ size_t * p = _fillers->get (buffered_addr - buffer_bottom () );
357
357
if (p != nullptr ) {
358
358
assert (*p > 0 , " filler must be larger than zero bytes" );
359
359
return *p;
@@ -611,8 +611,9 @@ template <typename T> void ArchiveHeapWriter::add_permobj_segments_to_roots(Grow
611
611
612
612
// If the buffered_addr is one of the permobj segments, returns the size information about this segment.
613
613
int ArchiveHeapWriter::get_permobj_segment_at (address buffered_addr, size_t * byte_size, int * permobj_segment_length) {
614
+ size_t offset = buffered_addr - buffer_bottom ();
614
615
for (int i = 0 ; i < _permobj_seg_buffered_addrs->length (); i++) {
615
- if (buffered_addr == _permobj_seg_buffered_addrs->at (i)) {
616
+ if (offset == _permobj_seg_buffered_addrs->at (i)) {
616
617
*byte_size = _permobj_seg_bytesizes->at (i);
617
618
*permobj_segment_length = _permobj_seg_lengths->at (i);
618
619
return i;
0 commit comments