OSDN Git Service

use section flags more correctly.
authorChris Lattner <sabre@nondot.org>
Fri, 24 Jul 2009 04:08:17 +0000 (04:08 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 24 Jul 2009 04:08:17 +0000 (04:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76944 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetAsmInfo.h
lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp

index 393be61..cd0fcf8 100644 (file)
@@ -123,6 +123,8 @@ namespace llvm {
 
     const std::string& getName() const { return Name; }
     unsigned getFlags() const { return Flags; }
+    
+    bool hasFlag(unsigned F) const { return (Flags & F) != 0; }
   };
 
   /// TargetAsmInfo - This class is intended to be used as a base class for asm
index e863043..d69ca32 100644 (file)
@@ -1103,9 +1103,8 @@ void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
   SwitchToSection(TheSection);
 
   if (C->isNullValue() && !GVar->hasSection() && !GVar->isThreadLocal() &&
-      !(isDarwin && TheSection->getFlags() == SectionKind::RODataMergeStr)) {
-    // FIXME: This seems to be pretty darwin-specific
-
+      // Don't put things that should go in the cstring section into "comm".
+      !TheSection->hasFlag(SectionFlags::Strings)) {
     if (GVar->hasExternalLinkage()) {
       if (const char *Directive = TAI->getZeroFillDirective()) {
         O << "\t.globl\t" << name << "\n";
index 9c0aa74..1ac3e32 100644 (file)
@@ -897,7 +897,8 @@ void PPCDarwinAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
       !GVar->hasSection() &&
       (GVar->hasLocalLinkage() || GVar->hasExternalLinkage() ||
        GVar->isWeakForLinker()) &&
-      TheSection->getFlags() != SectionKind::RODataMergeStr) {
+      // Don't put things that should go in the cstring section into "comm".
+      !TheSection->hasFlag(SectionFlags::Strings)) {
     if (Size == 0) Size = 1;   // .comm Foo, 0 is undefined, avoid it.
 
     if (GVar->hasExternalLinkage()) {
index 334172a..6e44b9b 100644 (file)
@@ -798,9 +798,8 @@ void X86ATTAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
   SwitchToSection(TheSection);
 
   if (C->isNullValue() && !GVar->hasSection() &&
-      !(Subtarget->isTargetDarwin() &&
-        TAI->SectionKindForGlobal(GVar) == SectionKind::RODataMergeStr)) {
-    // FIXME: This seems to be pretty darwin-specific
+      // Don't put things that should go in the cstring section into "comm".
+      !TheSection->hasFlag(SectionFlags::Strings)) {
     if (GVar->hasExternalLinkage()) {
       if (const char *Directive = TAI->getZeroFillDirective()) {
         O << "\t.globl " << name << '\n';