(original) (raw)
src/share/vm/code/relocInfo.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/code/relocInfo.hpp Wed Sep 16 15🔞23 2015** --- new/src/share/vm/code/relocInfo.hpp Wed Sep 16 15🔞23 2015
*** 1,7 ****
--- 1,7 ----
/*
! * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
! * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- This code is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License version 2 only, as
- published by the Free Software Foundation.
*** 208,217 **** --- 208,222 ---- // This stub becomes the target of a static call which must be upgraded // to a virtual call (because the callee is interpreted). // See [About Offsets] below. // //%note reloc_2 // + // relocInfo::poll_[return_]type -- a safepoint poll + // Value: none + // Instruction types: memory load or test + // Data: none + // // For example: // // INSTRUCTIONS RELOC: TYPE PREFIX DATA // ------------ ---- ----------- // sethi %hi(myObject), R oop_type [n(myObject)]
*** 441,450 **** --- 446,460 ---- offset_mask = (1<<offset_width) - 1, format_mask = (1<<format_width) - 1 }; public: enum { **+ #ifdef _LP64** **+ // for use in format** **+ // format_width must be at least 1 on _LP64** **+ narrow_oop_in_const = 1,** **+ #endif** // Conservatively large estimate of maximum length (in shorts) // of any relocation record. // Extended format is length prefix, data words, and tag/offset suffix. length_limit = 1 + 1 + (3*BytesPerWord/BytesPerShort) + 1, have_format = format_width > 0
*** 760,769 **** --- 770,782 ---- x1 = relocInfo::jint_data_at(2, dp, dlen); } }
protected: + // platform-independent utility for patching constant section + void const_set_data_value (address x); + void const_verify_data_value (address x); // platform-dependent utilities for decoding and patching instructions void pd_set_data_value (address x, intptr_t off, bool verify_only = false); // a set or mem-ref void pd_verify_data_value (address x, intptr_t off) { pd_set_data_value(x, off, true); } address pd_call_destination (address orig_addr = NULL); void pd_set_call_destination (address x);
*** 870,886 ****
--- 883,899 ----
virtual int offset() { return 0; }
address value() = 0;
void set_value(address x) { set_value(x, offset()); }
void set_value(address x, intptr_t o) {
if (addr_in_const())
! (address)addr() = x;
! const_set_data_value(x);
else
pd_set_data_value(x, o);
}
void verify_value(address x) {
if (addr_in_const())
! assert((address)addr() == x, "must agree");
! const_verify_data_value(x);
else
pd_verify_data_value(x, offset());
}
// The "o" (displacement) argument is relevant only to split relocations
*** 1316,1329 **** --- 1329,1340 ---- bool is_data() { return true; } relocInfo::relocType type() { return relocInfo::poll_type; } void fix_relocation_after_move(const CodeBuffer* src, CodeBuffer* dest); };
! class poll_return_Relocation : public poll_Relocation {
bool is_data() { return true; }
relocInfo::relocType type() { return relocInfo::poll_return_type; }
void fix_relocation_after_move(const CodeBuffer src, CodeBuffer dest);**
};
// We know all the xxx_Relocation classes, so now we can define these:
#define EACH_CASE(name)
inline name##_Relocation* RelocIterator::name##_reloc() { \
src/share/vm/code/relocInfo.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File