1 //===-- StackFrame.h --------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLDB_TARGET_STACKFRAME_H
10 #define LLDB_TARGET_STACKFRAME_H
11 
12 #include <memory>
13 #include <mutex>
14 
15 #include "lldb/Utility/Flags.h"
16 
17 #include "lldb/Core/ValueObjectList.h"
18 #include "lldb/Symbol/SymbolContext.h"
19 #include "lldb/Target/ExecutionContextScope.h"
20 #include "lldb/Target/StackID.h"
21 #include "lldb/Utility/Scalar.h"
22 #include "lldb/Utility/Status.h"
23 #include "lldb/Utility/StreamString.h"
24 #include "lldb/Utility/UserID.h"
25 
26 namespace lldb_private {
27 
28 /// \class StackFrame StackFrame.h "lldb/Target/StackFrame.h"
29 ///
30 /// This base class provides an interface to stack frames.
31 ///
32 /// StackFrames may have a Canonical Frame Address (CFA) or not.
33 /// A frame may have a plain pc value or it may  indicate a specific point in
34 /// the debug session so the correct section load list is used for
35 /// symbolication.
36 ///
37 /// Local variables may be available, or not.  A register context may be
38 /// available, or not.
39 
40 class StackFrame : public ExecutionContextScope,
41                    public std::enable_shared_from_this<StackFrame> {
42 public:
43   enum ExpressionPathOption {
44     eExpressionPathOptionCheckPtrVsMember = (1u << 0),
45     eExpressionPathOptionsNoFragileObjcIvar = (1u << 1),
46     eExpressionPathOptionsNoSyntheticChildren = (1u << 2),
47     eExpressionPathOptionsNoSyntheticArrayRange = (1u << 3),
48     eExpressionPathOptionsAllowDirectIVarAccess = (1u << 4),
49     eExpressionPathOptionsInspectAnonymousUnions = (1u << 5)
50   };
51 
52   enum class Kind {
53     /// A regular stack frame with access to registers and local variables.
54     Regular,
55 
56     /// A historical stack frame -- possibly without CFA or registers or
57     /// local variables.
58     History,
59 
60     /// An artificial stack frame (e.g. a synthesized result of inferring
61     /// missing tail call frames from a backtrace) with limited support for
62     /// local variables.
63     Artificial
64   };
65 
66   /// Construct a StackFrame object without supplying a RegisterContextSP.
67   ///
68   /// This is the one constructor that doesn't take a RegisterContext
69   /// parameter.  This ctor may be called when creating a history StackFrame;
70   /// these are used if we've collected a stack trace of pc addresses at some
71   /// point in the past.  We may only have pc values. We may have a CFA,
72   /// or more likely, we won't.
73   ///
74   /// \param [in] thread_sp
75   ///   The Thread that this frame belongs to.
76   ///
77   /// \param [in] frame_idx
78   ///   This StackFrame's frame index number in the Thread.  If inlined stack
79   ///   frames are being created, this may differ from the concrete_frame_idx
80   ///   which is the frame index without any inlined stack frames.
81   ///
82   /// \param [in] concrete_frame_idx
83   ///   The StackFrame's frame index number in the Thread without any inlined
84   ///   stack frames being included in the index.
85   ///
86   /// \param [in] cfa
87   ///   The Canonical Frame Address (this terminology from DWARF) for this
88   ///   stack frame.  The CFA for a stack frame does not change over the
89   ///   span of the stack frame's existence.  It is often the value of the
90   ///   caller's stack pointer before the call instruction into this frame's
91   ///   function.  It is usually not the same as the frame pointer register's
92   ///   value.
93   ///
94   /// \param [in] cfa_is_valid
95   ///   A history stack frame may not have a CFA value collected.  We want to
96   ///   distinguish between "no CFA available" and a CFA of
97   ///   LLDB_INVALID_ADDRESS.
98   ///
99   /// \param [in] pc
100   ///   The current pc value of this stack frame.
101   ///
102   /// \param [in] sc_ptr
103   ///   Optionally seed the StackFrame with the SymbolContext information that
104   ///   has
105   ///   already been discovered.
106   StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx,
107              lldb::user_id_t concrete_frame_idx, lldb::addr_t cfa,
108              bool cfa_is_valid, lldb::addr_t pc, Kind frame_kind,
109              bool behaves_like_zeroth_frame, const SymbolContext *sc_ptr);
110 
111   StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx,
112              lldb::user_id_t concrete_frame_idx,
113              const lldb::RegisterContextSP &reg_context_sp, lldb::addr_t cfa,
114              lldb::addr_t pc, bool behaves_like_zeroth_frame,
115              const SymbolContext *sc_ptr);
116 
117   StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx,
118              lldb::user_id_t concrete_frame_idx,
119              const lldb::RegisterContextSP &reg_context_sp, lldb::addr_t cfa,
120              const Address &pc, bool behaves_like_zeroth_frame,
121              const SymbolContext *sc_ptr);
122 
123   ~StackFrame() override;
124 
125   lldb::ThreadSP GetThread() const { return m_thread_wp.lock(); }
126 
127   StackID &GetStackID();
128 
129   /// Get an Address for the current pc value in this StackFrame.
130   ///
131   /// May not be the same as the actual PC value for inlined stack frames.
132   ///
133   /// \return
134   ///   The Address object set to the current PC value.
135   const Address &GetFrameCodeAddress();
136 
137   /// Get the current code Address suitable for symbolication,
138   /// may not be the same as GetFrameCodeAddress().
139   ///
140   /// For a frame in the middle of the stack, the return-pc is the
141   /// current code address, but for symbolication purposes the
142   /// return address after a noreturn call may point to the next
143   /// function, a DWARF location list entry that is a completely
144   /// different code path, or the wrong source line.
145   ///
146   /// The address returned should be used for symbolication (source line,
147   /// block, function, DWARF location entry selection) but should NOT
148   /// be shown to the user.  It may not point to an actual instruction
149   /// boundary.
150   ///
151   /// \return
152   ///   The Address object set to the current PC value.
153   Address GetFrameCodeAddressForSymbolication();
154 
155   /// Change the pc value for a given thread.
156   ///
157   /// Change the current pc value for the frame on this thread.
158   ///
159   /// \param[in] pc
160   ///     The load address that the pc will be set to.
161   ///
162   /// \return
163   ///     true if the pc was changed.  false if this failed -- possibly
164   ///     because this frame is not a live StackFrame.
165   bool ChangePC(lldb::addr_t pc);
166 
167   /// Provide a SymbolContext for this StackFrame's current pc value.
168   ///
169   /// The StackFrame maintains this SymbolContext and adds additional
170   /// information to it on an as-needed basis.  This helps to avoid different
171   /// functions looking up symbolic information for a given pc value multiple
172   /// times.
173   ///
174   /// \param [in] resolve_scope
175   ///   Flags from the SymbolContextItem enumerated type which specify what
176   ///   type of symbol context is needed by this caller.
177   ///
178   /// \return
179   ///   A SymbolContext reference which includes the types of information
180   ///   requested by resolve_scope, if they are available.
181   const SymbolContext &GetSymbolContext(lldb::SymbolContextItem resolve_scope);
182 
183   /// Return the Canonical Frame Address (DWARF term) for this frame.
184   ///
185   /// The CFA is typically the value of the stack pointer register before the
186   /// call invocation is made.  It will not change during the lifetime of a
187   /// stack frame.  It is often not the same thing as the frame pointer
188   /// register value.
189   ///
190   /// Live StackFrames will always have a CFA but other types of frames may
191   /// not be able to supply one.
192   ///
193   /// \param [out] value
194   ///   The address of the CFA for this frame, if available.
195   ///
196   /// \param [out] error_ptr
197   ///   If there is an error determining the CFA address, this may contain a
198   ///   string explaining the failure.
199   ///
200   /// \return
201   ///   Returns true if the CFA value was successfully set in value.  Some
202   ///   frames may be unable to provide this value; they will return false.
203   bool GetFrameBaseValue(Scalar &value, Status *error_ptr);
204 
205   /// Get the DWARFExpressionList corresponding to the Canonical Frame Address.
206   ///
207   /// Often a register (bp), but sometimes a register + offset.
208   ///
209   /// \param [out] error_ptr
210   ///   If there is an error determining the CFA address, this may contain a
211   ///   string explaining the failure.
212   ///
213   /// \return
214   ///   Returns the corresponding DWARF expression, or NULL.
215   DWARFExpressionList *GetFrameBaseExpression(Status *error_ptr);
216 
217   /// Get the current lexical scope block for this StackFrame, if possible.
218   ///
219   /// If debug information is available for this stack frame, return a pointer
220   /// to the innermost lexical Block that the frame is currently executing.
221   ///
222   /// \return
223   ///   A pointer to the current Block.  nullptr is returned if this can
224   ///   not be provided.
225   Block *GetFrameBlock();
226 
227   /// Get the RegisterContext for this frame, if possible.
228   ///
229   /// Returns a shared pointer to the RegisterContext for this stack frame.
230   /// Only a live StackFrame object will be able to return a RegisterContext -
231   /// callers must be prepared for an empty shared pointer being returned.
232   ///
233   /// Even a live StackFrame RegisterContext may not be able to provide all
234   /// registers.  Only the currently executing frame (frame 0) can reliably
235   /// provide every register in the register context.
236   ///
237   /// \return
238   ///   The RegisterContext shared point for this frame.
239   lldb::RegisterContextSP GetRegisterContext();
240 
241   const lldb::RegisterContextSP &GetRegisterContextSP() const {
242     return m_reg_context_sp;
243   }
244 
245   /// Retrieve the list of variables that are in scope at this StackFrame's
246   /// pc.
247   ///
248   /// A frame that is not live may return an empty VariableList for a given
249   /// pc value even though variables would be available at this point if it
250   /// were a live stack frame.
251   ///
252   /// \param[in] get_file_globals
253   ///     Whether to also retrieve compilation-unit scoped variables
254   ///     that are visible to the entire compilation unit (e.g. file
255   ///     static in C, globals that are homed in this CU).
256   ///
257   /// \param [out] error_ptr
258   ///   If there is an error in the debug information that prevents variables
259   ///   from being fetched. \see SymbolFile::GetFrameVariableError() for full
260   ///   details.
261   ///
262   /// \return
263   ///     A pointer to a list of variables.
264   VariableList *GetVariableList(bool get_file_globals, Status *error_ptr);
265 
266   /// Retrieve the list of variables that are in scope at this StackFrame's
267   /// pc.
268   ///
269   /// A frame that is not live may return an empty VariableListSP for a
270   /// given pc value even though variables would be available at this point if
271   /// it were a live stack frame.
272   ///
273   /// \param[in] get_file_globals
274   ///     Whether to also retrieve compilation-unit scoped variables
275   ///     that are visible to the entire compilation unit (e.g. file
276   ///     static in C, globals that are homed in this CU).
277   ///
278   /// \return
279   ///     A pointer to a list of variables.
280   lldb::VariableListSP
281   GetInScopeVariableList(bool get_file_globals,
282                          bool must_have_valid_location = false);
283 
284   /// Create a ValueObject for a variable name / pathname, possibly including
285   /// simple dereference/child selection syntax.
286   ///
287   /// \param[in] var_expr
288   ///     The string specifying a variable to base the VariableObject off
289   ///     of.
290   ///
291   /// \param[in] use_dynamic
292   ///     Whether the correct dynamic type of an object pointer should be
293   ///     determined before creating the object, or if the static type is
294   ///     sufficient.  One of the DynamicValueType enumerated values.
295   ///
296   /// \param[in] options
297   ///     An unsigned integer of flags, values from
298   ///     StackFrame::ExpressionPathOption
299   ///     enum.
300   /// \param[in] var_sp
301   ///     A VariableSP that will be set to the variable described in the
302   ///     var_expr path.
303   ///
304   /// \param[in] error
305   ///     Record any errors encountered while evaluating var_expr.
306   ///
307   /// \return
308   ///     A shared pointer to the ValueObject described by var_expr.
309   lldb::ValueObjectSP GetValueForVariableExpressionPath(
310       llvm::StringRef var_expr, lldb::DynamicValueType use_dynamic,
311       uint32_t options, lldb::VariableSP &var_sp, Status &error);
312 
313   /// Determine whether this StackFrame has debug information available or not.
314   ///
315   /// \return
316   ///    true if debug information is available for this frame (function,
317   ///    compilation unit, block, etc.)
318   bool HasDebugInformation();
319 
320   /// Return the disassembly for the instructions of this StackFrame's
321   /// function as a single C string.
322   ///
323   /// \return
324   ///    C string with the assembly instructions for this function.
325   const char *Disassemble();
326 
327   /// Print a description for this frame using the frame-format formatter
328   /// settings.
329   ///
330   /// \param [in] strm
331   ///   The Stream to print the description to.
332   ///
333   /// \param [in] show_unique
334   ///   Whether to print the function arguments or not for backtrace unique.
335   ///
336   /// \param [in] frame_marker
337   ///   Optional string that will be prepended to the frame output description.
338   void DumpUsingSettingsFormat(Stream *strm, bool show_unique = false,
339                                const char *frame_marker = nullptr);
340 
341   /// Print a description for this frame using a default format.
342   ///
343   /// \param [in] strm
344   ///   The Stream to print the description to.
345   ///
346   /// \param [in] show_frame_index
347   ///   Whether to print the frame number or not.
348   ///
349   /// \param [in] show_fullpaths
350   ///   Whether to print the full source paths or just the file base name.
351   void Dump(Stream *strm, bool show_frame_index, bool show_fullpaths);
352 
353   /// Print a description of this stack frame and/or the source
354   /// context/assembly for this stack frame.
355   ///
356   /// \param[in] strm
357   ///   The Stream to send the output to.
358   ///
359   /// \param[in] show_frame_info
360   ///   If true, print the frame info by calling DumpUsingSettingsFormat().
361   ///
362   /// \param[in] show_source
363   ///   If true, print source or disassembly as per the user's settings.
364   ///
365   /// \param[in] show_unique
366   ///   If true, print using backtrace unique style, without function
367   ///            arguments as per the user's settings.
368   ///
369   /// \param[in] frame_marker
370   ///   Passed to DumpUsingSettingsFormat() for the frame info printing.
371   ///
372   /// \return
373   ///   Returns true if successful.
374   bool GetStatus(Stream &strm, bool show_frame_info, bool show_source,
375                  bool show_unique = false, const char *frame_marker = nullptr);
376 
377   /// Query whether this frame is a concrete frame on the call stack, or if it
378   /// is an inlined frame derived from the debug information and presented by
379   /// the debugger.
380   ///
381   /// \return
382   ///   true if this is an inlined frame.
383   bool IsInlined();
384 
385   /// Query whether this frame is part of a historical backtrace.
386   bool IsHistorical() const;
387 
388   /// Query whether this frame is artificial (e.g a synthesized result of
389   /// inferring missing tail call frames from a backtrace). Artificial frames
390   /// may have limited support for inspecting variables.
391   bool IsArtificial() const;
392 
393   /// Query this frame to find what frame it is in this Thread's
394   /// StackFrameList.
395   ///
396   /// \return
397   ///   StackFrame index 0 indicates the currently-executing function.  Inline
398   ///   frames are included in this frame index count.
399   uint32_t GetFrameIndex() const;
400 
401   /// Set this frame's synthetic frame index.
402   void SetFrameIndex(uint32_t index) { m_frame_index = index; }
403 
404   /// Query this frame to find what frame it is in this Thread's
405   /// StackFrameList, not counting inlined frames.
406   ///
407   /// \return
408   ///   StackFrame index 0 indicates the currently-executing function.  Inline
409   ///   frames are not included in this frame index count; their concrete
410   ///   frame index will be the same as the concrete frame that they are
411   ///   derived from.
412   uint32_t GetConcreteFrameIndex() const { return m_concrete_frame_index; }
413 
414   /// Create a ValueObject for a given Variable in this StackFrame.
415   ///
416   /// \param [in] variable_sp
417   ///   The Variable to base this ValueObject on
418   ///
419   /// \param [in] use_dynamic
420   ///     Whether the correct dynamic type of the variable should be
421   ///     determined before creating the ValueObject, or if the static type
422   ///     is sufficient.  One of the DynamicValueType enumerated values.
423   ///
424   /// \return
425   ///     A ValueObject for this variable.
426   lldb::ValueObjectSP
427   GetValueObjectForFrameVariable(const lldb::VariableSP &variable_sp,
428                                  lldb::DynamicValueType use_dynamic);
429 
430   /// Query this frame to determine what the default language should be when
431   /// parsing expressions given the execution context.
432   ///
433   /// \return
434   ///   The language of the frame if known, else lldb::eLanguageTypeUnknown.
435   lldb::LanguageType GetLanguage();
436 
437   // similar to GetLanguage(), but is allowed to take a potentially incorrect
438   // guess if exact information is not available
439   lldb::LanguageType GuessLanguage();
440 
441   /// Attempt to econstruct the ValueObject for a given raw address touched by
442   /// the current instruction.  The ExpressionPath should indicate how to get
443   /// to this value using "frame variable."
444   ///
445   /// \param [in] addr
446   ///   The raw address.
447   ///
448   /// \return
449   ///   The ValueObject if found.  If valid, it has a valid ExpressionPath.
450   lldb::ValueObjectSP GuessValueForAddress(lldb::addr_t addr);
451 
452   /// Attempt to reconstruct the ValueObject for the address contained in a
453   /// given register plus an offset.  The ExpressionPath should indicate how
454   /// to get to this value using "frame variable."
455   ///
456   /// \param [in] reg
457   ///   The name of the register.
458   ///
459   /// \param [in] offset
460   ///   The offset from the register.  Particularly important for sp...
461   ///
462   /// \return
463   ///   The ValueObject if found.  If valid, it has a valid ExpressionPath.
464   lldb::ValueObjectSP GuessValueForRegisterAndOffset(ConstString reg,
465                                                      int64_t offset);
466 
467   /// Attempt to reconstruct the ValueObject for a variable with a given \a name
468   /// from within the current StackFrame, within the current block. The search
469   /// for the variable starts in the deepest block corresponding to the current
470   /// PC in the stack frame and traverse through all parent blocks stopping at
471   /// inlined function boundaries.
472   ///
473   /// \param [in] name
474   ///   The name of the variable.
475   ///
476   /// \return
477   ///   The ValueObject if found.
478   lldb::ValueObjectSP FindVariable(ConstString name);
479 
480   // lldb::ExecutionContextScope pure virtual functions
481   lldb::TargetSP CalculateTarget() override;
482 
483   lldb::ProcessSP CalculateProcess() override;
484 
485   lldb::ThreadSP CalculateThread() override;
486 
487   lldb::StackFrameSP CalculateStackFrame() override;
488 
489   void CalculateExecutionContext(ExecutionContext &exe_ctx) override;
490 
491   lldb::RecognizedStackFrameSP GetRecognizedFrame();
492 
493 protected:
494   friend class StackFrameList;
495 
496   void SetSymbolContextScope(SymbolContextScope *symbol_scope);
497 
498   void UpdateCurrentFrameFromPreviousFrame(StackFrame &prev_frame);
499 
500   void UpdatePreviousFrameFromCurrentFrame(StackFrame &curr_frame);
501 
502   bool HasCachedData() const;
503 
504 private:
505   // For StackFrame only
506   lldb::ThreadWP m_thread_wp;
507   uint32_t m_frame_index;
508   uint32_t m_concrete_frame_index;
509   lldb::RegisterContextSP m_reg_context_sp;
510   StackID m_id;
511   Address m_frame_code_addr; // The frame code address (might not be the same as
512                              // the actual PC for inlined frames) as a
513                              // section/offset address
514   SymbolContext m_sc;
515   Flags m_flags;
516   Scalar m_frame_base;
517   Status m_frame_base_error;
518   bool m_cfa_is_valid; // Does this frame have a CFA?  Different from CFA ==
519                        // LLDB_INVALID_ADDRESS
520   Kind m_stack_frame_kind;
521 
522   // Whether this frame behaves like the zeroth frame, in the sense
523   // that its pc value might not immediately follow a call (and thus might
524   // be the first address of its function). True for actual frame zero as
525   // well as any other frame with the same trait.
526   bool m_behaves_like_zeroth_frame;
527   lldb::VariableListSP m_variable_list_sp;
528   ValueObjectList m_variable_list_value_objects; // Value objects for each
529                                                  // variable in
530                                                  // m_variable_list_sp
531   lldb::RecognizedStackFrameSP m_recognized_frame_sp;
532   StreamString m_disassembly;
533   std::recursive_mutex m_mutex;
534 
535   StackFrame(const StackFrame &) = delete;
536   const StackFrame &operator=(const StackFrame &) = delete;
537 };
538 
539 } // namespace lldb_private
540 
541 #endif // LLDB_TARGET_STACKFRAME_H
542