1.1 --- a/src/cpu/x86/vm/relocInfo_x86.cpp Wed May 21 10:45:07 2008 -0700 1.2 +++ b/src/cpu/x86/vm/relocInfo_x86.cpp Wed May 21 13:46:23 2008 -0700 1.3 @@ -30,11 +30,15 @@ 1.4 #ifdef AMD64 1.5 x += o; 1.6 typedef Assembler::WhichOperand WhichOperand; 1.7 - WhichOperand which = (WhichOperand) format(); // that is, disp32 or imm64, call32 1.8 + WhichOperand which = (WhichOperand) format(); // that is, disp32 or imm64, call32, narrow oop 1.9 assert(which == Assembler::disp32_operand || 1.10 + which == Assembler::narrow_oop_operand || 1.11 which == Assembler::imm64_operand, "format unpacks ok"); 1.12 if (which == Assembler::imm64_operand) { 1.13 *pd_address_in_code() = x; 1.14 + } else if (which == Assembler::narrow_oop_operand) { 1.15 + address disp = Assembler::locate_operand(addr(), which); 1.16 + *(int32_t*) disp = oopDesc::encode_heap_oop((oop)x); 1.17 } else { 1.18 // Note: Use runtime_call_type relocations for call32_operand. 1.19 address ip = addr();