OLD | NEW |
1 //===-- ELFWriter.h - Target-independent ELF writer support -----*- C++ -*-===// | 1 //===-- ELFWriter.h - Target-independent ELF writer support -----*- C++ -*-===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
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 ELFWriter class. | 10 // This file defines the ELFWriter class. |
(...skipping 17 matching lines...) Expand all Loading... |
28 class ELFSection; | 28 class ELFSection; |
29 struct ELFSym; | 29 struct ELFSym; |
30 class GlobalVariable; | 30 class GlobalVariable; |
31 class JITDebugRegisterer; | 31 class JITDebugRegisterer; |
32 class Mangler; | 32 class Mangler; |
33 class MachineCodeEmitter; | 33 class MachineCodeEmitter; |
34 class MachineConstantPoolEntry; | 34 class MachineConstantPoolEntry; |
35 class ObjectCodeEmitter; | 35 class ObjectCodeEmitter; |
36 class MCAsmInfo; | 36 class MCAsmInfo; |
37 class TargetELFWriterInfo; | 37 class TargetELFWriterInfo; |
| 38 class TargetELFRelocHelper; |
38 class TargetLoweringObjectFile; | 39 class TargetLoweringObjectFile; |
39 class raw_ostream; | 40 class raw_ostream; |
40 class SectionKind; | 41 class SectionKind; |
41 class MCContext; | 42 class MCContext; |
42 class TargetMachine; | 43 class TargetMachine; |
43 | 44 |
44 typedef std::vector<ELFSym*>::iterator ELFSymIter; | 45 typedef std::vector<ELFSym*>::iterator ELFSymIter; |
45 typedef std::vector<ELFSection*>::iterator ELFSectionIter; | 46 typedef std::vector<ELFSection*>::iterator ELFSectionIter; |
46 typedef SetVector<const GlobalValue*>::const_iterator PendingGblsIter; | 47 typedef SetVector<const GlobalValue*>::const_iterator PendingGblsIter; |
47 typedef SetVector<const char *>::const_iterator PendingExtsIter; | 48 typedef SetVector<const char *>::const_iterator PendingExtsIter; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 ELFCodeEmitter *ElfCE; | 87 ELFCodeEmitter *ElfCE; |
87 | 88 |
88 /// TLOF - Target Lowering Object File, provide section names for globals | 89 /// TLOF - Target Lowering Object File, provide section names for globals |
89 /// and other object file specific stuff | 90 /// and other object file specific stuff |
90 const TargetLoweringObjectFile &TLOF; | 91 const TargetLoweringObjectFile &TLOF; |
91 | 92 |
92 /// MAI - Target Asm Info, provide information about section names for | 93 /// MAI - Target Asm Info, provide information about section names for |
93 /// globals and other target specific stuff. | 94 /// globals and other target specific stuff. |
94 const MCAsmInfo *MAI; | 95 const MCAsmInfo *MAI; |
95 | 96 |
| 97 /// TERH - Target ELF Relocation Helper - used to emit |
| 98 /// nontrivial in-line arch-specific relocations. |
| 99 TargetELFRelocHelper *TERH; |
| 100 |
96 //===------------------------------------------------------------------===// | 101 //===------------------------------------------------------------------===// |
97 // Properties inferred automatically from the target machine. | 102 // Properties inferred automatically from the target machine. |
98 //===------------------------------------------------------------------===// | 103 //===------------------------------------------------------------------===// |
99 | 104 |
100 /// is64Bit/isLittleEndian - This information is inferred from the target | 105 /// is64Bit/isLittleEndian - This information is inferred from the target |
101 /// machine directly, indicating whether to emit a 32- or 64-bit ELF file. | 106 /// machine directly, indicating whether to emit a 32- or 64-bit ELF file. |
102 bool is64Bit, isLittleEndian; | 107 bool is64Bit, isLittleEndian; |
103 | 108 |
104 /// doInitialization - Emit the file header and all of the global variables | 109 /// doInitialization - Emit the file header and all of the global variables |
105 /// for the module to the ELF file. | 110 /// for the module to the ELF file. |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 void EmitXXStructorList(Constant *List, ELFSection &Xtor); | 240 void EmitXXStructorList(Constant *List, ELFSection &Xtor); |
236 void EmitRelocations(); | 241 void EmitRelocations(); |
237 void EmitRelocation(BinaryObject &RelSec, ELFRelocation &Rel, bool HasRelA); | 242 void EmitRelocation(BinaryObject &RelSec, ELFRelocation &Rel, bool HasRelA); |
238 void EmitSectionHeader(BinaryObject &SHdrTab, const ELFSection &SHdr); | 243 void EmitSectionHeader(BinaryObject &SHdrTab, const ELFSection &SHdr); |
239 void EmitSectionTableStringTable(); | 244 void EmitSectionTableStringTable(); |
240 void EmitSymbol(BinaryObject &SymbolTable, ELFSym &Sym); | 245 void EmitSymbol(BinaryObject &SymbolTable, ELFSym &Sym); |
241 void EmitSymbolTable(); | 246 void EmitSymbolTable(); |
242 void EmitStringTable(const std::string &ModuleName); | 247 void EmitStringTable(const std::string &ModuleName); |
243 void OutputSectionsAndSectionTable(); | 248 void OutputSectionsAndSectionTable(); |
244 void RelocateField(BinaryObject &BO, uint32_t Offset, int64_t Value, | 249 void RelocateField(BinaryObject &BO, uint32_t Offset, int64_t Value, |
245 unsigned Size); | 250 unsigned Size, const MachineRelocation &MR); |
246 unsigned SortSymbols(); | 251 unsigned SortSymbols(); |
247 CstExprResTy ResolveConstantExpr(const Constant *CV); | 252 CstExprResTy ResolveConstantExpr(const Constant *CV); |
248 }; | 253 }; |
249 } | 254 } |
250 | 255 |
251 #endif | 256 #endif |
OLD | NEW |