Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: src/IceELFSection.h

Issue 952953002: Subzero: Improve class definition hygiene. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix typo Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/IceELFObjectWriter.h ('k') | src/IceELFStreamer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceELFSection.h - Model of ELF sections ------*- C++ -*-===// 1 //===- subzero/src/IceELFSection.h - Model of ELF sections ------*- C++ -*-===//
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 // Representation of ELF sections. 10 // Representation of ELF sections.
(...skipping 10 matching lines...) Expand all
21 21
22 using namespace llvm::ELF; 22 using namespace llvm::ELF;
23 23
24 namespace Ice { 24 namespace Ice {
25 25
26 class ELFStreamer; 26 class ELFStreamer;
27 class ELFStringTableSection; 27 class ELFStringTableSection;
28 28
29 // Base representation of an ELF section. 29 // Base representation of an ELF section.
30 class ELFSection { 30 class ELFSection {
31 ELFSection() = delete;
31 ELFSection(const ELFSection &) = delete; 32 ELFSection(const ELFSection &) = delete;
32 ELFSection &operator=(const ELFSection &) = delete; 33 ELFSection &operator=(const ELFSection &) = delete;
33 34
34 public: 35 public:
35 // Sentinel value for a section number/index for before the final 36 // Sentinel value for a section number/index for before the final
36 // section index is actually known. The dummy NULL section will be assigned 37 // section index is actually known. The dummy NULL section will be assigned
37 // number 0, and it is referenced by the dummy 0-th symbol in the symbol 38 // number 0, and it is referenced by the dummy 0-th symbol in the symbol
38 // table, so use max() instead of 0. 39 // table, so use max() instead of 0.
39 enum { NoSectionNumber = std::numeric_limits<SizeT>::max() }; 40 enum { NoSectionNumber = std::numeric_limits<SizeT>::max() };
40 41
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 // be fully initialized before writing. 91 // be fully initialized before writing.
91 Elf64_Shdr Header; 92 Elf64_Shdr Header;
92 93
93 // The number of the section after laying out sections. 94 // The number of the section after laying out sections.
94 SizeT Number; 95 SizeT Number;
95 }; 96 };
96 97
97 // Models text/code sections. Code is written out incrementally and the 98 // Models text/code sections. Code is written out incrementally and the
98 // size of the section is then updated incrementally. 99 // size of the section is then updated incrementally.
99 class ELFTextSection : public ELFSection { 100 class ELFTextSection : public ELFSection {
101 ELFTextSection() = delete;
100 ELFTextSection(const ELFTextSection &) = delete; 102 ELFTextSection(const ELFTextSection &) = delete;
101 ELFTextSection &operator=(const ELFTextSection &) = delete; 103 ELFTextSection &operator=(const ELFTextSection &) = delete;
102 104
103 public: 105 public:
104 using ELFSection::ELFSection; 106 using ELFSection::ELFSection;
105 107
106 void appendData(ELFStreamer &Str, const llvm::StringRef MoreData); 108 void appendData(ELFStreamer &Str, const llvm::StringRef MoreData);
107 }; 109 };
108 110
109 // Models data/rodata sections. Data is written out incrementally and the 111 // Models data/rodata sections. Data is written out incrementally and the
110 // size of the section is then updated incrementally. 112 // size of the section is then updated incrementally.
111 // Some rodata sections may have fixed entsize and duplicates may be mergeable. 113 // Some rodata sections may have fixed entsize and duplicates may be mergeable.
112 class ELFDataSection : public ELFSection { 114 class ELFDataSection : public ELFSection {
115 ELFDataSection() = delete;
113 ELFDataSection(const ELFDataSection &) = delete; 116 ELFDataSection(const ELFDataSection &) = delete;
114 ELFDataSection &operator=(const ELFDataSection &) = delete; 117 ELFDataSection &operator=(const ELFDataSection &) = delete;
115 118
116 public: 119 public:
117 using ELFSection::ELFSection; 120 using ELFSection::ELFSection;
118 121
119 void appendData(ELFStreamer &Str, const llvm::StringRef MoreData); 122 void appendData(ELFStreamer &Str, const llvm::StringRef MoreData);
120 123
121 void appendZeros(ELFStreamer &Str, SizeT NumBytes); 124 void appendZeros(ELFStreamer &Str, SizeT NumBytes);
122 125
(...skipping 25 matching lines...) Expand all
148 151
149 SizeT getNumber() const { 152 SizeT getNumber() const {
150 assert(Number != UnknownNumber); 153 assert(Number != UnknownNumber);
151 return Number; 154 return Number;
152 } 155 }
153 }; 156 };
154 157
155 // Models a symbol table. Symbols may be added up until updateIndices is 158 // Models a symbol table. Symbols may be added up until updateIndices is
156 // called. At that point the indices of each symbol will be finalized. 159 // called. At that point the indices of each symbol will be finalized.
157 class ELFSymbolTableSection : public ELFSection { 160 class ELFSymbolTableSection : public ELFSection {
161 ELFSymbolTableSection() = delete;
162 ELFSymbolTableSection(const ELFSymbolTableSection &) = delete;
163 ELFSymbolTableSection &operator=(const ELFSymbolTableSection &) = delete;
164
158 public: 165 public:
159 using ELFSection::ELFSection; 166 using ELFSection::ELFSection;
160 167
161 // Create initial entry for a symbol when it is defined. 168 // Create initial entry for a symbol when it is defined.
162 // Each entry should only be defined once. 169 // Each entry should only be defined once.
163 // We might want to allow Name to be a dummy name initially, then 170 // We might want to allow Name to be a dummy name initially, then
164 // get updated to the real thing, since Data initializers are read 171 // get updated to the real thing, since Data initializers are read
165 // before the bitcode's symbol table is read. 172 // before the bitcode's symbol table is read.
166 void createDefinedSym(const IceString &Name, uint8_t Type, uint8_t Binding, 173 void createDefinedSym(const IceString &Name, uint8_t Type, uint8_t Binding,
167 ELFSection *Section, RelocOffsetT Offset, SizeT Size); 174 ELFSection *Section, RelocOffsetT Offset, SizeT Size);
(...skipping 24 matching lines...) Expand all
192 void writeSymbolMap(ELFStreamer &Str, const SymMap &Map); 199 void writeSymbolMap(ELFStreamer &Str, const SymMap &Map);
193 200
194 // Keep Local and Global symbols separate, since the sh_info needs to 201 // Keep Local and Global symbols separate, since the sh_info needs to
195 // know the index of the last LOCAL. 202 // know the index of the last LOCAL.
196 SymMap LocalSymbols; 203 SymMap LocalSymbols;
197 SymMap GlobalSymbols; 204 SymMap GlobalSymbols;
198 }; 205 };
199 206
200 // Models a relocation section. 207 // Models a relocation section.
201 class ELFRelocationSection : public ELFSection { 208 class ELFRelocationSection : public ELFSection {
209 ELFRelocationSection() = delete;
202 ELFRelocationSection(const ELFRelocationSection &) = delete; 210 ELFRelocationSection(const ELFRelocationSection &) = delete;
203 ELFRelocationSection &operator=(const ELFRelocationSection &) = delete; 211 ELFRelocationSection &operator=(const ELFRelocationSection &) = delete;
204 212
205 public: 213 public:
206 using ELFSection::ELFSection; 214 using ELFSection::ELFSection;
207 215
208 const ELFSection *getRelatedSection() const { return RelatedSection; } 216 const ELFSection *getRelatedSection() const { return RelatedSection; }
209 void setRelatedSection(const ELFSection *Section) { 217 void setRelatedSection(const ELFSection *Section) {
210 RelatedSection = Section; 218 RelatedSection = Section;
211 } 219 }
(...skipping 18 matching lines...) Expand all
230 FixupList Fixups; 238 FixupList Fixups;
231 }; 239 };
232 240
233 // Models a string table. The user will build the string table by 241 // Models a string table. The user will build the string table by
234 // adding strings incrementally. At some point, all strings should be 242 // adding strings incrementally. At some point, all strings should be
235 // known and doLayout() should be called. After that, no other 243 // known and doLayout() should be called. After that, no other
236 // strings may be added. However, the final offsets of the strings 244 // strings may be added. However, the final offsets of the strings
237 // can be discovered and used to fill out section headers and symbol 245 // can be discovered and used to fill out section headers and symbol
238 // table entries. 246 // table entries.
239 class ELFStringTableSection : public ELFSection { 247 class ELFStringTableSection : public ELFSection {
248 ELFStringTableSection() = delete;
240 ELFStringTableSection(const ELFStringTableSection &) = delete; 249 ELFStringTableSection(const ELFStringTableSection &) = delete;
241 ELFStringTableSection &operator=(const ELFStringTableSection &) = delete; 250 ELFStringTableSection &operator=(const ELFStringTableSection &) = delete;
242 251
243 public: 252 public:
244 using ELFSection::ELFSection; 253 using ELFSection::ELFSection;
245 254
246 // Add a string to the table, in preparation for final layout. 255 // Add a string to the table, in preparation for final layout.
247 void add(const IceString &Str); 256 void add(const IceString &Str);
248 257
249 // Finalizes the layout of the string table and fills in the section Data. 258 // Finalizes the layout of the string table and fills in the section Data.
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 Rel.setSymbolAndType(Symbol->getNumber(), Fixup.kind()); 358 Rel.setSymbolAndType(Symbol->getNumber(), Fixup.kind());
350 Str.writeAddrOrOffset<IsELF64>(Rel.r_offset); 359 Str.writeAddrOrOffset<IsELF64>(Rel.r_offset);
351 Str.writeELFWord<IsELF64>(Rel.r_info); 360 Str.writeELFWord<IsELF64>(Rel.r_info);
352 } 361 }
353 } 362 }
354 } 363 }
355 364
356 } // end of namespace Ice 365 } // end of namespace Ice
357 366
358 #endif // SUBZERO_SRC_ICEELFSECTION_H 367 #endif // SUBZERO_SRC_ICEELFSECTION_H
OLDNEW
« no previous file with comments | « src/IceELFObjectWriter.h ('k') | src/IceELFStreamer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698