LCOV - code coverage report
Current view: top level - lib/DebugInfo/CodeView - SymbolRecordMapping.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 179 218 82.1 %
Date: 2018-06-17 00:07:59 Functions: 35 42 83.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- SymbolRecordMapping.cpp -----------------------------------*- C++-*-===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : 
      10             : #include "llvm/DebugInfo/CodeView/SymbolRecordMapping.h"
      11             : 
      12             : using namespace llvm;
      13             : using namespace llvm::codeview;
      14             : 
      15             : #define error(X)                                                               \
      16             :   if (auto EC = X)                                                             \
      17             :     return EC;
      18             : 
      19             : namespace {
      20             : struct MapGap {
      21           7 :   Error operator()(CodeViewRecordIO &IO, LocalVariableAddrGap &Gap) const {
      22          14 :     error(IO.mapInteger(Gap.GapStartOffset));
      23          14 :     error(IO.mapInteger(Gap.Range));
      24             :     return Error::success();
      25             :   }
      26             : };
      27             : }
      28             : 
      29         209 : static Error mapLocalVariableAddrRange(CodeViewRecordIO &IO,
      30             :                                        LocalVariableAddrRange &Range) {
      31         418 :   error(IO.mapInteger(Range.OffsetStart));
      32         418 :   error(IO.mapInteger(Range.ISectStart));
      33         418 :   error(IO.mapInteger(Range.Range));
      34             :   return Error::success();
      35             : }
      36             : 
      37        3290 : Error SymbolRecordMapping::visitSymbolBegin(CVSymbol &Record) {
      38        9870 :   error(IO.beginRecord(MaxRecordLength - sizeof(RecordPrefix)));
      39             :   return Error::success();
      40             : }
      41             : 
      42        3290 : Error SymbolRecordMapping::visitSymbolEnd(CVSymbol &Record) {
      43        9870 :   error(IO.padToAlignment(alignOf(Container)));
      44        6580 :   error(IO.endRecord());
      45             :   return Error::success();
      46             : }
      47             : 
      48          18 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, BlockSym &Block) {
      49             : 
      50          36 :   error(IO.mapInteger(Block.Parent));
      51          36 :   error(IO.mapInteger(Block.End));
      52          36 :   error(IO.mapInteger(Block.CodeSize));
      53          36 :   error(IO.mapInteger(Block.CodeOffset));
      54          36 :   error(IO.mapInteger(Block.Segment));
      55          36 :   error(IO.mapStringZ(Block.Name));
      56             : 
      57             :   return Error::success();
      58             : }
      59             : 
      60           4 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, Thunk32Sym &Thunk) {
      61             : 
      62           8 :   error(IO.mapInteger(Thunk.Parent));
      63           8 :   error(IO.mapInteger(Thunk.End));
      64           8 :   error(IO.mapInteger(Thunk.Next));
      65           8 :   error(IO.mapInteger(Thunk.Offset));
      66           8 :   error(IO.mapInteger(Thunk.Segment));
      67           8 :   error(IO.mapInteger(Thunk.Length));
      68           8 :   error(IO.mapEnum(Thunk.Thunk));
      69           8 :   error(IO.mapStringZ(Thunk.Name));
      70           8 :   error(IO.mapByteVectorTail(Thunk.VariantData));
      71             : 
      72             :   return Error::success();
      73             : }
      74             : 
      75           6 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
      76             :                                             TrampolineSym &Tramp) {
      77             : 
      78          12 :   error(IO.mapEnum(Tramp.Type));
      79          12 :   error(IO.mapInteger(Tramp.Size));
      80          12 :   error(IO.mapInteger(Tramp.ThunkOffset));
      81          12 :   error(IO.mapInteger(Tramp.TargetOffset));
      82          12 :   error(IO.mapInteger(Tramp.ThunkSection));
      83          12 :   error(IO.mapInteger(Tramp.TargetSection));
      84             : 
      85             :   return Error::success();
      86             : }
      87             : 
      88         243 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
      89             :                                             SectionSym &Section) {
      90         243 :   uint8_t Padding = 0;
      91             : 
      92         486 :   error(IO.mapInteger(Section.SectionNumber));
      93         486 :   error(IO.mapInteger(Section.Alignment));
      94         486 :   error(IO.mapInteger(Padding));
      95         486 :   error(IO.mapInteger(Section.Rva));
      96         486 :   error(IO.mapInteger(Section.Length));
      97         486 :   error(IO.mapInteger(Section.Characteristics));
      98         486 :   error(IO.mapStringZ(Section.Name));
      99             : 
     100             :   return Error::success();
     101             : }
     102             : 
     103          30 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     104             :                                             CoffGroupSym &CoffGroup) {
     105             : 
     106          60 :   error(IO.mapInteger(CoffGroup.Size));
     107          60 :   error(IO.mapInteger(CoffGroup.Characteristics));
     108          60 :   error(IO.mapInteger(CoffGroup.Offset));
     109          60 :   error(IO.mapInteger(CoffGroup.Segment));
     110          60 :   error(IO.mapStringZ(CoffGroup.Name));
     111             : 
     112             :   return Error::success();
     113             : }
     114             : 
     115           9 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     116             :                                             BPRelativeSym &BPRel) {
     117             : 
     118          18 :   error(IO.mapInteger(BPRel.Offset));
     119          18 :   error(IO.mapInteger(BPRel.Type));
     120          18 :   error(IO.mapStringZ(BPRel.Name));
     121             : 
     122             :   return Error::success();
     123             : }
     124             : 
     125          68 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     126             :                                             BuildInfoSym &BuildInfo) {
     127             : 
     128         136 :   error(IO.mapInteger(BuildInfo.BuildId));
     129             : 
     130             :   return Error::success();
     131             : }
     132             : 
     133           0 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     134             :                                             CallSiteInfoSym &CallSiteInfo) {
     135           0 :   uint16_t Padding = 0;
     136             : 
     137           0 :   error(IO.mapInteger(CallSiteInfo.CodeOffset));
     138           0 :   error(IO.mapInteger(CallSiteInfo.Segment));
     139           0 :   error(IO.mapInteger(Padding));
     140           0 :   error(IO.mapInteger(CallSiteInfo.Type));
     141             : 
     142             :   return Error::success();
     143             : }
     144             : 
     145          90 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     146             :                                             EnvBlockSym &EnvBlock) {
     147             : 
     148          90 :   uint8_t Reserved = 0;
     149         180 :   error(IO.mapInteger(Reserved));
     150         180 :   error(IO.mapStringZVectorZ(EnvBlock.Fields));
     151             : 
     152             :   return Error::success();
     153             : }
     154             : 
     155           6 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     156             :                                             FileStaticSym &FileStatic) {
     157             : 
     158          12 :   error(IO.mapInteger(FileStatic.Index));
     159          12 :   error(IO.mapInteger(FileStatic.ModFilenameOffset));
     160          12 :   error(IO.mapEnum(FileStatic.Flags));
     161          12 :   error(IO.mapStringZ(FileStatic.Name));
     162             : 
     163             :   return Error::success();
     164             : }
     165             : 
     166           0 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, ExportSym &Export) {
     167             : 
     168           0 :   error(IO.mapInteger(Export.Ordinal));
     169           0 :   error(IO.mapEnum(Export.Flags));
     170           0 :   error(IO.mapStringZ(Export.Name));
     171             : 
     172             :   return Error::success();
     173             : }
     174             : 
     175           0 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     176             :                                             Compile2Sym &Compile2) {
     177             : 
     178           0 :   error(IO.mapEnum(Compile2.Flags));
     179           0 :   error(IO.mapEnum(Compile2.Machine));
     180           0 :   error(IO.mapInteger(Compile2.VersionFrontendMajor));
     181           0 :   error(IO.mapInteger(Compile2.VersionFrontendMinor));
     182           0 :   error(IO.mapInteger(Compile2.VersionFrontendBuild));
     183           0 :   error(IO.mapInteger(Compile2.VersionBackendMajor));
     184           0 :   error(IO.mapInteger(Compile2.VersionBackendMinor));
     185           0 :   error(IO.mapInteger(Compile2.VersionBackendBuild));
     186           0 :   error(IO.mapStringZ(Compile2.Version));
     187           0 :   error(IO.mapStringZVectorZ(Compile2.ExtraStrings));
     188             : 
     189             :   return Error::success();
     190             : }
     191             : 
     192         233 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     193             :                                             Compile3Sym &Compile3) {
     194             : 
     195         466 :   error(IO.mapEnum(Compile3.Flags));
     196         466 :   error(IO.mapEnum(Compile3.Machine));
     197         466 :   error(IO.mapInteger(Compile3.VersionFrontendMajor));
     198         466 :   error(IO.mapInteger(Compile3.VersionFrontendMinor));
     199         466 :   error(IO.mapInteger(Compile3.VersionFrontendBuild));
     200         466 :   error(IO.mapInteger(Compile3.VersionFrontendQFE));
     201         466 :   error(IO.mapInteger(Compile3.VersionBackendMajor));
     202         466 :   error(IO.mapInteger(Compile3.VersionBackendMinor));
     203         466 :   error(IO.mapInteger(Compile3.VersionBackendBuild));
     204         466 :   error(IO.mapInteger(Compile3.VersionBackendQFE));
     205         466 :   error(IO.mapStringZ(Compile3.Version));
     206             : 
     207             :   return Error::success();
     208             : }
     209             : 
     210           0 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     211             :                                             ConstantSym &Constant) {
     212             : 
     213           0 :   error(IO.mapInteger(Constant.Type));
     214           0 :   error(IO.mapEncodedInteger(Constant.Value));
     215           0 :   error(IO.mapStringZ(Constant.Name));
     216             : 
     217             :   return Error::success();
     218             : }
     219             : 
     220          91 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, DataSym &Data) {
     221             : 
     222         182 :   error(IO.mapInteger(Data.Type));
     223         182 :   error(IO.mapInteger(Data.DataOffset));
     224         182 :   error(IO.mapInteger(Data.Segment));
     225         182 :   error(IO.mapStringZ(Data.Name));
     226             : 
     227             :   return Error::success();
     228             : }
     229             : 
     230           1 : Error SymbolRecordMapping::visitKnownRecord(
     231             :     CVSymbol &CVR, DefRangeFramePointerRelSym &DefRangeFramePointerRel) {
     232             : 
     233           2 :   error(IO.mapInteger(DefRangeFramePointerRel.Offset));
     234           2 :   error(mapLocalVariableAddrRange(IO, DefRangeFramePointerRel.Range));
     235           2 :   error(IO.mapVectorTail(DefRangeFramePointerRel.Gaps, MapGap()));
     236             : 
     237             :   return Error::success();
     238             : }
     239             : 
     240           8 : Error SymbolRecordMapping::visitKnownRecord(
     241             :     CVSymbol &CVR,
     242             :     DefRangeFramePointerRelFullScopeSym &DefRangeFramePointerRelFullScope) {
     243             : 
     244          16 :   error(IO.mapInteger(DefRangeFramePointerRelFullScope.Offset));
     245             : 
     246             :   return Error::success();
     247             : }
     248             : 
     249         148 : Error SymbolRecordMapping::visitKnownRecord(
     250             :     CVSymbol &CVR, DefRangeRegisterRelSym &DefRangeRegisterRel) {
     251             : 
     252         296 :   error(IO.mapObject(DefRangeRegisterRel.Hdr.Register));
     253         296 :   error(IO.mapObject(DefRangeRegisterRel.Hdr.Flags));
     254         296 :   error(IO.mapObject(DefRangeRegisterRel.Hdr.BasePointerOffset));
     255         296 :   error(mapLocalVariableAddrRange(IO, DefRangeRegisterRel.Range));
     256         296 :   error(IO.mapVectorTail(DefRangeRegisterRel.Gaps, MapGap()));
     257             : 
     258             :   return Error::success();
     259             : }
     260             : 
     261          53 : Error SymbolRecordMapping::visitKnownRecord(
     262             :     CVSymbol &CVR, DefRangeRegisterSym &DefRangeRegister) {
     263             : 
     264         106 :   error(IO.mapObject(DefRangeRegister.Hdr.Register));
     265         106 :   error(IO.mapObject(DefRangeRegister.Hdr.MayHaveNoName));
     266         106 :   error(mapLocalVariableAddrRange(IO, DefRangeRegister.Range));
     267         106 :   error(IO.mapVectorTail(DefRangeRegister.Gaps, MapGap()));
     268             : 
     269             :   return Error::success();
     270             : }
     271             : 
     272           7 : Error SymbolRecordMapping::visitKnownRecord(
     273             :     CVSymbol &CVR, DefRangeSubfieldRegisterSym &DefRangeSubfieldRegister) {
     274             : 
     275          14 :   error(IO.mapObject(DefRangeSubfieldRegister.Hdr.Register));
     276          14 :   error(IO.mapObject(DefRangeSubfieldRegister.Hdr.MayHaveNoName));
     277          14 :   error(IO.mapObject(DefRangeSubfieldRegister.Hdr.OffsetInParent));
     278          14 :   error(mapLocalVariableAddrRange(IO, DefRangeSubfieldRegister.Range));
     279          14 :   error(IO.mapVectorTail(DefRangeSubfieldRegister.Gaps, MapGap()));
     280             : 
     281             :   return Error::success();
     282             : }
     283             : 
     284           0 : Error SymbolRecordMapping::visitKnownRecord(
     285             :     CVSymbol &CVR, DefRangeSubfieldSym &DefRangeSubfield) {
     286             : 
     287           0 :   error(IO.mapInteger(DefRangeSubfield.Program));
     288           0 :   error(IO.mapInteger(DefRangeSubfield.OffsetInParent));
     289           0 :   error(mapLocalVariableAddrRange(IO, DefRangeSubfield.Range));
     290           0 :   error(IO.mapVectorTail(DefRangeSubfield.Gaps, MapGap()));
     291             : 
     292             :   return Error::success();
     293             : }
     294             : 
     295           0 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     296             :                                             DefRangeSym &DefRange) {
     297             : 
     298           0 :   error(IO.mapInteger(DefRange.Program));
     299           0 :   error(mapLocalVariableAddrRange(IO, DefRange.Range));
     300           0 :   error(IO.mapVectorTail(DefRange.Gaps, MapGap()));
     301             : 
     302             :   return Error::success();
     303             : }
     304             : 
     305           0 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     306             :                                             FrameCookieSym &FrameCookie) {
     307             : 
     308           0 :   error(IO.mapInteger(FrameCookie.CodeOffset));
     309           0 :   error(IO.mapInteger(FrameCookie.Register));
     310           0 :   error(IO.mapEnum(FrameCookie.CookieKind));
     311           0 :   error(IO.mapInteger(FrameCookie.Flags));
     312             : 
     313             :   return Error::success();
     314             : }
     315             : 
     316         113 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     317             :                                             FrameProcSym &FrameProc) {
     318         226 :   error(IO.mapInteger(FrameProc.TotalFrameBytes));
     319         226 :   error(IO.mapInteger(FrameProc.PaddingFrameBytes));
     320         226 :   error(IO.mapInteger(FrameProc.OffsetToPadding));
     321         226 :   error(IO.mapInteger(FrameProc.BytesOfCalleeSavedRegisters));
     322         226 :   error(IO.mapInteger(FrameProc.OffsetOfExceptionHandler));
     323         226 :   error(IO.mapInteger(FrameProc.SectionIdOfExceptionHandler));
     324         226 :   error(IO.mapEnum(FrameProc.Flags));
     325             : 
     326             :   return Error::success();
     327             : }
     328             : 
     329           2 : Error SymbolRecordMapping::visitKnownRecord(
     330             :     CVSymbol &CVR, HeapAllocationSiteSym &HeapAllocSite) {
     331             : 
     332           4 :   error(IO.mapInteger(HeapAllocSite.CodeOffset));
     333           4 :   error(IO.mapInteger(HeapAllocSite.Segment));
     334           4 :   error(IO.mapInteger(HeapAllocSite.CallInstructionSize));
     335           4 :   error(IO.mapInteger(HeapAllocSite.Type));
     336             : 
     337             :   return Error::success();
     338             : }
     339             : 
     340          31 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     341             :                                             InlineSiteSym &InlineSite) {
     342             : 
     343          62 :   error(IO.mapInteger(InlineSite.Parent));
     344          62 :   error(IO.mapInteger(InlineSite.End));
     345          62 :   error(IO.mapInteger(InlineSite.Inlinee));
     346          62 :   error(IO.mapByteVectorTail(InlineSite.AnnotationData));
     347             : 
     348             :   return Error::success();
     349             : }
     350             : 
     351           1 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     352             :                                             RegisterSym &Register) {
     353             : 
     354           2 :   error(IO.mapInteger(Register.Index));
     355           2 :   error(IO.mapEnum(Register.Register));
     356           2 :   error(IO.mapStringZ(Register.Name));
     357             : 
     358             :   return Error::success();
     359             : }
     360             : 
     361         399 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     362             :                                             PublicSym32 &Public) {
     363             : 
     364         798 :   error(IO.mapEnum(Public.Flags));
     365         798 :   error(IO.mapInteger(Public.Offset));
     366         798 :   error(IO.mapInteger(Public.Segment));
     367         798 :   error(IO.mapStringZ(Public.Name));
     368             : 
     369             :   return Error::success();
     370             : }
     371             : 
     372          72 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     373             :                                             ProcRefSym &ProcRef) {
     374             : 
     375         144 :   error(IO.mapInteger(ProcRef.SumName));
     376         144 :   error(IO.mapInteger(ProcRef.SymOffset));
     377         144 :   error(IO.mapInteger(ProcRef.Module));
     378         144 :   error(IO.mapStringZ(ProcRef.Name));
     379             : 
     380             :   return Error::success();
     381             : }
     382             : 
     383           1 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, LabelSym &Label) {
     384             : 
     385           2 :   error(IO.mapInteger(Label.CodeOffset));
     386           2 :   error(IO.mapInteger(Label.Segment));
     387           2 :   error(IO.mapEnum(Label.Flags));
     388           2 :   error(IO.mapStringZ(Label.Name));
     389             : 
     390             :   return Error::success();
     391             : }
     392             : 
     393         186 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, LocalSym &Local) {
     394         372 :   error(IO.mapInteger(Local.Type));
     395         372 :   error(IO.mapEnum(Local.Flags));
     396         372 :   error(IO.mapStringZ(Local.Name));
     397             : 
     398             :   return Error::success();
     399             : }
     400             : 
     401         163 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     402             :                                             ObjNameSym &ObjName) {
     403             : 
     404         326 :   error(IO.mapInteger(ObjName.Signature));
     405         326 :   error(IO.mapStringZ(ObjName.Name));
     406             : 
     407             :   return Error::success();
     408             : }
     409             : 
     410         248 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, ProcSym &Proc) {
     411         496 :   error(IO.mapInteger(Proc.Parent));
     412         496 :   error(IO.mapInteger(Proc.End));
     413         496 :   error(IO.mapInteger(Proc.Next));
     414         496 :   error(IO.mapInteger(Proc.CodeSize));
     415         496 :   error(IO.mapInteger(Proc.DbgStart));
     416         496 :   error(IO.mapInteger(Proc.DbgEnd));
     417         496 :   error(IO.mapInteger(Proc.FunctionType));
     418         496 :   error(IO.mapInteger(Proc.CodeOffset));
     419         496 :   error(IO.mapInteger(Proc.Segment));
     420         496 :   error(IO.mapEnum(Proc.Flags));
     421         496 :   error(IO.mapStringZ(Proc.Name));
     422             :   return Error::success();
     423             : }
     424             : 
     425         299 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     426             :                                             ScopeEndSym &ScopeEnd) {
     427         299 :   return Error::success();
     428             : }
     429             : 
     430          15 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, CallerSym &Caller) {
     431          52 :   error(IO.mapVectorN<uint32_t>(
     432             :       Caller.Indices,
     433             :       [](CodeViewRecordIO &IO, TypeIndex &N) { return IO.mapInteger(N); }));
     434             :   return Error::success();
     435             : }
     436             : 
     437          47 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     438             :                                             RegRelativeSym &RegRel) {
     439             : 
     440          94 :   error(IO.mapInteger(RegRel.Offset));
     441          94 :   error(IO.mapInteger(RegRel.Type));
     442          94 :   error(IO.mapEnum(RegRel.Register));
     443          94 :   error(IO.mapStringZ(RegRel.Name));
     444             : 
     445             :   return Error::success();
     446             : }
     447             : 
     448           2 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     449             :                                             ThreadLocalDataSym &Data) {
     450             : 
     451           4 :   error(IO.mapInteger(Data.Type));
     452           4 :   error(IO.mapInteger(Data.DataOffset));
     453           4 :   error(IO.mapInteger(Data.Segment));
     454           4 :   error(IO.mapStringZ(Data.Name));
     455             : 
     456             :   return Error::success();
     457             : }
     458             : 
     459         696 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, UDTSym &UDT) {
     460             : 
     461        1392 :   error(IO.mapInteger(UDT.Type));
     462        1392 :   error(IO.mapStringZ(UDT.Name));
     463             : 
     464             :   return Error::success();
     465             : }

Generated by: LCOV version 1.13