forked from microsoft/hermes-windows
-
Notifications
You must be signed in to change notification settings - Fork 0
/
StackFrame.cpp
57 lines (49 loc) · 1.66 KB
/
StackFrame.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include "hermes/VM/StackFrame.h"
#include "llvh/Support/Format.h"
#include "llvh/Support/raw_ostream.h"
namespace hermes {
namespace vm {
void dumpStackFrame(
ConstStackFramePtr frame,
llvh::raw_ostream &OS,
const PinnedHermesValue *next) {
auto format_ptr = [](const void *p) {
return llvh::format_hex((uintptr_t)p, 10);
};
OS << "Frame @" << format_ptr(frame.ptr()) << "\n";
if (next) {
OS << " size [regs] : " << frame.ptr() - next << "\n";
}
OS << " PreviousFrame : " << format_ptr(frame.getPreviousFramePointer())
<< "\n"
<< " SavedIP : " << format_ptr(frame.getSavedIP()) << "\n"
<< " SavedCodeBlock : " << format_ptr(frame.getSavedCodeBlock()) << "\n"
<< " DebugEnvironment: " << frame.getDebugEnvironmentRef() << "\n"
<< " ArgCount : " << frame.getArgCount() << "\n"
<< " NewTarget : " << frame.getNewTargetRef() << "\n"
<< " CalleeClosure : " << frame.getCalleeClosureOrCBRef() << "\n"
<< " ThisArg : " << frame.getThisArgRef() << "\n"
<< " Args: ";
for (uint32_t i = 0, count = frame.getArgCount(); i != count; ++i) {
if (i != 0)
OS << ", ";
OS << frame.getArgRef(i);
}
OS << "\n";
}
LLVM_ATTRIBUTE_NOINLINE
void dumpStackFrame(ConstStackFramePtr frame) {
dumpStackFrame(frame, llvh::errs());
}
LLVM_ATTRIBUTE_NOINLINE
void dumpStackFrame(StackFramePtr frame) {
dumpStackFrame(frame, llvh::errs());
}
} // namespace vm
} // namespace hermes