1//===- BitcodeAnalyzer.cpp - Internal BitcodeAnalyzer implementation ------===//
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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "llvm/Bitcode/BitcodeAnalyzer.h"
10#include "llvm/Bitcode/BitcodeReader.h"
11#include "llvm/Bitcode/LLVMBitCodes.h"
12#include "llvm/Bitstream/BitCodes.h"
13#include "llvm/Bitstream/BitstreamReader.h"
14#include "llvm/Support/Format.h"
15#include "llvm/Support/SHA1.h"
16
17using namespace llvm;
18
19static Error reportError(StringRef Message) {
20  return createStringError(std::errc::illegal_byte_sequence, Message.data());
21}
22
23/// Return a symbolic block name if known, otherwise return null.
24static Optional<const char *> GetBlockName(unsigned BlockID,
25                                           const BitstreamBlockInfo &BlockInfo,
26                                           CurStreamTypeType CurStreamType) {
27  // Standard blocks for all bitcode files.
28  if (BlockID < bitc::FIRST_APPLICATION_BLOCKID) {
29    if (BlockID == bitc::BLOCKINFO_BLOCK_ID)
30      return "BLOCKINFO_BLOCK";
31    return None;
32  }
33
34  // Check to see if we have a blockinfo record for this block, with a name.
35  if (const BitstreamBlockInfo::BlockInfo *Info =
36          BlockInfo.getBlockInfo(BlockID)) {
37    if (!Info->Name.empty())
38      return Info->Name.c_str();
39  }
40
41  if (CurStreamType != LLVMIRBitstream)
42    return None;
43
44  switch (BlockID) {
45  default:
46    return None;
47  case bitc::OPERAND_BUNDLE_TAGS_BLOCK_ID:
48    return "OPERAND_BUNDLE_TAGS_BLOCK";
49  case bitc::MODULE_BLOCK_ID:
50    return "MODULE_BLOCK";
51  case bitc::PARAMATTR_BLOCK_ID:
52    return "PARAMATTR_BLOCK";
53  case bitc::PARAMATTR_GROUP_BLOCK_ID:
54    return "PARAMATTR_GROUP_BLOCK_ID";
55  case bitc::TYPE_BLOCK_ID_NEW:
56    return "TYPE_BLOCK_ID";
57  case bitc::CONSTANTS_BLOCK_ID:
58    return "CONSTANTS_BLOCK";
59  case bitc::FUNCTION_BLOCK_ID:
60    return "FUNCTION_BLOCK";
61  case bitc::IDENTIFICATION_BLOCK_ID:
62    return "IDENTIFICATION_BLOCK_ID";
63  case bitc::VALUE_SYMTAB_BLOCK_ID:
64    return "VALUE_SYMTAB";
65  case bitc::METADATA_BLOCK_ID:
66    return "METADATA_BLOCK";
67  case bitc::METADATA_KIND_BLOCK_ID:
68    return "METADATA_KIND_BLOCK";
69  case bitc::METADATA_ATTACHMENT_ID:
70    return "METADATA_ATTACHMENT_BLOCK";
71  case bitc::USELIST_BLOCK_ID:
72    return "USELIST_BLOCK_ID";
73  case bitc::GLOBALVAL_SUMMARY_BLOCK_ID:
74    return "GLOBALVAL_SUMMARY_BLOCK";
75  case bitc::FULL_LTO_GLOBALVAL_SUMMARY_BLOCK_ID:
76    return "FULL_LTO_GLOBALVAL_SUMMARY_BLOCK";
77  case bitc::MODULE_STRTAB_BLOCK_ID:
78    return "MODULE_STRTAB_BLOCK";
79  case bitc::STRTAB_BLOCK_ID:
80    return "STRTAB_BLOCK";
81  case bitc::SYMTAB_BLOCK_ID:
82    return "SYMTAB_BLOCK";
83  }
84}
85
86/// Return a symbolic code name if known, otherwise return null.
87static Optional<const char *> GetCodeName(unsigned CodeID, unsigned BlockID,
88                                          const BitstreamBlockInfo &BlockInfo,
89                                          CurStreamTypeType CurStreamType) {
90  // Standard blocks for all bitcode files.
91  if (BlockID < bitc::FIRST_APPLICATION_BLOCKID) {
92    if (BlockID == bitc::BLOCKINFO_BLOCK_ID) {
93      switch (CodeID) {
94      default:
95        return None;
96      case bitc::BLOCKINFO_CODE_SETBID:
97        return "SETBID";
98      case bitc::BLOCKINFO_CODE_BLOCKNAME:
99        return "BLOCKNAME";
100      case bitc::BLOCKINFO_CODE_SETRECORDNAME:
101        return "SETRECORDNAME";
102      }
103    }
104    return None;
105  }
106
107  // Check to see if we have a blockinfo record for this record, with a name.
108  if (const BitstreamBlockInfo::BlockInfo *Info =
109          BlockInfo.getBlockInfo(BlockID)) {
110    for (unsigned i = 0, e = Info->RecordNames.size(); i != e; ++i)
111      if (Info->RecordNames[i].first == CodeID)
112        return Info->RecordNames[i].second.c_str();
113  }
114
115  if (CurStreamType != LLVMIRBitstream)
116    return None;
117
118#define STRINGIFY_CODE(PREFIX, CODE)                                           \
119  case bitc::PREFIX##_##CODE:                                                  \
120    return #CODE;
121  switch (BlockID) {
122  default:
123    return None;
124  case bitc::MODULE_BLOCK_ID:
125    switch (CodeID) {
126    default:
127      return None;
128      STRINGIFY_CODE(MODULE_CODE, VERSION)
129      STRINGIFY_CODE(MODULE_CODE, TRIPLE)
130      STRINGIFY_CODE(MODULE_CODE, DATALAYOUT)
131      STRINGIFY_CODE(MODULE_CODE, ASM)
132      STRINGIFY_CODE(MODULE_CODE, SECTIONNAME)
133      STRINGIFY_CODE(MODULE_CODE, DEPLIB) // Deprecated, present in old bitcode
134      STRINGIFY_CODE(MODULE_CODE, GLOBALVAR)
135      STRINGIFY_CODE(MODULE_CODE, FUNCTION)
136      STRINGIFY_CODE(MODULE_CODE, ALIAS)
137      STRINGIFY_CODE(MODULE_CODE, GCNAME)
138      STRINGIFY_CODE(MODULE_CODE, VSTOFFSET)
139      STRINGIFY_CODE(MODULE_CODE, METADATA_VALUES_UNUSED)
140      STRINGIFY_CODE(MODULE_CODE, SOURCE_FILENAME)
141      STRINGIFY_CODE(MODULE_CODE, HASH)
142    }
143  case bitc::IDENTIFICATION_BLOCK_ID:
144    switch (CodeID) {
145    default:
146      return None;
147      STRINGIFY_CODE(IDENTIFICATION_CODE, STRING)
148      STRINGIFY_CODE(IDENTIFICATION_CODE, EPOCH)
149    }
150  case bitc::PARAMATTR_BLOCK_ID:
151    switch (CodeID) {
152    default:
153      return None;
154    // FIXME: Should these be different?
155    case bitc::PARAMATTR_CODE_ENTRY_OLD:
156      return "ENTRY";
157    case bitc::PARAMATTR_CODE_ENTRY:
158      return "ENTRY";
159    }
160  case bitc::PARAMATTR_GROUP_BLOCK_ID:
161    switch (CodeID) {
162    default:
163      return None;
164    case bitc::PARAMATTR_GRP_CODE_ENTRY:
165      return "ENTRY";
166    }
167  case bitc::TYPE_BLOCK_ID_NEW:
168    switch (CodeID) {
169    default:
170      return None;
171      STRINGIFY_CODE(TYPE_CODE, NUMENTRY)
172      STRINGIFY_CODE(TYPE_CODE, VOID)
173      STRINGIFY_CODE(TYPE_CODE, FLOAT)
174      STRINGIFY_CODE(TYPE_CODE, DOUBLE)
175      STRINGIFY_CODE(TYPE_CODE, LABEL)
176      STRINGIFY_CODE(TYPE_CODE, OPAQUE)
177      STRINGIFY_CODE(TYPE_CODE, INTEGER)
178      STRINGIFY_CODE(TYPE_CODE, POINTER)
179      STRINGIFY_CODE(TYPE_CODE, ARRAY)
180      STRINGIFY_CODE(TYPE_CODE, VECTOR)
181      STRINGIFY_CODE(TYPE_CODE, X86_FP80)
182      STRINGIFY_CODE(TYPE_CODE, FP128)
183      STRINGIFY_CODE(TYPE_CODE, PPC_FP128)
184      STRINGIFY_CODE(TYPE_CODE, METADATA)
185      STRINGIFY_CODE(TYPE_CODE, STRUCT_ANON)
186      STRINGIFY_CODE(TYPE_CODE, STRUCT_NAME)
187      STRINGIFY_CODE(TYPE_CODE, STRUCT_NAMED)
188      STRINGIFY_CODE(TYPE_CODE, FUNCTION)
189    }
190
191  case bitc::CONSTANTS_BLOCK_ID:
192    switch (CodeID) {
193    default:
194      return None;
195      STRINGIFY_CODE(CST_CODE, SETTYPE)
196      STRINGIFY_CODE(CST_CODE, NULL)
197      STRINGIFY_CODE(CST_CODE, UNDEF)
198      STRINGIFY_CODE(CST_CODE, INTEGER)
199      STRINGIFY_CODE(CST_CODE, WIDE_INTEGER)
200      STRINGIFY_CODE(CST_CODE, FLOAT)
201      STRINGIFY_CODE(CST_CODE, AGGREGATE)
202      STRINGIFY_CODE(CST_CODE, STRING)
203      STRINGIFY_CODE(CST_CODE, CSTRING)
204      STRINGIFY_CODE(CST_CODE, CE_BINOP)
205      STRINGIFY_CODE(CST_CODE, CE_CAST)
206      STRINGIFY_CODE(CST_CODE, CE_GEP)
207      STRINGIFY_CODE(CST_CODE, CE_INBOUNDS_GEP)
208      STRINGIFY_CODE(CST_CODE, CE_SELECT)
209      STRINGIFY_CODE(CST_CODE, CE_EXTRACTELT)
210      STRINGIFY_CODE(CST_CODE, CE_INSERTELT)
211      STRINGIFY_CODE(CST_CODE, CE_SHUFFLEVEC)
212      STRINGIFY_CODE(CST_CODE, CE_CMP)
213      STRINGIFY_CODE(CST_CODE, INLINEASM)
214      STRINGIFY_CODE(CST_CODE, CE_SHUFVEC_EX)
215      STRINGIFY_CODE(CST_CODE, CE_UNOP)
216    case bitc::CST_CODE_BLOCKADDRESS:
217      return "CST_CODE_BLOCKADDRESS";
218      STRINGIFY_CODE(CST_CODE, DATA)
219    }
220  case bitc::FUNCTION_BLOCK_ID:
221    switch (CodeID) {
222    default:
223      return None;
224      STRINGIFY_CODE(FUNC_CODE, DECLAREBLOCKS)
225      STRINGIFY_CODE(FUNC_CODE, INST_BINOP)
226      STRINGIFY_CODE(FUNC_CODE, INST_CAST)
227      STRINGIFY_CODE(FUNC_CODE, INST_GEP_OLD)
228      STRINGIFY_CODE(FUNC_CODE, INST_INBOUNDS_GEP_OLD)
229      STRINGIFY_CODE(FUNC_CODE, INST_SELECT)
230      STRINGIFY_CODE(FUNC_CODE, INST_EXTRACTELT)
231      STRINGIFY_CODE(FUNC_CODE, INST_INSERTELT)
232      STRINGIFY_CODE(FUNC_CODE, INST_SHUFFLEVEC)
233      STRINGIFY_CODE(FUNC_CODE, INST_CMP)
234      STRINGIFY_CODE(FUNC_CODE, INST_RET)
235      STRINGIFY_CODE(FUNC_CODE, INST_BR)
236      STRINGIFY_CODE(FUNC_CODE, INST_SWITCH)
237      STRINGIFY_CODE(FUNC_CODE, INST_INVOKE)
238      STRINGIFY_CODE(FUNC_CODE, INST_UNOP)
239      STRINGIFY_CODE(FUNC_CODE, INST_UNREACHABLE)
240      STRINGIFY_CODE(FUNC_CODE, INST_CLEANUPRET)
241      STRINGIFY_CODE(FUNC_CODE, INST_CATCHRET)
242      STRINGIFY_CODE(FUNC_CODE, INST_CATCHPAD)
243      STRINGIFY_CODE(FUNC_CODE, INST_PHI)
244      STRINGIFY_CODE(FUNC_CODE, INST_ALLOCA)
245      STRINGIFY_CODE(FUNC_CODE, INST_LOAD)
246      STRINGIFY_CODE(FUNC_CODE, INST_VAARG)
247      STRINGIFY_CODE(FUNC_CODE, INST_STORE)
248      STRINGIFY_CODE(FUNC_CODE, INST_EXTRACTVAL)
249      STRINGIFY_CODE(FUNC_CODE, INST_INSERTVAL)
250      STRINGIFY_CODE(FUNC_CODE, INST_CMP2)
251      STRINGIFY_CODE(FUNC_CODE, INST_VSELECT)
252      STRINGIFY_CODE(FUNC_CODE, DEBUG_LOC_AGAIN)
253      STRINGIFY_CODE(FUNC_CODE, INST_CALL)
254      STRINGIFY_CODE(FUNC_CODE, DEBUG_LOC)
255      STRINGIFY_CODE(FUNC_CODE, INST_GEP)
256      STRINGIFY_CODE(FUNC_CODE, OPERAND_BUNDLE)
257      STRINGIFY_CODE(FUNC_CODE, INST_FENCE)
258      STRINGIFY_CODE(FUNC_CODE, INST_ATOMICRMW)
259      STRINGIFY_CODE(FUNC_CODE, INST_LOADATOMIC)
260      STRINGIFY_CODE(FUNC_CODE, INST_STOREATOMIC)
261      STRINGIFY_CODE(FUNC_CODE, INST_CMPXCHG)
262      STRINGIFY_CODE(FUNC_CODE, INST_CALLBR)
263    }
264  case bitc::VALUE_SYMTAB_BLOCK_ID:
265    switch (CodeID) {
266    default:
267      return None;
268      STRINGIFY_CODE(VST_CODE, ENTRY)
269      STRINGIFY_CODE(VST_CODE, BBENTRY)
270      STRINGIFY_CODE(VST_CODE, FNENTRY)
271      STRINGIFY_CODE(VST_CODE, COMBINED_ENTRY)
272    }
273  case bitc::MODULE_STRTAB_BLOCK_ID:
274    switch (CodeID) {
275    default:
276      return None;
277      STRINGIFY_CODE(MST_CODE, ENTRY)
278      STRINGIFY_CODE(MST_CODE, HASH)
279    }
280  case bitc::GLOBALVAL_SUMMARY_BLOCK_ID:
281  case bitc::FULL_LTO_GLOBALVAL_SUMMARY_BLOCK_ID:
282    switch (CodeID) {
283    default:
284      return None;
285      STRINGIFY_CODE(FS, PERMODULE)
286      STRINGIFY_CODE(FS, PERMODULE_PROFILE)
287      STRINGIFY_CODE(FS, PERMODULE_RELBF)
288      STRINGIFY_CODE(FS, PERMODULE_GLOBALVAR_INIT_REFS)
289      STRINGIFY_CODE(FS, PERMODULE_VTABLE_GLOBALVAR_INIT_REFS)
290      STRINGIFY_CODE(FS, COMBINED)
291      STRINGIFY_CODE(FS, COMBINED_PROFILE)
292      STRINGIFY_CODE(FS, COMBINED_GLOBALVAR_INIT_REFS)
293      STRINGIFY_CODE(FS, ALIAS)
294      STRINGIFY_CODE(FS, COMBINED_ALIAS)
295      STRINGIFY_CODE(FS, COMBINED_ORIGINAL_NAME)
296      STRINGIFY_CODE(FS, VERSION)
297      STRINGIFY_CODE(FS, FLAGS)
298      STRINGIFY_CODE(FS, TYPE_TESTS)
299      STRINGIFY_CODE(FS, TYPE_TEST_ASSUME_VCALLS)
300      STRINGIFY_CODE(FS, TYPE_CHECKED_LOAD_VCALLS)
301      STRINGIFY_CODE(FS, TYPE_TEST_ASSUME_CONST_VCALL)
302      STRINGIFY_CODE(FS, TYPE_CHECKED_LOAD_CONST_VCALL)
303      STRINGIFY_CODE(FS, VALUE_GUID)
304      STRINGIFY_CODE(FS, CFI_FUNCTION_DEFS)
305      STRINGIFY_CODE(FS, CFI_FUNCTION_DECLS)
306      STRINGIFY_CODE(FS, TYPE_ID)
307      STRINGIFY_CODE(FS, TYPE_ID_METADATA)
308      STRINGIFY_CODE(FS, BLOCK_COUNT)
309      STRINGIFY_CODE(FS, PARAM_ACCESS)
310    }
311  case bitc::METADATA_ATTACHMENT_ID:
312    switch (CodeID) {
313    default:
314      return None;
315      STRINGIFY_CODE(METADATA, ATTACHMENT)
316    }
317  case bitc::METADATA_BLOCK_ID:
318    switch (CodeID) {
319    default:
320      return None;
321      STRINGIFY_CODE(METADATA, STRING_OLD)
322      STRINGIFY_CODE(METADATA, VALUE)
323      STRINGIFY_CODE(METADATA, NODE)
324      STRINGIFY_CODE(METADATA, NAME)
325      STRINGIFY_CODE(METADATA, DISTINCT_NODE)
326      STRINGIFY_CODE(METADATA, KIND) // Older bitcode has it in a MODULE_BLOCK
327      STRINGIFY_CODE(METADATA, LOCATION)
328      STRINGIFY_CODE(METADATA, OLD_NODE)
329      STRINGIFY_CODE(METADATA, OLD_FN_NODE)
330      STRINGIFY_CODE(METADATA, NAMED_NODE)
331      STRINGIFY_CODE(METADATA, GENERIC_DEBUG)
332      STRINGIFY_CODE(METADATA, SUBRANGE)
333      STRINGIFY_CODE(METADATA, ENUMERATOR)
334      STRINGIFY_CODE(METADATA, BASIC_TYPE)
335      STRINGIFY_CODE(METADATA, FILE)
336      STRINGIFY_CODE(METADATA, DERIVED_TYPE)
337      STRINGIFY_CODE(METADATA, COMPOSITE_TYPE)
338      STRINGIFY_CODE(METADATA, SUBROUTINE_TYPE)
339      STRINGIFY_CODE(METADATA, COMPILE_UNIT)
340      STRINGIFY_CODE(METADATA, SUBPROGRAM)
341      STRINGIFY_CODE(METADATA, LEXICAL_BLOCK)
342      STRINGIFY_CODE(METADATA, LEXICAL_BLOCK_FILE)
343      STRINGIFY_CODE(METADATA, NAMESPACE)
344      STRINGIFY_CODE(METADATA, TEMPLATE_TYPE)
345      STRINGIFY_CODE(METADATA, TEMPLATE_VALUE)
346      STRINGIFY_CODE(METADATA, GLOBAL_VAR)
347      STRINGIFY_CODE(METADATA, LOCAL_VAR)
348      STRINGIFY_CODE(METADATA, EXPRESSION)
349      STRINGIFY_CODE(METADATA, OBJC_PROPERTY)
350      STRINGIFY_CODE(METADATA, IMPORTED_ENTITY)
351      STRINGIFY_CODE(METADATA, MODULE)
352      STRINGIFY_CODE(METADATA, MACRO)
353      STRINGIFY_CODE(METADATA, MACRO_FILE)
354      STRINGIFY_CODE(METADATA, STRINGS)
355      STRINGIFY_CODE(METADATA, GLOBAL_DECL_ATTACHMENT)
356      STRINGIFY_CODE(METADATA, GLOBAL_VAR_EXPR)
357      STRINGIFY_CODE(METADATA, INDEX_OFFSET)
358      STRINGIFY_CODE(METADATA, INDEX)
359    }
360  case bitc::METADATA_KIND_BLOCK_ID:
361    switch (CodeID) {
362    default:
363      return None;
364      STRINGIFY_CODE(METADATA, KIND)
365    }
366  case bitc::USELIST_BLOCK_ID:
367    switch (CodeID) {
368    default:
369      return None;
370    case bitc::USELIST_CODE_DEFAULT:
371      return "USELIST_CODE_DEFAULT";
372    case bitc::USELIST_CODE_BB:
373      return "USELIST_CODE_BB";
374    }
375
376  case bitc::OPERAND_BUNDLE_TAGS_BLOCK_ID:
377    switch (CodeID) {
378    default:
379      return None;
380    case bitc::OPERAND_BUNDLE_TAG:
381      return "OPERAND_BUNDLE_TAG";
382    }
383  case bitc::STRTAB_BLOCK_ID:
384    switch (CodeID) {
385    default:
386      return None;
387    case bitc::STRTAB_BLOB:
388      return "BLOB";
389    }
390  case bitc::SYMTAB_BLOCK_ID:
391    switch (CodeID) {
392    default:
393      return None;
394    case bitc::SYMTAB_BLOB:
395      return "BLOB";
396    }
397  }
398#undef STRINGIFY_CODE
399}
400
401static void printSize(raw_ostream &OS, double Bits) {
402  OS << format("%.2f/%.2fB/%luW", Bits, Bits / 8, (unsigned long)(Bits / 32));
403}
404static void printSize(raw_ostream &OS, uint64_t Bits) {
405  OS << format("%lub/%.2fB/%luW", (unsigned long)Bits, (double)Bits / 8,
406               (unsigned long)(Bits / 32));
407}
408
409static Expected<CurStreamTypeType> ReadSignature(BitstreamCursor &Stream) {
410  auto tryRead = [&Stream](char &Dest, size_t size) -> Error {
411    if (Expected<SimpleBitstreamCursor::word_t> MaybeWord = Stream.Read(size))
412      Dest = MaybeWord.get();
413    else
414      return MaybeWord.takeError();
415    return Error::success();
416  };
417
418  char Signature[6];
419  if (Error Err = tryRead(Signature[0], 8))
420    return std::move(Err);
421  if (Error Err = tryRead(Signature[1], 8))
422    return std::move(Err);
423
424  // Autodetect the file contents, if it is one we know.
425  if (Signature[0] == 'C' && Signature[1] == 'P') {
426    if (Error Err = tryRead(Signature[2], 8))
427      return std::move(Err);
428    if (Error Err = tryRead(Signature[3], 8))
429      return std::move(Err);
430    if (Signature[2] == 'C' && Signature[3] == 'H')
431      return ClangSerializedASTBitstream;
432  } else if (Signature[0] == 'D' && Signature[1] == 'I') {
433    if (Error Err = tryRead(Signature[2], 8))
434      return std::move(Err);
435    if (Error Err = tryRead(Signature[3], 8))
436      return std::move(Err);
437    if (Signature[2] == 'A' && Signature[3] == 'G')
438      return ClangSerializedDiagnosticsBitstream;
439  } else if (Signature[0] == 'R' && Signature[1] == 'M') {
440    if (Error Err = tryRead(Signature[2], 8))
441      return std::move(Err);
442    if (Error Err = tryRead(Signature[3], 8))
443      return std::move(Err);
444    if (Signature[2] == 'R' && Signature[3] == 'K')
445      return LLVMBitstreamRemarks;
446  } else {
447    if (Error Err = tryRead(Signature[2], 4))
448      return std::move(Err);
449    if (Error Err = tryRead(Signature[3], 4))
450      return std::move(Err);
451    if (Error Err = tryRead(Signature[4], 4))
452      return std::move(Err);
453    if (Error Err = tryRead(Signature[5], 4))
454      return std::move(Err);
455    if (Signature[0] == 'B' && Signature[1] == 'C' && Signature[2] == 0x0 &&
456        Signature[3] == 0xC && Signature[4] == 0xE && Signature[5] == 0xD)
457      return LLVMIRBitstream;
458  }
459  return UnknownBitstream;
460}
461
462static Expected<CurStreamTypeType> analyzeHeader(Optional<BCDumpOptions> O,
463                                                 BitstreamCursor &Stream) {
464  ArrayRef<uint8_t> Bytes = Stream.getBitcodeBytes();
465  const unsigned char *BufPtr = (const unsigned char *)Bytes.data();
466  const unsigned char *EndBufPtr = BufPtr + Bytes.size();
467
468  // If we have a wrapper header, parse it and ignore the non-bc file
469  // contents. The magic number is 0x0B17C0DE stored in little endian.
470  if (isBitcodeWrapper(BufPtr, EndBufPtr)) {
471    if (Bytes.size() < BWH_HeaderSize)
472      return reportError("Invalid bitcode wrapper header");
473
474    if (O) {
475      unsigned Magic = support::endian::read32le(&BufPtr[BWH_MagicField]);
476      unsigned Version = support::endian::read32le(&BufPtr[BWH_VersionField]);
477      unsigned Offset = support::endian::read32le(&BufPtr[BWH_OffsetField]);
478      unsigned Size = support::endian::read32le(&BufPtr[BWH_SizeField]);
479      unsigned CPUType = support::endian::read32le(&BufPtr[BWH_CPUTypeField]);
480
481      O->OS << "<BITCODE_WRAPPER_HEADER"
482            << " Magic=" << format_hex(Magic, 10)
483            << " Version=" << format_hex(Version, 10)
484            << " Offset=" << format_hex(Offset, 10)
485            << " Size=" << format_hex(Size, 10)
486            << " CPUType=" << format_hex(CPUType, 10) << "/>\n";
487    }
488
489    if (SkipBitcodeWrapperHeader(BufPtr, EndBufPtr, true))
490      return reportError("Invalid bitcode wrapper header");
491  }
492
493  // Use the cursor modified by skipping the wrapper header.
494  Stream = BitstreamCursor(ArrayRef<uint8_t>(BufPtr, EndBufPtr));
495
496  return ReadSignature(Stream);
497}
498
499static bool canDecodeBlob(unsigned Code, unsigned BlockID) {
500  return BlockID == bitc::METADATA_BLOCK_ID && Code == bitc::METADATA_STRINGS;
501}
502
503Error BitcodeAnalyzer::decodeMetadataStringsBlob(StringRef Indent,
504                                                 ArrayRef<uint64_t> Record,
505                                                 StringRef Blob,
506                                                 raw_ostream &OS) {
507  if (Blob.empty())
508    return reportError("Cannot decode empty blob.");
509
510  if (Record.size() != 2)
511    return reportError(
512        "Decoding metadata strings blob needs two record entries.");
513
514  unsigned NumStrings = Record[0];
515  unsigned StringsOffset = Record[1];
516  OS << " num-strings = " << NumStrings << " {\n";
517
518  StringRef Lengths = Blob.slice(0, StringsOffset);
519  SimpleBitstreamCursor R(Lengths);
520  StringRef Strings = Blob.drop_front(StringsOffset);
521  do {
522    if (R.AtEndOfStream())
523      return reportError("bad length");
524
525    Expected<uint32_t> MaybeSize = R.ReadVBR(6);
526    if (!MaybeSize)
527      return MaybeSize.takeError();
528    uint32_t Size = MaybeSize.get();
529    if (Strings.size() < Size)
530      return reportError("truncated chars");
531
532    OS << Indent << "    '";
533    OS.write_escaped(Strings.slice(0, Size), /*hex=*/true);
534    OS << "'\n";
535    Strings = Strings.drop_front(Size);
536  } while (--NumStrings);
537
538  OS << Indent << "  }";
539  return Error::success();
540}
541
542BitcodeAnalyzer::BitcodeAnalyzer(StringRef Buffer,
543                                 Optional<StringRef> BlockInfoBuffer)
544    : Stream(Buffer) {
545  if (BlockInfoBuffer)
546    BlockInfoStream.emplace(*BlockInfoBuffer);
547}
548
549Error BitcodeAnalyzer::analyze(Optional<BCDumpOptions> O,
550                               Optional<StringRef> CheckHash) {
551  Expected<CurStreamTypeType> MaybeType = analyzeHeader(O, Stream);
552  if (!MaybeType)
553    return MaybeType.takeError();
554  else
555    CurStreamType = *MaybeType;
556
557  Stream.setBlockInfo(&BlockInfo);
558
559  // Read block info from BlockInfoStream, if specified.
560  // The block info must be a top-level block.
561  if (BlockInfoStream) {
562    BitstreamCursor BlockInfoCursor(*BlockInfoStream);
563    Expected<CurStreamTypeType> H = analyzeHeader(O, BlockInfoCursor);
564    if (!H)
565      return H.takeError();
566
567    while (!BlockInfoCursor.AtEndOfStream()) {
568      Expected<unsigned> MaybeCode = BlockInfoCursor.ReadCode();
569      if (!MaybeCode)
570        return MaybeCode.takeError();
571      if (MaybeCode.get() != bitc::ENTER_SUBBLOCK)
572        return reportError("Invalid record at top-level in block info file");
573
574      Expected<unsigned> MaybeBlockID = BlockInfoCursor.ReadSubBlockID();
575      if (!MaybeBlockID)
576        return MaybeBlockID.takeError();
577      if (MaybeBlockID.get() == bitc::BLOCKINFO_BLOCK_ID) {
578        Expected<Optional<BitstreamBlockInfo>> MaybeNewBlockInfo =
579            BlockInfoCursor.ReadBlockInfoBlock(/*ReadBlockInfoNames=*/true);
580        if (!MaybeNewBlockInfo)
581          return MaybeNewBlockInfo.takeError();
582        Optional<BitstreamBlockInfo> NewBlockInfo =
583            std::move(MaybeNewBlockInfo.get());
584        if (!NewBlockInfo)
585          return reportError("Malformed BlockInfoBlock in block info file");
586        BlockInfo = std::move(*NewBlockInfo);
587        break;
588      }
589
590      if (Error Err = BlockInfoCursor.SkipBlock())
591        return Err;
592    }
593  }
594
595  // Parse the top-level structure.  We only allow blocks at the top-level.
596  while (!Stream.AtEndOfStream()) {
597    Expected<unsigned> MaybeCode = Stream.ReadCode();
598    if (!MaybeCode)
599      return MaybeCode.takeError();
600    if (MaybeCode.get() != bitc::ENTER_SUBBLOCK)
601      return reportError("Invalid record at top-level");
602
603    Expected<unsigned> MaybeBlockID = Stream.ReadSubBlockID();
604    if (!MaybeBlockID)
605      return MaybeBlockID.takeError();
606
607    if (Error E = parseBlock(MaybeBlockID.get(), 0, O, CheckHash))
608      return E;
609    ++NumTopBlocks;
610  }
611
612  return Error::success();
613}
614
615void BitcodeAnalyzer::printStats(BCDumpOptions O,
616                                 Optional<StringRef> Filename) {
617  uint64_t BufferSizeBits = Stream.getBitcodeBytes().size() * CHAR_BIT;
618  // Print a summary of the read file.
619  O.OS << "Summary ";
620  if (Filename)
621    O.OS << "of " << Filename->data() << ":\n";
622  O.OS << "         Total size: ";
623  printSize(O.OS, BufferSizeBits);
624  O.OS << "\n";
625  O.OS << "        Stream type: ";
626  switch (CurStreamType) {
627  case UnknownBitstream:
628    O.OS << "unknown\n";
629    break;
630  case LLVMIRBitstream:
631    O.OS << "LLVM IR\n";
632    break;
633  case ClangSerializedASTBitstream:
634    O.OS << "Clang Serialized AST\n";
635    break;
636  case ClangSerializedDiagnosticsBitstream:
637    O.OS << "Clang Serialized Diagnostics\n";
638    break;
639  case LLVMBitstreamRemarks:
640    O.OS << "LLVM Remarks\n";
641    break;
642  }
643  O.OS << "  # Toplevel Blocks: " << NumTopBlocks << "\n";
644  O.OS << "\n";
645
646  // Emit per-block stats.
647  O.OS << "Per-block Summary:\n";
648  for (std::map<unsigned, PerBlockIDStats>::iterator I = BlockIDStats.begin(),
649                                                     E = BlockIDStats.end();
650       I != E; ++I) {
651    O.OS << "  Block ID #" << I->first;
652    if (Optional<const char *> BlockName =
653            GetBlockName(I->first, BlockInfo, CurStreamType))
654      O.OS << " (" << *BlockName << ")";
655    O.OS << ":\n";
656
657    const PerBlockIDStats &Stats = I->second;
658    O.OS << "      Num Instances: " << Stats.NumInstances << "\n";
659    O.OS << "         Total Size: ";
660    printSize(O.OS, Stats.NumBits);
661    O.OS << "\n";
662    double pct = (Stats.NumBits * 100.0) / BufferSizeBits;
663    O.OS << "    Percent of file: " << format("%2.4f%%", pct) << "\n";
664    if (Stats.NumInstances > 1) {
665      O.OS << "       Average Size: ";
666      printSize(O.OS, Stats.NumBits / (double)Stats.NumInstances);
667      O.OS << "\n";
668      O.OS << "  Tot/Avg SubBlocks: " << Stats.NumSubBlocks << "/"
669           << Stats.NumSubBlocks / (double)Stats.NumInstances << "\n";
670      O.OS << "    Tot/Avg Abbrevs: " << Stats.NumAbbrevs << "/"
671           << Stats.NumAbbrevs / (double)Stats.NumInstances << "\n";
672      O.OS << "    Tot/Avg Records: " << Stats.NumRecords << "/"
673           << Stats.NumRecords / (double)Stats.NumInstances << "\n";
674    } else {
675      O.OS << "      Num SubBlocks: " << Stats.NumSubBlocks << "\n";
676      O.OS << "        Num Abbrevs: " << Stats.NumAbbrevs << "\n";
677      O.OS << "        Num Records: " << Stats.NumRecords << "\n";
678    }
679    if (Stats.NumRecords) {
680      double pct = (Stats.NumAbbreviatedRecords * 100.0) / Stats.NumRecords;
681      O.OS << "    Percent Abbrevs: " << format("%2.4f%%", pct) << "\n";
682    }
683    O.OS << "\n";
684
685    // Print a histogram of the codes we see.
686    if (O.Histogram && !Stats.CodeFreq.empty()) {
687      std::vector<std::pair<unsigned, unsigned>> FreqPairs; // <freq,code>
688      for (unsigned i = 0, e = Stats.CodeFreq.size(); i != e; ++i)
689        if (unsigned Freq = Stats.CodeFreq[i].NumInstances)
690          FreqPairs.push_back(std::make_pair(Freq, i));
691      llvm::stable_sort(FreqPairs);
692      std::reverse(FreqPairs.begin(), FreqPairs.end());
693
694      O.OS << "\tRecord Histogram:\n";
695      O.OS << "\t\t  Count    # Bits     b/Rec   % Abv  Record Kind\n";
696      for (unsigned i = 0, e = FreqPairs.size(); i != e; ++i) {
697        const PerRecordStats &RecStats = Stats.CodeFreq[FreqPairs[i].second];
698
699        O.OS << format("\t\t%7d %9lu", RecStats.NumInstances,
700                       (unsigned long)RecStats.TotalBits);
701
702        if (RecStats.NumInstances > 1)
703          O.OS << format(" %9.1f",
704                         (double)RecStats.TotalBits / RecStats.NumInstances);
705        else
706          O.OS << "          ";
707
708        if (RecStats.NumAbbrev)
709          O.OS << format(" %7.2f", (double)RecStats.NumAbbrev /
710                                       RecStats.NumInstances * 100);
711        else
712          O.OS << "        ";
713
714        O.OS << "  ";
715        if (Optional<const char *> CodeName = GetCodeName(
716                FreqPairs[i].second, I->first, BlockInfo, CurStreamType))
717          O.OS << *CodeName << "\n";
718        else
719          O.OS << "UnknownCode" << FreqPairs[i].second << "\n";
720      }
721      O.OS << "\n";
722    }
723  }
724}
725
726Error BitcodeAnalyzer::parseBlock(unsigned BlockID, unsigned IndentLevel,
727                                  Optional<BCDumpOptions> O,
728                                  Optional<StringRef> CheckHash) {
729  std::string Indent(IndentLevel * 2, ' ');
730  uint64_t BlockBitStart = Stream.GetCurrentBitNo();
731
732  // Get the statistics for this BlockID.
733  PerBlockIDStats &BlockStats = BlockIDStats[BlockID];
734
735  BlockStats.NumInstances++;
736
737  // BLOCKINFO is a special part of the stream.
738  bool DumpRecords = O.hasValue();
739  if (BlockID == bitc::BLOCKINFO_BLOCK_ID) {
740    if (O)
741      O->OS << Indent << "<BLOCKINFO_BLOCK/>\n";
742    Expected<Optional<BitstreamBlockInfo>> MaybeNewBlockInfo =
743        Stream.ReadBlockInfoBlock(/*ReadBlockInfoNames=*/true);
744    if (!MaybeNewBlockInfo)
745      return MaybeNewBlockInfo.takeError();
746    Optional<BitstreamBlockInfo> NewBlockInfo =
747        std::move(MaybeNewBlockInfo.get());
748    if (!NewBlockInfo)
749      return reportError("Malformed BlockInfoBlock");
750    BlockInfo = std::move(*NewBlockInfo);
751    if (Error Err = Stream.JumpToBit(BlockBitStart))
752      return Err;
753    // It's not really interesting to dump the contents of the blockinfo
754    // block.
755    DumpRecords = false;
756  }
757
758  unsigned NumWords = 0;
759  if (Error Err = Stream.EnterSubBlock(BlockID, &NumWords))
760    return Err;
761
762  // Keep it for later, when we see a MODULE_HASH record
763  uint64_t BlockEntryPos = Stream.getCurrentByteNo();
764
765  Optional<const char *> BlockName = None;
766  if (DumpRecords) {
767    O->OS << Indent << "<";
768    if ((BlockName = GetBlockName(BlockID, BlockInfo, CurStreamType)))
769      O->OS << *BlockName;
770    else
771      O->OS << "UnknownBlock" << BlockID;
772
773    if (!O->Symbolic && BlockName)
774      O->OS << " BlockID=" << BlockID;
775
776    O->OS << " NumWords=" << NumWords
777          << " BlockCodeSize=" << Stream.getAbbrevIDWidth() << ">\n";
778  }
779
780  SmallVector<uint64_t, 64> Record;
781
782  // Keep the offset to the metadata index if seen.
783  uint64_t MetadataIndexOffset = 0;
784
785  // Read all the records for this block.
786  while (1) {
787    if (Stream.AtEndOfStream())
788      return reportError("Premature end of bitstream");
789
790    uint64_t RecordStartBit = Stream.GetCurrentBitNo();
791
792    Expected<BitstreamEntry> MaybeEntry =
793        Stream.advance(BitstreamCursor::AF_DontAutoprocessAbbrevs);
794    if (!MaybeEntry)
795      return MaybeEntry.takeError();
796    BitstreamEntry Entry = MaybeEntry.get();
797
798    switch (Entry.Kind) {
799    case BitstreamEntry::Error:
800      return reportError("malformed bitcode file");
801    case BitstreamEntry::EndBlock: {
802      uint64_t BlockBitEnd = Stream.GetCurrentBitNo();
803      BlockStats.NumBits += BlockBitEnd - BlockBitStart;
804      if (DumpRecords) {
805        O->OS << Indent << "</";
806        if (BlockName)
807          O->OS << *BlockName << ">\n";
808        else
809          O->OS << "UnknownBlock" << BlockID << ">\n";
810      }
811      return Error::success();
812    }
813
814    case BitstreamEntry::SubBlock: {
815      uint64_t SubBlockBitStart = Stream.GetCurrentBitNo();
816      if (Error E = parseBlock(Entry.ID, IndentLevel + 1, O, CheckHash))
817        return E;
818      ++BlockStats.NumSubBlocks;
819      uint64_t SubBlockBitEnd = Stream.GetCurrentBitNo();
820
821      // Don't include subblock sizes in the size of this block.
822      BlockBitStart += SubBlockBitEnd - SubBlockBitStart;
823      continue;
824    }
825    case BitstreamEntry::Record:
826      // The interesting case.
827      break;
828    }
829
830    if (Entry.ID == bitc::DEFINE_ABBREV) {
831      if (Error Err = Stream.ReadAbbrevRecord())
832        return Err;
833      ++BlockStats.NumAbbrevs;
834      continue;
835    }
836
837    Record.clear();
838
839    ++BlockStats.NumRecords;
840
841    StringRef Blob;
842    uint64_t CurrentRecordPos = Stream.GetCurrentBitNo();
843    Expected<unsigned> MaybeCode = Stream.readRecord(Entry.ID, Record, &Blob);
844    if (!MaybeCode)
845      return MaybeCode.takeError();
846    unsigned Code = MaybeCode.get();
847
848    // Increment the # occurrences of this code.
849    if (BlockStats.CodeFreq.size() <= Code)
850      BlockStats.CodeFreq.resize(Code + 1);
851    BlockStats.CodeFreq[Code].NumInstances++;
852    BlockStats.CodeFreq[Code].TotalBits +=
853        Stream.GetCurrentBitNo() - RecordStartBit;
854    if (Entry.ID != bitc::UNABBREV_RECORD) {
855      BlockStats.CodeFreq[Code].NumAbbrev++;
856      ++BlockStats.NumAbbreviatedRecords;
857    }
858
859    if (DumpRecords) {
860      O->OS << Indent << "  <";
861      Optional<const char *> CodeName =
862          GetCodeName(Code, BlockID, BlockInfo, CurStreamType);
863      if (CodeName)
864        O->OS << *CodeName;
865      else
866        O->OS << "UnknownCode" << Code;
867      if (!O->Symbolic && CodeName)
868        O->OS << " codeid=" << Code;
869      const BitCodeAbbrev *Abbv = nullptr;
870      if (Entry.ID != bitc::UNABBREV_RECORD) {
871        Abbv = Stream.getAbbrev(Entry.ID);
872        O->OS << " abbrevid=" << Entry.ID;
873      }
874
875      for (unsigned i = 0, e = Record.size(); i != e; ++i)
876        O->OS << " op" << i << "=" << (int64_t)Record[i];
877
878      // If we found a metadata index, let's verify that we had an offset
879      // before and validate its forward reference offset was correct!
880      if (BlockID == bitc::METADATA_BLOCK_ID) {
881        if (Code == bitc::METADATA_INDEX_OFFSET) {
882          if (Record.size() != 2)
883            O->OS << "(Invalid record)";
884          else {
885            auto Offset = Record[0] + (Record[1] << 32);
886            MetadataIndexOffset = Stream.GetCurrentBitNo() + Offset;
887          }
888        }
889        if (Code == bitc::METADATA_INDEX) {
890          O->OS << " (offset ";
891          if (MetadataIndexOffset == RecordStartBit)
892            O->OS << "match)";
893          else
894            O->OS << "mismatch: " << MetadataIndexOffset << " vs "
895                  << RecordStartBit << ")";
896        }
897      }
898
899      // If we found a module hash, let's verify that it matches!
900      if (BlockID == bitc::MODULE_BLOCK_ID && Code == bitc::MODULE_CODE_HASH &&
901          CheckHash.hasValue()) {
902        if (Record.size() != 5)
903          O->OS << " (invalid)";
904        else {
905          // Recompute the hash and compare it to the one in the bitcode
906          SHA1 Hasher;
907          StringRef Hash;
908          Hasher.update(*CheckHash);
909          {
910            int BlockSize = (CurrentRecordPos / 8) - BlockEntryPos;
911            auto Ptr = Stream.getPointerToByte(BlockEntryPos, BlockSize);
912            Hasher.update(ArrayRef<uint8_t>(Ptr, BlockSize));
913            Hash = Hasher.result();
914          }
915          std::array<char, 20> RecordedHash;
916          int Pos = 0;
917          for (auto &Val : Record) {
918            assert(!(Val >> 32) && "Unexpected high bits set");
919            support::endian::write32be(&RecordedHash[Pos], Val);
920            Pos += 4;
921          }
922          if (Hash == StringRef(RecordedHash.data(), RecordedHash.size()))
923            O->OS << " (match)";
924          else
925            O->OS << " (!mismatch!)";
926        }
927      }
928
929      O->OS << "/>";
930
931      if (Abbv) {
932        for (unsigned i = 1, e = Abbv->getNumOperandInfos(); i != e; ++i) {
933          const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i);
934          if (!Op.isEncoding() || Op.getEncoding() != BitCodeAbbrevOp::Array)
935            continue;
936          assert(i + 2 == e && "Array op not second to last");
937          std::string Str;
938          bool ArrayIsPrintable = true;
939          for (unsigned j = i - 1, je = Record.size(); j != je; ++j) {
940            if (!isPrint(static_cast<unsigned char>(Record[j]))) {
941              ArrayIsPrintable = false;
942              break;
943            }
944            Str += (char)Record[j];
945          }
946          if (ArrayIsPrintable)
947            O->OS << " record string = '" << Str << "'";
948          break;
949        }
950      }
951
952      if (Blob.data()) {
953        if (canDecodeBlob(Code, BlockID)) {
954          if (Error E = decodeMetadataStringsBlob(Indent, Record, Blob, O->OS))
955            return E;
956        } else {
957          O->OS << " blob data = ";
958          if (O->ShowBinaryBlobs) {
959            O->OS << "'";
960            O->OS.write_escaped(Blob, /*hex=*/true) << "'";
961          } else {
962            bool BlobIsPrintable = true;
963            for (unsigned i = 0, e = Blob.size(); i != e; ++i)
964              if (!isPrint(static_cast<unsigned char>(Blob[i]))) {
965                BlobIsPrintable = false;
966                break;
967              }
968
969            if (BlobIsPrintable)
970              O->OS << "'" << Blob << "'";
971            else
972              O->OS << "unprintable, " << Blob.size() << " bytes.";
973          }
974        }
975      }
976
977      O->OS << "\n";
978    }
979
980    // Make sure that we can skip the current record.
981    if (Error Err = Stream.JumpToBit(CurrentRecordPos))
982      return Err;
983    if (Expected<unsigned> Skipped = Stream.skipRecord(Entry.ID))
984      ; // Do nothing.
985    else
986      return Skipped.takeError();
987  }
988}
989
990