< prev index next >
src/share/vm/asm/codeBuffer.cpp
Print this page
*** 600,624 ****
csize_t csize = total_content_size();
csize_t total = RelocIterator::locs_and_index_size(csize, lsize);
return (csize_t) align_size_up(total, HeapWordSize);
}
! csize_t CodeBuffer::copy_relocations_to(CodeBlob* dest) const {
! address buf = NULL;
csize_t buf_offset = 0;
! csize_t buf_limit = 0;
! if (dest != NULL) {
! buf = (address)dest->relocation_begin();
! buf_limit = (address)dest->relocation_end() - buf;
assert((uintptr_t)buf % HeapWordSize == 0, "buf must be fully aligned");
assert(buf_limit % HeapWordSize == 0, "buf must be evenly sized");
- }
- // if dest == NULL, this is just the sizing pass
- csize_t code_end_so_far = 0;
- csize_t code_point_so_far = 0;
for (int n = (int) SECT_FIRST; n < (int)SECT_LIMIT; n++) {
// pull relocs out of each section
const CodeSection* cs = code_section(n);
assert(!(cs->is_empty() && cs->locs_count() > 0), "sanity");
if (cs->is_empty()) continue; // skip trivial section
relocInfo* lstart = cs->locs_start();
--- 600,622 ----
csize_t csize = total_content_size();
csize_t total = RelocIterator::locs_and_index_size(csize, lsize);
return (csize_t) align_size_up(total, HeapWordSize);
}
! csize_t CodeBuffer::copy_relocations_to(address buf, csize_t buf_limit, bool only_inst) const {
csize_t buf_offset = 0;
! csize_t code_end_so_far = 0;
! csize_t code_point_so_far = 0;
!
assert((uintptr_t)buf % HeapWordSize == 0, "buf must be fully aligned");
assert(buf_limit % HeapWordSize == 0, "buf must be evenly sized");
for (int n = (int) SECT_FIRST; n < (int)SECT_LIMIT; n++) {
+ if (only_inst && (n != (int)SECT_INSTS)) {
+ // Need only relocation info for code.
+ continue;
+ }
// pull relocs out of each section
const CodeSection* cs = code_section(n);
assert(!(cs->is_empty() && cs->locs_count() > 0), "sanity");
if (cs->is_empty()) continue; // skip trivial section
relocInfo* lstart = cs->locs_start();
*** 681,691 ****
*(relocInfo*)(buf+buf_offset) = padding;
}
buf_offset += sizeof(relocInfo);
}
! assert(code_end_so_far == total_content_size(), "sanity");
// Account for index:
if (buf != NULL) {
RelocIterator::create_index(dest->relocation_begin(),
buf_offset / sizeof(relocInfo),
--- 679,705 ----
*(relocInfo*)(buf+buf_offset) = padding;
}
buf_offset += sizeof(relocInfo);
}
! assert(only_inst || code_end_so_far == total_content_size(), "sanity");
!
! return buf_offset;
! }
!
! csize_t CodeBuffer::copy_relocations_to(CodeBlob* dest) const {
! address buf = NULL;
! csize_t buf_offset = 0;
! csize_t buf_limit = 0;
!
! if (dest != NULL) {
! buf = (address)dest->relocation_begin();
! buf_limit = (address)dest->relocation_end() - buf;
! }
! // if dest == NULL, this is just the sizing pass
! //
! buf_offset = copy_relocations_to(buf, buf_limit, false);
// Account for index:
if (buf != NULL) {
RelocIterator::create_index(dest->relocation_begin(),
buf_offset / sizeof(relocInfo),
*** 1124,1134 ****
if (_strings != NULL) {
CodeString* c = find(offset);
while (c && c->offset() == offset) {
stream->bol();
stream->print("%s", _prefix);
! stream->print_cr("%s", c->string());
c = c->next_comment();
}
}
}
--- 1138,1149 ----
if (_strings != NULL) {
CodeString* c = find(offset);
while (c && c->offset() == offset) {
stream->bol();
stream->print("%s", _prefix);
! // Don't interpret as format strings since it could contain %
! stream->print_raw_cr(c->string());
c = c->next_comment();
}
}
}
< prev index next >