src/share/vm/asm/codeBuffer.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/asm/codeBuffer.cpp Wed Sep 16 15:18:02 2015
--- new/src/share/vm/asm/codeBuffer.cpp Wed Sep 16 15:18:02 2015
*** 600,624 ****
--- 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(CodeBlob* dest) const {
address buf = NULL;
! csize_t CodeBuffer::copy_relocations_to(address buf, csize_t buf_limit, bool only_inst) const {
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;
! 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");
}
// 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++) {
+ 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 ****
--- 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 ****
--- 1138,1149 ----
if (_strings != NULL) {
CodeString* c = find(offset);
while (c && c->offset() == offset) {
stream->bol();
stream->print("%s", _prefix);
stream->print_cr("%s", c->string());
+ // Don't interpret as format strings since it could contain %
+ stream->print_raw_cr(c->string());
c = c->next_comment();
}
}
}
src/share/vm/asm/codeBuffer.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File