svn commit: r327137 - in projects/clang600-import/contrib/llvm/tools/lldb: include/lldb/Interpreter include/lldb/Symbol include/lldb/Target include/lldb/Utility source/Interpreter source/Plugins/Di...
Dimitry Andric
dim at FreeBSD.org
Sun Dec 24 01:12:50 UTC 2017
Author: dim
Date: Sun Dec 24 01:12:46 2017
New Revision: 327137
URL: https://svnweb.freebsd.org/changeset/base/327137
Log:
Merge lldb trunk r321414 to contrib/llvm/tools/lldb.
Modified:
projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Interpreter/OptionValueFileSpec.h
projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Symbol/ObjectFile.h
projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Target/Target.h
projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Utility/DataBufferLLVM.h
projects/clang600-import/contrib/llvm/tools/lldb/source/Interpreter/OptionValueFileSpec.cpp
projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp
projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp
projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h
projects/clang600-import/contrib/llvm/tools/lldb/source/Symbol/ObjectFile.cpp
projects/clang600-import/contrib/llvm/tools/lldb/source/Target/Target.cpp
projects/clang600-import/contrib/llvm/tools/lldb/source/Utility/DataBufferLLVM.cpp
projects/clang600-import/contrib/llvm/tools/lldb/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
projects/clang600-import/contrib/llvm/tools/lldb/tools/lldb-mi/MIUtilString.cpp
Directory Properties:
projects/clang600-import/contrib/llvm/tools/lldb/ (props changed)
Modified: projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Interpreter/OptionValueFileSpec.h
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Interpreter/OptionValueFileSpec.h Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Interpreter/OptionValueFileSpec.h Sun Dec 24 01:12:46 2017 (r327137)
@@ -77,7 +77,7 @@ class OptionValueFileSpec : public OptionValue { (publ
void SetDefaultValue(const FileSpec &value) { m_default_value = value; }
- const lldb::DataBufferSP &GetFileContents(bool null_terminate);
+ const lldb::DataBufferSP &GetFileContents();
void SetCompletionMask(uint32_t mask) { m_completion_mask = mask; }
Modified: projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Symbol/ObjectFile.h
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Symbol/ObjectFile.h Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Symbol/ObjectFile.h Sun Dec 24 01:12:46 2017 (r327137)
@@ -879,6 +879,9 @@ class ObjectFile : public std::enable_shared_from_this
ConstString GetNextSyntheticSymbolName();
+ static lldb::DataBufferSP MapFileData(const FileSpec &file, uint64_t Size,
+ uint64_t Offset);
+
private:
DISALLOW_COPY_AND_ASSIGN(ObjectFile);
};
Modified: projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Target/Target.h
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Target/Target.h Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Target/Target.h Sun Dec 24 01:12:46 2017 (r327137)
@@ -161,7 +161,7 @@ class TargetProperties : public Properties { (public)
lldb::LanguageType GetLanguage() const;
- const char *GetExpressionPrefixContentsAsCString();
+ llvm::StringRef GetExpressionPrefixContents();
bool GetUseHexImmediates() const;
Modified: projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Utility/DataBufferLLVM.h
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Utility/DataBufferLLVM.h Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/include/lldb/Utility/DataBufferLLVM.h Sun Dec 24 01:12:46 2017 (r327137)
@@ -17,7 +17,7 @@
#include <stdint.h> // for uint8_t, uint64_t
namespace llvm {
-class MemoryBuffer;
+class WritableMemoryBuffer;
class Twine;
}
@@ -28,10 +28,10 @@ class DataBufferLLVM : public DataBuffer { (public)
~DataBufferLLVM();
static std::shared_ptr<DataBufferLLVM>
- CreateSliceFromPath(const llvm::Twine &Path, uint64_t Size, uint64_t Offset, bool Private = false);
+ CreateSliceFromPath(const llvm::Twine &Path, uint64_t Size, uint64_t Offset);
static std::shared_ptr<DataBufferLLVM>
- CreateFromPath(const llvm::Twine &Path, bool NullTerminate = false, bool Private = false);
+ CreateFromPath(const llvm::Twine &Path);
uint8_t *GetBytes() override;
const uint8_t *GetBytes() const override;
@@ -42,10 +42,9 @@ class DataBufferLLVM : public DataBuffer { (public)
private:
/// \brief Construct a DataBufferLLVM from \p Buffer. \p Buffer must be a
/// valid pointer.
- explicit DataBufferLLVM(std::unique_ptr<llvm::MemoryBuffer> Buffer);
- const uint8_t *GetBuffer() const;
+ explicit DataBufferLLVM(std::unique_ptr<llvm::WritableMemoryBuffer> Buffer);
- std::unique_ptr<llvm::MemoryBuffer> Buffer;
+ std::unique_ptr<llvm::WritableMemoryBuffer> Buffer;
};
}
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Interpreter/OptionValueFileSpec.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Interpreter/OptionValueFileSpec.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Interpreter/OptionValueFileSpec.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -113,14 +113,12 @@ size_t OptionValueFileSpec::AutoComplete(
return matches.GetSize();
}
-const lldb::DataBufferSP &
-OptionValueFileSpec::GetFileContents(bool null_terminate) {
+const lldb::DataBufferSP &OptionValueFileSpec::GetFileContents() {
if (m_current_value) {
const auto file_mod_time = FileSystem::GetModificationTime(m_current_value);
if (m_data_sp && m_data_mod_time == file_mod_time)
return m_data_sp;
- m_data_sp = DataBufferLLVM::CreateFromPath(m_current_value.GetPath(),
- null_terminate);
+ m_data_sp = DataBufferLLVM::CreateFromPath(m_current_value.GetPath());
m_data_mod_time = file_mod_time;
}
return m_data_sp;
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -1127,6 +1127,11 @@ DisassemblerLLVMC::DisassemblerLLVMC(const ArchSpec &a
features_str += "+dspr2,";
}
+ // If any AArch64 variant, enable the ARMv8.2 ISA
+ // extensions so we can disassemble newer instructions.
+ if (triple.getArch() == llvm::Triple::aarch64)
+ features_str += "+v8.2a";
+
m_disasm_ap.reset(new LLVMCDisassembler(triple_str, cpu, features_str.c_str(),
flavor, *this));
if (!m_disasm_ap->IsValid()) {
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -24,7 +24,6 @@
#include "lldb/Target/Target.h"
#include "lldb/Utility/ArchSpec.h"
#include "lldb/Utility/DataBufferHeap.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/Status.h"
#include "lldb/Utility/Stream.h"
@@ -406,8 +405,7 @@ ObjectFile *ObjectFileELF::CreateInstance(const lldb::
lldb::offset_t file_offset,
lldb::offset_t length) {
if (!data_sp) {
- data_sp =
- DataBufferLLVM::CreateSliceFromPath(file->GetPath(), length, file_offset, true);
+ data_sp = MapFileData(*file, length, file_offset);
if (!data_sp)
return nullptr;
data_offset = 0;
@@ -424,8 +422,7 @@ ObjectFile *ObjectFileELF::CreateInstance(const lldb::
// Update the data to contain the entire file if it doesn't already
if (data_sp->GetByteSize() < length) {
- data_sp =
- DataBufferLLVM::CreateSliceFromPath(file->GetPath(), length, file_offset, true);
+ data_sp = MapFileData(*file, length, file_offset);
if (!data_sp)
return nullptr;
data_offset = 0;
@@ -684,8 +681,7 @@ size_t ObjectFileELF::GetModuleSpecifications(
size_t section_header_end = header.e_shoff + header.e_shentsize;
if (header.HasHeaderExtension() &&
section_header_end > data_sp->GetByteSize()) {
- data_sp = DataBufferLLVM::CreateSliceFromPath(
- file.GetPath(), section_header_end, file_offset);
+ data_sp = MapFileData(file, section_header_end, file_offset);
if (data_sp) {
data.SetData(data_sp);
lldb::offset_t header_offset = data_offset;
@@ -698,8 +694,7 @@ size_t ObjectFileELF::GetModuleSpecifications(
section_header_end =
header.e_shoff + header.e_shnum * header.e_shentsize;
if (section_header_end > data_sp->GetByteSize()) {
- data_sp = DataBufferLLVM::CreateSliceFromPath(
- file.GetPath(), section_header_end, file_offset);
+ data_sp = MapFileData(file, section_header_end, file_offset);
if (data_sp)
data.SetData(data_sp);
}
@@ -741,8 +736,7 @@ size_t ObjectFileELF::GetModuleSpecifications(
size_t program_headers_end =
header.e_phoff + header.e_phnum * header.e_phentsize;
if (program_headers_end > data_sp->GetByteSize()) {
- data_sp = DataBufferLLVM::CreateSliceFromPath(
- file.GetPath(), program_headers_end, file_offset);
+ data_sp = MapFileData(file, program_headers_end, file_offset);
if (data_sp)
data.SetData(data_sp);
}
@@ -757,8 +751,7 @@ size_t ObjectFileELF::GetModuleSpecifications(
}
if (segment_data_end > data_sp->GetByteSize()) {
- data_sp = DataBufferLLVM::CreateSliceFromPath(
- file.GetPath(), segment_data_end, file_offset);
+ data_sp = MapFileData(file, segment_data_end, file_offset);
if (data_sp)
data.SetData(data_sp);
}
@@ -767,8 +760,7 @@ size_t ObjectFileELF::GetModuleSpecifications(
CalculateELFNotesSegmentsCRC32(program_headers, data);
} else {
// Need to map entire file into memory to calculate the crc.
- data_sp = DataBufferLLVM::CreateSliceFromPath(file.GetPath(), -1,
- file_offset);
+ data_sp = MapFileData(file, -1, file_offset);
if (data_sp) {
data.SetData(data_sp);
gnu_debuglink_crc = calc_gnu_debuglink_crc32(
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -60,6 +60,7 @@ StateType GDBRemoteClientBase::SendContinuePacketAndWa
continue;
if (steady_clock::now() >= m_interrupt_time + kInterruptTimeout)
return eStateInvalid;
+ break;
}
case PacketResult::Success:
break;
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -1743,8 +1743,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const S
"DWARF DW_TAG_array_type DIE at 0x%8.8x has a "
"class/union/struct element type DIE 0x%8.8x that is a "
"forward declaration, not a complete definition.\nTry "
- "compiling the source file with -fno-limit-debug-info or "
- "disable -gmodule",
+ "compiling the source file with -fstandalone-debug or "
+ "disable -gmodules",
die.GetOffset(), type_die_ref.die_offset);
else
module_sp->ReportError(
@@ -2255,7 +2255,7 @@ bool DWARFASTParserClang::CompleteTypeFromDWARF(const
if (die.GetCU()->GetProducer() ==
DWARFCompileUnit::eProducerClang)
module->ReportError(":: Try compiling the source file with "
- "-fno-limit-debug-info.");
+ "-fstandalone-debug.");
// We have no choice other than to pretend that the base class
// is complete. If we don't do this, clang will crash when we
@@ -3095,7 +3095,7 @@ bool DWARFASTParserClang::ParseChildMembers(
"DWARF DIE at 0x%8.8x (class %s) has a member variable "
"0x%8.8x (%s) whose type is a forward declaration, not a "
"complete definition.\nTry compiling the source file "
- "with -fno-limit-debug-info",
+ "with -fstandalone-debug",
parent_die.GetOffset(), parent_die.GetName(),
die.GetOffset(), name);
else
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -124,6 +124,8 @@ lldb::TypeSP PDBASTParser::CreateLLDBTypeFromPDBType(c
} else if (auto type_def = llvm::dyn_cast<PDBSymbolTypeTypedef>(&type)) {
lldb_private::Type *target_type =
m_ast.GetSymbolFile()->ResolveTypeUID(type_def->getTypeId());
+ if (!target_type)
+ return nullptr;
std::string name = type_def->getName();
uint64_t bytes = type_def->getLength();
if (!target_type)
@@ -179,6 +181,8 @@ lldb::TypeSP PDBASTParser::CreateLLDBTypeFromPDBType(c
lldb_private::Type *element_type =
m_ast.GetSymbolFile()->ResolveTypeUID(element_uid);
+ if (!element_type)
+ return nullptr;
CompilerType element_ast_type = element_type->GetFullCompilerType();
CompilerType array_ast_type =
m_ast.CreateArrayType(element_ast_type, num_elements, false);
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -19,14 +19,18 @@
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Symbol/TypeMap.h"
+#include "lldb/Utility/RegularExpression.h"
#include "llvm/DebugInfo/PDB/GenericError.h"
+#include "llvm/DebugInfo/PDB/IPDBDataStream.h"
#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
#include "llvm/DebugInfo/PDB/IPDBLineNumber.h"
#include "llvm/DebugInfo/PDB/IPDBSourceFile.h"
+#include "llvm/DebugInfo/PDB/IPDBTable.h"
#include "llvm/DebugInfo/PDB/PDBSymbol.h"
#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
#include "llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolData.h"
#include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
#include "llvm/DebugInfo/PDB/PDBSymbolFunc.h"
#include "llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h"
@@ -93,6 +97,10 @@ SymbolFilePDB::SymbolFilePDB(lldb_private::ObjectFile
SymbolFilePDB::~SymbolFilePDB() {}
uint32_t SymbolFilePDB::CalculateAbilities() {
+ uint32_t abilities = 0;
+ if (!m_obj_file)
+ return 0;
+
if (!m_session_up) {
// Lazily load and match the PDB file, but only do this once.
std::string exePath = m_obj_file->GetFileSpec().GetPath();
@@ -100,10 +108,46 @@ uint32_t SymbolFilePDB::CalculateAbilities() {
m_session_up);
if (error) {
llvm::consumeError(std::move(error));
- return 0;
+ auto module_sp = m_obj_file->GetModule();
+ if (!module_sp)
+ return 0;
+ // See if any symbol file is specified through `--symfile` option.
+ FileSpec symfile = module_sp->GetSymbolFileFileSpec();
+ if (!symfile)
+ return 0;
+ error = loadDataForPDB(PDB_ReaderType::DIA,
+ llvm::StringRef(symfile.GetPath()),
+ m_session_up);
+ if (error) {
+ llvm::consumeError(std::move(error));
+ return 0;
+ }
}
}
- return CompileUnits | LineTables;
+ if (!m_session_up.get())
+ return 0;
+
+ auto enum_tables_up = m_session_up->getEnumTables();
+ if (!enum_tables_up)
+ return 0;
+ while (auto table_up = enum_tables_up->getNext()) {
+ if (table_up->getItemCount() == 0)
+ continue;
+ auto type = table_up->getTableType();
+ switch (type) {
+ case PDB_TableType::Symbols:
+ // This table represents a store of symbols with types listed in
+ // PDBSym_Type
+ abilities |= (CompileUnits | Functions | Blocks |
+ GlobalVariables | LocalVariables | VariableTypes);
+ break;
+ case PDB_TableType::LineNumbers:
+ abilities |= LineTables;
+ break;
+ default: break;
+ }
+ }
+ return abilities;
}
void SymbolFilePDB::InitializeObject() {
@@ -250,7 +294,8 @@ lldb_private::Type *SymbolFilePDB::ResolveTypeUID(lldb
return nullptr;
lldb::TypeSP result = pdb->CreateLLDBTypeFromPDBType(*pdb_type);
- m_types.insert(std::make_pair(type_uid, result));
+ if (result.get())
+ m_types.insert(std::make_pair(type_uid, result));
return result.get();
}
@@ -385,19 +430,16 @@ uint32_t SymbolFilePDB::FindTypes(
std::string name_str = name.AsCString();
- // If this might be a regex, we have to return EVERY symbol and process them
- // one by one, which is going to destroy performance on large PDB files. So
- // try really hard not to use a regex match.
- if (name_str.find_first_of("[]?*.-+\\") != std::string::npos)
- FindTypesByRegex(name_str, max_matches, types);
- else
- FindTypesByName(name_str, max_matches, types);
+ // There is an assumption 'name' is not a regex
+ FindTypesByName(name_str, max_matches, types);
+
return types.GetSize();
}
-void SymbolFilePDB::FindTypesByRegex(const std::string ®ex,
- uint32_t max_matches,
- lldb_private::TypeMap &types) {
+void
+SymbolFilePDB::FindTypesByRegex(const lldb_private::RegularExpression ®ex,
+ uint32_t max_matches,
+ lldb_private::TypeMap &types) {
// When searching by regex, we need to go out of our way to limit the search
// space as much as possible since this searches EVERYTHING in the PDB,
// manually doing regex comparisons. PDB library isn't optimized for regex
@@ -409,8 +451,6 @@ void SymbolFilePDB::FindTypesByRegex(const std::string
auto global = m_session_up->getGlobalScope();
std::unique_ptr<IPDBEnumSymbols> results;
- std::regex re(regex);
-
uint32_t matches = 0;
for (auto tag : tags_to_search) {
@@ -433,7 +473,7 @@ void SymbolFilePDB::FindTypesByRegex(const std::string
continue;
}
- if (!std::regex_match(type_name, re))
+ if (!regex.Execute(type_name))
continue;
// This should cause the type to get cached and stored in the `m_types`
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h Sun Dec 24 01:12:46 2017 (r327137)
@@ -172,7 +172,8 @@ class SymbolFilePDB : public lldb_private::SymbolFile
const llvm::pdb::PDBSymbolCompiland &cu,
llvm::DenseMap<uint32_t, uint32_t> &index_map) const;
- void FindTypesByRegex(const std::string ®ex, uint32_t max_matches,
+ void FindTypesByRegex(const lldb_private::RegularExpression ®ex,
+ uint32_t max_matches,
lldb_private::TypeMap &types);
void FindTypesByName(const std::string &name, uint32_t max_matches,
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Symbol/ObjectFile.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Symbol/ObjectFile.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Symbol/ObjectFile.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -688,3 +688,8 @@ Status ObjectFile::LoadInMemory(Target &target, bool s
void ObjectFile::RelocateSection(lldb_private::Section *section)
{
}
+
+DataBufferSP ObjectFile::MapFileData(const FileSpec &file, uint64_t Size,
+ uint64_t Offset) {
+ return DataBufferLLVM::CreateSliceFromPath(file.GetPath(), Size, Offset);
+}
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Target/Target.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Target/Target.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Target/Target.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -2313,7 +2313,7 @@ ExpressionResults Target::EvaluateExpression(
result_valobj_sp = persistent_var_sp->GetValueObject();
execution_results = eExpressionCompleted;
} else {
- const char *prefix = GetExpressionPrefixContentsAsCString();
+ llvm::StringRef prefix = GetExpressionPrefixContents();
Status error;
execution_results = UserExpression::Evaluate(exe_ctx, options, expr, prefix,
result_valobj_sp, error,
@@ -4046,18 +4046,19 @@ LanguageType TargetProperties::GetLanguage() const {
return LanguageType();
}
-const char *TargetProperties::GetExpressionPrefixContentsAsCString() {
+llvm::StringRef TargetProperties::GetExpressionPrefixContents() {
const uint32_t idx = ePropertyExprPrefix;
OptionValueFileSpec *file =
m_collection_sp->GetPropertyAtIndexAsOptionValueFileSpec(nullptr, false,
idx);
if (file) {
- const bool null_terminate = true;
- DataBufferSP data_sp(file->GetFileContents(null_terminate));
+ DataBufferSP data_sp(file->GetFileContents());
if (data_sp)
- return (const char *)data_sp->GetBytes();
+ return llvm::StringRef(
+ reinterpret_cast<const char *>(data_sp->GetBytes()),
+ data_sp->GetByteSize());
}
- return nullptr;
+ return "";
}
bool TargetProperties::GetBreakpointsConsultPlatformAvoidList() {
Modified: projects/clang600-import/contrib/llvm/tools/lldb/source/Utility/DataBufferLLVM.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/source/Utility/DataBufferLLVM.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/source/Utility/DataBufferLLVM.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -18,7 +18,8 @@
using namespace lldb_private;
-DataBufferLLVM::DataBufferLLVM(std::unique_ptr<llvm::MemoryBuffer> MemBuffer)
+DataBufferLLVM::DataBufferLLVM(
+ std::unique_ptr<llvm::WritableMemoryBuffer> MemBuffer)
: Buffer(std::move(MemBuffer)) {
assert(Buffer != nullptr &&
"Cannot construct a DataBufferLLVM with a null buffer");
@@ -28,13 +29,13 @@ DataBufferLLVM::~DataBufferLLVM() {}
std::shared_ptr<DataBufferLLVM>
DataBufferLLVM::CreateSliceFromPath(const llvm::Twine &Path, uint64_t Size,
- uint64_t Offset, bool Private) {
+ uint64_t Offset) {
// If the file resides non-locally, pass the volatile flag so that we don't
// mmap it.
- if (!Private)
- Private = !llvm::sys::fs::is_local(Path);
+ bool IsVolatile = !llvm::sys::fs::is_local(Path);
- auto Buffer = llvm::MemoryBuffer::getFileSlice(Path, Size, Offset, Private);
+ auto Buffer =
+ llvm::WritableMemoryBuffer::getFileSlice(Path, Size, Offset, IsVolatile);
if (!Buffer)
return nullptr;
return std::shared_ptr<DataBufferLLVM>(
@@ -42,13 +43,12 @@ DataBufferLLVM::CreateSliceFromPath(const llvm::Twine
}
std::shared_ptr<DataBufferLLVM>
-DataBufferLLVM::CreateFromPath(const llvm::Twine &Path, bool NullTerminate, bool Private) {
+DataBufferLLVM::CreateFromPath(const llvm::Twine &Path) {
// If the file resides non-locally, pass the volatile flag so that we don't
// mmap it.
- if (!Private)
- Private = !llvm::sys::fs::is_local(Path);
+ bool IsVolatile = !llvm::sys::fs::is_local(Path);
- auto Buffer = llvm::MemoryBuffer::getFile(Path, -1, NullTerminate, Private);
+ auto Buffer = llvm::WritableMemoryBuffer::getFile(Path, -1, IsVolatile);
if (!Buffer)
return nullptr;
return std::shared_ptr<DataBufferLLVM>(
@@ -56,15 +56,13 @@ DataBufferLLVM::CreateFromPath(const llvm::Twine &Path
}
uint8_t *DataBufferLLVM::GetBytes() {
- return const_cast<uint8_t *>(GetBuffer());
+ return reinterpret_cast<uint8_t *>(Buffer->getBufferStart());
}
-const uint8_t *DataBufferLLVM::GetBytes() const { return GetBuffer(); }
+const uint8_t *DataBufferLLVM::GetBytes() const {
+ return reinterpret_cast<const uint8_t *>(Buffer->getBufferStart());
+}
lldb::offset_t DataBufferLLVM::GetByteSize() const {
return Buffer->getBufferSize();
-}
-
-const uint8_t *DataBufferLLVM::GetBuffer() const {
- return reinterpret_cast<const uint8_t *>(Buffer->getBufferStart());
}
Modified: projects/clang600-import/contrib/llvm/tools/lldb/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -18,6 +18,7 @@
#include "lldb/API/SBTarget.h"
#include "lldb/API/SBThread.h"
#include "lldb/API/SBUnixSignals.h"
+#include "llvm/Support/Compiler.h"
#ifdef _WIN32
#include <io.h> // For the ::_access()
#else
@@ -899,6 +900,7 @@ bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEven
bOk = HandleProcessEventStateStopped(vEvent, bShouldBrk);
if (bShouldBrk)
break;
+ LLVM_FALLTHROUGH;
case lldb::eStateCrashed:
case lldb::eStateSuspended:
pEventType = "eStateSuspended";
Modified: projects/clang600-import/contrib/llvm/tools/lldb/tools/lldb-mi/MIUtilString.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lldb/tools/lldb-mi/MIUtilString.cpp Sun Dec 24 01:11:19 2017 (r327136)
+++ projects/clang600-import/contrib/llvm/tools/lldb/tools/lldb-mi/MIUtilString.cpp Sun Dec 24 01:12:46 2017 (r327137)
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
// Third party headers
+#include "llvm/Support/Compiler.h"
#include <cstdlib>
#include <inttypes.h> // for PRIx8
#include <limits.h> // for ULONG_MAX
@@ -890,7 +891,7 @@ CMIUtilString CMIUtilString::ConvertToPrintableASCII(c
case '"':
if (bEscapeQuotes)
return "\\\"";
- // fall thru
+ LLVM_FALLTHROUGH;
default:
if (::isprint(vChar))
return Format("%c", vChar);
@@ -924,7 +925,7 @@ CMIUtilString::ConvertCharValueToPrintableASCII(char v
case '"':
if (bEscapeQuotes)
return "\\\"";
- // fall thru
+ LLVM_FALLTHROUGH;
default:
if (::isprint(vChar))
return Format("%c", vChar);
More information about the svn-src-projects
mailing list