예제 #1
0
// this updates the unpacked info for a new code buffer
address BoundRelocation::update_addrs(address old_addr, const CodeBuffer& new_cb, const CodeBuffer& old_cb) {

  // Point to the relocation info
  Relocation *r = reloc();

  // Transform the addr for the new code buffer
  address new_addr = old_cb.transform_address(new_cb, old_addr);

  // Set the transformed address
  set_addr( new_addr );

  // Update any internal addresses
  r->update_addrs(new_cb, old_cb);

  // Apply a delta to internal pointers
  r->fix_relocation_at_move(new_addr - old_addr);

  // Return the new address
  return (new_addr);
}
예제 #2
0
// this updates the unpacked info for a new code buffer
void internal_word_Relocation::update_addrs(const CodeBuffer& new_cb, const CodeBuffer& old_cb) {
  _target = old_cb.transform_address(new_cb, _target);
}
예제 #3
0
void static_stub_Relocation::update_addrs(const CodeBuffer& new_cb, const CodeBuffer& old_cb) {
  _static_call = old_cb.transform_address(new_cb, _static_call);
}
예제 #4
0
// this updates the unpacked info for a new code buffer
void virtual_call_Relocation::update_addrs(const CodeBuffer& new_cb, const CodeBuffer& old_cb) {
  _first_oop = old_cb.transform_address(new_cb, _first_oop);
  _oop_limit = old_cb.transform_address(new_cb, _oop_limit);
}
예제 #5
0
// this updates the unpacked info for a new code buffer
void breakpoint_Relocation::update_addrs(const CodeBuffer& new_cb, const CodeBuffer& old_cb) {
  _target = old_cb.transform_address(new_cb, _target);
}