diff options
Diffstat (limited to 'llvm/include')
-rw-r--r-- | llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h | 1 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCContext.h | 13 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCSection.h | 6 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCSectionCOFF.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCSectionELF.h | 11 |
5 files changed, 21 insertions, 12 deletions
diff --git a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h index 75920a3fea4..232678ef1f8 100644 --- a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h +++ b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h @@ -34,6 +34,7 @@ namespace llvm { class TargetLoweringObjectFileELF : public TargetLoweringObjectFile { bool UseInitArray; + mutable unsigned NextUniqueID = 0; public: TargetLoweringObjectFileELF() : UseInitArray(false) {} diff --git a/llvm/include/llvm/MC/MCContext.h b/llvm/include/llvm/MC/MCContext.h index 63faeceec9d..e0688644575 100644 --- a/llvm/include/llvm/MC/MCContext.h +++ b/llvm/include/llvm/MC/MCContext.h @@ -165,12 +165,17 @@ namespace llvm { struct ELFSectionKey { std::string SectionName; StringRef GroupName; - ELFSectionKey(StringRef SectionName, StringRef GroupName) - : SectionName(SectionName), GroupName(GroupName) {} + unsigned UniqueID; + ELFSectionKey(StringRef SectionName, StringRef GroupName, + unsigned UniqueID) + : SectionName(SectionName), GroupName(GroupName), UniqueID(UniqueID) { + } bool operator<(const ELFSectionKey &Other) const { if (SectionName != Other.SectionName) return SectionName < Other.SectionName; - return GroupName < Other.GroupName; + if (GroupName != Other.GroupName) + return GroupName < Other.GroupName; + return UniqueID < Other.UniqueID; } }; @@ -303,7 +308,7 @@ namespace llvm { const MCSectionELF *getELFSection(StringRef Section, unsigned Type, unsigned Flags, unsigned EntrySize, - StringRef Group, bool Unique, + StringRef Group, unsigned UniqueID, const char *BeginSymName = nullptr); const MCSectionELF *createELFRelSection(StringRef Name, unsigned Type, diff --git a/llvm/include/llvm/MC/MCSection.h b/llvm/include/llvm/MC/MCSection.h index fc0fc7bc8ff..ab8968ef2ba 100644 --- a/llvm/include/llvm/MC/MCSection.h +++ b/llvm/include/llvm/MC/MCSection.h @@ -39,11 +39,10 @@ private: mutable MCSymbol *End; protected: - MCSection(SectionVariant V, SectionKind K, MCSymbol *Begin, bool Unique) - : Begin(Begin), End(nullptr), Variant(V), Kind(K), Unique(Unique) {} + MCSection(SectionVariant V, SectionKind K, MCSymbol *Begin) + : Begin(Begin), End(nullptr), Variant(V), Kind(K) {} SectionVariant Variant; SectionKind Kind; - bool Unique; public: virtual ~MCSection(); @@ -55,7 +54,6 @@ public: MCSymbol *getBeginSymbol() const { return Begin; } MCSymbol *getEndSymbol(MCContext &Ctx) const; bool hasEnded() const; - bool isUnique() const { return Unique; } virtual void PrintSwitchToSection(const MCAsmInfo &MAI, raw_ostream &OS, const MCExpr *Subsection) const = 0; diff --git a/llvm/include/llvm/MC/MCSectionCOFF.h b/llvm/include/llvm/MC/MCSectionCOFF.h index 201c4fae294..b6ec1d852d4 100644 --- a/llvm/include/llvm/MC/MCSectionCOFF.h +++ b/llvm/include/llvm/MC/MCSectionCOFF.h @@ -47,7 +47,7 @@ class MCSymbol; MCSectionCOFF(StringRef Section, unsigned Characteristics, MCSymbol *COMDATSymbol, int Selection, SectionKind K, MCSymbol *Begin) - : MCSection(SV_COFF, K, Begin, /*Unique*/ false), SectionName(Section), + : MCSection(SV_COFF, K, Begin), SectionName(Section), Characteristics(Characteristics), COMDATSymbol(COMDATSymbol), Selection(Selection) { assert ((Characteristics & 0x00F00000) == 0 && diff --git a/llvm/include/llvm/MC/MCSectionELF.h b/llvm/include/llvm/MC/MCSectionELF.h index 2bbc81fd79b..cd15741fe20 100644 --- a/llvm/include/llvm/MC/MCSectionELF.h +++ b/llvm/include/llvm/MC/MCSectionELF.h @@ -39,6 +39,8 @@ class MCSectionELF : public MCSection { /// below. unsigned Flags; + unsigned UniqueID; + /// EntrySize - The size of each entry in this section. This size only /// makes sense for sections that contain fixed-sized entries. If a /// section does not contain fixed-sized entries 'EntrySize' will be 0. @@ -49,10 +51,10 @@ class MCSectionELF : public MCSection { private: friend class MCContext; MCSectionELF(StringRef Section, unsigned type, unsigned flags, SectionKind K, - unsigned entrySize, const MCSymbol *group, bool Unique, + unsigned entrySize, const MCSymbol *group, unsigned UniqueID, MCSymbol *Begin) - : MCSection(SV_ELF, K, Begin, Unique), SectionName(Section), Type(type), - Flags(flags), EntrySize(entrySize), Group(group) {} + : MCSection(SV_ELF, K, Begin), SectionName(Section), Type(type), + Flags(flags), UniqueID(UniqueID), EntrySize(entrySize), Group(group) {} ~MCSectionELF(); void setSectionName(StringRef Name) { SectionName = Name; } @@ -74,6 +76,9 @@ public: bool UseCodeAlign() const override; bool isVirtualSection() const override; + bool isUnique() const { return UniqueID != ~0U; } + unsigned getUniqueID() const { return UniqueID; } + static bool classof(const MCSection *S) { return S->getVariant() == SV_ELF; } |