1*a8cfc29cSZachary Turner //===- StringsAndChecksums.cpp ----------------------------------*- C++ -*-===//
2*a8cfc29cSZachary Turner //
3*a8cfc29cSZachary Turner //                     The LLVM Compiler Infrastructure
4*a8cfc29cSZachary Turner //
5*a8cfc29cSZachary Turner // This file is distributed under the University of Illinois Open Source
6*a8cfc29cSZachary Turner // License. See LICENSE.TXT for details.
7*a8cfc29cSZachary Turner //
8*a8cfc29cSZachary Turner //===----------------------------------------------------------------------===//
9*a8cfc29cSZachary Turner 
10*a8cfc29cSZachary Turner #include "llvm/DebugInfo/CodeView/StringsAndChecksums.h"
11*a8cfc29cSZachary Turner #include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"
12*a8cfc29cSZachary Turner #include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h"
13*a8cfc29cSZachary Turner #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
14*a8cfc29cSZachary Turner 
15*a8cfc29cSZachary Turner using namespace llvm;
16*a8cfc29cSZachary Turner using namespace llvm::codeview;
17*a8cfc29cSZachary Turner 
18*a8cfc29cSZachary Turner StringsAndChecksumsRef::StringsAndChecksumsRef() {}
19*a8cfc29cSZachary Turner 
20*a8cfc29cSZachary Turner StringsAndChecksumsRef::StringsAndChecksumsRef(
21*a8cfc29cSZachary Turner     const DebugStringTableSubsectionRef &Strings)
22*a8cfc29cSZachary Turner     : Strings(&Strings) {}
23*a8cfc29cSZachary Turner 
24*a8cfc29cSZachary Turner StringsAndChecksumsRef::StringsAndChecksumsRef(
25*a8cfc29cSZachary Turner     const DebugStringTableSubsectionRef &Strings,
26*a8cfc29cSZachary Turner     const DebugChecksumsSubsectionRef &Checksums)
27*a8cfc29cSZachary Turner     : Strings(&Strings), Checksums(&Checksums) {}
28*a8cfc29cSZachary Turner 
29*a8cfc29cSZachary Turner void StringsAndChecksumsRef::initializeStrings(
30*a8cfc29cSZachary Turner     const DebugSubsectionRecord &SR) {
31*a8cfc29cSZachary Turner   assert(SR.kind() == DebugSubsectionKind::StringTable);
32*a8cfc29cSZachary Turner   assert(!Strings && "Found a string table even though we already have one!");
33*a8cfc29cSZachary Turner 
34*a8cfc29cSZachary Turner   OwnedStrings = llvm::make_unique<DebugStringTableSubsectionRef>();
35*a8cfc29cSZachary Turner   consumeError(OwnedStrings->initialize(SR.getRecordData()));
36*a8cfc29cSZachary Turner   Strings = OwnedStrings.get();
37*a8cfc29cSZachary Turner }
38*a8cfc29cSZachary Turner 
39*a8cfc29cSZachary Turner void StringsAndChecksumsRef::initializeChecksums(
40*a8cfc29cSZachary Turner     const DebugSubsectionRecord &FCR) {
41*a8cfc29cSZachary Turner   assert(FCR.kind() == DebugSubsectionKind::FileChecksums);
42*a8cfc29cSZachary Turner   if (Checksums)
43*a8cfc29cSZachary Turner     return;
44*a8cfc29cSZachary Turner 
45*a8cfc29cSZachary Turner   OwnedChecksums = llvm::make_unique<DebugChecksumsSubsectionRef>();
46*a8cfc29cSZachary Turner   consumeError(OwnedChecksums->initialize(FCR.getRecordData()));
47*a8cfc29cSZachary Turner   Checksums = OwnedChecksums.get();
48*a8cfc29cSZachary Turner }
49