| OLD | NEW |
| 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 /// \file | 10 /// \file |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 | 193 |
| 194 size_t getNumLocals() const { return LocalSymbols.size(); } | 194 size_t getNumLocals() const { return LocalSymbols.size(); } |
| 195 | 195 |
| 196 void updateIndices(const ELFStringTableSection *StrTab); | 196 void updateIndices(const ELFStringTableSection *StrTab); |
| 197 | 197 |
| 198 void writeData(ELFStreamer &Str, bool IsELF64); | 198 void writeData(ELFStreamer &Str, bool IsELF64); |
| 199 | 199 |
| 200 private: | 200 private: |
| 201 // Map from symbol name to its symbol information. | 201 // Map from symbol name to its symbol information. |
| 202 // This assumes symbols are unique across all sections. | 202 // This assumes symbols are unique across all sections. |
| 203 typedef IceString SymtabKey; | 203 using SymtabKey = IceString; |
| 204 typedef std::map<SymtabKey, ELFSym> SymMap; | 204 using SymMap = std::map<SymtabKey, ELFSym>; |
| 205 | 205 |
| 206 template <bool IsELF64> | 206 template <bool IsELF64> |
| 207 void writeSymbolMap(ELFStreamer &Str, const SymMap &Map); | 207 void writeSymbolMap(ELFStreamer &Str, const SymMap &Map); |
| 208 | 208 |
| 209 const ELFSym *NullSymbol; | 209 const ELFSym *NullSymbol; |
| 210 // Keep Local and Global symbols separate, since the sh_info needs to | 210 // Keep Local and Global symbols separate, since the sh_info needs to |
| 211 // know the index of the last LOCAL. | 211 // know the index of the last LOCAL. |
| 212 SymMap LocalSymbols; | 212 SymMap LocalSymbols; |
| 213 SymMap GlobalSymbols; | 213 SymMap GlobalSymbols; |
| 214 }; | 214 }; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 | 292 |
| 293 /// Strings can share a string table entry if they share the same | 293 /// Strings can share a string table entry if they share the same |
| 294 /// suffix. E.g., "pop" and "lollipop" can both use the characters | 294 /// suffix. E.g., "pop" and "lollipop" can both use the characters |
| 295 /// in "lollipop", but "pops" cannot, and "unpop" cannot either. | 295 /// in "lollipop", but "pops" cannot, and "unpop" cannot either. |
| 296 /// Though, "pop", "lollipop", and "unpop" share "pop" as the suffix, | 296 /// Though, "pop", "lollipop", and "unpop" share "pop" as the suffix, |
| 297 /// "pop" can only share the characters with one of them. | 297 /// "pop" can only share the characters with one of them. |
| 298 struct SuffixComparator { | 298 struct SuffixComparator { |
| 299 bool operator()(const IceString &StrA, const IceString &StrB) const; | 299 bool operator()(const IceString &StrA, const IceString &StrB) const; |
| 300 }; | 300 }; |
| 301 | 301 |
| 302 typedef std::map<IceString, size_t, SuffixComparator> StringToIndexType; | 302 using StringToIndexType = std::map<IceString, size_t, SuffixComparator>; |
| 303 | 303 |
| 304 /// Track strings to their index. Index will be UnknownIndex if not | 304 /// Track strings to their index. Index will be UnknownIndex if not |
| 305 /// yet laid out. | 305 /// yet laid out. |
| 306 StringToIndexType StringToIndexMap; | 306 StringToIndexType StringToIndexMap; |
| 307 | 307 |
| 308 typedef std::vector<uint8_t> RawDataType; | 308 using RawDataType = std::vector<uint8_t>; |
| 309 RawDataType StringData; | 309 RawDataType StringData; |
| 310 }; | 310 }; |
| 311 | 311 |
| 312 template <bool IsELF64> void ELFSection::writeHeader(ELFStreamer &Str) { | 312 template <bool IsELF64> void ELFSection::writeHeader(ELFStreamer &Str) { |
| 313 Str.writeELFWord<IsELF64>(Header.sh_name); | 313 Str.writeELFWord<IsELF64>(Header.sh_name); |
| 314 Str.writeELFWord<IsELF64>(Header.sh_type); | 314 Str.writeELFWord<IsELF64>(Header.sh_type); |
| 315 Str.writeELFXword<IsELF64>(Header.sh_flags); | 315 Str.writeELFXword<IsELF64>(Header.sh_flags); |
| 316 Str.writeAddrOrOffset<IsELF64>(Header.sh_addr); | 316 Str.writeAddrOrOffset<IsELF64>(Header.sh_addr); |
| 317 Str.writeAddrOrOffset<IsELF64>(Header.sh_offset); | 317 Str.writeAddrOrOffset<IsELF64>(Header.sh_offset); |
| 318 Str.writeELFXword<IsELF64>(Header.sh_size); | 318 Str.writeELFXword<IsELF64>(Header.sh_size); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 Rel.setSymbolAndType(Symbol->getNumber(), Fixup.kind()); | 376 Rel.setSymbolAndType(Symbol->getNumber(), Fixup.kind()); |
| 377 Str.writeAddrOrOffset<IsELF64>(Rel.r_offset); | 377 Str.writeAddrOrOffset<IsELF64>(Rel.r_offset); |
| 378 Str.writeELFWord<IsELF64>(Rel.r_info); | 378 Str.writeELFWord<IsELF64>(Rel.r_info); |
| 379 } | 379 } |
| 380 } | 380 } |
| 381 } | 381 } |
| 382 | 382 |
| 383 } // end of namespace Ice | 383 } // end of namespace Ice |
| 384 | 384 |
| 385 #endif // SUBZERO_SRC_ICEELFSECTION_H | 385 #endif // SUBZERO_SRC_ICEELFSECTION_H |
| OLD | NEW |