brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 05639e9 Raw
98 lines · c
1//===-- CPPLanguageRuntime.h2//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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H10#define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H11 12#include <vector>13 14#include "llvm/ADT/StringMap.h"15 16#include "lldb/Core/PluginInterface.h"17#include "lldb/Target/LanguageRuntime.h"18#include "lldb/lldb-private.h"19 20namespace lldb_private {21 22class CPPLanguageRuntime : public LanguageRuntime {23public:24  enum class LibCppStdFunctionCallableCase {25    Lambda = 0,26    CallableObject,27    FreeOrMemberFunction,28    Invalid29  };30 31  struct LibCppStdFunctionCallableInfo {32    Symbol callable_symbol;33    Address callable_address;34    LineEntry callable_line_entry;35    lldb::addr_t member_f_pointer_value = 0u;36    LibCppStdFunctionCallableCase callable_case =37        LibCppStdFunctionCallableCase::Invalid;38  };39 40  LibCppStdFunctionCallableInfo41  FindLibCppStdFunctionCallableInfo(lldb::ValueObjectSP &valobj_sp);42 43  static char ID;44 45  bool isA(const void *ClassID) const override {46    return ClassID == &ID || LanguageRuntime::isA(ClassID);47  }48 49  static bool classof(const LanguageRuntime *runtime) {50    return runtime->isA(&ID);51  }52 53  lldb::LanguageType GetLanguageType() const override {54    return lldb::eLanguageTypeC_plus_plus;55  }56 57  static CPPLanguageRuntime *Get(Process &process) {58    return llvm::cast_or_null<CPPLanguageRuntime>(59        process.GetLanguageRuntime(lldb::eLanguageTypeC_plus_plus));60  }61 62  llvm::Error GetObjectDescription(Stream &str, ValueObject &object) override;63 64  llvm::Error GetObjectDescription(Stream &str, Value &value,65                                   ExecutionContextScope *exe_scope) override;66 67  /// Obtain a ThreadPlan to get us into C++ constructs such as std::function.68  ///69  /// \param[in] thread70  ///     Current thrad of execution.71  ///72  /// \param[in] stop_others73  ///     True if other threads should pause during execution.74  ///75  /// \return76  ///      A ThreadPlan Shared pointer77  lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread,78                                                  bool stop_others) override;79 80  bool IsAllowedRuntimeValue(ConstString name) override;81 82  bool IsSymbolARuntimeThunk(const Symbol &symbol) override;83 84protected:85  // Classes that inherit from CPPLanguageRuntime can see and modify these86  CPPLanguageRuntime(Process *process);87 88private:89  using OperatorStringToCallableInfoMap =90    llvm::StringMap<CPPLanguageRuntime::LibCppStdFunctionCallableInfo>;91 92  OperatorStringToCallableInfoMap CallableLookupCache;93};94 95} // namespace lldb_private96 97#endif // LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H98