[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