Commit c4267b7b authored by Pavel Labath's avatar Pavel Labath
Browse files

Revert "[lldb/PDB] Use the new line table constructor"

This reverts commit bb73210b due to
failures on the windows bot.
parent dc5777e5
Loading
Loading
Loading
Loading
+19 −19
Original line number Diff line number Diff line
@@ -1021,7 +1021,7 @@ uint32_t SymbolFileNativePDB::ResolveSymbolContext(
  return 0;
}

static void AppendLineEntryToSequence(LineSequence &sequence,
static void AppendLineEntryToSequence(LineTable &table, LineSequence &sequence,
                                      const CompilandIndexItem &cci,
                                      lldb::addr_t base_addr,
                                      uint32_t file_number,
@@ -1040,18 +1040,21 @@ static void AppendLineEntryToSequence(LineSequence &sequence,

  uint32_t lno = cur_info.getStartLine();

  LineTable::AppendLineEntryToSequence(&sequence, addr, lno, 0, file_number,
                                       is_statement, false, is_prologue,
                                       is_epilogue, false);
  table.AppendLineEntryToSequence(&sequence, addr, lno, 0, file_number,
                                  is_statement, false, is_prologue, is_epilogue,
                                  false);
}

static void TerminateLineSequence(const LineFragmentHeader &block,
static void TerminateLineSequence(LineTable &table,
                                  const LineFragmentHeader &block,
                                  lldb::addr_t base_addr, uint32_t file_number,
                                  uint32_t last_line, LineSequence &seq) {
                                  uint32_t last_line,
                                  std::unique_ptr<LineSequence> seq) {
  // The end is always a terminal entry, so insert it regardless.
  LineTable::AppendLineEntryToSequence(&seq, base_addr + block.CodeSize,
  table.AppendLineEntryToSequence(seq.get(), base_addr + block.CodeSize,
                                  last_line, 0, file_number, false, false,
                                  false, false, true);
  table.InsertSequence(seq.release());
}

bool SymbolFileNativePDB::ParseLineTable(CompileUnit &comp_unit) {
@@ -1065,11 +1068,11 @@ bool SymbolFileNativePDB::ParseLineTable(CompileUnit &comp_unit) {
  CompilandIndexItem *cci =
      m_index->compilands().GetCompiland(cu_id.asCompiland().modi);
  lldbassert(cci);
  auto line_table = std::make_unique<LineTable>(&comp_unit);

  // This is basically a copy of the .debug$S subsections from all original COFF
  // object files merged together with address relocations applied.  We are
  // looking for all DEBUG_S_LINES subsections.
  std::vector<std::unique_ptr<LineSequence>> sequences;
  for (const DebugSubsectionRecord &dssr :
       cci->m_debug_stream.getSubsectionsArray()) {
    if (dssr.kind() != DebugSubsectionKind::Lines)
@@ -1108,23 +1111,20 @@ bool SymbolFileNativePDB::ParseLineTable(CompileUnit &comp_unit) {
      lldbassert(fn_iter != cci->m_file_list.end());
      uint32_t file_index = std::distance(cci->m_file_list.begin(), fn_iter);

      std::unique_ptr<LineSequence> sequence =
          LineTable::CreateLineSequenceContainer();
      std::unique_ptr<LineSequence> sequence(
          line_table->CreateLineSequenceContainer());
      lldbassert(!group.LineNumbers.empty());

      for (const LineNumberEntry &entry : group.LineNumbers) {
        AppendLineEntryToSequence(*sequence, *cci, virtual_addr, file_index,
                                  *lfh, entry);
        AppendLineEntryToSequence(*line_table, *sequence, *cci, virtual_addr,
                                  file_index, *lfh, entry);
      }
      LineInfo last_line(group.LineNumbers.back().Flags);
      TerminateLineSequence(*lfh, virtual_addr, file_index,
                            last_line.getEndLine(), *sequence);
      sequences.push_back(std::move(sequence));
      TerminateLineSequence(*line_table, *lfh, virtual_addr, file_index,
                            last_line.getEndLine(), std::move(sequence));
    }
  }

  auto line_table =
      std::make_unique<LineTable>(&comp_unit, std::move(sequences));
  if (line_table->GetSize() == 0)
    return false;

+11 −13
Original line number Diff line number Diff line
@@ -1772,6 +1772,7 @@ bool SymbolFilePDB::ParseCompileUnitLineTable(CompileUnit &comp_unit,
  // to do a mapping so that we can hand out indices.
  llvm::DenseMap<uint32_t, uint32_t> index_map;
  BuildSupportFileIdToSupportFileIndexMap(*compiland_up, index_map);
  auto line_table = std::make_unique<LineTable>(&comp_unit);

  // Find contributions to `compiland` from all source and header files.
  auto files = m_session_up->getSourceFilesForCompiland(*compiland_up);
@@ -1780,10 +1781,9 @@ bool SymbolFilePDB::ParseCompileUnitLineTable(CompileUnit &comp_unit,

  // For each source and header file, create a LineSequence for contributions
  // to the compiland from that file, and add the sequence.
  std::vector<std::unique_ptr<LineSequence>> sequences;
  while (auto file = files->getNext()) {
    std::unique_ptr<LineSequence> sequence =
        LineTable::CreateLineSequenceContainer();
    std::unique_ptr<LineSequence> sequence(
        line_table->CreateLineSequenceContainer());
    auto lines = m_session_up->findLineNumbers(*compiland_up, *file);
    if (!lines)
      continue;
@@ -1812,12 +1812,12 @@ bool SymbolFilePDB::ParseCompileUnitLineTable(CompileUnit &comp_unit,
      // of the previous entry's address range if the current entry resulted in
      // a gap from the previous entry.
      if (is_gap && ShouldAddLine(match_line, prev_line, prev_length)) {
        LineTable::AppendLineEntryToSequence(
        line_table->AppendLineEntryToSequence(
            sequence.get(), prev_addr + prev_length, prev_line, 0,
            prev_source_idx, false, false, false, false, true);

        sequences.push_back(std::move(sequence));
        sequence = LineTable::CreateLineSequenceContainer();
        line_table->InsertSequence(sequence.release());
        sequence = line_table->CreateLineSequenceContainer();
      }

      if (ShouldAddLine(match_line, lno, length)) {
@@ -1836,7 +1836,7 @@ bool SymbolFilePDB::ParseCompileUnitLineTable(CompileUnit &comp_unit,
            is_epilogue = (addr == epilogue->getVirtualAddress());
        }

        LineTable::AppendLineEntryToSequence(sequence.get(), addr, lno, col,
        line_table->AppendLineEntryToSequence(sequence.get(), addr, lno, col,
                                              source_idx, is_statement, false,
                                              is_prologue, is_epilogue, false);
      }
@@ -1849,16 +1849,14 @@ bool SymbolFilePDB::ParseCompileUnitLineTable(CompileUnit &comp_unit,

    if (entry_count > 0 && ShouldAddLine(match_line, prev_line, prev_length)) {
      // The end is always a terminal entry, so insert it regardless.
      LineTable::AppendLineEntryToSequence(
      line_table->AppendLineEntryToSequence(
          sequence.get(), prev_addr + prev_length, prev_line, 0,
          prev_source_idx, false, false, false, false, true);
    }

    sequences.push_back(std::move(sequence));
    line_table->InsertSequence(sequence.get());
  }

  auto line_table =
      std::make_unique<LineTable>(&comp_unit, std::move(sequences));
  if (line_table->GetSize()) {
    comp_unit.SetLineTable(line_table.release());
    return true;