[PATCH] D96641: [XCOFF] [NFC] make StorageMappingClass/SymbolType member optional in MCSectionXCOFF class
ChenZheng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Feb 13 20:02:07 PST 2021
shchenz updated this revision to Diff 323588.
shchenz added a comment.
1: add `isCsect` member function
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,8 @@
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!");
+ assert(CsectProp.hasValue() && "csect section has no csect properties!");
+ 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,8 @@
class MCSectionXCOFF final : public MCSection {
friend class MCContext;
- XCOFF::StorageMappingClass MappingClass;
- XCOFF::SymbolType Type;
+ Optional<XCOFF::CsectProperties> CsectProp;
+ bool IsCsect;
MCSymbolXCOFF *const QualName;
StringRef SymbolTableName;
bool MultiSymbolsAllowed;
@@ -43,19 +43,35 @@
XCOFF::SymbolType ST, SectionKind K, MCSymbolXCOFF *QualName,
MCSymbol *Begin, StringRef SymbolTableName,
bool MultiSymbolsAllowed)
- : MCSection(SV_XCOFF, Name, K, Begin), MappingClass(SMC), Type(ST),
+ : MCSection(SV_XCOFF, Name, K, Begin),
+ CsectProp(XCOFF::CsectProperties(SMC, ST)), IsCsect(true),
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 (CsectProp->Type != 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), IsCsect(false), 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 +81,19 @@
return S->getVariant() == SV_XCOFF;
}
- XCOFF::StorageMappingClass getMappingClass() const { return MappingClass; }
+ XCOFF::StorageMappingClass getMappingClass() const {
+ assert(IsCsect && "Only csect section has mapping class property!");
+ assert(CsectProp.hasValue() && "csect section has no csect properties!");
+ 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!");
+ assert(CsectProp.hasValue() && "csect section has no csect properties!");
+ return CsectProp->Type;
+ }
MCSymbolXCOFF *getQualNameSymbol() const { return QualName; }
void PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
@@ -79,6 +103,7 @@
bool isVirtualSection() const override;
StringRef getSymbolTableName() const { return SymbolTableName; }
bool isMultiSymbolsAllowed() const { return MultiSymbolsAllowed; }
+ bool isCsect() const { return IsCsect; }
};
} // end namespace llvm
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96641.323588.patch
Type: text/x-patch
Size: 4219 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210214/9515c580/attachment.bin>
More information about the llvm-commits
mailing list