[PATCH] D96641: [XCOFF] [NFC] make StorageMappingClass/SymbolType member optional in MCSectionXCOFF class
ChenZheng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 18 01:46:26 PST 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG4c23707a418a: [XCOFF][NFC] make StorageMappingClass/SymbolType member optional (authored by shchenz).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D96641/new/
https://reviews.llvm.org/D96641
Files:
llvm/include/llvm/MC/MCSectionXCOFF.h
llvm/lib/MC/MCSectionXCOFF.cpp
Index: llvm/lib/MC/MCSectionXCOFF.cpp
===================================================================
--- llvm/lib/MC/MCSectionXCOFF.cpp
+++ llvm/lib/MC/MCSectionXCOFF.cpp
@@ -75,4 +75,7 @@
bool MCSectionXCOFF::UseCodeAlign() const { return getKind().isText(); }
-bool MCSectionXCOFF::isVirtualSection() const { return XCOFF::XTY_CM == Type; }
+bool MCSectionXCOFF::isVirtualSection() const {
+ assert(isCsect() && "Only csect section can be virtual!");
+ return XCOFF::XTY_CM == CsectProp->Type;
+}
Index: llvm/include/llvm/MC/MCSectionXCOFF.h
===================================================================
--- llvm/include/llvm/MC/MCSectionXCOFF.h
+++ llvm/include/llvm/MC/MCSectionXCOFF.h
@@ -32,8 +32,7 @@
class MCSectionXCOFF final : public MCSection {
friend class MCContext;
- XCOFF::StorageMappingClass MappingClass;
- XCOFF::SymbolType Type;
+ Optional<XCOFF::CsectProperties> CsectProp;
MCSymbolXCOFF *const QualName;
StringRef SymbolTableName;
bool MultiSymbolsAllowed;
@@ -43,19 +42,37 @@
XCOFF::SymbolType ST, SectionKind K, MCSymbolXCOFF *QualName,
MCSymbol *Begin, StringRef SymbolTableName,
bool MultiSymbolsAllowed)
- : MCSection(SV_XCOFF, Name, K, Begin), MappingClass(SMC), Type(ST),
- QualName(QualName), SymbolTableName(SymbolTableName),
+ : MCSection(SV_XCOFF, Name, K, Begin),
+ CsectProp(XCOFF::CsectProperties(SMC, ST)), QualName(QualName),
+ SymbolTableName(SymbolTableName),
MultiSymbolsAllowed(MultiSymbolsAllowed) {
- assert((ST == XCOFF::XTY_SD || ST == XCOFF::XTY_CM || ST == XCOFF::XTY_ER) &&
- "Invalid or unhandled type for csect.");
+ assert(
+ (ST == XCOFF::XTY_SD || ST == XCOFF::XTY_CM || ST == XCOFF::XTY_ER) &&
+ "Invalid or unhandled type for csect.");
assert(QualName != nullptr && "QualName is needed.");
QualName->setRepresentedCsect(this);
QualName->setStorageClass(XCOFF::C_HIDEXT);
// A csect is 4 byte aligned by default, except for undefined symbol csects.
- if (Type != XCOFF::XTY_ER)
+ if (ST != XCOFF::XTY_ER)
setAlignment(Align(DefaultAlignVal));
}
+ MCSectionXCOFF(StringRef Name, SectionKind K, MCSymbolXCOFF *QualName,
+ MCSymbol *Begin, StringRef SymbolTableName,
+ bool MultiSymbolsAllowed)
+ : MCSection(SV_XCOFF, Name, K, Begin), QualName(QualName),
+ SymbolTableName(SymbolTableName),
+ MultiSymbolsAllowed(MultiSymbolsAllowed) {
+ assert(QualName != nullptr && "QualName is needed.");
+
+ // FIXME: use a more meaningful name for non csect sections.
+ QualName->setRepresentedCsect(this);
+
+ // Set default alignment 4 for all non csect sections for now.
+ // FIXME: set different alignments according to section types.
+ setAlignment(Align(DefaultAlignVal));
+ }
+
void printCsectDirective(raw_ostream &OS) const;
public:
@@ -65,11 +82,17 @@
return S->getVariant() == SV_XCOFF;
}
- XCOFF::StorageMappingClass getMappingClass() const { return MappingClass; }
+ XCOFF::StorageMappingClass getMappingClass() const {
+ assert(isCsect() && "Only csect section has mapping class property!");
+ return CsectProp->MappingClass;
+ }
XCOFF::StorageClass getStorageClass() const {
return QualName->getStorageClass();
}
- XCOFF::SymbolType getCSectType() const { return Type; }
+ XCOFF::SymbolType getCSectType() const {
+ assert(isCsect() && "Only csect section has symbol type property!");
+ return CsectProp->Type;
+ }
MCSymbolXCOFF *getQualNameSymbol() const { return QualName; }
void PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
@@ -79,6 +102,7 @@
bool isVirtualSection() const override;
StringRef getSymbolTableName() const { return SymbolTableName; }
bool isMultiSymbolsAllowed() const { return MultiSymbolsAllowed; }
+ bool isCsect() const { return CsectProp.hasValue(); }
};
} // end namespace llvm
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96641.324565.patch
Type: text/x-patch
Size: 4009 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210218/99455da0/attachment.bin>
More information about the llvm-commits
mailing list