mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8264868: Reduce inclusion of registerMap.hpp and register.hpp
Reviewed-by: coleenp, dholmes
This commit is contained in:
parent
5784f6b7f7
commit
c15680e742
27 changed files with 212 additions and 60 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -29,6 +29,7 @@
|
||||||
#include "logging/log.hpp"
|
#include "logging/log.hpp"
|
||||||
#include "memory/resourceArea.hpp"
|
#include "memory/resourceArea.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
|
#include "runtime/registerMap.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "utilities/align.hpp"
|
#include "utilities/align.hpp"
|
||||||
#include "utilities/debug.hpp"
|
#include "utilities/debug.hpp"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
#include "code/codeCache.hpp"
|
#include "code/codeCache.hpp"
|
||||||
#include "code/vmreg.inline.hpp"
|
#include "code/vmreg.inline.hpp"
|
||||||
|
#include "runtime/registerMap.hpp"
|
||||||
|
|
||||||
// Inline functions for Intel frames:
|
// Inline functions for Intel frames:
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -36,6 +36,7 @@
|
||||||
#include "runtime/globals_extension.hpp"
|
#include "runtime/globals_extension.hpp"
|
||||||
#include "runtime/handles.inline.hpp"
|
#include "runtime/handles.inline.hpp"
|
||||||
#include "runtime/os.inline.hpp"
|
#include "runtime/os.inline.hpp"
|
||||||
|
#include "runtime/registerMap.hpp"
|
||||||
#include "runtime/timerTrace.hpp"
|
#include "runtime/timerTrace.hpp"
|
||||||
|
|
||||||
GrowableArray<AOTCodeHeap*>* AOTLoader::_heaps = new(ResourceObj::C_HEAP, mtCode) GrowableArray<AOTCodeHeap*> (2, mtCode);
|
GrowableArray<AOTCodeHeap*>* AOTLoader::_heaps = new(ResourceObj::C_HEAP, mtCode) GrowableArray<AOTCodeHeap*> (2, mtCode);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -26,6 +26,7 @@
|
||||||
#define SHARE_CODE_VMREG_HPP
|
#define SHARE_CODE_VMREG_HPP
|
||||||
|
|
||||||
#include "asm/register.hpp"
|
#include "asm/register.hpp"
|
||||||
|
#include "code/vmregTypes.hpp"
|
||||||
#include "runtime/globals.hpp"
|
#include "runtime/globals.hpp"
|
||||||
#include "utilities/globalDefinitions.hpp"
|
#include "utilities/globalDefinitions.hpp"
|
||||||
#include "utilities/macros.hpp"
|
#include "utilities/macros.hpp"
|
||||||
|
|
35
src/hotspot/share/code/vmregTypes.hpp
Normal file
35
src/hotspot/share/code/vmregTypes.hpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, 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.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SHARE_CODE_VMREGTYPES_HPP
|
||||||
|
#define SHARE_CODE_VMREGTYPES_HPP
|
||||||
|
|
||||||
|
// Headers that just need a forward declaration of VMReg (e.g., frame.hpp)
|
||||||
|
// should include this file. Include vmreg.hpp only if you need to use
|
||||||
|
// the full definition of VMReg.
|
||||||
|
|
||||||
|
class VMRegImpl;
|
||||||
|
typedef VMRegImpl* VMReg;
|
||||||
|
|
||||||
|
#endif // SHARE_CODE_VMREGTYPES_HPP
|
|
@ -41,6 +41,7 @@
|
||||||
#include "runtime/globals.hpp"
|
#include "runtime/globals.hpp"
|
||||||
#include "runtime/handles.hpp"
|
#include "runtime/handles.hpp"
|
||||||
#include "runtime/safepoint.hpp"
|
#include "runtime/safepoint.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/stackWatermark.inline.hpp"
|
#include "runtime/stackWatermark.inline.hpp"
|
||||||
#include "runtime/stackWatermarkSet.inline.hpp"
|
#include "runtime/stackWatermarkSet.inline.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "runtime/frame.inline.hpp"
|
#include "runtime/frame.inline.hpp"
|
||||||
#include "runtime/jniHandles.hpp"
|
#include "runtime/jniHandles.hpp"
|
||||||
#include "runtime/mutexLocker.hpp"
|
#include "runtime/mutexLocker.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/vframe_hp.hpp"
|
#include "runtime/vframe_hp.hpp"
|
||||||
#include "services/management.hpp"
|
#include "services/management.hpp"
|
||||||
#include "utilities/enumIterator.hpp"
|
#include "utilities/enumIterator.hpp"
|
||||||
|
|
|
@ -57,6 +57,7 @@
|
||||||
#include "runtime/interfaceSupport.inline.hpp"
|
#include "runtime/interfaceSupport.inline.hpp"
|
||||||
#include "runtime/jniHandles.inline.hpp"
|
#include "runtime/jniHandles.inline.hpp"
|
||||||
#include "runtime/reflectionUtils.hpp"
|
#include "runtime/reflectionUtils.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/timerTrace.hpp"
|
#include "runtime/timerTrace.hpp"
|
||||||
#include "runtime/vframe_hp.hpp"
|
#include "runtime/vframe_hp.hpp"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -35,6 +35,7 @@
|
||||||
#include "prims/jvmtiThreadState.inline.hpp"
|
#include "prims/jvmtiThreadState.inline.hpp"
|
||||||
#include "runtime/deoptimization.hpp"
|
#include "runtime/deoptimization.hpp"
|
||||||
#include "runtime/frame.inline.hpp"
|
#include "runtime/frame.inline.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/thread.inline.hpp"
|
#include "runtime/thread.inline.hpp"
|
||||||
#include "runtime/threadSMR.hpp"
|
#include "runtime/threadSMR.hpp"
|
||||||
#include "runtime/vframe.hpp"
|
#include "runtime/vframe.hpp"
|
||||||
|
|
|
@ -78,6 +78,7 @@
|
||||||
#include "runtime/javaCalls.hpp"
|
#include "runtime/javaCalls.hpp"
|
||||||
#include "runtime/jniHandles.inline.hpp"
|
#include "runtime/jniHandles.inline.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/sweeper.hpp"
|
#include "runtime/sweeper.hpp"
|
||||||
#include "runtime/synchronizer.hpp"
|
#include "runtime/synchronizer.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
#include "runtime/safepointVerifiers.hpp"
|
#include "runtime/safepointVerifiers.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
#include "runtime/signature.hpp"
|
#include "runtime/signature.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/stackWatermarkSet.hpp"
|
#include "runtime/stackWatermarkSet.hpp"
|
||||||
#include "runtime/stubRoutines.hpp"
|
#include "runtime/stubRoutines.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2020 SAP SE. All rights reserved.
|
* Copyright (c) 2020 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
|
@ -36,6 +36,7 @@
|
||||||
#include "runtime/keepStackGCProcessed.hpp"
|
#include "runtime/keepStackGCProcessed.hpp"
|
||||||
#include "runtime/mutexLocker.hpp"
|
#include "runtime/mutexLocker.hpp"
|
||||||
#include "runtime/registerMap.hpp"
|
#include "runtime/registerMap.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/stackValue.hpp"
|
#include "runtime/stackValue.hpp"
|
||||||
#include "runtime/stackValueCollection.hpp"
|
#include "runtime/stackValueCollection.hpp"
|
||||||
#include "runtime/threadSMR.hpp"
|
#include "runtime/threadSMR.hpp"
|
||||||
|
|
|
@ -1238,17 +1238,6 @@ void frame::describe(FrameValues& values, int frame_no) {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------------
|
|
||||||
// StackFrameStream implementation
|
|
||||||
|
|
||||||
StackFrameStream::StackFrameStream(JavaThread *thread, bool update, bool process_frames) : _reg_map(thread, update, process_frames) {
|
|
||||||
assert(thread->has_last_Java_frame(), "sanity check");
|
|
||||||
_fr = thread->last_frame();
|
|
||||||
_is_done = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef PRODUCT
|
#ifndef PRODUCT
|
||||||
|
|
||||||
void FrameValues::describe(int owner, intptr_t* location, const char* description, int priority) {
|
void FrameValues::describe(int owner, intptr_t* location, const char* description, int priority) {
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
#ifndef SHARE_RUNTIME_FRAME_HPP
|
#ifndef SHARE_RUNTIME_FRAME_HPP
|
||||||
#define SHARE_RUNTIME_FRAME_HPP
|
#define SHARE_RUNTIME_FRAME_HPP
|
||||||
|
|
||||||
|
#include "code/vmregTypes.hpp"
|
||||||
#include "runtime/basicLock.hpp"
|
#include "runtime/basicLock.hpp"
|
||||||
#include "runtime/monitorChunk.hpp"
|
#include "runtime/monitorChunk.hpp"
|
||||||
#include "runtime/registerMap.hpp"
|
|
||||||
#include "utilities/growableArray.hpp"
|
#include "utilities/growableArray.hpp"
|
||||||
#include "utilities/macros.hpp"
|
#include "utilities/macros.hpp"
|
||||||
#ifdef ZERO
|
#ifdef ZERO
|
||||||
|
@ -43,6 +43,7 @@ class vframeArray;
|
||||||
class JavaCallWrapper;
|
class JavaCallWrapper;
|
||||||
class Method;
|
class Method;
|
||||||
class methodHandle;
|
class methodHandle;
|
||||||
|
class RegisterMap;
|
||||||
|
|
||||||
enum class DerivedPointerIterationMode {
|
enum class DerivedPointerIterationMode {
|
||||||
_with_table,
|
_with_table,
|
||||||
|
@ -450,40 +451,5 @@ class FrameValues {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
|
||||||
// StackFrameStream iterates through the frames of a thread starting from
|
|
||||||
// top most frame. It automatically takes care of updating the location of
|
|
||||||
// all (callee-saved) registers iff the update flag is set. It also
|
|
||||||
// automatically takes care of lazily applying deferred GC processing
|
|
||||||
// onto exposed frames, such that all oops are valid iff the process_frames
|
|
||||||
// flag is set.
|
|
||||||
//
|
|
||||||
// Notice: If a thread is stopped at a safepoint, all registers are saved,
|
|
||||||
// not only the callee-saved ones.
|
|
||||||
//
|
|
||||||
// Use:
|
|
||||||
//
|
|
||||||
// for(StackFrameStream fst(thread, true /* update */, true /* process_frames */);
|
|
||||||
// !fst.is_done();
|
|
||||||
// fst.next()) {
|
|
||||||
// ...
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
class StackFrameStream : public StackObj {
|
|
||||||
private:
|
|
||||||
frame _fr;
|
|
||||||
RegisterMap _reg_map;
|
|
||||||
bool _is_done;
|
|
||||||
public:
|
|
||||||
StackFrameStream(JavaThread *thread, bool update, bool process_frames);
|
|
||||||
|
|
||||||
// Iteration
|
|
||||||
inline bool is_done();
|
|
||||||
void next() { if (!_is_done) _fr = _fr.sender(&_reg_map); }
|
|
||||||
|
|
||||||
// Query
|
|
||||||
frame *current() { return &_fr; }
|
|
||||||
RegisterMap* register_map() { return &_reg_map; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SHARE_RUNTIME_FRAME_HPP
|
#endif // SHARE_RUNTIME_FRAME_HPP
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "interpreter/interpreter.hpp"
|
#include "interpreter/interpreter.hpp"
|
||||||
#include "oops/method.hpp"
|
#include "oops/method.hpp"
|
||||||
#include "runtime/frame.hpp"
|
#include "runtime/frame.hpp"
|
||||||
|
#include "runtime/registerMap.hpp"
|
||||||
#include "runtime/stubRoutines.hpp"
|
#include "runtime/stubRoutines.hpp"
|
||||||
#include "utilities/macros.hpp"
|
#include "utilities/macros.hpp"
|
||||||
#ifdef ZERO
|
#ifdef ZERO
|
||||||
|
@ -65,8 +66,4 @@ inline oop* frame::oopmapreg_to_oop_location(VMReg reg, const RegisterMap* reg_m
|
||||||
return (oop*)oopmapreg_to_location(reg, reg_map);
|
return (oop*)oopmapreg_to_location(reg, reg_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool StackFrameStream::is_done() {
|
|
||||||
return (_is_done) ? true : (_is_done = _fr.is_first_frame(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // SHARE_RUNTIME_FRAME_INLINE_HPP
|
#endif // SHARE_RUNTIME_FRAME_INLINE_HPP
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "runtime/os.inline.hpp"
|
#include "runtime/os.inline.hpp"
|
||||||
#include "runtime/thread.inline.hpp"
|
#include "runtime/thread.inline.hpp"
|
||||||
#include "runtime/safepointVerifiers.hpp"
|
#include "runtime/safepointVerifiers.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/vframe.hpp"
|
#include "runtime/vframe.hpp"
|
||||||
#include "runtime/vmOperations.hpp"
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "runtime/vmThread.hpp"
|
#include "runtime/vmThread.hpp"
|
||||||
|
|
34
src/hotspot/share/runtime/stackFrameStream.cpp
Normal file
34
src/hotspot/share/runtime/stackFrameStream.cpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, 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.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precompiled.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
|
#include "utilities/debug.hpp"
|
||||||
|
|
||||||
|
StackFrameStream::StackFrameStream(JavaThread *thread, bool update, bool process_frames) : _reg_map(thread, update, process_frames) {
|
||||||
|
assert(thread->has_last_Java_frame(), "sanity check");
|
||||||
|
_fr = thread->last_frame();
|
||||||
|
_is_done = false;
|
||||||
|
}
|
||||||
|
|
72
src/hotspot/share/runtime/stackFrameStream.hpp
Normal file
72
src/hotspot/share/runtime/stackFrameStream.hpp
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, 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.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SHARE_RUNTIME_STACKFRAMESTREAM_HPP
|
||||||
|
#define SHARE_RUNTIME_STACKFRAMESTREAM_HPP
|
||||||
|
|
||||||
|
#include "memory/allocation.hpp"
|
||||||
|
#include "runtime/frame.hpp"
|
||||||
|
#include "runtime/registerMap.hpp"
|
||||||
|
|
||||||
|
class JavaThread;
|
||||||
|
|
||||||
|
//
|
||||||
|
// StackFrameStream iterates through the frames of a thread starting from
|
||||||
|
// top most frame. It automatically takes care of updating the location of
|
||||||
|
// all (callee-saved) registers iff the update flag is set. It also
|
||||||
|
// automatically takes care of lazily applying deferred GC processing
|
||||||
|
// onto exposed frames, such that all oops are valid iff the process_frames
|
||||||
|
// flag is set.
|
||||||
|
//
|
||||||
|
// Notice: If a thread is stopped at a safepoint, all registers are saved,
|
||||||
|
// not only the callee-saved ones.
|
||||||
|
//
|
||||||
|
// Use:
|
||||||
|
//
|
||||||
|
// for(StackFrameStream fst(thread, true /* update */, true /* process_frames */);
|
||||||
|
// !fst.is_done();
|
||||||
|
// fst.next()) {
|
||||||
|
// ...
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
class StackFrameStream : public StackObj {
|
||||||
|
private:
|
||||||
|
frame _fr;
|
||||||
|
RegisterMap _reg_map;
|
||||||
|
bool _is_done;
|
||||||
|
public:
|
||||||
|
StackFrameStream(JavaThread *thread, bool update, bool process_frames);
|
||||||
|
|
||||||
|
// Iteration
|
||||||
|
inline bool is_done();
|
||||||
|
void next() { if (!_is_done) _fr = _fr.sender(&_reg_map); }
|
||||||
|
|
||||||
|
// Query
|
||||||
|
frame *current() { return &_fr; }
|
||||||
|
RegisterMap* register_map() { return &_reg_map; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SHARE_RUNTIME_STACKFRAMESTREAM_HPP
|
||||||
|
|
||||||
|
|
37
src/hotspot/share/runtime/stackFrameStream.inline.hpp
Normal file
37
src/hotspot/share/runtime/stackFrameStream.inline.hpp
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, 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.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SHARE_RUNTIME_STACKFRAMESTREAM_INLINE_HPP
|
||||||
|
#define SHARE_RUNTIME_STACKFRAMESTREAM_INLINE_HPP
|
||||||
|
|
||||||
|
#include "runtime/frame.inline.hpp"
|
||||||
|
#include "runtime/stackFrameStream.hpp"
|
||||||
|
|
||||||
|
inline bool StackFrameStream::is_done() {
|
||||||
|
return (_is_done) ? true : (_is_done = _fr.is_first_frame(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // SHARE_RUNTIME_STACKFRAMESTREAM_INLINE_HPP
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "runtime/frame.inline.hpp"
|
#include "runtime/frame.inline.hpp"
|
||||||
#include "runtime/osThread.hpp"
|
#include "runtime/osThread.hpp"
|
||||||
#include "runtime/safepoint.hpp"
|
#include "runtime/safepoint.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/stackWatermark.inline.hpp"
|
#include "runtime/stackWatermark.inline.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "utilities/debug.hpp"
|
#include "utilities/debug.hpp"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -26,6 +26,7 @@
|
||||||
#define SHARE_RUNTIME_STACKWATERMARK_INLINE_HPP
|
#define SHARE_RUNTIME_STACKWATERMARK_INLINE_HPP
|
||||||
|
|
||||||
#include "code/nmethod.hpp"
|
#include "code/nmethod.hpp"
|
||||||
|
#include "runtime/registerMap.hpp"
|
||||||
#include "runtime/stackWatermark.hpp"
|
#include "runtime/stackWatermark.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,7 @@
|
||||||
#include "runtime/safepointVerifiers.hpp"
|
#include "runtime/safepointVerifiers.hpp"
|
||||||
#include "runtime/serviceThread.hpp"
|
#include "runtime/serviceThread.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/stackWatermarkSet.hpp"
|
#include "runtime/stackWatermarkSet.hpp"
|
||||||
#include "runtime/statSampler.hpp"
|
#include "runtime/statSampler.hpp"
|
||||||
#include "runtime/task.hpp"
|
#include "runtime/task.hpp"
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "runtime/objectMonitor.inline.hpp"
|
#include "runtime/objectMonitor.inline.hpp"
|
||||||
#include "runtime/osThread.hpp"
|
#include "runtime/osThread.hpp"
|
||||||
#include "runtime/signature.hpp"
|
#include "runtime/signature.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/stubRoutines.hpp"
|
#include "runtime/stubRoutines.hpp"
|
||||||
#include "runtime/synchronizer.hpp"
|
#include "runtime/synchronizer.hpp"
|
||||||
#include "runtime/thread.inline.hpp"
|
#include "runtime/thread.inline.hpp"
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "oops/oop.hpp"
|
#include "oops/oop.hpp"
|
||||||
#include "runtime/frame.hpp"
|
#include "runtime/frame.hpp"
|
||||||
#include "runtime/handles.hpp"
|
#include "runtime/handles.hpp"
|
||||||
|
#include "runtime/registerMap.hpp"
|
||||||
#include "runtime/stackValue.hpp"
|
#include "runtime/stackValue.hpp"
|
||||||
#include "runtime/stackValueCollection.hpp"
|
#include "runtime/stackValueCollection.hpp"
|
||||||
#include "utilities/growableArray.hpp"
|
#include "utilities/growableArray.hpp"
|
||||||
|
@ -51,6 +52,8 @@
|
||||||
|
|
||||||
// - BasicLock
|
// - BasicLock
|
||||||
|
|
||||||
|
class StackFrameStream;
|
||||||
|
|
||||||
class vframe: public ResourceObj {
|
class vframe: public ResourceObj {
|
||||||
protected:
|
protected:
|
||||||
frame _fr; // Raw frame behind the virtual frame.
|
frame _fr; // Raw frame behind the virtual frame.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -30,6 +30,7 @@
|
||||||
#include "runtime/deoptimization.hpp"
|
#include "runtime/deoptimization.hpp"
|
||||||
#include "runtime/frame.hpp"
|
#include "runtime/frame.hpp"
|
||||||
#include "runtime/monitorChunk.hpp"
|
#include "runtime/monitorChunk.hpp"
|
||||||
|
#include "runtime/registerMap.hpp"
|
||||||
#include "utilities/growableArray.hpp"
|
#include "utilities/growableArray.hpp"
|
||||||
|
|
||||||
// A vframeArray is an array used for momentarily storing off stack Java method activations
|
// A vframeArray is an array used for momentarily storing off stack Java method activations
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -42,6 +42,7 @@
|
||||||
#include "runtime/frame.inline.hpp"
|
#include "runtime/frame.inline.hpp"
|
||||||
#include "runtime/interfaceSupport.inline.hpp"
|
#include "runtime/interfaceSupport.inline.hpp"
|
||||||
#include "runtime/jniHandles.hpp"
|
#include "runtime/jniHandles.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/synchronizer.hpp"
|
#include "runtime/synchronizer.hpp"
|
||||||
#include "runtime/thread.inline.hpp"
|
#include "runtime/thread.inline.hpp"
|
||||||
#include "runtime/threadSMR.inline.hpp"
|
#include "runtime/threadSMR.inline.hpp"
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#include "runtime/osThread.hpp"
|
#include "runtime/osThread.hpp"
|
||||||
#include "runtime/safefetch.inline.hpp"
|
#include "runtime/safefetch.inline.hpp"
|
||||||
#include "runtime/safepointMechanism.hpp"
|
#include "runtime/safepointMechanism.hpp"
|
||||||
|
#include "runtime/stackFrameStream.inline.hpp"
|
||||||
#include "runtime/thread.inline.hpp"
|
#include "runtime/thread.inline.hpp"
|
||||||
#include "runtime/threadSMR.hpp"
|
#include "runtime/threadSMR.hpp"
|
||||||
#include "runtime/vmThread.hpp"
|
#include "runtime/vmThread.hpp"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue