| Index: src/IceELFSection.h
|
| diff --git a/src/IceELFSection.h b/src/IceELFSection.h
|
| index 92dc02b79b0322ff490c88c95f238a4c4603bc3f..636f3b4b438f0355bc4cf233ff5bf9850ea2f484 100644
|
| --- a/src/IceELFSection.h
|
| +++ b/src/IceELFSection.h
|
| @@ -36,15 +36,15 @@ class ELFSection {
|
| public:
|
| virtual ~ELFSection() = default;
|
|
|
| - /// Sentinel value for a section number/index for before the final
|
| - /// section index is actually known. The dummy NULL section will be assigned
|
| - /// number 0, and it is referenced by the dummy 0-th symbol in the symbol
|
| - /// table, so use max() instead of 0.
|
| + /// Sentinel value for a section number/index for before the final section
|
| + /// index is actually known. The dummy NULL section will be assigned number 0,
|
| + /// and it is referenced by the dummy 0-th symbol in the symbol table, so use
|
| + /// max() instead of 0.
|
| enum { NoSectionNumber = std::numeric_limits<SizeT>::max() };
|
|
|
| - /// Constructs an ELF section, filling in fields that will be known
|
| - /// once the *type* of section is decided. Other fields may be updated
|
| - /// incrementally or only after the program is completely defined.
|
| + /// Constructs an ELF section, filling in fields that will be known once the
|
| + /// *type* of section is decided. Other fields may be updated incrementally or
|
| + /// only after the program is completely defined.
|
| ELFSection(const IceString &Name, Elf64_Word ShType, Elf64_Xword ShFlags,
|
| Elf64_Xword ShAddralign, Elf64_Xword ShEntsize)
|
| : Name(Name), Header() {
|
| @@ -84,8 +84,8 @@ public:
|
| template <bool IsELF64> void writeHeader(ELFStreamer &Str);
|
|
|
| protected:
|
| - /// Name of the section in convenient string form (instead of a index
|
| - /// into the Section Header String Table, which is not known till later).
|
| + /// Name of the section in convenient string form (instead of a index into the
|
| + /// Section Header String Table, which is not known till later).
|
| const IceString Name;
|
|
|
| // The fields of the header. May only be partially initialized, but should
|
| @@ -96,8 +96,8 @@ protected:
|
| SizeT Number = NoSectionNumber;
|
| };
|
|
|
| -/// Models text/code sections. Code is written out incrementally and the
|
| -/// size of the section is then updated incrementally.
|
| +/// Models text/code sections. Code is written out incrementally and the size of
|
| +/// the section is then updated incrementally.
|
| class ELFTextSection : public ELFSection {
|
| ELFTextSection() = delete;
|
| ELFTextSection(const ELFTextSection &) = delete;
|
| @@ -109,9 +109,9 @@ public:
|
| void appendData(ELFStreamer &Str, const llvm::StringRef MoreData);
|
| };
|
|
|
| -/// Models data/rodata sections. Data is written out incrementally and the
|
| -/// size of the section is then updated incrementally.
|
| -/// Some rodata sections may have fixed entsize and duplicates may be mergeable.
|
| +/// Models data/rodata sections. Data is written out incrementally and the size
|
| +/// of the section is then updated incrementally. Some rodata sections may have
|
| +/// fixed entsize and duplicates may be mergeable.
|
| class ELFDataSection : public ELFSection {
|
| ELFDataSection() = delete;
|
| ELFDataSection(const ELFDataSection &) = delete;
|
| @@ -128,8 +128,8 @@ public:
|
| RelocOffsetT RelocOffset);
|
|
|
| /// Pad the next section offset for writing data elements to the requested
|
| - /// alignment. If the section is NOBITS then do not actually write out
|
| - /// the padding and only update the section size.
|
| + /// alignment. If the section is NOBITS then do not actually write out the
|
| + /// padding and only update the section size.
|
| void padToAlignment(ELFStreamer &Str, Elf64_Xword Align);
|
| };
|
|
|
| @@ -141,8 +141,8 @@ struct ELFSym {
|
| ELFSection *Section;
|
| SizeT Number;
|
|
|
| - /// Sentinel value for symbols that haven't been assigned a number yet.
|
| - /// The dummy 0-th symbol will be assigned number 0, so don't use that.
|
| + /// Sentinel value for symbols that haven't been assigned a number yet. The
|
| + /// dummy 0-th symbol will be assigned number 0, so don't use that.
|
| enum { UnknownNumber = std::numeric_limits<SizeT>::max() };
|
|
|
| void setNumber(SizeT N) {
|
| @@ -170,16 +170,15 @@ public:
|
| : ELFSection(Name, ShType, ShFlags, ShAddralign, ShEntsize),
|
| NullSymbol(nullptr) {}
|
|
|
| - /// Create initial entry for a symbol when it is defined.
|
| - /// Each entry should only be defined once.
|
| - /// We might want to allow Name to be a dummy name initially, then
|
| - /// get updated to the real thing, since Data initializers are read
|
| - /// before the bitcode's symbol table is read.
|
| + /// Create initial entry for a symbol when it is defined. Each entry should
|
| + /// only be defined once. We might want to allow Name to be a dummy name
|
| + /// initially, then get updated to the real thing, since Data initializers are
|
| + /// read before the bitcode's symbol table is read.
|
| void createDefinedSym(const IceString &Name, uint8_t Type, uint8_t Binding,
|
| ELFSection *Section, RelocOffsetT Offset, SizeT Size);
|
|
|
| - /// Note that a symbol table entry needs to be created for the given
|
| - /// symbol because it is undefined.
|
| + /// Note that a symbol table entry needs to be created for the given symbol
|
| + /// because it is undefined.
|
| void noteUndefinedSym(const IceString &Name, ELFSection *NullSection);
|
|
|
| const ELFSym *findSymbol(const IceString &Name) const;
|
| @@ -198,8 +197,8 @@ public:
|
| void writeData(ELFStreamer &Str, bool IsELF64);
|
|
|
| private:
|
| - // Map from symbol name to its symbol information.
|
| - // This assumes symbols are unique across all sections.
|
| + // Map from symbol name to its symbol information. This assumes symbols are
|
| + // unique across all sections.
|
| using SymtabKey = IceString;
|
| using SymMap = std::map<SymtabKey, ELFSym>;
|
|
|
| @@ -207,8 +206,8 @@ private:
|
| void writeSymbolMap(ELFStreamer &Str, const SymMap &Map);
|
|
|
| const ELFSym *NullSymbol;
|
| - // Keep Local and Global symbols separate, since the sh_info needs to
|
| - // know the index of the last LOCAL.
|
| + // Keep Local and Global symbols separate, since the sh_info needs to know
|
| + // the index of the last LOCAL.
|
| SymMap LocalSymbols;
|
| SymMap GlobalSymbols;
|
| };
|
| @@ -231,8 +230,8 @@ public:
|
| RelatedSection = Section;
|
| }
|
|
|
| - /// Track additional relocations which start out relative to offset 0,
|
| - /// but should be adjusted to be relative to BaseOff.
|
| + /// Track additional relocations which start out relative to offset 0, but
|
| + /// should be adjusted to be relative to BaseOff.
|
| void addRelocations(RelocOffsetT BaseOff, const FixupRefList &FixupRefs);
|
|
|
| /// Track a single additional relocation.
|
| @@ -251,12 +250,11 @@ private:
|
| FixupList Fixups;
|
| };
|
|
|
| -/// Models a string table. The user will build the string table by
|
| -/// adding strings incrementally. At some point, all strings should be
|
| -/// known and doLayout() should be called. After that, no other
|
| -/// strings may be added. However, the final offsets of the strings
|
| -/// can be discovered and used to fill out section headers and symbol
|
| -/// table entries.
|
| +/// Models a string table. The user will build the string table by adding
|
| +/// strings incrementally. At some point, all strings should be known and
|
| +/// doLayout() should be called. After that, no other strings may be added.
|
| +/// However, the final offsets of the strings can be discovered and used to fill
|
| +/// out section headers and symbol table entries.
|
| class ELFStringTableSection : public ELFSection {
|
| ELFStringTableSection() = delete;
|
| ELFStringTableSection(const ELFStringTableSection &) = delete;
|
| @@ -271,12 +269,12 @@ public:
|
| /// Finalizes the layout of the string table and fills in the section Data.
|
| void doLayout();
|
|
|
| - /// The first byte of the string table should be \0, so it is an
|
| - /// invalid index. Indices start out as unknown until layout is complete.
|
| + /// The first byte of the string table should be \0, so it is an invalid
|
| + /// index. Indices start out as unknown until layout is complete.
|
| enum { UnknownIndex = 0 };
|
|
|
| - /// Grabs the final index of a string after layout. Returns UnknownIndex
|
| - /// if the string's index is not found.
|
| + /// Grabs the final index of a string after layout. Returns UnknownIndex if
|
| + /// the string's index is not found.
|
| size_t getIndex(const IceString &Str) const;
|
|
|
| llvm::StringRef getSectionData() const {
|
| @@ -290,19 +288,19 @@ public:
|
| private:
|
| bool isLaidOut() const { return !StringData.empty(); }
|
|
|
| - /// Strings can share a string table entry if they share the same
|
| - /// suffix. E.g., "pop" and "lollipop" can both use the characters
|
| - /// in "lollipop", but "pops" cannot, and "unpop" cannot either.
|
| - /// Though, "pop", "lollipop", and "unpop" share "pop" as the suffix,
|
| - /// "pop" can only share the characters with one of them.
|
| + /// Strings can share a string table entry if they share the same suffix.
|
| + /// E.g., "pop" and "lollipop" can both use the characters in "lollipop", but
|
| + /// "pops" cannot, and "unpop" cannot either. Though, "pop", "lollipop", and
|
| + /// "unpop" share "pop" as the suffix, "pop" can only share the characters
|
| + /// with one of them.
|
| struct SuffixComparator {
|
| bool operator()(const IceString &StrA, const IceString &StrB) const;
|
| };
|
|
|
| using StringToIndexType = std::map<IceString, size_t, SuffixComparator>;
|
|
|
| - /// Track strings to their index. Index will be UnknownIndex if not
|
| - /// yet laid out.
|
| + /// Track strings to their index. Index will be UnknownIndex if not yet laid
|
| + /// out.
|
| StringToIndexType StringToIndexMap;
|
|
|
| using RawDataType = std::vector<uint8_t>;
|
|
|