Home | History | Annotate | Download | only in CodeGen
      1 //===-- ELFWriter.cpp - Target-independent ELF Writer code ----------------===//
      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 // This file implements the target-independent ELF writer.  This file writes out
     11 // the ELF file in the following order:
     12 //
     13 //  #1. ELF Header
     14 //  #2. '.text' section
     15 //  #3. '.data' section
     16 //  #4. '.bss' section  (conceptual position in file)
     17 //  ...
     18 //  #X. '.shstrtab' section
     19 //  #Y. Section Table
     20 //
     21 // The entries in the section table are laid out as:
     22 //  #0. Null entry [required]
     23 //  #1. ".text" entry - the program code
     24 //  #2. ".data" entry - global variables with initializers.     [ if needed ]
     25 //  #3. ".bss" entry  - global variables without initializers.  [ if needed ]
     26 //  ...
     27 //  #N. ".shstrtab" entry - String table for the section names.
     28 //
     29 //===----------------------------------------------------------------------===//
     30 
     31 #define DEBUG_TYPE "elfwriter"
     32 #include "ELF.h"
     33 #include "ELFWriter.h"
     34 #include "ELFCodeEmitter.h"
     35 #include "llvm/Constants.h"
     36 #include "llvm/Module.h"
     37 #include "llvm/PassManager.h"
     38 #include "llvm/DerivedTypes.h"
     39 #include "llvm/CodeGen/BinaryObject.h"
     40 #include "llvm/CodeGen/MachineCodeEmitter.h"
     41 #include "llvm/CodeGen/ObjectCodeEmitter.h"
     42 #include "llvm/CodeGen/MachineCodeEmitter.h"
     43 #include "llvm/CodeGen/MachineConstantPool.h"
     44 #include "llvm/MC/MCContext.h"
     45 #include "llvm/MC/MCSectionELF.h"
     46 #include "llvm/MC/MCAsmInfo.h"
     47 #include "llvm/Target/Mangler.h"
     48 #include "llvm/Target/TargetData.h"
     49 #include "llvm/Target/TargetELFWriterInfo.h"
     50 #include "llvm/Target/TargetLowering.h"
     51 #include "llvm/Target/TargetLoweringObjectFile.h"
     52 #include "llvm/Target/TargetMachine.h"
     53 #include "llvm/Target/TargetRegisterInfo.h"
     54 #include "llvm/Support/Debug.h"
     55 #include "llvm/Support/ErrorHandling.h"
     56 #include "llvm/Support/raw_ostream.h"
     57 #include "llvm/ADT/SmallString.h"
     58 using namespace llvm;
     59 
     60 char ELFWriter::ID = 0;
     61 
     62 //===----------------------------------------------------------------------===//
     63 //                          ELFWriter Implementation
     64 //===----------------------------------------------------------------------===//
     65 
     66 ELFWriter::ELFWriter(raw_ostream &o, TargetMachine &tm)
     67   : MachineFunctionPass(ID), O(o), TM(tm),
     68     OutContext(*new MCContext(*TM.getMCAsmInfo(), *TM.getRegisterInfo(),
     69                               &TM.getTargetLowering()->getObjFileLowering())),
     70     TLOF(TM.getTargetLowering()->getObjFileLowering()),
     71     is64Bit(TM.getTargetData()->getPointerSizeInBits() == 64),
     72     isLittleEndian(TM.getTargetData()->isLittleEndian()),
     73     ElfHdr(isLittleEndian, is64Bit) {
     74 
     75   MAI = TM.getMCAsmInfo();
     76   TEW = TM.getELFWriterInfo();
     77 
     78   // Create the object code emitter object for this target.
     79   ElfCE = new ELFCodeEmitter(*this);
     80 
     81   // Initial number of sections
     82   NumSections = 0;
     83 }
     84 
     85 ELFWriter::~ELFWriter() {
     86   delete ElfCE;
     87   delete &OutContext;
     88 
     89   while(!SymbolList.empty()) {
     90     delete SymbolList.back();
     91     SymbolList.pop_back();
     92   }
     93 
     94   while(!PrivateSyms.empty()) {
     95     delete PrivateSyms.back();
     96     PrivateSyms.pop_back();
     97   }
     98 
     99   while(!SectionList.empty()) {
    100     delete SectionList.back();
    101     SectionList.pop_back();
    102   }
    103 
    104   // Release the name mangler object.
    105   delete Mang; Mang = 0;
    106 }
    107 
    108 // doInitialization - Emit the file header and all of the global variables for
    109 // the module to the ELF file.
    110 bool ELFWriter::doInitialization(Module &M) {
    111   // Initialize TargetLoweringObjectFile.
    112   const_cast<TargetLoweringObjectFile&>(TLOF).Initialize(OutContext, TM);
    113 
    114   Mang = new Mangler(OutContext, *TM.getTargetData());
    115 
    116   // ELF Header
    117   // ----------
    118   // Fields e_shnum e_shstrndx are only known after all section have
    119   // been emitted. They locations in the ouput buffer are recorded so
    120   // to be patched up later.
    121   //
    122   // Note
    123   // ----
    124   // emitWord method behaves differently for ELF32 and ELF64, writing
    125   // 4 bytes in the former and 8 in the last for *_off and *_addr elf types
    126 
    127   ElfHdr.emitByte(0x7f); // e_ident[EI_MAG0]
    128   ElfHdr.emitByte('E');  // e_ident[EI_MAG1]
    129   ElfHdr.emitByte('L');  // e_ident[EI_MAG2]
    130   ElfHdr.emitByte('F');  // e_ident[EI_MAG3]
    131 
    132   ElfHdr.emitByte(TEW->getEIClass()); // e_ident[EI_CLASS]
    133   ElfHdr.emitByte(TEW->getEIData());  // e_ident[EI_DATA]
    134   ElfHdr.emitByte(ELF::EV_CURRENT);   // e_ident[EI_VERSION]
    135   ElfHdr.emitAlignment(16);           // e_ident[EI_NIDENT-EI_PAD]
    136 
    137   ElfHdr.emitWord16(ELF::ET_REL);        // e_type
    138   ElfHdr.emitWord16(TEW->getEMachine()); // e_machine = target
    139   ElfHdr.emitWord32(ELF::EV_CURRENT);    // e_version
    140   ElfHdr.emitWord(0);                    // e_entry, no entry point in .o file
    141   ElfHdr.emitWord(0);                    // e_phoff, no program header for .o
    142   ELFHdr_e_shoff_Offset = ElfHdr.size();
    143   ElfHdr.emitWord(0);                    // e_shoff = sec hdr table off in bytes
    144   ElfHdr.emitWord32(TEW->getEFlags());   // e_flags = whatever the target wants
    145   ElfHdr.emitWord16(TEW->getHdrSize());  // e_ehsize = ELF header size
    146   ElfHdr.emitWord16(0);                  // e_phentsize = prog header entry size
    147   ElfHdr.emitWord16(0);                  // e_phnum = # prog header entries = 0
    148 
    149   // e_shentsize = Section header entry size
    150   ElfHdr.emitWord16(TEW->getSHdrSize());
    151 
    152   // e_shnum     = # of section header ents
    153   ELFHdr_e_shnum_Offset = ElfHdr.size();
    154   ElfHdr.emitWord16(0); // Placeholder
    155 
    156   // e_shstrndx  = Section # of '.shstrtab'
    157   ELFHdr_e_shstrndx_Offset = ElfHdr.size();
    158   ElfHdr.emitWord16(0); // Placeholder
    159 
    160   // Add the null section, which is required to be first in the file.
    161   getNullSection();
    162 
    163   // The first entry in the symtab is the null symbol and the second
    164   // is a local symbol containing the module/file name
    165   SymbolList.push_back(new ELFSym());
    166   SymbolList.push_back(ELFSym::getFileSym());
    167 
    168   return false;
    169 }
    170 
    171 // AddPendingGlobalSymbol - Add a global to be processed and to
    172 // the global symbol lookup, use a zero index because the table
    173 // index will be determined later.
    174 void ELFWriter::AddPendingGlobalSymbol(const GlobalValue *GV,
    175                                        bool AddToLookup /* = false */) {
    176   PendingGlobals.insert(GV);
    177   if (AddToLookup)
    178     GblSymLookup[GV] = 0;
    179 }
    180 
    181 // AddPendingExternalSymbol - Add the external to be processed
    182 // and to the external symbol lookup, use a zero index because
    183 // the symbol table index will be determined later.
    184 void ELFWriter::AddPendingExternalSymbol(const char *External) {
    185   PendingExternals.insert(External);
    186   ExtSymLookup[External] = 0;
    187 }
    188 
    189 ELFSection &ELFWriter::getDataSection() {
    190   const MCSectionELF *Data = (const MCSectionELF *)TLOF.getDataSection();
    191   return getSection(Data->getSectionName(), Data->getType(),
    192                     Data->getFlags(), 4);
    193 }
    194 
    195 ELFSection &ELFWriter::getBSSSection() {
    196   const MCSectionELF *BSS = (const MCSectionELF *)TLOF.getBSSSection();
    197   return getSection(BSS->getSectionName(), BSS->getType(), BSS->getFlags(), 4);
    198 }
    199 
    200 // getCtorSection - Get the static constructor section
    201 ELFSection &ELFWriter::getCtorSection() {
    202   const MCSectionELF *Ctor = (const MCSectionELF *)TLOF.getStaticCtorSection();
    203   return getSection(Ctor->getSectionName(), Ctor->getType(), Ctor->getFlags());
    204 }
    205 
    206 // getDtorSection - Get the static destructor section
    207 ELFSection &ELFWriter::getDtorSection() {
    208   const MCSectionELF *Dtor = (const MCSectionELF *)TLOF.getStaticDtorSection();
    209   return getSection(Dtor->getSectionName(), Dtor->getType(), Dtor->getFlags());
    210 }
    211 
    212 // getTextSection - Get the text section for the specified function
    213 ELFSection &ELFWriter::getTextSection(const Function *F) {
    214   const MCSectionELF *Text =
    215     (const MCSectionELF *)TLOF.SectionForGlobal(F, Mang, TM);
    216   return getSection(Text->getSectionName(), Text->getType(), Text->getFlags());
    217 }
    218 
    219 // getJumpTableSection - Get a read only section for constants when
    220 // emitting jump tables. TODO: add PIC support
    221 ELFSection &ELFWriter::getJumpTableSection() {
    222   const MCSectionELF *JT =
    223     (const MCSectionELF *)TLOF.getSectionForConstant(SectionKind::getReadOnly());
    224   return getSection(JT->getSectionName(), JT->getType(), JT->getFlags(),
    225                     TM.getTargetData()->getPointerABIAlignment());
    226 }
    227 
    228 // getConstantPoolSection - Get a constant pool section based on the machine
    229 // constant pool entry type and relocation info.
    230 ELFSection &ELFWriter::getConstantPoolSection(MachineConstantPoolEntry &CPE) {
    231   SectionKind Kind;
    232   switch (CPE.getRelocationInfo()) {
    233   default: llvm_unreachable("Unknown section kind");
    234   case 2: Kind = SectionKind::getReadOnlyWithRel(); break;
    235   case 1:
    236     Kind = SectionKind::getReadOnlyWithRelLocal();
    237     break;
    238   case 0:
    239     switch (TM.getTargetData()->getTypeAllocSize(CPE.getType())) {
    240     case 4:  Kind = SectionKind::getMergeableConst4(); break;
    241     case 8:  Kind = SectionKind::getMergeableConst8(); break;
    242     case 16: Kind = SectionKind::getMergeableConst16(); break;
    243     default: Kind = SectionKind::getMergeableConst(); break;
    244     }
    245   }
    246 
    247   const MCSectionELF *CPSect =
    248     (const MCSectionELF *)TLOF.getSectionForConstant(Kind);
    249   return getSection(CPSect->getSectionName(), CPSect->getType(),
    250                     CPSect->getFlags(), CPE.getAlignment());
    251 }
    252 
    253 // getRelocSection - Return the relocation section of section 'S'. 'RelA'
    254 // is true if the relocation section contains entries with addends.
    255 ELFSection &ELFWriter::getRelocSection(ELFSection &S) {
    256   unsigned SectionType = TEW->hasRelocationAddend() ?
    257                 ELF::SHT_RELA : ELF::SHT_REL;
    258 
    259   std::string SectionName(".rel");
    260   if (TEW->hasRelocationAddend())
    261     SectionName.append("a");
    262   SectionName.append(S.getName());
    263 
    264   return getSection(SectionName, SectionType, 0, TEW->getPrefELFAlignment());
    265 }
    266 
    267 // getGlobalELFVisibility - Returns the ELF specific visibility type
    268 unsigned ELFWriter::getGlobalELFVisibility(const GlobalValue *GV) {
    269   switch (GV->getVisibility()) {
    270   default:
    271     llvm_unreachable("unknown visibility type");
    272   case GlobalValue::DefaultVisibility:
    273     return ELF::STV_DEFAULT;
    274   case GlobalValue::HiddenVisibility:
    275     return ELF::STV_HIDDEN;
    276   case GlobalValue::ProtectedVisibility:
    277     return ELF::STV_PROTECTED;
    278   }
    279   return 0;
    280 }
    281 
    282 // getGlobalELFBinding - Returns the ELF specific binding type
    283 unsigned ELFWriter::getGlobalELFBinding(const GlobalValue *GV) {
    284   if (GV->hasInternalLinkage())
    285     return ELF::STB_LOCAL;
    286 
    287   if (GV->isWeakForLinker() && !GV->hasCommonLinkage())
    288     return ELF::STB_WEAK;
    289 
    290   return ELF::STB_GLOBAL;
    291 }
    292 
    293 // getGlobalELFType - Returns the ELF specific type for a global
    294 unsigned ELFWriter::getGlobalELFType(const GlobalValue *GV) {
    295   if (GV->isDeclaration())
    296     return ELF::STT_NOTYPE;
    297 
    298   if (isa<Function>(GV))
    299     return ELF::STT_FUNC;
    300 
    301   return ELF::STT_OBJECT;
    302 }
    303 
    304 // IsELFUndefSym - True if the global value must be marked as a symbol
    305 // which points to a SHN_UNDEF section. This means that the symbol has
    306 // no definition on the module.
    307 static bool IsELFUndefSym(const GlobalValue *GV) {
    308   return GV->isDeclaration() || (isa<Function>(GV));
    309 }
    310 
    311 // AddToSymbolList - Update the symbol lookup and If the symbol is
    312 // private add it to PrivateSyms list, otherwise to SymbolList.
    313 void ELFWriter::AddToSymbolList(ELFSym *GblSym) {
    314   assert(GblSym->isGlobalValue() && "Symbol must be a global value");
    315 
    316   const GlobalValue *GV = GblSym->getGlobalValue();
    317   if (GV->hasPrivateLinkage()) {
    318     // For a private symbols, keep track of the index inside
    319     // the private list since it will never go to the symbol
    320     // table and won't be patched up later.
    321     PrivateSyms.push_back(GblSym);
    322     GblSymLookup[GV] = PrivateSyms.size()-1;
    323   } else {
    324     // Non private symbol are left with zero indices until
    325     // they are patched up during the symbol table emition
    326     // (where the indicies are created).
    327     SymbolList.push_back(GblSym);
    328     GblSymLookup[GV] = 0;
    329   }
    330 }
    331 
    332 /// HasCommonSymbols - True if this section holds common symbols, this is
    333 /// indicated on the ELF object file by a symbol with SHN_COMMON section
    334 /// header index.
    335 static bool HasCommonSymbols(const MCSectionELF &S) {
    336   // FIXME: this is wrong, a common symbol can be in .data for example.
    337   if (StringRef(S.getSectionName()).startswith(".gnu.linkonce."))
    338     return true;
    339 
    340   return false;
    341 }
    342 
    343 
    344 // EmitGlobal - Choose the right section for global and emit it
    345 void ELFWriter::EmitGlobal(const GlobalValue *GV) {
    346 
    347   // Check if the referenced symbol is already emitted
    348   if (GblSymLookup.find(GV) != GblSymLookup.end())
    349     return;
    350 
    351   // Handle ELF Bind, Visibility and Type for the current symbol
    352   unsigned SymBind = getGlobalELFBinding(GV);
    353   unsigned SymType = getGlobalELFType(GV);
    354   bool IsUndefSym = IsELFUndefSym(GV);
    355 
    356   ELFSym *GblSym = IsUndefSym ? ELFSym::getUndefGV(GV, SymBind)
    357     : ELFSym::getGV(GV, SymBind, SymType, getGlobalELFVisibility(GV));
    358 
    359   if (!IsUndefSym) {
    360     assert(isa<GlobalVariable>(GV) && "GV not a global variable!");
    361     const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV);
    362 
    363     // Handle special llvm globals
    364     if (EmitSpecialLLVMGlobal(GVar))
    365       return;
    366 
    367     // Get the ELF section where this global belongs from TLOF
    368     const MCSectionELF *S =
    369       (const MCSectionELF *)TLOF.SectionForGlobal(GV, Mang, TM);
    370     ELFSection &ES =
    371       getSection(S->getSectionName(), S->getType(), S->getFlags());
    372     SectionKind Kind = S->getKind();
    373 
    374     // The symbol align should update the section alignment if needed
    375     const TargetData *TD = TM.getTargetData();
    376     unsigned Align = TD->getPreferredAlignment(GVar);
    377     unsigned Size = TD->getTypeAllocSize(GVar->getInitializer()->getType());
    378     GblSym->Size = Size;
    379 
    380     if (HasCommonSymbols(*S)) { // Symbol must go to a common section
    381       GblSym->SectionIdx = ELF::SHN_COMMON;
    382 
    383       // A new linkonce section is created for each global in the
    384       // common section, the default alignment is 1 and the symbol
    385       // value contains its alignment.
    386       ES.Align = 1;
    387       GblSym->Value = Align;
    388 
    389     } else if (Kind.isBSS() || Kind.isThreadBSS()) { // Symbol goes to BSS.
    390       GblSym->SectionIdx = ES.SectionIdx;
    391 
    392       // Update the size with alignment and the next object can
    393       // start in the right offset in the section
    394       if (Align) ES.Size = (ES.Size + Align-1) & ~(Align-1);
    395       ES.Align = std::max(ES.Align, Align);
    396 
    397       // GblSym->Value should contain the virtual offset inside the section.
    398       // Virtual because the BSS space is not allocated on ELF objects
    399       GblSym->Value = ES.Size;
    400       ES.Size += Size;
    401 
    402     } else { // The symbol must go to some kind of data section
    403       GblSym->SectionIdx = ES.SectionIdx;
    404 
    405       // GblSym->Value should contain the symbol offset inside the section,
    406       // and all symbols should start on their required alignment boundary
    407       ES.Align = std::max(ES.Align, Align);
    408       ES.emitAlignment(Align);
    409       GblSym->Value = ES.size();
    410 
    411       // Emit the global to the data section 'ES'
    412       EmitGlobalConstant(GVar->getInitializer(), ES);
    413     }
    414   }
    415 
    416   AddToSymbolList(GblSym);
    417 }
    418 
    419 void ELFWriter::EmitGlobalConstantStruct(const ConstantStruct *CVS,
    420                                          ELFSection &GblS) {
    421 
    422   // Print the fields in successive locations. Pad to align if needed!
    423   const TargetData *TD = TM.getTargetData();
    424   unsigned Size = TD->getTypeAllocSize(CVS->getType());
    425   const StructLayout *cvsLayout = TD->getStructLayout(CVS->getType());
    426   uint64_t sizeSoFar = 0;
    427   for (unsigned i = 0, e = CVS->getNumOperands(); i != e; ++i) {
    428     const Constant* field = CVS->getOperand(i);
    429 
    430     // Check if padding is needed and insert one or more 0s.
    431     uint64_t fieldSize = TD->getTypeAllocSize(field->getType());
    432     uint64_t padSize = ((i == e-1 ? Size : cvsLayout->getElementOffset(i+1))
    433                         - cvsLayout->getElementOffset(i)) - fieldSize;
    434     sizeSoFar += fieldSize + padSize;
    435 
    436     // Now print the actual field value.
    437     EmitGlobalConstant(field, GblS);
    438 
    439     // Insert padding - this may include padding to increase the size of the
    440     // current field up to the ABI size (if the struct is not packed) as well
    441     // as padding to ensure that the next field starts at the right offset.
    442     GblS.emitZeros(padSize);
    443   }
    444   assert(sizeSoFar == cvsLayout->getSizeInBytes() &&
    445          "Layout of constant struct may be incorrect!");
    446 }
    447 
    448 void ELFWriter::EmitGlobalConstant(const Constant *CV, ELFSection &GblS) {
    449   const TargetData *TD = TM.getTargetData();
    450   unsigned Size = TD->getTypeAllocSize(CV->getType());
    451 
    452   if (const ConstantArray *CVA = dyn_cast<ConstantArray>(CV)) {
    453     for (unsigned i = 0, e = CVA->getNumOperands(); i != e; ++i)
    454       EmitGlobalConstant(CVA->getOperand(i), GblS);
    455     return;
    456   } else if (isa<ConstantAggregateZero>(CV)) {
    457     GblS.emitZeros(Size);
    458     return;
    459   } else if (const ConstantStruct *CVS = dyn_cast<ConstantStruct>(CV)) {
    460     EmitGlobalConstantStruct(CVS, GblS);
    461     return;
    462   } else if (const ConstantFP *CFP = dyn_cast<ConstantFP>(CV)) {
    463     APInt Val = CFP->getValueAPF().bitcastToAPInt();
    464     if (CFP->getType()->isDoubleTy())
    465       GblS.emitWord64(Val.getZExtValue());
    466     else if (CFP->getType()->isFloatTy())
    467       GblS.emitWord32(Val.getZExtValue());
    468     else if (CFP->getType()->isX86_FP80Ty()) {
    469       unsigned PadSize = TD->getTypeAllocSize(CFP->getType())-
    470                          TD->getTypeStoreSize(CFP->getType());
    471       GblS.emitWordFP80(Val.getRawData(), PadSize);
    472     } else if (CFP->getType()->isPPC_FP128Ty())
    473       llvm_unreachable("PPC_FP128Ty global emission not implemented");
    474     return;
    475   } else if (const ConstantInt *CI = dyn_cast<ConstantInt>(CV)) {
    476     if (Size == 1)
    477       GblS.emitByte(CI->getZExtValue());
    478     else if (Size == 2)
    479       GblS.emitWord16(CI->getZExtValue());
    480     else if (Size == 4)
    481       GblS.emitWord32(CI->getZExtValue());
    482     else
    483       EmitGlobalConstantLargeInt(CI, GblS);
    484     return;
    485   } else if (const ConstantVector *CP = dyn_cast<ConstantVector>(CV)) {
    486     VectorType *PTy = CP->getType();
    487     for (unsigned I = 0, E = PTy->getNumElements(); I < E; ++I)
    488       EmitGlobalConstant(CP->getOperand(I), GblS);
    489     return;
    490   } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) {
    491     // Resolve a constant expression which returns a (Constant, Offset)
    492     // pair. If 'Res.first' is a GlobalValue, emit a relocation with
    493     // the offset 'Res.second', otherwise emit a global constant like
    494     // it is always done for not contant expression types.
    495     CstExprResTy Res = ResolveConstantExpr(CE);
    496     const Constant *Op = Res.first;
    497 
    498     if (isa<GlobalValue>(Op))
    499       EmitGlobalDataRelocation(cast<const GlobalValue>(Op),
    500                                TD->getTypeAllocSize(Op->getType()),
    501                                GblS, Res.second);
    502     else
    503       EmitGlobalConstant(Op, GblS);
    504 
    505     return;
    506   } else if (CV->getType()->getTypeID() == Type::PointerTyID) {
    507     // Fill the data entry with zeros or emit a relocation entry
    508     if (isa<ConstantPointerNull>(CV))
    509       GblS.emitZeros(Size);
    510     else
    511       EmitGlobalDataRelocation(cast<const GlobalValue>(CV),
    512                                Size, GblS);
    513     return;
    514   } else if (const GlobalValue *GV = dyn_cast<GlobalValue>(CV)) {
    515     // This is a constant address for a global variable or function and
    516     // therefore must be referenced using a relocation entry.
    517     EmitGlobalDataRelocation(GV, Size, GblS);
    518     return;
    519   }
    520 
    521   std::string msg;
    522   raw_string_ostream ErrorMsg(msg);
    523   ErrorMsg << "Constant unimp for type: " << *CV->getType();
    524   report_fatal_error(ErrorMsg.str());
    525 }
    526 
    527 // ResolveConstantExpr - Resolve the constant expression until it stop
    528 // yielding other constant expressions.
    529 CstExprResTy ELFWriter::ResolveConstantExpr(const Constant *CV) {
    530   const TargetData *TD = TM.getTargetData();
    531 
    532   // There ins't constant expression inside others anymore
    533   if (!isa<ConstantExpr>(CV))
    534     return std::make_pair(CV, 0);
    535 
    536   const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV);
    537   switch (CE->getOpcode()) {
    538   case Instruction::BitCast:
    539     return ResolveConstantExpr(CE->getOperand(0));
    540 
    541   case Instruction::GetElementPtr: {
    542     const Constant *ptrVal = CE->getOperand(0);
    543     SmallVector<Value*, 8> idxVec(CE->op_begin()+1, CE->op_end());
    544     int64_t Offset = TD->getIndexedOffset(ptrVal->getType(), idxVec);
    545     return std::make_pair(ptrVal, Offset);
    546   }
    547   case Instruction::IntToPtr: {
    548     Constant *Op = CE->getOperand(0);
    549     Op = ConstantExpr::getIntegerCast(Op, TD->getIntPtrType(CV->getContext()),
    550                                       false/*ZExt*/);
    551     return ResolveConstantExpr(Op);
    552   }
    553   case Instruction::PtrToInt: {
    554     Constant *Op = CE->getOperand(0);
    555     Type *Ty = CE->getType();
    556 
    557     // We can emit the pointer value into this slot if the slot is an
    558     // integer slot greater or equal to the size of the pointer.
    559     if (TD->getTypeAllocSize(Ty) == TD->getTypeAllocSize(Op->getType()))
    560       return ResolveConstantExpr(Op);
    561 
    562     llvm_unreachable("Integer size less then pointer size");
    563   }
    564   case Instruction::Add:
    565   case Instruction::Sub: {
    566     // Only handle cases where there's a constant expression with GlobalValue
    567     // as first operand and ConstantInt as second, which are the cases we can
    568     // solve direclty using a relocation entry. GlobalValue=Op0, CstInt=Op1
    569     // 1)  Instruction::Add  => (global) + CstInt
    570     // 2)  Instruction::Sub  => (global) + -CstInt
    571     const Constant *Op0 = CE->getOperand(0);
    572     const Constant *Op1 = CE->getOperand(1);
    573     assert(isa<ConstantInt>(Op1) && "Op1 must be a ConstantInt");
    574 
    575     CstExprResTy Res = ResolveConstantExpr(Op0);
    576     assert(isa<GlobalValue>(Res.first) && "Op0 must be a GlobalValue");
    577 
    578     const APInt &RHS = cast<ConstantInt>(Op1)->getValue();
    579     switch (CE->getOpcode()) {
    580     case Instruction::Add:
    581       return std::make_pair(Res.first, RHS.getSExtValue());
    582     case Instruction::Sub:
    583       return std::make_pair(Res.first, (-RHS).getSExtValue());
    584     }
    585   }
    586   }
    587 
    588   report_fatal_error(CE->getOpcodeName() +
    589                      StringRef(": Unsupported ConstantExpr type"));
    590 
    591   return std::make_pair(CV, 0); // silence warning
    592 }
    593 
    594 void ELFWriter::EmitGlobalDataRelocation(const GlobalValue *GV, unsigned Size,
    595                                          ELFSection &GblS, int64_t Offset) {
    596   // Create the relocation entry for the global value
    597   MachineRelocation MR =
    598     MachineRelocation::getGV(GblS.getCurrentPCOffset(),
    599                              TEW->getAbsoluteLabelMachineRelTy(),
    600                              const_cast<GlobalValue*>(GV),
    601                              Offset);
    602 
    603   // Fill the data entry with zeros
    604   GblS.emitZeros(Size);
    605 
    606   // Add the relocation entry for the current data section
    607   GblS.addRelocation(MR);
    608 }
    609 
    610 void ELFWriter::EmitGlobalConstantLargeInt(const ConstantInt *CI,
    611                                            ELFSection &S) {
    612   const TargetData *TD = TM.getTargetData();
    613   unsigned BitWidth = CI->getBitWidth();
    614   assert(isPowerOf2_32(BitWidth) &&
    615          "Non-power-of-2-sized integers not handled!");
    616 
    617   const uint64_t *RawData = CI->getValue().getRawData();
    618   uint64_t Val = 0;
    619   for (unsigned i = 0, e = BitWidth / 64; i != e; ++i) {
    620     Val = (TD->isBigEndian()) ? RawData[e - i - 1] : RawData[i];
    621     S.emitWord64(Val);
    622   }
    623 }
    624 
    625 /// EmitSpecialLLVMGlobal - Check to see if the specified global is a
    626 /// special global used by LLVM.  If so, emit it and return true, otherwise
    627 /// do nothing and return false.
    628 bool ELFWriter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) {
    629   if (GV->getName() == "llvm.used")
    630     llvm_unreachable("not implemented yet");
    631 
    632   // Ignore debug and non-emitted data.  This handles llvm.compiler.used.
    633   if (GV->getSection() == "llvm.metadata" ||
    634       GV->hasAvailableExternallyLinkage())
    635     return true;
    636 
    637   if (!GV->hasAppendingLinkage()) return false;
    638 
    639   assert(GV->hasInitializer() && "Not a special LLVM global!");
    640 
    641   const TargetData *TD = TM.getTargetData();
    642   unsigned Align = TD->getPointerPrefAlignment();
    643   if (GV->getName() == "llvm.global_ctors") {
    644     ELFSection &Ctor = getCtorSection();
    645     Ctor.emitAlignment(Align);
    646     EmitXXStructorList(GV->getInitializer(), Ctor);
    647     return true;
    648   }
    649 
    650   if (GV->getName() == "llvm.global_dtors") {
    651     ELFSection &Dtor = getDtorSection();
    652     Dtor.emitAlignment(Align);
    653     EmitXXStructorList(GV->getInitializer(), Dtor);
    654     return true;
    655   }
    656 
    657   return false;
    658 }
    659 
    660 /// EmitXXStructorList - Emit the ctor or dtor list.  This just emits out the
    661 /// function pointers, ignoring the init priority.
    662 void ELFWriter::EmitXXStructorList(const Constant *List, ELFSection &Xtor) {
    663   // Should be an array of '{ i32, void ()* }' structs.  The first value is the
    664   // init priority, which we ignore.
    665   if (List->isNullValue()) return;
    666   const ConstantArray *InitList = cast<ConstantArray>(List);
    667   for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i) {
    668     if (InitList->getOperand(i)->isNullValue())
    669       continue;
    670     ConstantStruct *CS = cast<ConstantStruct>(InitList->getOperand(i));
    671 
    672     if (CS->getOperand(1)->isNullValue())
    673       continue;
    674 
    675     // Emit the function pointer.
    676     EmitGlobalConstant(CS->getOperand(1), Xtor);
    677   }
    678 }
    679 
    680 bool ELFWriter::runOnMachineFunction(MachineFunction &MF) {
    681   // Nothing to do here, this is all done through the ElfCE object above.
    682   return false;
    683 }
    684 
    685 /// doFinalization - Now that the module has been completely processed, emit
    686 /// the ELF file to 'O'.
    687 bool ELFWriter::doFinalization(Module &M) {
    688   // Emit .data section placeholder
    689   getDataSection();
    690 
    691   // Emit .bss section placeholder
    692   getBSSSection();
    693 
    694   // Build and emit data, bss and "common" sections.
    695   for (Module::global_iterator I = M.global_begin(), E = M.global_end();
    696        I != E; ++I)
    697     EmitGlobal(I);
    698 
    699   // Emit all pending globals
    700   for (PendingGblsIter I = PendingGlobals.begin(), E = PendingGlobals.end();
    701        I != E; ++I)
    702     EmitGlobal(*I);
    703 
    704   // Emit all pending externals
    705   for (PendingExtsIter I = PendingExternals.begin(), E = PendingExternals.end();
    706        I != E; ++I)
    707     SymbolList.push_back(ELFSym::getExtSym(*I));
    708 
    709   // Emit a symbol for each section created until now, skip null section
    710   for (unsigned i = 1, e = SectionList.size(); i < e; ++i) {
    711     ELFSection &ES = *SectionList[i];
    712     ELFSym *SectionSym = ELFSym::getSectionSym();
    713     SectionSym->SectionIdx = ES.SectionIdx;
    714     SymbolList.push_back(SectionSym);
    715     ES.Sym = SymbolList.back();
    716   }
    717 
    718   // Emit string table
    719   EmitStringTable(M.getModuleIdentifier());
    720 
    721   // Emit the symbol table now, if non-empty.
    722   EmitSymbolTable();
    723 
    724   // Emit the relocation sections.
    725   EmitRelocations();
    726 
    727   // Emit the sections string table.
    728   EmitSectionTableStringTable();
    729 
    730   // Dump the sections and section table to the .o file.
    731   OutputSectionsAndSectionTable();
    732 
    733   return false;
    734 }
    735 
    736 // RelocateField - Patch relocatable field with 'Offset' in 'BO'
    737 // using a 'Value' of known 'Size'
    738 void ELFWriter::RelocateField(BinaryObject &BO, uint32_t Offset,
    739                               int64_t Value, unsigned Size) {
    740   if (Size == 32)
    741     BO.fixWord32(Value, Offset);
    742   else if (Size == 64)
    743     BO.fixWord64(Value, Offset);
    744   else
    745     llvm_unreachable("don't know howto patch relocatable field");
    746 }
    747 
    748 /// EmitRelocations - Emit relocations
    749 void ELFWriter::EmitRelocations() {
    750 
    751   // True if the target uses the relocation entry to hold the addend,
    752   // otherwise the addend is written directly to the relocatable field.
    753   bool HasRelA = TEW->hasRelocationAddend();
    754 
    755   // Create Relocation sections for each section which needs it.
    756   for (unsigned i=0, e=SectionList.size(); i != e; ++i) {
    757     ELFSection &S = *SectionList[i];
    758 
    759     // This section does not have relocations
    760     if (!S.hasRelocations()) continue;
    761     ELFSection &RelSec = getRelocSection(S);
    762 
    763     // 'Link' - Section hdr idx of the associated symbol table
    764     // 'Info' - Section hdr idx of the section to which the relocation applies
    765     ELFSection &SymTab = getSymbolTableSection();
    766     RelSec.Link = SymTab.SectionIdx;
    767     RelSec.Info = S.SectionIdx;
    768     RelSec.EntSize = TEW->getRelocationEntrySize();
    769 
    770     // Get the relocations from Section
    771     std::vector<MachineRelocation> Relos = S.getRelocations();
    772     for (std::vector<MachineRelocation>::iterator MRI = Relos.begin(),
    773          MRE = Relos.end(); MRI != MRE; ++MRI) {
    774       MachineRelocation &MR = *MRI;
    775 
    776       // Relocatable field offset from the section start
    777       unsigned RelOffset = MR.getMachineCodeOffset();
    778 
    779       // Symbol index in the symbol table
    780       unsigned SymIdx = 0;
    781 
    782       // Target specific relocation field type and size
    783       unsigned RelType = TEW->getRelocationType(MR.getRelocationType());
    784       unsigned RelTySize = TEW->getRelocationTySize(RelType);
    785       int64_t Addend = 0;
    786 
    787       // There are several machine relocations types, and each one of
    788       // them needs a different approach to retrieve the symbol table index.
    789       if (MR.isGlobalValue()) {
    790         const GlobalValue *G = MR.getGlobalValue();
    791         int64_t GlobalOffset = MR.getConstantVal();
    792         SymIdx = GblSymLookup[G];
    793         if (G->hasPrivateLinkage()) {
    794           // If the target uses a section offset in the relocation:
    795           // SymIdx + Addend = section sym for global + section offset
    796           unsigned SectionIdx = PrivateSyms[SymIdx]->SectionIdx;
    797           Addend = PrivateSyms[SymIdx]->Value + GlobalOffset;
    798           SymIdx = SectionList[SectionIdx]->getSymbolTableIndex();
    799         } else {
    800           Addend = TEW->getDefaultAddendForRelTy(RelType, GlobalOffset);
    801         }
    802       } else if (MR.isExternalSymbol()) {
    803         const char *ExtSym = MR.getExternalSymbol();
    804         SymIdx = ExtSymLookup[ExtSym];
    805         Addend = TEW->getDefaultAddendForRelTy(RelType);
    806       } else {
    807         // Get the symbol index for the section symbol
    808         unsigned SectionIdx = MR.getConstantVal();
    809         SymIdx = SectionList[SectionIdx]->getSymbolTableIndex();
    810 
    811         // The symbol offset inside the section
    812         int64_t SymOffset = (int64_t)MR.getResultPointer();
    813 
    814         // For pc relative relocations where symbols are defined in the same
    815         // section they are referenced, ignore the relocation entry and patch
    816         // the relocatable field with the symbol offset directly.
    817         if (S.SectionIdx == SectionIdx && TEW->isPCRelativeRel(RelType)) {
    818           int64_t Value = TEW->computeRelocation(SymOffset, RelOffset, RelType);
    819           RelocateField(S, RelOffset, Value, RelTySize);
    820           continue;
    821         }
    822 
    823         Addend = TEW->getDefaultAddendForRelTy(RelType, SymOffset);
    824       }
    825 
    826       // The target without addend on the relocation symbol must be
    827       // patched in the relocation place itself to contain the addend
    828       // otherwise write zeros to make sure there is no garbage there
    829       RelocateField(S, RelOffset, HasRelA ? 0 : Addend, RelTySize);
    830 
    831       // Get the relocation entry and emit to the relocation section
    832       ELFRelocation Rel(RelOffset, SymIdx, RelType, HasRelA, Addend);
    833       EmitRelocation(RelSec, Rel, HasRelA);
    834     }
    835   }
    836 }
    837 
    838 /// EmitRelocation - Write relocation 'Rel' to the relocation section 'Rel'
    839 void ELFWriter::EmitRelocation(BinaryObject &RelSec, ELFRelocation &Rel,
    840                                bool HasRelA) {
    841   RelSec.emitWord(Rel.getOffset());
    842   RelSec.emitWord(Rel.getInfo(is64Bit));
    843   if (HasRelA)
    844     RelSec.emitWord(Rel.getAddend());
    845 }
    846 
    847 /// EmitSymbol - Write symbol 'Sym' to the symbol table 'SymbolTable'
    848 void ELFWriter::EmitSymbol(BinaryObject &SymbolTable, ELFSym &Sym) {
    849   if (is64Bit) {
    850     SymbolTable.emitWord32(Sym.NameIdx);
    851     SymbolTable.emitByte(Sym.Info);
    852     SymbolTable.emitByte(Sym.Other);
    853     SymbolTable.emitWord16(Sym.SectionIdx);
    854     SymbolTable.emitWord64(Sym.Value);
    855     SymbolTable.emitWord64(Sym.Size);
    856   } else {
    857     SymbolTable.emitWord32(Sym.NameIdx);
    858     SymbolTable.emitWord32(Sym.Value);
    859     SymbolTable.emitWord32(Sym.Size);
    860     SymbolTable.emitByte(Sym.Info);
    861     SymbolTable.emitByte(Sym.Other);
    862     SymbolTable.emitWord16(Sym.SectionIdx);
    863   }
    864 }
    865 
    866 /// EmitSectionHeader - Write section 'Section' header in 'SHdrTab'
    867 /// Section Header Table
    868 void ELFWriter::EmitSectionHeader(BinaryObject &SHdrTab,
    869                                   const ELFSection &SHdr) {
    870   SHdrTab.emitWord32(SHdr.NameIdx);
    871   SHdrTab.emitWord32(SHdr.Type);
    872   if (is64Bit) {
    873     SHdrTab.emitWord64(SHdr.Flags);
    874     SHdrTab.emitWord(SHdr.Addr);
    875     SHdrTab.emitWord(SHdr.Offset);
    876     SHdrTab.emitWord64(SHdr.Size);
    877     SHdrTab.emitWord32(SHdr.Link);
    878     SHdrTab.emitWord32(SHdr.Info);
    879     SHdrTab.emitWord64(SHdr.Align);
    880     SHdrTab.emitWord64(SHdr.EntSize);
    881   } else {
    882     SHdrTab.emitWord32(SHdr.Flags);
    883     SHdrTab.emitWord(SHdr.Addr);
    884     SHdrTab.emitWord(SHdr.Offset);
    885     SHdrTab.emitWord32(SHdr.Size);
    886     SHdrTab.emitWord32(SHdr.Link);
    887     SHdrTab.emitWord32(SHdr.Info);
    888     SHdrTab.emitWord32(SHdr.Align);
    889     SHdrTab.emitWord32(SHdr.EntSize);
    890   }
    891 }
    892 
    893 /// EmitStringTable - If the current symbol table is non-empty, emit the string
    894 /// table for it
    895 void ELFWriter::EmitStringTable(const std::string &ModuleName) {
    896   if (!SymbolList.size()) return;  // Empty symbol table.
    897   ELFSection &StrTab = getStringTableSection();
    898 
    899   // Set the zero'th symbol to a null byte, as required.
    900   StrTab.emitByte(0);
    901 
    902   // Walk on the symbol list and write symbol names into the string table.
    903   unsigned Index = 1;
    904   for (ELFSymIter I=SymbolList.begin(), E=SymbolList.end(); I != E; ++I) {
    905     ELFSym &Sym = *(*I);
    906 
    907     std::string Name;
    908     if (Sym.isGlobalValue()) {
    909       SmallString<40> NameStr;
    910       Mang->getNameWithPrefix(NameStr, Sym.getGlobalValue(), false);
    911       Name.append(NameStr.begin(), NameStr.end());
    912     } else if (Sym.isExternalSym())
    913       Name.append(Sym.getExternalSymbol());
    914     else if (Sym.isFileType())
    915       Name.append(ModuleName);
    916 
    917     if (Name.empty()) {
    918       Sym.NameIdx = 0;
    919     } else {
    920       Sym.NameIdx = Index;
    921       StrTab.emitString(Name);
    922 
    923       // Keep track of the number of bytes emitted to this section.
    924       Index += Name.size()+1;
    925     }
    926   }
    927   assert(Index == StrTab.size());
    928   StrTab.Size = Index;
    929 }
    930 
    931 // SortSymbols - On the symbol table local symbols must come before
    932 // all other symbols with non-local bindings. The return value is
    933 // the position of the first non local symbol.
    934 unsigned ELFWriter::SortSymbols() {
    935   unsigned FirstNonLocalSymbol;
    936   std::vector<ELFSym*> LocalSyms, OtherSyms;
    937 
    938   for (ELFSymIter I=SymbolList.begin(), E=SymbolList.end(); I != E; ++I) {
    939     if ((*I)->isLocalBind())
    940       LocalSyms.push_back(*I);
    941     else
    942       OtherSyms.push_back(*I);
    943   }
    944   SymbolList.clear();
    945   FirstNonLocalSymbol = LocalSyms.size();
    946 
    947   for (unsigned i = 0; i < FirstNonLocalSymbol; ++i)
    948     SymbolList.push_back(LocalSyms[i]);
    949 
    950   for (ELFSymIter I=OtherSyms.begin(), E=OtherSyms.end(); I != E; ++I)
    951     SymbolList.push_back(*I);
    952 
    953   LocalSyms.clear();
    954   OtherSyms.clear();
    955 
    956   return FirstNonLocalSymbol;
    957 }
    958 
    959 /// EmitSymbolTable - Emit the symbol table itself.
    960 void ELFWriter::EmitSymbolTable() {
    961   if (!SymbolList.size()) return;  // Empty symbol table.
    962 
    963   // Now that we have emitted the string table and know the offset into the
    964   // string table of each symbol, emit the symbol table itself.
    965   ELFSection &SymTab = getSymbolTableSection();
    966   SymTab.Align = TEW->getPrefELFAlignment();
    967 
    968   // Section Index of .strtab.
    969   SymTab.Link = getStringTableSection().SectionIdx;
    970 
    971   // Size of each symtab entry.
    972   SymTab.EntSize = TEW->getSymTabEntrySize();
    973 
    974   // Reorder the symbol table with local symbols first!
    975   unsigned FirstNonLocalSymbol = SortSymbols();
    976 
    977   // Emit all the symbols to the symbol table.
    978   for (unsigned i = 0, e = SymbolList.size(); i < e; ++i) {
    979     ELFSym &Sym = *SymbolList[i];
    980 
    981     // Emit symbol to the symbol table
    982     EmitSymbol(SymTab, Sym);
    983 
    984     // Record the symbol table index for each symbol
    985     if (Sym.isGlobalValue())
    986       GblSymLookup[Sym.getGlobalValue()] = i;
    987     else if (Sym.isExternalSym())
    988       ExtSymLookup[Sym.getExternalSymbol()] = i;
    989 
    990     // Keep track on the symbol index into the symbol table
    991     Sym.SymTabIdx = i;
    992   }
    993 
    994   // One greater than the symbol table index of the last local symbol
    995   SymTab.Info = FirstNonLocalSymbol;
    996   SymTab.Size = SymTab.size();
    997 }
    998 
    999 /// EmitSectionTableStringTable - This method adds and emits a section for the
   1000 /// ELF Section Table string table: the string table that holds all of the
   1001 /// section names.
   1002 void ELFWriter::EmitSectionTableStringTable() {
   1003   // First step: add the section for the string table to the list of sections:
   1004   ELFSection &SHStrTab = getSectionHeaderStringTableSection();
   1005 
   1006   // Now that we know which section number is the .shstrtab section, update the
   1007   // e_shstrndx entry in the ELF header.
   1008   ElfHdr.fixWord16(SHStrTab.SectionIdx, ELFHdr_e_shstrndx_Offset);
   1009 
   1010   // Set the NameIdx of each section in the string table and emit the bytes for
   1011   // the string table.
   1012   unsigned Index = 0;
   1013 
   1014   for (ELFSectionIter I=SectionList.begin(), E=SectionList.end(); I != E; ++I) {
   1015     ELFSection &S = *(*I);
   1016     // Set the index into the table.  Note if we have lots of entries with
   1017     // common suffixes, we could memoize them here if we cared.
   1018     S.NameIdx = Index;
   1019     SHStrTab.emitString(S.getName());
   1020 
   1021     // Keep track of the number of bytes emitted to this section.
   1022     Index += S.getName().size()+1;
   1023   }
   1024 
   1025   // Set the size of .shstrtab now that we know what it is.
   1026   assert(Index == SHStrTab.size());
   1027   SHStrTab.Size = Index;
   1028 }
   1029 
   1030 /// OutputSectionsAndSectionTable - Now that we have constructed the file header
   1031 /// and all of the sections, emit these to the ostream destination and emit the
   1032 /// SectionTable.
   1033 void ELFWriter::OutputSectionsAndSectionTable() {
   1034   // Pass #1: Compute the file offset for each section.
   1035   size_t FileOff = ElfHdr.size();   // File header first.
   1036 
   1037   // Adjust alignment of all section if needed, skip the null section.
   1038   for (unsigned i=1, e=SectionList.size(); i < e; ++i) {
   1039     ELFSection &ES = *SectionList[i];
   1040     if (!ES.size()) {
   1041       ES.Offset = FileOff;
   1042       continue;
   1043     }
   1044 
   1045     // Update Section size
   1046     if (!ES.Size)
   1047       ES.Size = ES.size();
   1048 
   1049     // Align FileOff to whatever the alignment restrictions of the section are.
   1050     if (ES.Align)
   1051       FileOff = (FileOff+ES.Align-1) & ~(ES.Align-1);
   1052 
   1053     ES.Offset = FileOff;
   1054     FileOff += ES.Size;
   1055   }
   1056 
   1057   // Align Section Header.
   1058   unsigned TableAlign = TEW->getPrefELFAlignment();
   1059   FileOff = (FileOff+TableAlign-1) & ~(TableAlign-1);
   1060 
   1061   // Now that we know where all of the sections will be emitted, set the e_shnum
   1062   // entry in the ELF header.
   1063   ElfHdr.fixWord16(NumSections, ELFHdr_e_shnum_Offset);
   1064 
   1065   // Now that we know the offset in the file of the section table, update the
   1066   // e_shoff address in the ELF header.
   1067   ElfHdr.fixWord(FileOff, ELFHdr_e_shoff_Offset);
   1068 
   1069   // Now that we know all of the data in the file header, emit it and all of the
   1070   // sections!
   1071   O.write((char *)&ElfHdr.getData()[0], ElfHdr.size());
   1072   FileOff = ElfHdr.size();
   1073 
   1074   // Section Header Table blob
   1075   BinaryObject SHdrTable(isLittleEndian, is64Bit);
   1076 
   1077   // Emit all of sections to the file and build the section header table.
   1078   for (ELFSectionIter I=SectionList.begin(), E=SectionList.end(); I != E; ++I) {
   1079     ELFSection &S = *(*I);
   1080     DEBUG(dbgs() << "SectionIdx: " << S.SectionIdx << ", Name: " << S.getName()
   1081                  << ", Size: " << S.Size << ", Offset: " << S.Offset
   1082                  << ", SectionData Size: " << S.size() << "\n");
   1083 
   1084     // Align FileOff to whatever the alignment restrictions of the section are.
   1085     if (S.size()) {
   1086       if (S.Align)  {
   1087         for (size_t NewFileOff = (FileOff+S.Align-1) & ~(S.Align-1);
   1088              FileOff != NewFileOff; ++FileOff)
   1089           O << (char)0xAB;
   1090       }
   1091       O.write((char *)&S.getData()[0], S.Size);
   1092       FileOff += S.Size;
   1093     }
   1094 
   1095     EmitSectionHeader(SHdrTable, S);
   1096   }
   1097 
   1098   // Align output for the section table.
   1099   for (size_t NewFileOff = (FileOff+TableAlign-1) & ~(TableAlign-1);
   1100        FileOff != NewFileOff; ++FileOff)
   1101     O << (char)0xAB;
   1102 
   1103   // Emit the section table itself.
   1104   O.write((char *)&SHdrTable.getData()[0], SHdrTable.size());
   1105 }
   1106