summaryrefslogtreecommitdiff
path: root/lldb
diff options
context:
space:
mode:
Diffstat (limited to 'lldb')
-rw-r--r--lldb/lit/SymbolFile/NativePDB/Inputs/break-by-function.lldbinit (renamed from lldb/lit/SymbolFile/NativePDB/Inputs/breakpoints.lldbinit)0
-rw-r--r--lldb/lit/SymbolFile/NativePDB/Inputs/break-by-line.lldbinit3
-rw-r--r--lldb/lit/SymbolFile/NativePDB/break-by-function.cpp (renamed from lldb/lit/SymbolFile/NativePDB/simple-breakpoints.cpp)28
-rw-r--r--lldb/lit/SymbolFile/NativePDB/break-by-line.cpp26
-rw-r--r--lldb/source/Plugins/SymbolFile/NativePDB/CompileUnitIndex.cpp6
-rw-r--r--lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp19
-rw-r--r--lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h6
7 files changed, 70 insertions, 18 deletions
diff --git a/lldb/lit/SymbolFile/NativePDB/Inputs/breakpoints.lldbinit b/lldb/lit/SymbolFile/NativePDB/Inputs/break-by-function.lldbinit
index ff9bf21a886..ff9bf21a886 100644
--- a/lldb/lit/SymbolFile/NativePDB/Inputs/breakpoints.lldbinit
+++ b/lldb/lit/SymbolFile/NativePDB/Inputs/break-by-function.lldbinit
diff --git a/lldb/lit/SymbolFile/NativePDB/Inputs/break-by-line.lldbinit b/lldb/lit/SymbolFile/NativePDB/Inputs/break-by-line.lldbinit
new file mode 100644
index 00000000000..7daa53ba24e
--- /dev/null
+++ b/lldb/lit/SymbolFile/NativePDB/Inputs/break-by-line.lldbinit
@@ -0,0 +1,3 @@
+break set -f break-by-line.cpp -l 14
+break list
+quit
diff --git a/lldb/lit/SymbolFile/NativePDB/simple-breakpoints.cpp b/lldb/lit/SymbolFile/NativePDB/break-by-function.cpp
index a590fab1faa..c0c26f7617c 100644
--- a/lldb/lit/SymbolFile/NativePDB/simple-breakpoints.cpp
+++ b/lldb/lit/SymbolFile/NativePDB/break-by-function.cpp
@@ -4,10 +4,11 @@
// Test that we can set simple breakpoints using PDB on any platform.
// RUN: %build --compiler=clang-cl --nodefaultlib -o %t.exe -- %s
// RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb -f %t.exe -s \
-// RUN: %p/Inputs/breakpoints.lldbinit | FileCheck %s
+// RUN: %p/Inputs/break-by-function.lldbinit | FileCheck %s
// Use different indentation style for each overload so that the starting
// line is in a different place.
+
int OvlGlobalFn(int X) {
return X + 42;
}
@@ -33,31 +34,24 @@ int main(int argc, char **argv) {
}
-// CHECK: (lldb) target create "{{.*}}simple-breakpoints.cpp.tmp.exe"
-// CHECK: Current executable set to '{{.*}}simple-breakpoints.cpp.tmp.exe'
+// CHECK: (lldb) target create "{{.*}}break-by-function.cpp.tmp.exe"
+// CHECK: Current executable set to '{{.*}}break-by-function.cpp.tmp.exe'
// CHECK: (lldb) break set -n main
-// CHECK: Breakpoint 1: where = simple-breakpoints.cpp.tmp.exe`main + {{[0-9]+}}
-// CHECK-SAME: at simple-breakpoints.cpp:30
+// CHECK: Breakpoint 1: where = break-by-function.cpp.tmp.exe`main + {{[0-9]+}}
// CHECK: (lldb) break set -n OvlGlobalFn
// CHECK: Breakpoint 2: 3 locations.
// CHECK: (lldb) break set -n StaticFn
-// CHECK: Breakpoint 3: where = simple-breakpoints.cpp.tmp.exe`StaticFn + {{[0-9]+}}
-// CHECK-SAME: at simple-breakpoints.cpp:23
+// CHECK: Breakpoint 3: where = break-by-function.cpp.tmp.exe`StaticFn + {{[0-9]+}}
// CHECK: (lldb) break set -n DoesntExist
// CHECK: Breakpoint 4: no locations (pending).
// CHECK: (lldb) break list
// CHECK: Current breakpoints:
// CHECK: 1: name = 'main', locations = 1
-// CHECK: 1.1: where = simple-breakpoints.cpp.tmp.exe`main + {{[0-9]+}}
-// CHECK-SAME: at simple-breakpoints.cpp:30
+// CHECK: 1.1: where = break-by-function.cpp.tmp.exe`main + {{[0-9]+}}
// CHECK: 2: name = 'OvlGlobalFn', locations = 3
-// CHECK: 2.1: where = simple-breakpoints.cpp.tmp.exe`OvlGlobalFn + {{[0-9]+}}
-// CHECK-SAME: at simple-breakpoints.cpp:12
-// CHECK: 2.2: where = simple-breakpoints.cpp.tmp.exe`OvlGlobalFn
-// CHECK-SAME: at simple-breakpoints.cpp:15
-// CHECK: 2.3: where = simple-breakpoints.cpp.tmp.exe`OvlGlobalFn + {{[0-9]+}}
-// CHECK-SAME: at simple-breakpoints.cpp:19
+// CHECK: 2.1: where = break-by-function.cpp.tmp.exe`OvlGlobalFn + {{[0-9]+}}
+// CHECK: 2.2: where = break-by-function.cpp.tmp.exe`OvlGlobalFn
+// CHECK: 2.3: where = break-by-function.cpp.tmp.exe`OvlGlobalFn + {{[0-9]+}}
// CHECK: 3: name = 'StaticFn', locations = 1
-// CHECK: 3.1: where = simple-breakpoints.cpp.tmp.exe`StaticFn + {{[0-9]+}}
-// CHECK-SAME: at simple-breakpoints.cpp:23
+// CHECK: 3.1: where = break-by-function.cpp.tmp.exe`StaticFn + {{[0-9]+}}
// CHECK: 4: name = 'DoesntExist', locations = 0 (pending)
diff --git a/lldb/lit/SymbolFile/NativePDB/break-by-line.cpp b/lldb/lit/SymbolFile/NativePDB/break-by-line.cpp
new file mode 100644
index 00000000000..ae3269f3719
--- /dev/null
+++ b/lldb/lit/SymbolFile/NativePDB/break-by-line.cpp
@@ -0,0 +1,26 @@
+// clang-format off
+// REQUIRES: lld
+
+// Test that we can set simple breakpoints using PDB on any platform.
+// RUN: %build --compiler=clang-cl --nodefaultlib -o %t.exe -- %s
+// RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb -f %t.exe -s \
+// RUN: %p/Inputs/break-by-line.lldbinit | FileCheck %s
+
+// This is a separate test from break-by-function.cpp because this test is
+// sensitive to edits in the source file.
+
+namespace NS {
+ int NamespaceFn(int X) {
+ return X + 42;
+ }
+}
+
+int main(int argc, char **argv) {
+ return NS::NamespaceFn(argc);
+}
+
+
+// CHECK: (lldb) target create "{{.*}}break-by-line.cpp.tmp.exe"
+// CHECK: Current executable set to '{{.*}}break-by-line.cpp.tmp.exe'
+// CHECK: (lldb) break set -f break-by-line.cpp -l 14
+// CHECK: Breakpoint 1: where = break-by-line.cpp.tmp.exe`NS::NamespaceFn + {{[0-9]+}} at break-by-line.cpp:14
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/CompileUnitIndex.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/CompileUnitIndex.cpp
index 68d8ded4a27..67ea05767fd 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/CompileUnitIndex.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/CompileUnitIndex.cpp
@@ -205,6 +205,12 @@ CompileUnitIndex::GetMainSourceFile(const CompilandIndexItem &item) const {
llvm::cantFail(
TypeDeserializer::deserializeAs<StringIdRecord>(file_cvt, file_name));
+ llvm::sys::path::Style style = working_dir.String.startswith("/")
+ ? llvm::sys::path::Style::posix
+ : llvm::sys::path::Style::windows;
+ if (llvm::sys::path::is_absolute(file_name.String, style))
+ return file_name.String;
+
llvm::SmallString<64> absolute_path = working_dir.String;
llvm::sys::path::append(absolute_path, file_name.String);
return absolute_path;
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
index b41e52eb67d..0208d3cbaa5 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
@@ -875,6 +875,8 @@ SymbolFileNativePDB::ParseCompileUnitLanguage(const SymbolContext &sc) {
return TranslateLanguage(item->m_compile_opts->getLanguage());
}
+void SymbolFileNativePDB::AddSymbols(Symtab &symtab) { return; }
+
size_t SymbolFileNativePDB::ParseCompileUnitFunctions(const SymbolContext &sc) {
lldbassert(sc.comp_unit);
return false;
@@ -949,6 +951,12 @@ uint32_t SymbolFileNativePDB::ResolveSymbolContext(
return resolved_flags;
}
+uint32_t SymbolFileNativePDB::ResolveSymbolContext(
+ const FileSpec &file_spec, uint32_t line, bool check_inlines,
+ lldb::SymbolContextItem resolve_scope, SymbolContextList &sc_list) {
+ return 0;
+}
+
static void AppendLineEntryToSequence(LineTable &table, LineSequence &sequence,
const CompilandIndexItem &cci,
lldb::addr_t base_addr,
@@ -1037,7 +1045,9 @@ bool SymbolFileNativePDB::ParseCompileUnitLineTable(const SymbolContext &sc) {
// LLDB wants the index of the file in the list of support files.
auto fn_iter = llvm::find(cci->m_file_list, *efn);
lldbassert(fn_iter != cci->m_file_list.end());
- uint32_t file_index = std::distance(cci->m_file_list.begin(), fn_iter);
+ // LLDB support file indices are 1-based.
+ uint32_t file_index =
+ 1 + std::distance(cci->m_file_list.begin(), fn_iter);
std::unique_ptr<LineSequence> sequence(
line_table->CreateLineSequenceContainer());
@@ -1082,6 +1092,13 @@ bool SymbolFileNativePDB::ParseCompileUnitSupportFiles(
support_files.Append(spec);
}
+ llvm::SmallString<64> main_source_file =
+ m_index->compilands().GetMainSourceFile(*cci);
+ FileSpec::Style style = main_source_file.startswith("/")
+ ? FileSpec::Style::posix
+ : FileSpec::Style::windows;
+ FileSpec spec(main_source_file, style);
+ support_files.Insert(0, spec);
return true;
}
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
index 39abb9ca633..dece19dbb71 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
@@ -104,6 +104,8 @@ public:
size_t ParseTypes(const SymbolContext &sc) override;
size_t ParseVariablesForContext(const SymbolContext &sc) override;
+ void AddSymbols(Symtab &symtab) override;
+
CompilerDecl GetDeclForUID(lldb::user_id_t uid) override;
CompilerDeclContext GetDeclContextForUID(lldb::user_id_t uid) override;
CompilerDeclContext GetDeclContextContainingUID(lldb::user_id_t uid) override;
@@ -116,6 +118,10 @@ public:
uint32_t ResolveSymbolContext(const Address &so_addr,
lldb::SymbolContextItem resolve_scope,
SymbolContext &sc) override;
+ uint32_t ResolveSymbolContext(const FileSpec &file_spec, uint32_t line,
+ bool check_inlines,
+ lldb::SymbolContextItem resolve_scope,
+ SymbolContextList &sc_list) override;
size_t GetTypes(SymbolContextScope *sc_scope, lldb::TypeClass type_mask,
TypeList &type_list) override;