@@ -1021,7 +1021,7 @@ uint32_t SymbolFileNativePDB::ResolveSymbolContext(
1021
1021
return 0 ;
1022
1022
}
1023
1023
1024
- static void AppendLineEntryToSequence (LineSequence &sequence,
1024
+ static void AppendLineEntryToSequence (LineTable &table, LineSequence &sequence,
1025
1025
const CompilandIndexItem &cci,
1026
1026
lldb::addr_t base_addr,
1027
1027
uint32_t file_number,
@@ -1040,18 +1040,21 @@ static void AppendLineEntryToSequence(LineSequence &sequence,
1040
1040
1041
1041
uint32_t lno = cur_info.getStartLine ();
1042
1042
1043
- LineTable:: AppendLineEntryToSequence (&sequence, addr, lno, 0 , file_number,
1044
- is_statement, false , is_prologue,
1045
- is_epilogue, false );
1043
+ table. AppendLineEntryToSequence (&sequence, addr, lno, 0 , file_number,
1044
+ is_statement, false , is_prologue, is_epilogue ,
1045
+ false );
1046
1046
}
1047
1047
1048
- static void TerminateLineSequence (const LineFragmentHeader &block,
1048
+ static void TerminateLineSequence (LineTable &table,
1049
+ const LineFragmentHeader &block,
1049
1050
lldb::addr_t base_addr, uint32_t file_number,
1050
- uint32_t last_line, LineSequence &seq) {
1051
+ uint32_t last_line,
1052
+ std::unique_ptr<LineSequence> seq) {
1051
1053
// The end is always a terminal entry, so insert it regardless.
1052
- LineTable::AppendLineEntryToSequence (&seq, base_addr + block.CodeSize ,
1053
- last_line, 0 , file_number, false , false ,
1054
- false , false , true );
1054
+ table.AppendLineEntryToSequence (seq.get (), base_addr + block.CodeSize ,
1055
+ last_line, 0 , file_number, false , false ,
1056
+ false , false , true );
1057
+ table.InsertSequence (seq.release ());
1055
1058
}
1056
1059
1057
1060
bool SymbolFileNativePDB::ParseLineTable (CompileUnit &comp_unit) {
@@ -1065,11 +1068,11 @@ bool SymbolFileNativePDB::ParseLineTable(CompileUnit &comp_unit) {
1065
1068
CompilandIndexItem *cci =
1066
1069
m_index->compilands ().GetCompiland (cu_id.asCompiland ().modi );
1067
1070
lldbassert (cci);
1071
+ auto line_table = std::make_unique<LineTable>(&comp_unit);
1068
1072
1069
1073
// This is basically a copy of the .debug$S subsections from all original COFF
1070
1074
// object files merged together with address relocations applied. We are
1071
1075
// looking for all DEBUG_S_LINES subsections.
1072
- std::vector<std::unique_ptr<LineSequence>> sequences;
1073
1076
for (const DebugSubsectionRecord &dssr :
1074
1077
cci->m_debug_stream .getSubsectionsArray ()) {
1075
1078
if (dssr.kind () != DebugSubsectionKind::Lines)
@@ -1108,23 +1111,20 @@ bool SymbolFileNativePDB::ParseLineTable(CompileUnit &comp_unit) {
1108
1111
lldbassert (fn_iter != cci->m_file_list .end ());
1109
1112
uint32_t file_index = std::distance (cci->m_file_list .begin (), fn_iter);
1110
1113
1111
- std::unique_ptr<LineSequence> sequence =
1112
- LineTable:: CreateLineSequenceContainer ();
1114
+ std::unique_ptr<LineSequence> sequence (
1115
+ line_table-> CreateLineSequenceContainer () );
1113
1116
lldbassert (!group.LineNumbers .empty ());
1114
1117
1115
1118
for (const LineNumberEntry &entry : group.LineNumbers ) {
1116
- AppendLineEntryToSequence (*sequence, *cci, virtual_addr, file_index ,
1117
- *lfh, entry);
1119
+ AppendLineEntryToSequence (*line_table, * sequence, *cci, virtual_addr,
1120
+ file_index, *lfh, entry);
1118
1121
}
1119
1122
LineInfo last_line (group.LineNumbers .back ().Flags );
1120
- TerminateLineSequence (*lfh, virtual_addr, file_index,
1121
- last_line.getEndLine (), *sequence);
1122
- sequences.push_back (std::move (sequence));
1123
+ TerminateLineSequence (*line_table, *lfh, virtual_addr, file_index,
1124
+ last_line.getEndLine (), std::move (sequence));
1123
1125
}
1124
1126
}
1125
1127
1126
- auto line_table =
1127
- std::make_unique<LineTable>(&comp_unit, std::move (sequences));
1128
1128
if (line_table->GetSize () == 0 )
1129
1129
return false ;
1130
1130
0 commit comments