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 ®_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 ®_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 GetThread()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 GetRegisterContextSP()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. SetFrameIndex(uint32_t 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. GetConcreteFrameIndex()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