LLVM: lib/DebugInfo/CodeView/SymbolRecordMapping.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

10

11using namespace llvm;

13

14#define error(X) \

15 if (auto EC = X) \

16 return EC;

17

18namespace {

19struct MapGap {

24 }

25};

26}

27

35

40

43 error(IO.endRecord());

45}

46

48

55

57}

58

60

70

72}

73

74Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

76

83

85}

86

87Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

90

93 error(IO.mapInteger(Padding));

96 error(IO.mapInteger(Section.Characteristics));

98

100}

101

102Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

104

110

112}

113

114Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

116

118 error(IO.mapInteger(BPRel.Type));

119 error(IO.mapStringZ(BPRel.Name));

120

122}

123

124Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

126

128

130}

131

132Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

135

138 error(IO.mapInteger(Padding));

140

142}

143

144Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

146

149 error(IO.mapStringZVectorZ(EnvBlock.Fields));

150

152}

153

154Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

156

161

163}

164

166

170

172}

173

174Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

176

187

189}

190

191Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

193

205

207}

208

209Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

211

215

217}

218

220

222 error(IO.mapInteger(Data.DataOffset));

223 error(IO.mapInteger(Data.Segment));

225

227}

228

229Error SymbolRecordMapping::visitKnownRecord(

231

232 error(IO.mapObject(DefRangeFramePointerRel.Hdr.Offset));

234 error(IO.mapVectorTail(DefRangeFramePointerRel.Gaps, MapGap()));

235

237}

238

239Error SymbolRecordMapping::visitKnownRecord(

242

243 error(IO.mapInteger(DefRangeFramePointerRelFullScope.Offset));

244

246}

247

248Error SymbolRecordMapping::visitKnownRecord(

250

252 error(IO.mapObject(DefRangeRegisterRel.Hdr.Flags));

255 error(IO.mapVectorTail(DefRangeRegisterRel.Gaps, MapGap()));

256

258}

259

260Error SymbolRecordMapping::visitKnownRecord(

262

266 error(IO.mapVectorTail(DefRangeRegister.Gaps, MapGap()));

267

269}

270

271Error SymbolRecordMapping::visitKnownRecord(

273

278 error(IO.mapVectorTail(DefRangeSubfieldRegister.Gaps, MapGap()));

279

281}

282

283Error SymbolRecordMapping::visitKnownRecord(

285

286 error(IO.mapInteger(DefRangeSubfield.Program));

289 error(IO.mapVectorTail(DefRangeSubfield.Gaps, MapGap()));

290

292}

293

294Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

296

299 error(IO.mapVectorTail(DefRange.Gaps, MapGap()));

300

302}

303

304Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

306

310 error(IO.mapInteger(FrameCookie.Flags));

311

313}

314

315Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

324

326}

327

328Error SymbolRecordMapping::visitKnownRecord(

330

334 error(IO.mapInteger(HeapAllocSite.Type));

335

337}

338

339Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

341

346

348}

349

350Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

352

356

358}

359

360Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

362

367

369}

370

371Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

373

377 error(IO.mapStringZ(ProcRef.Name));

378

380}

381

383

384 error(IO.mapInteger(Label.CodeOffset));

388

390}

391

396

398}

399

400Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

402

404 error(IO.mapStringZ(ObjName.Name));

405

407}

408

411 error(IO.mapInteger(Proc.End));

422}

423

424Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

427}

428

430 error(IO.mapVectorN<uint32_t>(

432 [](CodeViewRecordIO &IO, TypeIndex &N) { return IO.mapInteger(N); }));

434}

435

436Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

438

443

445}

446

447Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

449

451 error(IO.mapInteger(Data.DataOffset));

452 error(IO.mapInteger(Data.Segment));

454

456}

457

459

460 error(IO.mapInteger(UDT.Type));

461 error(IO.mapStringZ(UDT.Name));

462

464}

465

466Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

468

470

472}

473

474Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

476

479 error(IO.mapVectorN<uint16_t>(

481 [](CodeViewRecordIO &IO, StringRef &S) { return IO.mapStringZ(S); }));

482

484}

485

486Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

497}

498

499Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,

502 error(IO.mapStringZ(HotPatchFunc.Name));

504}

505

508 assert(unsigned(EncodedReg) < 4);

