BitcodeReader.cpp revision e16504eb4ef8f09611cdf6e9a0be9eb886b4ed89
1//===- BitcodeReader.cpp - Internal BitcodeReader implementation ----------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file was developed by Chris Lattner and is distributed under
6// the University of Illinois Open Source License.  See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This header defines the BitcodeReader class.
11//
12//===----------------------------------------------------------------------===//
13
14#include "BitcodeReader.h"
15#include "llvm/Bitcode/BitstreamReader.h"
16#include "llvm/Constants.h"
17#include "llvm/DerivedTypes.h"
18#include "llvm/Module.h"
19#include "llvm/ADT/SmallString.h"
20using namespace llvm;
21
22/// ConvertToString - Convert a string from a record into an std::string, return
23/// true on failure.
24template<typename StrTy>
25static bool ConvertToString(SmallVector<uint64_t, 64> &Record, unsigned Idx,
26                            StrTy &Result) {
27  if (Record.size() < Idx+1 || Record.size() < Record[Idx]+Idx+1)
28    return true;
29
30  for (unsigned i = 0, e = Record[Idx]; i != e; ++i)
31    Result += (char)Record[Idx+i+1];
32  return false;
33}
34
35static GlobalValue::LinkageTypes GetDecodedLinkage(unsigned Val) {
36  switch (Val) {
37  default: // Map unknown/new linkages to external
38  case 0: return GlobalValue::ExternalLinkage;
39  case 1: return GlobalValue::WeakLinkage;
40  case 2: return GlobalValue::AppendingLinkage;
41  case 3: return GlobalValue::InternalLinkage;
42  case 4: return GlobalValue::LinkOnceLinkage;
43  case 5: return GlobalValue::DLLImportLinkage;
44  case 6: return GlobalValue::DLLExportLinkage;
45  case 7: return GlobalValue::ExternalWeakLinkage;
46  }
47}
48
49static GlobalValue::VisibilityTypes GetDecodedVisibility(unsigned Val) {
50  switch (Val) {
51  default: // Map unknown visibilities to default.
52  case 0: return GlobalValue::DefaultVisibility;
53  case 1: return GlobalValue::HiddenVisibility;
54  }
55}
56
57
58const Type *BitcodeReader::getTypeByID(unsigned ID, bool isTypeTable) {
59  // If the TypeID is in range, return it.
60  if (ID < TypeList.size())
61    return TypeList[ID].get();
62  if (!isTypeTable) return 0;
63
64  // The type table allows forward references.  Push as many Opaque types as
65  // needed to get up to ID.
66  while (TypeList.size() <= ID)
67    TypeList.push_back(OpaqueType::get());
68  return TypeList.back().get();
69}
70
71
72bool BitcodeReader::ParseTypeTable(BitstreamReader &Stream) {
73  if (Stream.EnterSubBlock())
74    return Error("Malformed block record");
75
76  if (!TypeList.empty())
77    return Error("Multiple TYPE_BLOCKs found!");
78
79  SmallVector<uint64_t, 64> Record;
80  unsigned NumRecords = 0;
81
82  // Read all the records for this type table.
83  while (1) {
84    unsigned Code = Stream.ReadCode();
85    if (Code == bitc::END_BLOCK) {
86      if (NumRecords != TypeList.size())
87        return Error("Invalid type forward reference in TYPE_BLOCK");
88      return Stream.ReadBlockEnd();
89    }
90
91    if (Code == bitc::ENTER_SUBBLOCK) {
92      // No known subblocks, always skip them.
93      Stream.ReadSubBlockID();
94      if (Stream.SkipBlock())
95        return Error("Malformed block record");
96      continue;
97    }
98
99    if (Code == bitc::DEFINE_ABBREV) {
100      Stream.ReadAbbrevRecord();
101      continue;
102    }
103
104    // Read a record.
105    Record.clear();
106    const Type *ResultTy = 0;
107    switch (Stream.ReadRecord(Code, Record)) {
108    default:  // Default behavior: unknown type.
109      ResultTy = 0;
110      break;
111    case bitc::TYPE_CODE_NUMENTRY: // TYPE_CODE_NUMENTRY: [numentries]
112      // TYPE_CODE_NUMENTRY contains a count of the number of types in the
113      // type list.  This allows us to reserve space.
114      if (Record.size() < 1)
115        return Error("Invalid TYPE_CODE_NUMENTRY record");
116      TypeList.reserve(Record[0]);
117      continue;
118    case bitc::TYPE_CODE_META:      // TYPE_CODE_META: [metacode]...
119      // No metadata supported yet.
120      if (Record.size() < 1)
121        return Error("Invalid TYPE_CODE_META record");
122      continue;
123
124    case bitc::TYPE_CODE_VOID:      // VOID
125      ResultTy = Type::VoidTy;
126      break;
127    case bitc::TYPE_CODE_FLOAT:     // FLOAT
128      ResultTy = Type::FloatTy;
129      break;
130    case bitc::TYPE_CODE_DOUBLE:    // DOUBLE
131      ResultTy = Type::DoubleTy;
132      break;
133    case bitc::TYPE_CODE_LABEL:     // LABEL
134      ResultTy = Type::LabelTy;
135      break;
136    case bitc::TYPE_CODE_OPAQUE:    // OPAQUE
137      ResultTy = 0;
138      break;
139    case bitc::TYPE_CODE_INTEGER:   // INTEGER: [width]
140      if (Record.size() < 1)
141        return Error("Invalid Integer type record");
142
143      ResultTy = IntegerType::get(Record[0]);
144      break;
145    case bitc::TYPE_CODE_POINTER:   // POINTER: [pointee type]
146      if (Record.size() < 1)
147        return Error("Invalid POINTER type record");
148      ResultTy = PointerType::get(getTypeByID(Record[0], true));
149      break;
150    case bitc::TYPE_CODE_FUNCTION: {
151      // FUNCTION: [vararg, retty, #pararms, paramty N]
152      if (Record.size() < 3 || Record.size() < Record[2]+3)
153        return Error("Invalid FUNCTION type record");
154      std::vector<const Type*> ArgTys;
155      for (unsigned i = 0, e = Record[2]; i != e; ++i)
156        ArgTys.push_back(getTypeByID(Record[3+i], true));
157
158      // FIXME: PARAM TYS.
159      ResultTy = FunctionType::get(getTypeByID(Record[1], true), ArgTys,
160                                   Record[0]);
161      break;
162    }
163    case bitc::TYPE_CODE_STRUCT: {  // STRUCT: [ispacked, #elts, eltty x N]
164      if (Record.size() < 2 || Record.size() < Record[1]+2)
165        return Error("Invalid STRUCT type record");
166      std::vector<const Type*> EltTys;
167      for (unsigned i = 0, e = Record[1]; i != e; ++i)
168        EltTys.push_back(getTypeByID(Record[2+i], true));
169      ResultTy = StructType::get(EltTys, Record[0]);
170      break;
171    }
172    case bitc::TYPE_CODE_ARRAY:     // ARRAY: [numelts, eltty]
173      if (Record.size() < 2)
174        return Error("Invalid ARRAY type record");
175      ResultTy = ArrayType::get(getTypeByID(Record[1], true), Record[0]);
176      break;
177    case bitc::TYPE_CODE_VECTOR:    // VECTOR: [numelts, eltty]
178      if (Record.size() < 2)
179        return Error("Invalid VECTOR type record");
180      ResultTy = VectorType::get(getTypeByID(Record[1], true), Record[0]);
181      break;
182    }
183
184    if (NumRecords == TypeList.size()) {
185      // If this is a new type slot, just append it.
186      TypeList.push_back(ResultTy ? ResultTy : OpaqueType::get());
187      ++NumRecords;
188    } else if (ResultTy == 0) {
189      // Otherwise, this was forward referenced, so an opaque type was created,
190      // but the result type is actually just an opaque.  Leave the one we
191      // created previously.
192      ++NumRecords;
193    } else {
194      // Otherwise, this was forward referenced, so an opaque type was created.
195      // Resolve the opaque type to the real type now.
196      assert(NumRecords < TypeList.size() && "Typelist imbalance");
197      const OpaqueType *OldTy = cast<OpaqueType>(TypeList[NumRecords++].get());
198
199      // Don't directly push the new type on the Tab. Instead we want to replace
200      // the opaque type we previously inserted with the new concrete value. The
201      // refinement from the abstract (opaque) type to the new type causes all
202      // uses of the abstract type to use the concrete type (NewTy). This will
203      // also cause the opaque type to be deleted.
204      const_cast<OpaqueType*>(OldTy)->refineAbstractTypeTo(ResultTy);
205
206      // This should have replaced the old opaque type with the new type in the
207      // value table... or with a preexisting type that was already in the system.
208      // Let's just make sure it did.
209      assert(TypeList[NumRecords-1].get() != OldTy &&
210             "refineAbstractType didn't work!");
211    }
212  }
213}
214
215
216bool BitcodeReader::ParseTypeSymbolTable(BitstreamReader &Stream) {
217  if (Stream.EnterSubBlock())
218    return Error("Malformed block record");
219
220  SmallVector<uint64_t, 64> Record;
221
222  // Read all the records for this type table.
223  std::string TypeName;
224  while (1) {
225    unsigned Code = Stream.ReadCode();
226    if (Code == bitc::END_BLOCK)
227      return Stream.ReadBlockEnd();
228
229    if (Code == bitc::ENTER_SUBBLOCK) {
230      // No known subblocks, always skip them.
231      Stream.ReadSubBlockID();
232      if (Stream.SkipBlock())
233        return Error("Malformed block record");
234      continue;
235    }
236
237    if (Code == bitc::DEFINE_ABBREV) {
238      Stream.ReadAbbrevRecord();
239      continue;
240    }
241
242    // Read a record.
243    Record.clear();
244    switch (Stream.ReadRecord(Code, Record)) {
245    default:  // Default behavior: unknown type.
246      break;
247    case bitc::TST_CODE_ENTRY:    // TST_ENTRY: [typeid, namelen, namechar x N]
248      if (ConvertToString(Record, 1, TypeName))
249        return Error("Invalid TST_ENTRY record");
250      unsigned TypeID = Record[0];
251      if (TypeID >= TypeList.size())
252        return Error("Invalid Type ID in TST_ENTRY record");
253
254      TheModule->addTypeName(TypeName, TypeList[TypeID].get());
255      TypeName.clear();
256      break;
257    }
258  }
259}
260
261bool BitcodeReader::ParseValueSymbolTable(BitstreamReader &Stream) {
262  if (Stream.EnterSubBlock())
263    return Error("Malformed block record");
264
265  SmallVector<uint64_t, 64> Record;
266
267  // Read all the records for this value table.
268  SmallString<128> ValueName;
269  while (1) {
270    unsigned Code = Stream.ReadCode();
271    if (Code == bitc::END_BLOCK)
272      return Stream.ReadBlockEnd();
273
274    if (Code == bitc::ENTER_SUBBLOCK) {
275      // No known subblocks, always skip them.
276      Stream.ReadSubBlockID();
277      if (Stream.SkipBlock())
278        return Error("Malformed block record");
279      continue;
280    }
281
282    if (Code == bitc::DEFINE_ABBREV) {
283      Stream.ReadAbbrevRecord();
284      continue;
285    }
286
287    // Read a record.
288    Record.clear();
289    switch (Stream.ReadRecord(Code, Record)) {
290    default:  // Default behavior: unknown type.
291      break;
292    case bitc::TST_CODE_ENTRY:    // VST_ENTRY: [valueid, namelen, namechar x N]
293      if (ConvertToString(Record, 1, ValueName))
294        return Error("Invalid TST_ENTRY record");
295      unsigned ValueID = Record[0];
296      if (ValueID >= ValueList.size())
297        return Error("Invalid Value ID in VST_ENTRY record");
298      Value *V = ValueList[ValueID];
299
300      V->setName(&ValueName[0], ValueName.size());
301      ValueName.clear();
302      break;
303    }
304  }
305}
306
307bool BitcodeReader::ParseConstants(BitstreamReader &Stream) {
308  if (Stream.EnterSubBlock())
309    return Error("Malformed block record");
310
311  SmallVector<uint64_t, 64> Record;
312
313  // Read all the records for this value table.
314  const Type *CurTy = Type::Int32Ty;
315  while (1) {
316    unsigned Code = Stream.ReadCode();
317    if (Code == bitc::END_BLOCK) {
318      // If there are global var inits to process, do so now.
319      if (!GlobalInits.empty()) {
320        while (!GlobalInits.empty()) {
321          unsigned ValID = GlobalInits.back().second;
322          if (ValID >= ValueList.size())
323            return Error("Invalid value ID for global var init!");
324          if (Constant *C = dyn_cast<Constant>(ValueList[ValID]))
325            GlobalInits.back().first->setInitializer(C);
326          else
327            return Error("Global variable initializer is not a constant!");
328          GlobalInits.pop_back();
329        }
330      }
331
332      return Stream.ReadBlockEnd();
333    }
334
335    if (Code == bitc::ENTER_SUBBLOCK) {
336      // No known subblocks, always skip them.
337      Stream.ReadSubBlockID();
338      if (Stream.SkipBlock())
339        return Error("Malformed block record");
340      continue;
341    }
342
343    if (Code == bitc::DEFINE_ABBREV) {
344      Stream.ReadAbbrevRecord();
345      continue;
346    }
347
348    // Read a record.
349    Record.clear();
350    Value *V = 0;
351    switch (Stream.ReadRecord(Code, Record)) {
352    default:  // Default behavior: unknown constant
353    case bitc::CST_CODE_UNDEF:     // UNDEF
354      V = UndefValue::get(CurTy);
355      break;
356    case bitc::CST_CODE_SETTYPE:   // SETTYPE: [typeid]
357      if (Record.empty())
358        return Error("Malformed CST_SETTYPE record");
359      if (Record[0] >= TypeList.size())
360        return Error("Invalid Type ID in CST_SETTYPE record");
361      CurTy = TypeList[Record[0]];
362      continue;
363    case bitc::CST_CODE_NULL:      // NULL
364      V = Constant::getNullValue(CurTy);
365      break;
366    case bitc::CST_CODE_INTEGER:   // INTEGER: [intval]
367      if (!isa<IntegerType>(CurTy))
368        return Error("Invalid type for CST_INTEGER");
369      if (Record[0] & 1)
370        V = ConstantInt::get(CurTy, -(Record[0]>>1));
371      else
372        V = ConstantInt::get(CurTy, Record[0]>>1);
373      break;
374    }
375
376    ValueList.push_back(V);
377  }
378}
379
380bool BitcodeReader::ParseModule(BitstreamReader &Stream,
381                                const std::string &ModuleID) {
382  // Reject multiple MODULE_BLOCK's in a single bitstream.
383  if (TheModule)
384    return Error("Multiple MODULE_BLOCKs in same stream");
385
386  if (Stream.EnterSubBlock())
387    return Error("Malformed block record");
388
389  // Otherwise, create the module.
390  TheModule = new Module(ModuleID);
391
392  SmallVector<uint64_t, 64> Record;
393  std::vector<std::string> SectionTable;
394
395  // Read all the records for this module.
396  while (!Stream.AtEndOfStream()) {
397    unsigned Code = Stream.ReadCode();
398    if (Code == bitc::END_BLOCK) {
399      if (!GlobalInits.empty())
400        return Error("Malformed global initializer set");
401      return Stream.ReadBlockEnd();
402    }
403
404    if (Code == bitc::ENTER_SUBBLOCK) {
405      switch (Stream.ReadSubBlockID()) {
406      default:  // Skip unknown content.
407        if (Stream.SkipBlock())
408          return Error("Malformed block record");
409        break;
410      case bitc::TYPE_BLOCK_ID:
411        if (ParseTypeTable(Stream))
412          return true;
413        break;
414      case bitc::TYPE_SYMTAB_BLOCK_ID:
415        if (ParseTypeSymbolTable(Stream))
416          return true;
417        break;
418      case bitc::VALUE_SYMTAB_BLOCK_ID:
419        if (ParseValueSymbolTable(Stream))
420          return true;
421        break;
422      case bitc::CONSTANTS_BLOCK_ID:
423        if (ParseConstants(Stream))
424          return true;
425        break;
426      }
427      continue;
428    }
429
430    if (Code == bitc::DEFINE_ABBREV) {
431      Stream.ReadAbbrevRecord();
432      continue;
433    }
434
435    // Read a record.
436    switch (Stream.ReadRecord(Code, Record)) {
437    default: break;  // Default behavior, ignore unknown content.
438    case bitc::MODULE_CODE_VERSION:  // VERSION: [version#]
439      if (Record.size() < 1)
440        return Error("Malformed MODULE_CODE_VERSION");
441      // Only version #0 is supported so far.
442      if (Record[0] != 0)
443        return Error("Unknown bitstream version!");
444      break;
445    case bitc::MODULE_CODE_TRIPLE: {  // TRIPLE: [strlen, strchr x N]
446      std::string S;
447      if (ConvertToString(Record, 0, S))
448        return Error("Invalid MODULE_CODE_TRIPLE record");
449      TheModule->setTargetTriple(S);
450      break;
451    }
452    case bitc::MODULE_CODE_DATALAYOUT: {  // DATALAYOUT: [strlen, strchr x N]
453      std::string S;
454      if (ConvertToString(Record, 0, S))
455        return Error("Invalid MODULE_CODE_DATALAYOUT record");
456      TheModule->setDataLayout(S);
457      break;
458    }
459    case bitc::MODULE_CODE_ASM: {  // ASM: [strlen, strchr x N]
460      std::string S;
461      if (ConvertToString(Record, 0, S))
462        return Error("Invalid MODULE_CODE_ASM record");
463      TheModule->setModuleInlineAsm(S);
464      break;
465    }
466    case bitc::MODULE_CODE_DEPLIB: {  // DEPLIB: [strlen, strchr x N]
467      std::string S;
468      if (ConvertToString(Record, 0, S))
469        return Error("Invalid MODULE_CODE_DEPLIB record");
470      TheModule->addLibrary(S);
471      break;
472    }
473    case bitc::MODULE_CODE_SECTIONNAME: {  // SECTIONNAME: [strlen, strchr x N]
474      std::string S;
475      if (ConvertToString(Record, 0, S))
476        return Error("Invalid MODULE_CODE_SECTIONNAME record");
477      SectionTable.push_back(S);
478      break;
479    }
480    // GLOBALVAR: [type, isconst, initid,
481    //             linkage, alignment, section, visibility, threadlocal]
482    case bitc::MODULE_CODE_GLOBALVAR: {
483      if (Record.size() < 6)
484        return Error("Invalid MODULE_CODE_GLOBALVAR record");
485      const Type *Ty = getTypeByID(Record[0]);
486      if (!isa<PointerType>(Ty))
487        return Error("Global not a pointer type!");
488      Ty = cast<PointerType>(Ty)->getElementType();
489
490      bool isConstant = Record[1];
491      GlobalValue::LinkageTypes Linkage = GetDecodedLinkage(Record[3]);
492      unsigned Alignment = (1 << Record[4]) >> 1;
493      std::string Section;
494      if (Record[5]) {
495        if (Record[5]-1 >= SectionTable.size())
496          return Error("Invalid section ID");
497        Section = SectionTable[Record[5]-1];
498      }
499      GlobalValue::VisibilityTypes Visibility = GlobalValue::DefaultVisibility;
500      if (Record.size() >= 6) Visibility = GetDecodedVisibility(Record[6]);
501      bool isThreadLocal = false;
502      if (Record.size() >= 7) isThreadLocal = Record[7];
503
504      GlobalVariable *NewGV =
505        new GlobalVariable(Ty, isConstant, Linkage, 0, "", TheModule);
506      NewGV->setAlignment(Alignment);
507      if (!Section.empty())
508        NewGV->setSection(Section);
509      NewGV->setVisibility(Visibility);
510      NewGV->setThreadLocal(isThreadLocal);
511
512      ValueList.push_back(NewGV);
513
514      // Remember which value to use for the global initializer.
515      if (unsigned InitID = Record[2])
516        GlobalInits.push_back(std::make_pair(NewGV, InitID-1));
517      break;
518    }
519    // FUNCTION:  [type, callingconv, isproto, linkage, alignment, section,
520    //             visibility]
521    case bitc::MODULE_CODE_FUNCTION: {
522      if (Record.size() < 7)
523        return Error("Invalid MODULE_CODE_FUNCTION record");
524      const Type *Ty = getTypeByID(Record[0]);
525      if (!isa<PointerType>(Ty))
526        return Error("Function not a pointer type!");
527      const FunctionType *FTy =
528        dyn_cast<FunctionType>(cast<PointerType>(Ty)->getElementType());
529      if (!FTy)
530        return Error("Function not a pointer to function type!");
531
532      Function *Func = new Function(FTy, GlobalValue::ExternalLinkage,
533                                    "", TheModule);
534
535      Func->setCallingConv(Record[1]);
536      Func->setLinkage(GetDecodedLinkage(Record[3]));
537      Func->setAlignment((1 << Record[4]) >> 1);
538      if (Record[5]) {
539        if (Record[5]-1 >= SectionTable.size())
540          return Error("Invalid section ID");
541        Func->setSection(SectionTable[Record[5]-1]);
542      }
543      Func->setVisibility(GetDecodedVisibility(Record[6]));
544
545      ValueList.push_back(Func);
546      // TODO: remember initializer/global pair for later substitution.
547      break;
548    }
549    }
550    Record.clear();
551  }
552
553  return Error("Premature end of bitstream");
554}
555
556
557bool BitcodeReader::ParseBitcode(unsigned char *Buf, unsigned Length,
558                                 const std::string &ModuleID) {
559  TheModule = 0;
560
561  if (Length & 3)
562    return Error("Bitcode stream should be a multiple of 4 bytes in length");
563
564  BitstreamReader Stream(Buf, Buf+Length);
565
566  // Sniff for the signature.
567  if (Stream.Read(8) != 'B' ||
568      Stream.Read(8) != 'C' ||
569      Stream.Read(4) != 0x0 ||
570      Stream.Read(4) != 0xC ||
571      Stream.Read(4) != 0xE ||
572      Stream.Read(4) != 0xD)
573    return Error("Invalid bitcode signature");
574
575  // We expect a number of well-defined blocks, though we don't necessarily
576  // need to understand them all.
577  while (!Stream.AtEndOfStream()) {
578    unsigned Code = Stream.ReadCode();
579
580    if (Code != bitc::ENTER_SUBBLOCK)
581      return Error("Invalid record at top-level");
582
583    unsigned BlockID = Stream.ReadSubBlockID();
584
585    // We only know the MODULE subblock ID.
586    if (BlockID == bitc::MODULE_BLOCK_ID) {
587      if (ParseModule(Stream, ModuleID))
588        return true;
589    } else if (Stream.SkipBlock()) {
590      return Error("Malformed block record");
591    }
592  }
593
594  return false;
595}
596