parent
							
								
									b32f5748b7
								
							
						
					
					
						commit
						dc83293a38
					
				| 
						 | 
					@ -434,14 +434,24 @@ void BytecodeParser::ParseModuleGlobalInfo(const unsigned char *&Buf,
 | 
				
			||||||
    GlobalValue::LinkageTypes Linkage;
 | 
					    GlobalValue::LinkageTypes Linkage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!hasInternalMarkerOnly) {
 | 
					    if (!hasInternalMarkerOnly) {
 | 
				
			||||||
      // VarType Fields: bit0 = isConstant, bit1 = hasInitializer,
 | 
					      unsigned LinkageID;
 | 
				
			||||||
      // bit2,3 = Linkage, bit4+ = slot#
 | 
					      if (hasExtendedLinkageSpecs) {
 | 
				
			||||||
      SlotNo = VarType >> 4;
 | 
					        // VarType Fields: bit0 = isConstant, bit1 = hasInitializer,
 | 
				
			||||||
      switch ((VarType >> 2) & 3) {
 | 
					        // bit2,3,4 = Linkage, bit4+ = slot#
 | 
				
			||||||
 | 
					        SlotNo = VarType >> 5;
 | 
				
			||||||
 | 
					        LinkageID = (VarType >> 2) & 7;
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        // VarType Fields: bit0 = isConstant, bit1 = hasInitializer,
 | 
				
			||||||
 | 
					        // bit2,3 = Linkage, bit4+ = slot#
 | 
				
			||||||
 | 
					        SlotNo = VarType >> 4;
 | 
				
			||||||
 | 
					        LinkageID = (VarType >> 2) & 3;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      switch (LinkageID) {
 | 
				
			||||||
      case 0: Linkage = GlobalValue::ExternalLinkage;  break;
 | 
					      case 0: Linkage = GlobalValue::ExternalLinkage;  break;
 | 
				
			||||||
      case 1: Linkage = GlobalValue::WeakLinkage;      break;
 | 
					      case 1: Linkage = GlobalValue::WeakLinkage;      break;
 | 
				
			||||||
      case 2: Linkage = GlobalValue::AppendingLinkage; break;
 | 
					      case 2: Linkage = GlobalValue::AppendingLinkage; break;
 | 
				
			||||||
      case 3: Linkage = GlobalValue::InternalLinkage;  break;
 | 
					      case 3: Linkage = GlobalValue::InternalLinkage;  break;
 | 
				
			||||||
 | 
					      case 4: Linkage = GlobalValue::LinkOnceLinkage;  break;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      // VarType Fields: bit0 = isConstant, bit1 = hasInitializer,
 | 
					      // VarType Fields: bit0 = isConstant, bit1 = hasInitializer,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -162,10 +162,10 @@ static unsigned getEncodedLinkage(const GlobalValue *GV) {
 | 
				
			||||||
  switch (GV->getLinkage()) {
 | 
					  switch (GV->getLinkage()) {
 | 
				
			||||||
  default: assert(0 && "Invalid linkage!");
 | 
					  default: assert(0 && "Invalid linkage!");
 | 
				
			||||||
  case GlobalValue::ExternalLinkage:  return 0;
 | 
					  case GlobalValue::ExternalLinkage:  return 0;
 | 
				
			||||||
  case GlobalValue::LinkOnceLinkage:  return 1;
 | 
					 | 
				
			||||||
  case GlobalValue::WeakLinkage:      return 1;
 | 
					  case GlobalValue::WeakLinkage:      return 1;
 | 
				
			||||||
  case GlobalValue::AppendingLinkage: return 2;
 | 
					  case GlobalValue::AppendingLinkage: return 2;
 | 
				
			||||||
  case GlobalValue::InternalLinkage:  return 3;
 | 
					  case GlobalValue::InternalLinkage:  return 3;
 | 
				
			||||||
 | 
					  case GlobalValue::LinkOnceLinkage:  return 4;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -177,9 +177,9 @@ void BytecodeWriter::outputModuleInfoBlock(const Module *M) {
 | 
				
			||||||
    int Slot = Table.getSlot(I->getType());
 | 
					    int Slot = Table.getSlot(I->getType());
 | 
				
			||||||
    assert(Slot != -1 && "Module global vars is broken!");
 | 
					    assert(Slot != -1 && "Module global vars is broken!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Fields: bit0 = isConstant, bit1 = hasInitializer, bit2,3=Linkage,
 | 
					    // Fields: bit0 = isConstant, bit1 = hasInitializer, bit2-4=Linkage,
 | 
				
			||||||
    // bit4+ = Slot # for type
 | 
					    // bit5+ = Slot # for type
 | 
				
			||||||
    unsigned oSlot = ((unsigned)Slot << 4) | (getEncodedLinkage(I) << 2) |
 | 
					    unsigned oSlot = ((unsigned)Slot << 5) | (getEncodedLinkage(I) << 2) |
 | 
				
			||||||
                     (I->hasInitializer() << 1) | I->isConstant();
 | 
					                     (I->hasInitializer() << 1) | I->isConstant();
 | 
				
			||||||
    output_vbr(oSlot, Out);
 | 
					    output_vbr(oSlot, Out);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue