< prev index next > src/hotspot/share/code/relocInfo.hpp
Print this page
// 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
};
+
+ static const char* type_name(relocInfo::relocType t);
};
#define FORWARD_DECLARE_EACH_CLASS(name) \
class name##_Relocation;
APPLY_TO_RELOCATIONS(FORWARD_DECLARE_EACH_CLASS)
int datalen() const { return _datalen; }
bool has_current() const { return _datalen >= 0; }
bool addr_in_const() const;
address section_start(int n) const {
- assert(_section_start[n], "must be initialized");
+ assert(_section_start[n], "section %d must be initialized", n);
return _section_start[n];
}
address section_end(int n) const {
- assert(_section_end[n], "must be initialized");
+ assert(_section_end[n], "section %d must be initialized", n);
return _section_end[n];
}
// The address points to the affected displacement part of the instruction.
// For RISC, this is just the whole instruction.
APPLY_TO_RELOCATIONS(EACH_TYPE)
#undef EACH_TYPE
// generic relocation accessor; switches on type to call the above
Relocation* reloc();
- #ifndef PRODUCT
public:
- void print();
- void print_current();
- #endif
+ void print_on(outputStream* st);
+ void print_current_on(outputStream* st);
};
// A Relocation is a flyweight object allocated within a RelocationHolder.
// It represents the relocation data of relocation record.
// So, the RelocIterator unpacks relocInfos into Relocations.
class Relocation {
friend class RelocIterator;
+ friend class SCCReader;
private:
// When a relocation has been created by a RelocIterator,
// this field is non-null. It allows the relocation to know
// its context, such as the address to which it applies.
// Return the address of the NativeCall that owns the trampoline.
address owner() { return _owner; }
void pack_data_to(CodeSection * dest) override;
void unpack_data() override;
+ #if defined(AARCH64)
+ address pd_destination ();
+ void pd_set_destination (address x);
+ #endif
+ address destination() {
+ #if defined(AARCH64)
+ return pd_destination();
+ #else
+ fatal("trampoline_stub_Relocation::destination() unimplemented");
+ return (address)-1;
+ #endif
+ }
+ void set_destination(address x) {
+ #if defined(AARCH64)
+ pd_set_destination(x);
+ #else
+ fatal("trampoline_stub_Relocation::set_destination() unimplemented");
+ #endif
+ }
// Find the trampoline stub for a call.
static address get_trampoline_for(address call, nmethod* code);
};
< prev index next >