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-02-21 06:32:55 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           6 :   Error operator()(CodeViewRecordIO &IO, LocalVariableAddrGap &Gap) const {
      22          12 :     error(IO.mapInteger(Gap.GapStartOffset));
      23          12 :     error(IO.mapInteger(Gap.Range));
      24             :     return Error::success();
      25             :   }
      26             : };
      27             : }
      28             : 
      29         165 : static Error mapLocalVariableAddrRange(CodeViewRecordIO &IO,
      30             :                                        LocalVariableAddrRange &Range) {
      31         330 :   error(IO.mapInteger(Range.OffsetStart));
      32         330 :   error(IO.mapInteger(Range.ISectStart));
      33         330 :   error(IO.mapInteger(Range.Range));
      34             :   return Error::success();
      35             : }
      36             : 
      37        2703 : Error SymbolRecordMapping::visitSymbolBegin(CVSymbol &Record) {
      38        8109 :   error(IO.beginRecord(MaxRecordLength - sizeof(RecordPrefix)));
      39             :   return Error::success();
      40             : }
      41             : 
      42        2703 : Error SymbolRecordMapping::visitSymbolEnd(CVSymbol &Record) {
      43        8109 :   error(IO.padToAlignment(alignOf(Container)));
      44        5406 :   error(IO.endRecord());
      45             :   return Error::success();
      46             : }
      47             : 
      48           8 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, BlockSym &Block) {
      49             : 
      50          16 :   error(IO.mapInteger(Block.Parent));
      51          16 :   error(IO.mapInteger(Block.End));
      52          16 :   error(IO.mapInteger(Block.CodeSize));
      53          16 :   error(IO.mapInteger(Block.CodeOffset));
      54          16 :   error(IO.mapInteger(Block.Segment));
      55          16 :   error(IO.mapStringZ(Block.Name));
      56             : 
      57             :   return Error::success();
      58             : }
      59             : 
      60           2 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, Thunk32Sym &Thunk) {
      61             : 
      62           4 :   error(IO.mapInteger(Thunk.Parent));
      63           4 :   error(IO.mapInteger(Thunk.End));
      64           4 :   error(IO.mapInteger(Thunk.Next));
      65           4 :   error(IO.mapInteger(Thunk.Offset));
      66           4 :   error(IO.mapInteger(Thunk.Segment));
      67           4 :   error(IO.mapInteger(Thunk.Length));
      68           4 :   error(IO.mapEnum(Thunk.Thunk));
      69           4 :   error(IO.mapStringZ(Thunk.Name));
      70           4 :   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         258 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
      89             :                                             SectionSym &Section) {
      90         258 :   uint8_t Padding = 0;
      91             : 
      92         516 :   error(IO.mapInteger(Section.SectionNumber));
      93         516 :   error(IO.mapInteger(Section.Alignment));
      94         516 :   error(IO.mapInteger(Padding));
      95         516 :   error(IO.mapInteger(Section.Rva));
      96         516 :   error(IO.mapInteger(Section.Length));
      97         516 :   error(IO.mapInteger(Section.Characteristics));
      98         516 :   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          64 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     126             :                                             BuildInfoSym &BuildInfo) {
     127             : 
     128         128 :   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          80 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     146             :                                             EnvBlockSym &EnvBlock) {
     147             : 
     148          80 :   uint8_t Reserved = 0;
     149         160 :   error(IO.mapInteger(Reserved));
     150         160 :   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         210 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     193             :                                             Compile3Sym &Compile3) {
     194             : 
     195         420 :   error(IO.mapEnum(Compile3.Flags));
     196         420 :   error(IO.mapEnum(Compile3.Machine));
     197         420 :   error(IO.mapInteger(Compile3.VersionFrontendMajor));
     198         420 :   error(IO.mapInteger(Compile3.VersionFrontendMinor));
     199         420 :   error(IO.mapInteger(Compile3.VersionFrontendBuild));
     200         420 :   error(IO.mapInteger(Compile3.VersionFrontendQFE));
     201         420 :   error(IO.mapInteger(Compile3.VersionBackendMajor));
     202         420 :   error(IO.mapInteger(Compile3.VersionBackendMinor));
     203         420 :   error(IO.mapInteger(Compile3.VersionBackendBuild));
     204         420 :   error(IO.mapInteger(Compile3.VersionBackendQFE));
     205         420 :   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          87 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, DataSym &Data) {
     221             : 
     222         174 :   error(IO.mapInteger(Data.Type));
     223         174 :   error(IO.mapInteger(Data.DataOffset));
     224         174 :   error(IO.mapInteger(Data.Segment));
     225         174 :   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         108 : Error SymbolRecordMapping::visitKnownRecord(
     250             :     CVSymbol &CVR, DefRangeRegisterRelSym &DefRangeRegisterRel) {
     251             : 
     252         216 :   error(IO.mapObject(DefRangeRegisterRel.Hdr.Register));
     253         216 :   error(IO.mapObject(DefRangeRegisterRel.Hdr.Flags));
     254         216 :   error(IO.mapObject(DefRangeRegisterRel.Hdr.BasePointerOffset));
     255         216 :   error(mapLocalVariableAddrRange(IO, DefRangeRegisterRel.Range));
     256         216 :   error(IO.mapVectorTail(DefRangeRegisterRel.Gaps, MapGap()));
     257             : 
     258             :   return Error::success();
     259             : }
     260             : 
     261          51 : Error SymbolRecordMapping::visitKnownRecord(
     262             :     CVSymbol &CVR, DefRangeRegisterSym &DefRangeRegister) {
     263             : 
     264         102 :   error(IO.mapObject(DefRangeRegister.Hdr.Register));
     265         102 :   error(IO.mapObject(DefRangeRegister.Hdr.MayHaveNoName));
     266         102 :   error(mapLocalVariableAddrRange(IO, DefRangeRegister.Range));
     267         102 :   error(IO.mapVectorTail(DefRangeRegister.Gaps, MapGap()));
     268             : 
     269             :   return Error::success();
     270             : }
     271             : 
     272           5 : Error SymbolRecordMapping::visitKnownRecord(
     273             :     CVSymbol &CVR, DefRangeSubfieldRegisterSym &DefRangeSubfieldRegister) {
     274             : 
     275          10 :   error(IO.mapObject(DefRangeSubfieldRegister.Hdr.Register));
     276          10 :   error(IO.mapObject(DefRangeSubfieldRegister.Hdr.MayHaveNoName));
     277          10 :   error(IO.mapObject(DefRangeSubfieldRegister.Hdr.OffsetInParent));
     278          10 :   error(mapLocalVariableAddrRange(IO, DefRangeSubfieldRegister.Range));
     279          10 :   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         111 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     317             :                                             FrameProcSym &FrameProc) {
     318         222 :   error(IO.mapInteger(FrameProc.TotalFrameBytes));
     319         222 :   error(IO.mapInteger(FrameProc.PaddingFrameBytes));
     320         222 :   error(IO.mapInteger(FrameProc.OffsetToPadding));
     321         222 :   error(IO.mapInteger(FrameProc.BytesOfCalleeSavedRegisters));
     322         222 :   error(IO.mapInteger(FrameProc.OffsetOfExceptionHandler));
     323         222 :   error(IO.mapInteger(FrameProc.SectionIdOfExceptionHandler));
     324         222 :   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          30 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     341             :                                             InlineSiteSym &InlineSite) {
     342             : 
     343          60 :   error(IO.mapInteger(InlineSite.Parent));
     344          60 :   error(IO.mapInteger(InlineSite.End));
     345          60 :   error(IO.mapInteger(InlineSite.Inlinee));
     346          60 :   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         347 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     362             :                                             PublicSym32 &Public) {
     363             : 
     364         694 :   error(IO.mapEnum(Public.Flags));
     365         694 :   error(IO.mapInteger(Public.Offset));
     366         694 :   error(IO.mapInteger(Public.Segment));
     367         694 :   error(IO.mapStringZ(Public.Name));
     368             : 
     369             :   return Error::success();
     370             : }
     371             : 
     372          70 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     373             :                                             ProcRefSym &ProcRef) {
     374             : 
     375         140 :   error(IO.mapInteger(ProcRef.SumName));
     376         140 :   error(IO.mapInteger(ProcRef.SymOffset));
     377         140 :   error(IO.mapInteger(ProcRef.Module));
     378         140 :   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         144 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, LocalSym &Local) {
     394         288 :   error(IO.mapInteger(Local.Type));
     395         288 :   error(IO.mapEnum(Local.Flags));
     396         288 :   error(IO.mapStringZ(Local.Name));
     397             : 
     398             :   return Error::success();
     399             : }
     400             : 
     401         149 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     402             :                                             ObjNameSym &ObjName) {
     403             : 
     404         298 :   error(IO.mapInteger(ObjName.Signature));
     405         298 :   error(IO.mapStringZ(ObjName.Name));
     406             : 
     407             :   return Error::success();
     408             : }
     409             : 
     410         226 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, ProcSym &Proc) {
     411         452 :   error(IO.mapInteger(Proc.Parent));
     412         452 :   error(IO.mapInteger(Proc.End));
     413         452 :   error(IO.mapInteger(Proc.Next));
     414         452 :   error(IO.mapInteger(Proc.CodeSize));
     415         452 :   error(IO.mapInteger(Proc.DbgStart));
     416         452 :   error(IO.mapInteger(Proc.DbgEnd));
     417         452 :   error(IO.mapInteger(Proc.FunctionType));
     418         452 :   error(IO.mapInteger(Proc.CodeOffset));
     419         452 :   error(IO.mapInteger(Proc.Segment));
     420         452 :   error(IO.mapEnum(Proc.Flags));
     421         452 :   error(IO.mapStringZ(Proc.Name));
     422             :   return Error::success();
     423             : }
     424             : 
     425         264 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
     426             :                                             ScopeEndSym &ScopeEnd) {
     427         264 :   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         361 : Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, UDTSym &UDT) {
     460             : 
     461         722 :   error(IO.mapInteger(UDT.Type));
     462         722 :   error(IO.mapStringZ(UDT.Name));
     463             : 
     464             :   return Error::success();
     465             : }

Generated by: LCOV version 1.13