brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 81aa44f Raw
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