| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/developer/debug/zxdb/symbols/mock_line_table.h" |
| |
| namespace zxdb { |
| |
| MockLineTable::MockLineTable(FileNameVector files, RowVector rows) |
| : file_names_(std::move(files)), rows_(std::move(rows)) {} |
| |
| MockLineTable::~MockLineTable() = default; |
| |
| size_t MockLineTable::GetNumFileNames() const { return file_names_.size(); } |
| |
| const std::vector<llvm::DWARFDebugLine::Row>& MockLineTable::GetRows() const { return rows_; } |
| |
| std::optional<std::string> MockLineTable::GetFileNameByIndex(uint64_t file_id) const { |
| // File indices are 1-based! |
| if (file_id == 0 || file_id > file_names_.size()) |
| return std::nullopt; |
| return file_names_[file_id - 1]; |
| } |
| |
| llvm::DWARFDie MockLineTable::GetSubroutineForRow(const llvm::DWARFDebugLine::Row& row) const { |
| // For now, don't support subroutine lookup in the mock. |
| return llvm::DWARFDie(); |
| } |
| |
| // static |
| LineTable::Row MockLineTable::MakeStatementRow(uint64_t address, uint16_t file, uint32_t line) { |
| llvm::DWARFDebugLine::Row result = MakeNonStatementRow(address, file, line); |
| result.IsStmt = 1; |
| return result; |
| } |
| |
| // static |
| LineTable::Row MockLineTable::MakeNonStatementRow(uint64_t address, uint16_t file, uint32_t line) { |
| llvm::DWARFDebugLine::Row result; |
| result.Address = {address}; |
| result.Line = line; |
| result.Column = 0; |
| result.File = file; |
| result.Discriminator = 0; |
| result.Isa = 0; |
| result.IsStmt = 0; |
| result.BasicBlock = 0; |
| result.EndSequence = 0; |
| result.PrologueEnd = 0; |
| result.EpilogueBegin = 0; |
| |
| return result; |
| } |
| |
| // static |
| LineTable::Row MockLineTable::MakePrologueEndRow(uint64_t address, uint16_t file, uint32_t line) { |
| llvm::DWARFDebugLine::Row result = MakeStatementRow(address, file, line); |
| result.PrologueEnd = 1; |
| return result; |
| } |
| |
| // static |
| LineTable::Row MockLineTable::MakeEndSequenceRow(uint64_t address, uint16_t file, uint32_t line) { |
| llvm::DWARFDebugLine::Row result = MakeStatementRow(address, file, line); |
| result.EndSequence = 1; |
| return result; |
| } |
| |
| } // namespace zxdb |