[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