80 lines · cpp
1//===- StringsAndChecksums.cpp --------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/DebugInfo/CodeView/StringsAndChecksums.h"10#include "llvm/DebugInfo/CodeView/CodeView.h"11#include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"12#include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h"13#include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"14#include "llvm/Support/Error.h"15#include <cassert>16 17using namespace llvm;18using namespace llvm::codeview;19 20StringsAndChecksumsRef::StringsAndChecksumsRef() = default;21 22StringsAndChecksumsRef::StringsAndChecksumsRef(23 const DebugStringTableSubsectionRef &Strings)24 : Strings(&Strings) {}25 26StringsAndChecksumsRef::StringsAndChecksumsRef(27 const DebugStringTableSubsectionRef &Strings,28 const DebugChecksumsSubsectionRef &Checksums)29 : Strings(&Strings), Checksums(&Checksums) {}30 31void StringsAndChecksumsRef::initializeStrings(32 const DebugSubsectionRecord &SR) {33 assert(SR.kind() == DebugSubsectionKind::StringTable);34 assert(!Strings && "Found a string table even though we already have one!");35 36 OwnedStrings = std::make_shared<DebugStringTableSubsectionRef>();37 consumeError(OwnedStrings->initialize(SR.getRecordData()));38 Strings = OwnedStrings.get();39}40 41void StringsAndChecksumsRef::reset() {42 resetStrings();43 resetChecksums();44}45 46void StringsAndChecksumsRef::resetStrings() {47 OwnedStrings.reset();48 Strings = nullptr;49}50 51void StringsAndChecksumsRef::resetChecksums() {52 OwnedChecksums.reset();53 Checksums = nullptr;54}55 56void StringsAndChecksumsRef::setStrings(57 const DebugStringTableSubsectionRef &StringsRef) {58 OwnedStrings = std::make_shared<DebugStringTableSubsectionRef>();59 *OwnedStrings = StringsRef;60 Strings = OwnedStrings.get();61}62 63void StringsAndChecksumsRef::setChecksums(64 const DebugChecksumsSubsectionRef &CS) {65 OwnedChecksums = std::make_shared<DebugChecksumsSubsectionRef>();66 *OwnedChecksums = CS;67 Checksums = OwnedChecksums.get();68}69 70void StringsAndChecksumsRef::initializeChecksums(71 const DebugSubsectionRecord &FCR) {72 assert(FCR.kind() == DebugSubsectionKind::FileChecksums);73 if (Checksums)74 return;75 76 OwnedChecksums = std::make_shared<DebugChecksumsSubsectionRef>();77 consumeError(OwnedChecksums->initialize(FCR.getRecordData()));78 Checksums = OwnedChecksums.get();79}80