src/share/vm/code/relocInfo.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/code/relocInfo.hpp

src/share/vm/code/relocInfo.hpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1997, 2013, 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. --- 1,7 ---- /* ! * 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 **** 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; else pd_set_data_value(x, o); } void verify_value(address x) { if (addr_in_const()) ! assert(*(address*)addr() == x, "must agree"); else pd_verify_data_value(x, offset()); } // The "o" (displacement) argument is relevant only to split relocations --- 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()) ! const_set_data_value(x); else pd_set_data_value(x, o); } void verify_value(address x) { if (addr_in_const()) ! const_verify_data_value(x); else pd_verify_data_value(x, offset()); } // The "o" (displacement) argument is relevant only to split relocations
*** 1316,1329 **** 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 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() { \ --- 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 { relocInfo::relocType type() { return relocInfo::poll_return_type; } }; // 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