Skip to content

Commit b334edb

Browse files
committed
s390 port: build fixed
1 parent 0233a91 commit b334edb

File tree

4 files changed

+56
-0
lines changed

4 files changed

+56
-0
lines changed

src/hotspot/cpu/s390/frame_s390.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@
475475
public:
476476
// To be used, if sp was not extended to match callee's calling convention.
477477
inline frame(intptr_t* sp, address pc, intptr_t* unextended_sp = nullptr, intptr_t* fp = nullptr, CodeBlob* cb = nullptr);
478+
inline frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map = nullptr);
478479

479480
// Access frame via stack pointer.
480481
inline intptr_t* sp_addr_at(int index) const { return &sp()[index]; }

src/hotspot/cpu/s390/frame_s390.inline.hpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ inline frame::frame(intptr_t* sp, address pc, intptr_t* unextended_sp, intptr_t*
8787

8888
inline frame::frame(intptr_t* sp) : frame(sp, nullptr) {}
8989

90+
inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map)
91+
:_sp(sp), _pc(pc), _cb(cb), _oop_map(oop_map), _on_heap(false), DEBUG_ONLY(_frame_index(-1) COMMA) _unextended_sp(unextended_sp), _fp(fp) {
92+
setup();
93+
}
94+
9095
// Generic constructor. Used by pns() in debug.cpp only
9196
#ifndef PRODUCT
9297
inline frame::frame(void* sp, void* pc, void* unextended_sp)
@@ -371,4 +376,42 @@ void frame::update_map_with_saved_link(RegisterMapT* map, intptr_t** link_addr)
371376
Unimplemented();
372377
}
373378

379+
#if INCLUDE_JFR
380+
381+
// Static helper routines
382+
inline intptr_t* frame::sender_sp(intptr_t* fp) { return fp; }
383+
384+
// Extract common_abi parts.
385+
inline intptr_t* frame::fp(const intptr_t* sp) {
386+
assert(sp != nullptr, "invariant");
387+
return reinterpret_cast<intptr_t*>(((z_common_abi*)sp)->callers_sp);
388+
}
389+
390+
inline intptr_t* frame::link(const intptr_t* fp) { return frame::fp(fp); }
391+
392+
inline address frame::return_address(const intptr_t* sp) {
393+
assert(sp != nullptr, "invariant");
394+
return reinterpret_cast<address>(((z_common_abi*)sp)->return_pc);
395+
}
396+
397+
inline address frame::interpreter_return_address(const intptr_t* fp) { return frame::return_address(fp); }
398+
399+
inline address frame::interpreter_bcp(const intptr_t* fp) {
400+
assert(fp != nullptr, "invariant");
401+
return reinterpret_cast<address>(*(fp + _z_ijava_idx(bcp)));
402+
}
403+
404+
inline intptr_t* frame::interpreter_sender_sp(const intptr_t* fp) {
405+
assert(fp != nullptr, "invariant");
406+
return reinterpret_cast<intptr_t*>(*(fp + _z_ijava_idx(sender_sp)));
407+
}
408+
409+
inline bool frame::is_interpreter_frame_setup_at(const intptr_t* fp, const void* sp) {
410+
assert(fp != nullptr, "invariant");
411+
assert(sp != nullptr, "invariant");
412+
return sp <= fp - ((frame::z_ijava_state_size + frame::z_top_ijava_frame_abi_size) >> LogBytesPerWord);
413+
}
414+
415+
#endif // INCLUDE_JFR
416+
374417
#endif // CPU_S390_FRAME_S390_INLINE_HPP

src/hotspot/cpu/s390/javaFrameAnchor_s390.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#ifndef CPU_S390_JAVAFRAMEANCHOR_S390_HPP
2727
#define CPU_S390_JAVAFRAMEANCHOR_S390_HPP
2828

29+
JFR_ONLY(intptr_t* volatile _last_sender_Java_fp;) // specialized field for when JFR samples an interpreter frame
30+
2931
public:
3032

3133
// Each arch must define reset, save, restore.
@@ -42,6 +44,7 @@
4244
OrderAccess::fence();
4345

4446
_last_Java_pc = nullptr;
47+
JFR_ONLY(_last_sender_Java_fp = nullptr;)
4548
}
4649

4750
inline void set(intptr_t* sp, address pc) {
@@ -64,6 +67,7 @@
6467
OrderAccess::fence();
6568
}
6669
_last_Java_pc = src->_last_Java_pc;
70+
JFR_ONLY(_last_sender_Java_fp = src->_last_sender_Java_fp;)
6771
// Must be last so profiler will always see valid frame if has_last_frame() is true.
6872

6973
OrderAccess::release();
@@ -84,4 +88,9 @@
8488

8589
address last_Java_pc(void) { return _last_Java_pc; }
8690

91+
intptr_t* last_Java_fp() const { return *(intptr_t**)_last_Java_sp; }
92+
93+
JFR_ONLY(intptr_t* last_sender_Java_fp() const { return _last_sender_Java_fp;})
94+
JFR_ONLY(static ByteSize last_sender_Java_fp_offset() { return byte_offset_of(JavaFrameAnchor, _last_sender_Java_fp); })
95+
8796
#endif // CPU_S390_JAVAFRAMEANCHOR_S390_HPP

src/hotspot/os_cpu/linux_s390/javaThread_linux_s390.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,7 @@
4040

4141
bool pd_get_top_frame_for_profiling(frame* fr_addr, void* ucontext, bool isInJava);
4242

43+
JFR_ONLY(static ByteSize last_sender_Java_fp_offset() {
44+
return byte_offset_of(JavaThread, _anchor) + JavaFrameAnchor::last_sender_Java_fp_offset();
45+
})
4346
#endif // OS_CPU_LINUX_S390_JAVATHREAD_LINUX_S390_HPP

0 commit comments

Comments
 (0)