| OLD | NEW |
| 1 //===- subzero/src/IceELFObjectWriter.cpp - ELF object file writer --------===// | 1 //===- subzero/src/IceELFObjectWriter.cpp - ELF object file writer --------===// |
| 2 // | 2 // |
| 3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 // | 9 // |
| 10 // This file defines the writer for ELF relocatable object files. | 10 // This file defines the writer for ELF relocatable object files. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 | 77 |
| 78 const IceString SymTabName(".symtab"); | 78 const IceString SymTabName(".symtab"); |
| 79 bool IsELF64 = isELF64(Ctx.getTargetArch()); | 79 bool IsELF64 = isELF64(Ctx.getTargetArch()); |
| 80 const Elf64_Xword SymTabAlign = IsELF64 ? 8 : 4; | 80 const Elf64_Xword SymTabAlign = IsELF64 ? 8 : 4; |
| 81 const Elf64_Xword SymTabEntSize = | 81 const Elf64_Xword SymTabEntSize = |
| 82 IsELF64 ? sizeof(Elf64_Sym) : sizeof(Elf32_Sym); | 82 IsELF64 ? sizeof(Elf64_Sym) : sizeof(Elf32_Sym); |
| 83 static_assert(sizeof(Elf64_Sym) == 24 && sizeof(Elf32_Sym) == 16, | 83 static_assert(sizeof(Elf64_Sym) == 24 && sizeof(Elf32_Sym) == 16, |
| 84 "Elf_Sym sizes cannot be derived from sizeof"); | 84 "Elf_Sym sizes cannot be derived from sizeof"); |
| 85 SymTab = createSection<ELFSymbolTableSection>(SymTabName, SHT_SYMTAB, 0, | 85 SymTab = createSection<ELFSymbolTableSection>(SymTabName, SHT_SYMTAB, 0, |
| 86 SymTabAlign, SymTabEntSize); | 86 SymTabAlign, SymTabEntSize); |
| 87 // The first entry in the symbol table should be a NULL entry. | 87 SymTab->createNullSymbol(NullSection); |
| 88 const IceString NullSymName(""); | |
| 89 SymTab->createDefinedSym(NullSymName, STT_NOTYPE, STB_LOCAL, NullSection, 0, | |
| 90 0); | |
| 91 | 88 |
| 92 const IceString StrTabName(".strtab"); | 89 const IceString StrTabName(".strtab"); |
| 93 StrTab = | 90 StrTab = |
| 94 createSection<ELFStringTableSection>(StrTabName, SHT_STRTAB, 0, 1, 0); | 91 createSection<ELFStringTableSection>(StrTabName, SHT_STRTAB, 0, 1, 0); |
| 95 } | 92 } |
| 96 | 93 |
| 97 template <typename T> | 94 template <typename T> |
| 98 T *ELFObjectWriter::createSection(const IceString &Name, Elf64_Word ShType, | 95 T *ELFObjectWriter::createSection(const IceString &Name, Elf64_Word ShType, |
| 99 Elf64_Xword ShFlags, Elf64_Xword ShAddralign, | 96 Elf64_Xword ShFlags, Elf64_Xword ShAddralign, |
| 100 Elf64_Xword ShEntsize) { | 97 Elf64_Xword ShEntsize) { |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 if (IsELF64) { | 614 if (IsELF64) { |
| 618 writeELFHeaderInternal<true>(ShOffset, ShStrTab->getNumber(), | 615 writeELFHeaderInternal<true>(ShOffset, ShStrTab->getNumber(), |
| 619 AllSections.size()); | 616 AllSections.size()); |
| 620 } else { | 617 } else { |
| 621 writeELFHeaderInternal<false>(ShOffset, ShStrTab->getNumber(), | 618 writeELFHeaderInternal<false>(ShOffset, ShStrTab->getNumber(), |
| 622 AllSections.size()); | 619 AllSections.size()); |
| 623 } | 620 } |
| 624 } | 621 } |
| 625 | 622 |
| 626 } // end of namespace Ice | 623 } // end of namespace Ice |
| OLD | NEW |