[Lldb-commits] [lldb] 5e70f4b - [lldb/breakpad] Use new line table constructor
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Tue Jan 21 06:05:01 PST 2020
Author: Pavel Labath
Date: 2020-01-21T15:04:27+01:00
New Revision: 5e70f4bdc15960730d0ff2aa167399e36bc64278
URL: https://github.com/llvm/llvm-project/commit/5e70f4bdc15960730d0ff2aa167399e36bc64278
DIFF: https://github.com/llvm/llvm-project/commit/5e70f4bdc15960730d0ff2aa167399e36bc64278.diff
LOG: [lldb/breakpad] Use new line table constructor
The old construction method can be quadratic for some inputs. This
approach guarantees a reasonable performance.
Added:
Modified:
lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
index b2c4d0883341..0d251c9e2e0a 100644
--- a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
+++ b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
@@ -694,18 +694,18 @@ void SymbolFileBreakpad::ParseLineTableAndSupportFiles(CompileUnit &cu,
"How did we create compile units without a base address?");
SupportFileMap map;
- data.line_table_up = std::make_unique<LineTable>(&cu);
- std::unique_ptr<LineSequence> line_seq_up(
- data.line_table_up->CreateLineSequenceContainer());
+ std::vector<std::unique_ptr<LineSequence>> sequences;
+ std::unique_ptr<LineSequence> line_seq_up =
+ LineTable::CreateLineSequenceContainer();
llvm::Optional<addr_t> next_addr;
auto finish_sequence = [&]() {
- data.line_table_up->AppendLineEntryToSequence(
+ LineTable::AppendLineEntryToSequence(
line_seq_up.get(), *next_addr, /*line*/ 0, /*column*/ 0,
/*file_idx*/ 0, /*is_start_of_statement*/ false,
/*is_start_of_basic_block*/ false, /*is_prologue_end*/ false,
/*is_epilogue_begin*/ false, /*is_terminal_entry*/ true);
- data.line_table_up->InsertSequence(line_seq_up.get());
- line_seq_up->Clear();
+ sequences.push_back(std::move(line_seq_up));
+ line_seq_up = LineTable::CreateLineSequenceContainer();
};
LineIterator It(*m_objfile_sp, Record::Func, data.bookmark),
@@ -722,7 +722,7 @@ void SymbolFileBreakpad::ParseLineTableAndSupportFiles(CompileUnit &cu,
// Discontiguous entries. Finish off the previous sequence and reset.
finish_sequence();
}
- data.line_table_up->AppendLineEntryToSequence(
+ LineTable::AppendLineEntryToSequence(
line_seq_up.get(), record->Address, record->LineNum, /*column*/ 0,
map[record->FileNum], /*is_start_of_statement*/ true,
/*is_start_of_basic_block*/ false, /*is_prologue_end*/ false,
@@ -731,6 +731,7 @@ void SymbolFileBreakpad::ParseLineTableAndSupportFiles(CompileUnit &cu,
}
if (next_addr)
finish_sequence();
+ data.line_table_up = std::make_unique<LineTable>(&cu, std::move(sequences));
data.support_files = map.translate(cu.GetPrimaryFile(), *m_files);
}
More information about the lldb-commits
mailing list