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