[llvm-commits] [llvm] r79077 - in /llvm/trunk: include/llvm/MC/MCSectionELF.h lib/MC/MCSectionELF.cpp lib/Target/XCore/MCSectionXCore.cpp lib/Target/XCore/MCSectionXCore.h

Chris Lattner sabre at nondot.org
Fri Aug 14 22:56:11 PDT 2009


Author: lattner
Date: Sat Aug 15 00:56:11 2009
New Revision: 79077

URL: http://llvm.org/viewvc/llvm-project?rev=79077&view=rev
Log:
add support for target-specific ELF section flags, add a new MCSectionXCore
class which represents the XCore cp/dp section flags.  No functionality
change yet.

Added:
    llvm/trunk/lib/Target/XCore/MCSectionXCore.cpp
    llvm/trunk/lib/Target/XCore/MCSectionXCore.h
Modified:
    llvm/trunk/include/llvm/MC/MCSectionELF.h
    llvm/trunk/lib/MC/MCSectionELF.cpp

Modified: llvm/trunk/include/llvm/MC/MCSectionELF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCSectionELF.h?rev=79077&r1=79076&r2=79077&view=diff

==============================================================================
--- llvm/trunk/include/llvm/MC/MCSectionELF.h (original)
+++ llvm/trunk/include/llvm/MC/MCSectionELF.h Sat Aug 15 00:56:11 2009
@@ -34,9 +34,10 @@
   /// explicit section specfied.
   bool IsExplicit;
   
-  MCSectionELF(const StringRef &Section, unsigned T, unsigned F, 
+protected:
+  MCSectionELF(const StringRef &Section, unsigned type, unsigned flags,
                SectionKind K, bool isExplicit)
-    : MCSection(K), SectionName(Section.str()), Type(T), Flags(F), 
+    : MCSection(K), SectionName(Section.str()), Type(type), Flags(flags), 
       IsExplicit(isExplicit) {}
 public:
   
@@ -93,16 +94,16 @@
     SHT_REL              = 0x09U,
 
     // This section type is reserved but has unspecified semantics. 
-    SHT_SHLIB            = 0x0aU,
+    SHT_SHLIB            = 0x0AU,
 
     // This section holds a symbol table.
-    SHT_DYNSYM           = 0x0bU,
+    SHT_DYNSYM           = 0x0BU,
 
     // This section contains an array of pointers to initialization functions.
-    SHT_INIT_ARRAY       = 0x0eU,
+    SHT_INIT_ARRAY       = 0x0EU,
 
     // This section contains an array of pointers to termination functions.
-    SHT_FINI_ARRAY       = 0x0fU,
+    SHT_FINI_ARRAY       = 0x0FU,
 
     // This section contains an array of pointers to functions that are invoked
     // before all other initialization functions.
@@ -150,7 +151,17 @@
     SHF_GROUP            = 0x200U,
 
     // This section holds Thread-Local Storage.
-    SHF_TLS              = 0x400U
+    SHF_TLS              = 0x400U,
+    
+    /// FIRST_TARGET_DEP_FLAG - This is the first flag that subclasses are
+    /// allowed to specify.
+    FIRST_TARGET_DEP_FLAG = 0x800U,
+
+    /// TARGET_INDEP_SHF - This is the bitmask for all the target independent
+    /// section flags.  Targets can define their own target flags above these.
+    /// If they do that, they should implement their own MCSectionELF subclasses
+    /// and implement the virtual method hooks below to handle printing needs.
+    TARGET_INDEP_SHF     = FIRST_TARGET_DEP_FLAG-1U
   };
 
   StringRef getSectionName() const {
@@ -162,6 +173,17 @@
   
   virtual void PrintSwitchToSection(const TargetAsmInfo &TAI,
                                     raw_ostream &OS) const;
+  
+  
+  /// PrintTargetSpecificSectionFlags - Targets that define their own
+  /// MCSectionELF subclasses with target specific section flags should
+  /// implement this method if they end up adding letters to the attributes
+  /// list.
+  virtual void PrintTargetSpecificSectionFlags(const TargetAsmInfo &TAI,
+                                               raw_ostream &OS) const {
+  }
+                                               
+  
 };
 
 } // end namespace llvm

Modified: llvm/trunk/lib/MC/MCSectionELF.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSectionELF.cpp?rev=79077&r1=79076&r2=79077&view=diff

==============================================================================
--- llvm/trunk/lib/MC/MCSectionELF.cpp (original)
+++ llvm/trunk/lib/MC/MCSectionELF.cpp Sat Aug 15 00:56:11 2009
@@ -17,8 +17,7 @@
 MCSectionELF *MCSectionELF::
 Create(const StringRef &Section, unsigned Type, unsigned Flags,
        SectionKind K, bool isExplicit, MCContext &Ctx) {
-  return new 
-    (Ctx) MCSectionELF(Section, Type, Flags, K, isExplicit);
+  return new (Ctx) MCSectionELF(Section, Type, Flags, K, isExplicit);
 }
 
 // ShouldOmitSectionDirective - Decides whether a '.section' directive
