[PATCH] D12423: MCAsmInfo: Allow targets to specify when the .section directive should be omitted

Tom Stellard via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 8 08:42:30 PDT 2015


tstellarAMD updated this revision to Diff 34222.
tstellarAMD added a comment.

Updated commit message to explain usage for AMDGPU backend.  The new commit message looks like this:

  The default behavior is to omit the .section directive for .text, .data,
  and sometimes .bss, but some targets may want to omit this directive for
  other sections too.
  
  The AMDGPU backend will uses this to emit a simplified syntax for section
  switches.  For example if the section directive is not omitted (current
  behavior), section switches to .hsatext will be printed like this:
  
  .section .hsatext,#alloc,#execinstr,#write
  
  This is actually wrong, because .hsatext has some custom STT_* flags,
  which MC doesn't know how to print or parse.
  
  If the section directive is omitted (made possible by this commit),
  section switches will be printed like this:
  
  .hsatext
  
  The motivation for this patch is to make it possible to emit sections
  with custom STT_* flags without having to teach MC about all the target
  specific STT_* flags.


http://reviews.llvm.org/D12423

Files:
  include/llvm/MC/MCAsmInfo.h
  lib/MC/MCAsmInfo.cpp
  lib/MC/MCSectionELF.cpp

Index: lib/MC/MCSectionELF.cpp
===================================================================
--- lib/MC/MCSectionELF.cpp
+++ lib/MC/MCSectionELF.cpp
@@ -27,12 +27,7 @@
   if (isUnique())
     return false;
 
-  // FIXME: Does .section .bss/.data/.text work everywhere??
-  if (Name == ".text" || Name == ".data" ||
-      (Name == ".bss" && !MAI.usesELFSectionDirectiveForBSS()))
-    return true;
-
-  return false;
+  return MAI.shouldOmitSectionDirective(Name);
 }
 
 static void printName(raw_ostream &OS, StringRef Name) {
Index: lib/MC/MCAsmInfo.cpp
===================================================================
--- lib/MC/MCAsmInfo.cpp
+++ lib/MC/MCAsmInfo.cpp
@@ -157,3 +157,9 @@
 
   return true;
 }
+
+bool MCAsmInfo::shouldOmitSectionDirective(StringRef SectionName) const {
+  // FIXME: Does .section .bss/.data/.text work everywhere??
+  return SectionName == ".text" || SectionName == ".data" ||
+        (SectionName == ".bss" && !usesELFSectionDirectiveForBSS());
+}
Index: include/llvm/MC/MCAsmInfo.h
===================================================================
--- include/llvm/MC/MCAsmInfo.h
+++ include/llvm/MC/MCAsmInfo.h
@@ -414,6 +414,15 @@
   /// syntactically correct.
   virtual bool isValidUnquotedName(StringRef Name) const;
 
+  /// Return true if the .section directive should be omitted when
+  /// emitting \p SectionName.  For example:
+  ///
+  /// shouldOmitSectionDirective(".text")
+  ///
+  /// returns false => .section .text,#alloc,#execinstr
+  /// returns true  => .text
+  virtual bool shouldOmitSectionDirective(StringRef SectionName) const;
+
   bool usesSunStyleELFSectionSwitchSyntax() const {
     return SunStyleELFSectionSwitchSyntax;
   }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D12423.34222.patch
Type: text/x-patch
Size: 1709 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150908/7d5608f5/attachment.bin>


More information about the llvm-commits mailing list