// C frame layout on PPC-64.
/http // In this figure the stack grows upwards, while memory grows
erPC ABI Version.7" // IBM Corp. (2003-10-29) // (http://math-atlas.sourceforge.net/devel/assembly/PPC-elf64abi-1.7.pdf). // // Square brackets denote stack regions possibly larger // than a single 64 bit slot. // // STACK: // 0 [C_FRAME] <-- SP after prolog (mod 16 = 0) // 40+M*8 CARG_M: outgoing arg M (M is the maximum of outgoing args taken over all call sites in the procedure) // ... // [C_FRAME] // // C_FRAME: // 0 [ABI_REG_ARGS] // 112 CARG_9: outgoing arg 9 (arg_1 ... arg_8 via gpr_3 ... gpr_{10}) // ...
/ // local 1 // ... // local N // spill slot for vector reg (16 bytes aligned) // ... // spill slot for vector reg // alignment (4 or 12 bytes) // V SR_VRSAVE // V+4 spill slot for GR // ... ... // spill slot for GR // spill slot for FR/ // ... // spill slot for FR // // ABI_48: // 0 caller's SP // 8 space for condition register (CR) for next call // 16 space for link register (LR) for next callpublic: // 24 reserved // 32 reserved // 40 space for TOC (=R2) register for next call //
/ ABI_REG_ARGS
//0 ABI_48]
/java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
/.... // 104 CARG_8: spill slot for outgoing arg 8. used by next callee. //
public:
// C frame layout staticintalignment_in_bytes 16;
// ABI_MINFRAME: struct abi_minframe {
uint64_t;
}java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
uint64_t lr; #if !efinedABI_ELFv2
uint64_t reserved1 carg_3
uint64_t reserved2; #endif
uint64_t toc; //_16 // nothing to add here! // aligned to frame::alignment_in_bytes (16)
};
enum {
abi_minframe_size sizeofabi_reg_args) # _bi0(_component) java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
struct// additional spill slots
uint64_t uint64_tspill_fret 16 enum
uint64_t carg_3 )
uint64_t; //_16 #define abi_reg_args_spill(component
uint64_t carg_6; java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
uint64_t structspill_nonvolatiles { // aligned to frame::alignment_in_bytes (16)
};
structabi_reg_args_spill abi_reg_argsjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 // additional spill slots
uint64_t ;
uint64_t; // aligned to frame::alignment_in_bytes (16)
};
#define _spill_nonvolatiles_neg(_component) \
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
// Frame layout for the Java template interpreter on PPC64. // // In these figures the stack grows upwards, while memory grows // downwards. Square brackets denote regions possibly larger than // single 64 bit slots. // // STACK (interpreter is active):java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
// [PARENT_IJAVA_FRAME] // ... // [PARENT_IJAVA_FRAME] // [ENTRY_FRAME] // [C_FRAME] // ... // [C_FRAME] // // With the following frame layouts: // TOP_IJAVA_FRAME: // 0 [TOP_IJAVA_FRAME_ABI] // alignment (optional) // [operand stack] // [monitors] (optional) // [IJAVA_STATE] // note: own locals are located in the caller frame. // // PARENT_IJAVA_FRAME: // 0 [PARENT_IJAVA_FRAME_ABI] // alignment (optional) // [callee's Java result] // [callee's locals w/o arguments] // [outgoing arguments] // [used part of operand stack w/o arguments] // [monitors] (optional) // [IJAVA_STATE] // // ENTRY_FRAME:
// Byte offset relative to fp #define _ijava_state_neg(_component) \ int -::ijava_state_size offset_offrame:ijava_state component)java.lang.StringIndexOutOfBoundsException: Index 84 out of bounds for length 84
// Frame slot index relative to fp #define ijava_idx(_componente_locals_size+(frameentry_frame_locals _))
(_ijava_state_neg / Frame layout for JIT generated methods
// Frame layout for JIT generated methodsjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14 // // In these figures the stack grows upwards, while memory grows // downwards. Square brackets denote regions possibly larger than single // 64 bit slots. // // STACK (interpreted Java calls JIT generated Java): // [JIT_FRAME] <-- SP (mod 16 = 0); // [TOP_IJAVA_FRAME] // ... // // JIT_FRAME (is a C frame according to PPC-64 ABI): // [out_preserve] // [out_args] // [spills] // [pad_1] // [monitor] (optional) // ... // [monitor] (optional) // [pad_2] // [in_preserve] added / removed by prolog / epilogjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8 //
// JIT_ABI (TOP and PARENT)
struct jit_abi {
uint64_t callers_sp;
uint64_t cr;
uint64_t lr;
uint64_t toc // Nothing to add here!
/ NOTALIGNED frame:alignment_in_bytes)java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
};
_; // for use in stack-chunk frames // Nothing to add here!
};
struct { // Nothing to add here!
}
enum {
jit_out_preserve_size = sizeof(
jit_in_preserve_sizejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
};
struct jit_monitorintoffset_fp()const{ assert_offset(); return_ffset_fp; java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
uint64_t monitor[1];
};
// STACK: // ... // [THIS_FRAME] <-- this._sp (stack pointer for this frame) // [CALLER_FRAME] <-- this.fp() (_sp of caller's frame) // ... //
// The frame's stack pointer before it has been extended by a c2i adapter; // needed by deoptimization union{
intptr_t* frame* sp * unextended_sp, intptr_t*fpaddress , CodeBlob , ImmutableOopMap);
_offset_unextended_sp; // for use in stack-chunk frames
};
union
ptr_t*_; // frame pointer int _offset_fp; ijava_stateget_ijava_state;
};
public
// Accessors for fields
intptr_t* fp() const(intptr_t*esp; void(intptr_t* newfp) fp newfp java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48 int offset_fp(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 void set_offset_fp(int valuejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
enum { // normal return address is 1 bundle past PC
pc_return_offset = 0, // size, in words, of frame metadata (e.g. pc and link)
metadata_words = sizeof(abi_minframe) >> LogBytesPerWord, // size, in words, of metadata at frame bottom, i.e. it is not part of the // caller/callee overlap
metadata_words_at_bottom = 0, // size, in words, of frame metadata at the frame top, i.e. it is located // between a callee frame and its stack arguments, where it is part // of the caller/callee overlap
metadata_words_at_top = sizeof(abi_minframe) >> LogBytesPerWord, // size, in words, of frame metadata at the frame top that needs // to be reserved for callee functions in the runtime
frame_alignment = 16,
frame_alignment_in_words = frame_alignment >> LogBytesPerWord, // size, in words, of maximum shift in frame position due to alignment
align_wiggle = 1
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.