509 switch (CPU) {

510

511 default:

512 break;

521 switch (EncodedReg) {

526 }

529 switch (EncodedReg) {

534 }

536 }

537 return RegisterId::NONE;

538}

539

541 switch (CPU) {

542

543 default:

544 break;

553 switch (Reg) {

554 case RegisterId::VFRAME:

556 case RegisterId::EBP:

558 case RegisterId::EBX:

560 default:

561 break;

562 }

563 break;

565 switch (Reg) {

566 case RegisterId::RSP:

568 case RegisterId::RBP:

570 case RegisterId::R13:

572 default:

573 break;

574 }

575 break;

576 }

578}

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

Promote Memory to Register

ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))

static Error mapLocalVariableAddrRange(CodeViewRecordIO &IO, LocalVariableAddrRange &Range)

Definition SymbolRecordMapping.cpp:28

#define error(X)

Definition SymbolRecordMapping.cpp:14

Lightweight error class with error context and mandatory checking.

static ErrorSuccess success()

Create a success value.

std::vector< StringRef > Strings

LLVM_ABI Error mapInteger(TypeIndex &TypeInd, const Twine &Comment="")

LLVM_ABI Error mapStringZ(StringRef &Value, const Twine &Comment="")

Error mapEnum(T &Value, const Twine &Comment="")

LLVM_ABI Error mapByteVectorTail(ArrayRef< uint8_t > &Bytes, const Twine &Comment="")

uint16_t VersionBackendMajor

uint16_t VersionFrontendMajor

uint16_t VersionBackendMinor

uint16_t VersionFrontendMinor

uint16_t VersionBackendBuild

uint16_t VersionFrontendBuild

std::vector< StringRef > ExtraStrings

uint16_t VersionBackendBuild

uint16_t VersionBackendQFE

uint16_t VersionFrontendMajor

uint16_t VersionBackendMajor

uint16_t VersionBackendMinor

uint16_t VersionFrontendBuild

uint16_t VersionFrontendMinor

uint16_t VersionFrontendQFE

DefRangeFramePointerRelHeader Hdr

LocalVariableAddrRange Range

std::vector< LocalVariableAddrGap > Gaps

DefRangeRegisterRelHeader Hdr

std::vector< LocalVariableAddrGap > Gaps

LocalVariableAddrRange Range

std::vector< LocalVariableAddrGap > Gaps

LocalVariableAddrRange Range

DefRangeRegisterHeader Hdr

LocalVariableAddrRange Range

std::vector< LocalVariableAddrGap > Gaps

DefRangeSubfieldRegisterHeader Hdr

std::vector< LocalVariableAddrGap > Gaps

LocalVariableAddrRange Range

std::vector< LocalVariableAddrGap > Gaps

LocalVariableAddrRange Range

std::vector< StringRef > Fields

FrameCookieKind CookieKind

uint32_t BytesOfCalleeSavedRegisters

uint16_t SectionIdOfExceptionHandler

uint32_t PaddingFrameBytes

uint32_t OffsetOfExceptionHandler

FrameProcedureOptions Flags

uint16_t CallInstructionSize

Error visitSymbolEnd(CVSymbol &Record) override

Definition SymbolRecordMapping.cpp:41

Error visitSymbolBegin(CVSymbol &Record) override

Definition SymbolRecordMapping.cpp:36

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

CPUType

These values correspond to the CV_CPU_TYPE_e enumeration, and are documented here: https://msdn....

CVRecord< SymbolKind > CVSymbol

uint32_t alignOf(CodeViewContainer Container)

EncodedFramePtrReg

Two-bit value indicating which register is the designated frame pointer register.

LLVM_ABI RegisterId decodeFramePtrReg(EncodedFramePtrReg EncodedReg, CPUType CPU)

Definition SymbolRecordMapping.cpp:506

LLVM_ABI EncodedFramePtrReg encodeFramePtrReg(RegisterId Reg, CPUType CPU)

Definition SymbolRecordMapping.cpp:540

This is an optimization pass for GlobalISel generic memory operations.

std::tuple< uint64_t, uint32_t > InlineSite

@ Export

Export information to summary.

FunctionAddr VTableAddr uintptr_t uintptr_t Data