| //===- StringsAndChecksums.cpp --------------------------------------------===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/DebugInfo/CodeView/StringsAndChecksums.h" | |
| #include "llvm/ADT/STLExtras.h" | |
| #include "llvm/DebugInfo/CodeView/CodeView.h" | |
| #include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h" | |
| #include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h" | |
| #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h" | |
| #include "llvm/Support/Error.h" | |
| #include <cassert> | |
| using namespace llvm; | |
| using namespace llvm::codeview; | |
| StringsAndChecksumsRef::StringsAndChecksumsRef() = default; | |
| StringsAndChecksumsRef::StringsAndChecksumsRef( | |
| const DebugStringTableSubsectionRef &Strings) | |
| : Strings(&Strings) {} | |
| StringsAndChecksumsRef::StringsAndChecksumsRef( | |
| const DebugStringTableSubsectionRef &Strings, | |
| const DebugChecksumsSubsectionRef &Checksums) | |
| : Strings(&Strings), Checksums(&Checksums) {} | |
| void StringsAndChecksumsRef::initializeStrings( | |
| const DebugSubsectionRecord &SR) { | |
| assert(SR.kind() == DebugSubsectionKind::StringTable); | |
| assert(!Strings && "Found a string table even though we already have one!"); | |
| OwnedStrings = std::make_shared<DebugStringTableSubsectionRef>(); | |
| consumeError(OwnedStrings->initialize(SR.getRecordData())); | |
| Strings = OwnedStrings.get(); | |
| } | |
| void StringsAndChecksumsRef::reset() { | |
| resetStrings(); | |
| resetChecksums(); | |
| } | |
| void StringsAndChecksumsRef::resetStrings() { | |
| OwnedStrings.reset(); | |
| Strings = nullptr; | |
| } | |
| void StringsAndChecksumsRef::resetChecksums() { | |
| OwnedChecksums.reset(); | |
| Checksums = nullptr; | |
| } | |
| void StringsAndChecksumsRef::setStrings( | |
| const DebugStringTableSubsectionRef &StringsRef) { | |
| OwnedStrings = std::make_shared<DebugStringTableSubsectionRef>(); | |
| *OwnedStrings = StringsRef; | |
| Strings = OwnedStrings.get(); | |
| } | |
| void StringsAndChecksumsRef::setChecksums( | |
| const DebugChecksumsSubsectionRef &CS) { | |
| OwnedChecksums = std::make_shared<DebugChecksumsSubsectionRef>(); | |
| *OwnedChecksums = CS; | |
| Checksums = OwnedChecksums.get(); | |
| } | |
| void StringsAndChecksumsRef::initializeChecksums( | |
| const DebugSubsectionRecord &FCR) { | |
| assert(FCR.kind() == DebugSubsectionKind::FileChecksums); | |
| if (Checksums) | |
| return; | |
| OwnedChecksums = std::make_shared<DebugChecksumsSubsectionRef>(); | |
| consumeError(OwnedChecksums->initialize(FCR.getRecordData())); | |
| Checksums = OwnedChecksums.get(); | |
| } |