src/share/vm/asm/codeBuffer.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/asm/codeBuffer.cpp

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(); } } }
src/share/vm/asm/codeBuffer.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File