@@ -68,7 +67,6 @@
       OS << ",#tls";
   } else {
     OS << ",\"";
-  
     if (Flags & MCSectionELF::SHF_ALLOC)
       OS << 'a';
     if (Flags & MCSectionELF::SHF_EXECINSTR)
@@ -81,7 +79,11 @@
       OS << 'S';
     if (Flags & MCSectionELF::SHF_TLS)
       OS << 'T';
-   
+    
+    // If there are target-specific flags, print them.
+    if (Flags & ~MCSectionELF::TARGET_INDEP_SHF)
+      PrintTargetSpecificSectionFlags(TAI, OS);
+    
     OS << '"';
 
     if (ShouldPrintSectionType(Type)) {

Added: llvm/trunk/lib/Target/XCore/MCSectionXCore.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/MCSectionXCore.cpp?rev=79077&view=auto

==============================================================================
--- llvm/trunk/lib/Target/XCore/MCSectionXCore.cpp (added)
+++ llvm/trunk/lib/Target/XCore/MCSectionXCore.cpp Sat Aug 15 00:56:11 2009
@@ -0,0 +1,35 @@
+//===- MCSectionXCore.cpp - XCore-specific section representation ---------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the MCSectionXCore class.
+//
+//===----------------------------------------------------------------------===//
+
+#include "MCSectionXCore.h"
+#include "llvm/MC/MCContext.h"
+#include "llvm/Support/raw_ostream.h"
+using namespace llvm;
+
+MCSectionXCore *
+MCSectionXCore::Create(const StringRef &Section, unsigned Type,
+                       unsigned Flags, SectionKind K,
+                       bool isExplicit, MCContext &Ctx) {
+  return new (Ctx) MCSectionXCore(Section, Type, Flags, K, isExplicit);
+}
+
+
+/// PrintTargetSpecificSectionFlags - This handles the XCore-specific cp/dp
+/// section flags.
+void MCSectionXCore::PrintTargetSpecificSectionFlags(const TargetAsmInfo &TAI,
+                                                     raw_ostream &OS) const {
+  if (getFlags() & MCSectionXCore::SHF_CP_SECTION)
+    OS << 'c';
+  if (getFlags() & MCSectionXCore::SHF_DP_SECTION)
+    OS << 'd';
+}

Added: llvm/trunk/lib/Target/XCore/MCSectionXCore.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/MCSectionXCore.h?rev=79077&view=auto

==============================================================================
--- llvm/trunk/lib/Target/XCore/MCSectionXCore.h (added)
+++ llvm/trunk/lib/Target/XCore/MCSectionXCore.h Sat Aug 15 00:56:11 2009
@@ -0,0 +1,54 @@
+//===- MCSectionXCore.h - XCore-specific section representation -*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the MCSectionXCore class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MCSECTION_XCORE_H
+#define LLVM_MCSECTION_XCORE_H
+
+#include "llvm/MC/MCSectionELF.h"
+
+namespace llvm {
+  
+class MCSectionXCore : public MCSectionELF {
+  MCSectionXCore(const StringRef &Section, unsigned Type, unsigned Flags,
+                 SectionKind K, bool isExplicit)
+    : MCSectionELF(Section, Type, Flags, K, isExplicit) {}
+  
+public:
+  
+  enum {
+    /// SHF_CP_SECTION - All sections with the "c" flag are grouped together
+    /// by the linker to form the constant pool and the cp register is set to
+    /// the start of the constant pool by the boot code.
+    SHF_CP_SECTION = FIRST_TARGET_DEP_FLAG,
+    
+    /// SHF_DP_SECTION - All sections with the "d" flag are grouped together
+    /// by the linker to form the data section and the dp register is set to
+    /// the start of the section by the boot code.
+    SHF_DP_SECTION = FIRST_TARGET_DEP_FLAG << 1
+  };
+  
+  static MCSectionXCore *Create(const StringRef &Section, unsigned Type,
+                                unsigned Flags, SectionKind K,
+                                bool isExplicit, MCContext &Ctx);
+  
+  
+  /// PrintTargetSpecificSectionFlags - This handles the XCore-specific cp/dp
+  /// section flags.
+  virtual void PrintTargetSpecificSectionFlags(const TargetAsmInfo &TAI,
+                                               raw_ostream &OS) const;
+
+};
+  
+} // end namespace llvm
+
+#endif





More information about the llvm-commits mailing list