llvm-mc: Fix bugs where bytes were unintentionally being printed as signed.
[oota-llvm.git] / lib / MC / MCSectionELF.cpp
index d172a9c923026313d7411f5eee4fe047333129ee..3d8774ceeb27604b0d7ccc9e4f784c515544d71e 100644 (file)
@@ -16,20 +16,21 @@ using namespace llvm;
 
 MCSectionELF *MCSectionELF::
 Create(const StringRef &Section, unsigned Type, unsigned Flags,
-       SectionKind K, bool hasCrazyBSS, bool isExplicit, MCContext &Ctx) {
+       SectionKind K, bool isExplicit, MCContext &Ctx) {
   return new 
-    (Ctx) MCSectionELF(Section, Type, Flags, K, hasCrazyBSS, isExplicit);
+    (Ctx) MCSectionELF(Section, Type, Flags, K, isExplicit);
 }
 
 // ShouldOmitSectionDirective - Decides whether a '.section' directive
 // should be printed before the section name
-bool MCSectionELF::ShouldOmitSectionDirective(const char *Name) const {
+bool MCSectionELF::ShouldOmitSectionDirective(const char *Name,
+                                        const TargetAsmInfo &TAI) const {
   
-  // PPC/Linux doesn't support the .bss directive, it needs .section .bss.
   // FIXME: Does .section .bss/.data/.text work everywhere??
-  if ((!HasCrazyBSS && strncmp(Name, ".bss", 4) == 0) || 
-      strncmp(Name, ".text", 5) == 0 || 
-      strncmp(Name, ".data", 5) == 0)
+  if (strcmp(Name, ".text") == 0 ||
+      strcmp(Name, ".data") == 0 ||
+      (strcmp(Name, ".bss") == 0 &&
+       !TAI.usesELFSectionDirectiveForBSS())) 
     return true;
 
   return false;
@@ -46,8 +47,8 @@ bool MCSectionELF::ShouldPrintSectionType(unsigned Ty) const {
 
 void MCSectionELF::PrintSwitchToSection(const TargetAsmInfo &TAI,
                                         raw_ostream &OS) const {
-  
-  if (ShouldOmitSectionDirective(SectionName.c_str())) {
+   
+  if (ShouldOmitSectionDirective(SectionName.c_str(), TAI)) {
     OS << '\t' << getSectionName() << '\n';
     return;
   }
@@ -121,3 +122,15 @@ void MCSectionELF::PrintSwitchToSection(const TargetAsmInfo &TAI,
   OS << '\n';
 }
 
+// HasCommonSymbols - True if this section holds common symbols, this is
+// indicated on the ELF object file by a symbol with SHN_COMMON section 
+// header index.
+bool MCSectionELF::HasCommonSymbols() const {
+  
+  if (strncmp(SectionName.c_str(), ".gnu.linkonce.", 14) == 0)
+    return true;
+
+  return false;
+}
+
+