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