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:18:23 2015
--- new/src/share/vm/code/relocInfo.hpp	Wed Sep 16 15:18: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