diff options
author | emaste <emaste@FreeBSD.org> | 2015-07-04 01:02:43 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2015-07-04 01:02:43 +0000 |
commit | cea4c167517a0678c7dbf92a0324088dcbac1035 (patch) | |
tree | 02de7f7c9d5a08ae1c4d3b4c98a565ff96cd52e6 /contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp | |
parent | 1756896fd2b99ede7ebeb8019d4004bdfeed3bbe (diff) | |
parent | 8037fa4ee916fa20b3c63cbf531f4ee7e1c76138 (diff) | |
download | FreeBSD-src-cea4c167517a0678c7dbf92a0324088dcbac1035.zip FreeBSD-src-cea4c167517a0678c7dbf92a0324088dcbac1035.tar.gz |
Update LLDB snapshot to upstream r241361
Notable upstream commits (upstream revision in parens):
- Add a JSON producer to LLDB (228636)
- Don't crash on bad DWARF expression (228729)
- Add support of DWARFv3 DW_OP_form_tls_address (231342)
- Assembly profiler for MIPS64 (232619)
- Handle FreeBSD/arm64 core files (233273)
- Read/Write register for MIPS64 (233685)
- Rework LLDB system initialization (233758)
- SysV ABI for aarch64 (236098)
- MIPS software single stepping (236696)
- FreeBSD/arm live debugging support (237303)
- Assembly profiler for mips32 (237420)
- Parse function name from DWARF DW_AT_abstract_origin (238307)
- Improve LLDB prompt handling (238313)
- Add real time signals support to FreeBSDSignals (238316)
- Fix race in IOHandlerProcessSTDIO (238423)
- MIPS64 Branch instruction emulation for SW single stepping (238820)
- Improve OSType initialization in elf object file's arch_spec (239148)
- Emulation of MIPS64 floating-point branch instructions (239996)
- ABI Plugin for MIPS32 (239997)
- ABI Plugin for MIPS64 (240123)
- MIPS32 branch emulation and single stepping (240373)
- Improve instruction emulation based stack unwinding on ARM (240533)
- Add branch emulation to aarch64 instruction emulator (240769)
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp | 87 |
1 files changed, 85 insertions, 2 deletions
diff --git a/contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp b/contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp index 358bffe..9c7b441 100644 --- a/contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp +++ b/contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp @@ -8,9 +8,11 @@ //===----------------------------------------------------------------------===// #include "lldb/Target/LanguageRuntime.h" +#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/Target.h" #include "lldb/Core/PluginManager.h" #include "lldb/Core/SearchFilter.h" +#include "lldb/Interpreter/CommandInterpreter.h" using namespace lldb; using namespace lldb_private; @@ -277,6 +279,23 @@ LanguageRuntime::~LanguageRuntime() { } +Breakpoint::BreakpointPreconditionSP +LanguageRuntime::CreateExceptionPrecondition (lldb::LanguageType language, + bool catch_bp, + bool throw_bp) +{ + switch (language) + { + case eLanguageTypeObjC: + if (throw_bp) + return Breakpoint::BreakpointPreconditionSP(new ObjCLanguageRuntime::ObjCExceptionPrecondition ()); + break; + default: + break; + } + return Breakpoint::BreakpointPreconditionSP(); +} + BreakpointSP LanguageRuntime::CreateExceptionBreakpoint (Target &target, lldb::LanguageType language, @@ -289,8 +308,15 @@ LanguageRuntime::CreateExceptionBreakpoint (Target &target, bool hardware = false; bool resolve_indirect_functions = false; BreakpointSP exc_breakpt_sp (target.CreateBreakpoint (filter_sp, resolver_sp, is_internal, hardware, resolve_indirect_functions)); - if (is_internal) - exc_breakpt_sp->SetBreakpointKind("exception"); + if (exc_breakpt_sp) + { + Breakpoint::BreakpointPreconditionSP precondition_sp = CreateExceptionPrecondition(language, catch_bp, throw_bp); + if (precondition_sp) + exc_breakpt_sp->SetPrecondition(precondition_sp); + + if (is_internal) + exc_breakpt_sp->SetBreakpointKind("exception"); + } return exc_breakpt_sp; } @@ -337,6 +363,12 @@ struct language_name_pair language_names[] = { "swift", eLanguageTypeSwift }, { "julia", eLanguageTypeJulia }, { "dylan", eLanguageTypeDylan }, + { "c++14", eLanguageTypeC_plus_plus_14 }, + { "fortran03", eLanguageTypeFortran03 }, + { "fortran08", eLanguageTypeFortran08 }, + // Vendor Extensions + { "mipsassem", eLanguageTypeMipsAssembler }, + { "renderscript", eLanguageTypeExtRenderScript}, // Now synonyms, in arbitrary order { "objc", eLanguageTypeObjC }, { "objc++", eLanguageTypeObjC_plus_plus } @@ -364,6 +396,57 @@ LanguageRuntime::GetNameForLanguageType (LanguageType language) return language_names[eLanguageTypeUnknown].name; } +void +LanguageRuntime::PrintAllLanguages (Stream &s, const char *prefix, const char *suffix) +{ + for (uint32_t i = 1; i < num_languages; i++) + { + s.Printf("%s%s%s", prefix, language_names[i].name, suffix); + } +} + +bool +LanguageRuntime::LanguageIsCPlusPlus (LanguageType language) +{ + switch (language) + { + case eLanguageTypeC_plus_plus: + case eLanguageTypeC_plus_plus_03: + case eLanguageTypeC_plus_plus_11: + case eLanguageTypeC_plus_plus_14: + return true; + default: + return false; + } +} + +void +LanguageRuntime::InitializeCommands (CommandObject* parent) +{ + if (!parent) + return; + + if (!parent->IsMultiwordObject()) + return; + + LanguageRuntimeCreateInstance create_callback; + + for (uint32_t idx = 0; + (create_callback = PluginManager::GetLanguageRuntimeCreateCallbackAtIndex(idx)) != nullptr; + ++idx) + { + if (LanguageRuntimeGetCommandObject command_callback = + PluginManager::GetLanguageRuntimeGetCommandObjectAtIndex(idx)) + { + CommandObjectSP command = command_callback(parent->GetCommandInterpreter()); + if (command) + { + parent->LoadSubCommand(command->GetCommandName(), command); + } + } + } +} + lldb::SearchFilterSP LanguageRuntime::CreateExceptionSearchFilter () { |