Make EmitTBSSSymbol take a section argument so that we can find it later.
authorEric Christopher <echristo@apple.com>
Tue, 18 May 2010 21:16:04 +0000 (21:16 +0000)
committerEric Christopher <echristo@apple.com>
Tue, 18 May 2010 21:16:04 +0000 (21:16 +0000)
Fix up callers and users.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104057 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCStreamer.h
lib/MC/MCAsmStreamer.cpp
lib/MC/MCNullStreamer.cpp
lib/MC/MCParser/AsmParser.cpp

index 400f4c027db0ea205ed19a461a4e6cf2b12c1e22..389b1e95fbfa42dc5c1555e2eebf7493cfdcac4a 100644 (file)
@@ -190,12 +190,13 @@ namespace llvm {
 
     /// EmitTBSSSymbol - Emit a thread local bss (.tbss) symbol.
     ///
+    /// @param Section - The thread local common section.
     /// @param Symbol - The thread local common symbol to emit.
     /// @param Size - The size of the symbol.
     /// @param ByteAlignment - The alignment of the thread local common symbol
     /// if non-zero.  This must be a power of 2 on some targets.
-    virtual void EmitTBSSSymbol(MCSymbol *Symbol, uint64_t Size,
-                                unsigned ByteAlignment = 0) = 0;
+    virtual void EmitTBSSSymbol(const MCSection *Section, MCSymbol *Symbol,
+                                uint64_t Size, unsigned ByteAlignment = 0) = 0;
     /// @}
     /// @name Generating Data
     /// @{
index 4f7699ca99d85da1e7933f6505e30404a06767db..f9182c57f6b3ba7fced1b110f4757b85a4fe6eb0 100644 (file)
@@ -126,8 +126,8 @@ public:
   virtual void EmitZerofill(const MCSection *Section, MCSymbol *Symbol = 0,
                             unsigned Size = 0, unsigned ByteAlignment = 0);
 
-  virtual void EmitTBSSSymbol (MCSymbol *Symbol, uint64_t Size,
-                               unsigned ByteAlignment = 0);
+  virtual void EmitTBSSSymbol (const MCSection *Section, MCSymbol *Symbol,
+                               uint64_t Size, unsigned ByteAlignment = 0);
                                
   virtual void EmitBytes(StringRef Data, unsigned AddrSpace);
 
@@ -366,13 +366,16 @@ void MCAsmStreamer::EmitZerofill(const MCSection *Section, MCSymbol *Symbol,
 // .tbss sym, size, align
 // This depends that the symbol has already been mangled from the original,
 // e.g. _a.
-void MCAsmStreamer::EmitTBSSSymbol(MCSymbol *Symbol, uint64_t Size,
-                                   unsigned ByteAlignment) {
+void MCAsmStreamer::EmitTBSSSymbol(const MCSection *Section, MCSymbol *Symbol,
+                                   uint64_t Size, unsigned ByteAlignment) {
   assert(Symbol != NULL && "Symbol shouldn't be NULL!");
+  // Instead of using the Section we'll just use the shortcut.
+  // This is a mach-o specific directive and section.
   OS << ".tbss " << *Symbol << ", " << Size;
   
-  // Output align if we have it.
-  if (ByteAlignment != 0) OS << ", " << Log2_32(ByteAlignment);
+  // Output align if we have it.  We default to 1 so don't bother printing
+  // that.
+  if (ByteAlignment > 1) OS << ", " << Log2_32(ByteAlignment);
   
   EmitEOL();
 }
index c206bb34517778e05846dc2e3700eeca9c9f5720..5332ade2115358170784f22a4d483f2095201b00 100644 (file)
@@ -55,8 +55,8 @@ namespace {
 
     virtual void EmitZerofill(const MCSection *Section, MCSymbol *Symbol = 0,
                               unsigned Size = 0, unsigned ByteAlignment = 0) {}
-    virtual void EmitTBSSSymbol(MCSymbol *Symbol, uint64_t Size,
-                                unsigned ByteAlignment) {}
+    virtual void EmitTBSSSymbol(const MCSection *Section, MCSymbol *Symbol,
+                                uint64_t Size, unsigned ByteAlignment) {}
     virtual void EmitBytes(StringRef Data, unsigned AddrSpace) {}
 
     virtual void EmitValue(const MCExpr *Value, unsigned Size,
index 6a89df19f87904713532a44b83a1c63c462317ec..1f045ac1711fe3841db19247971d4a3c1832235c 100644 (file)
@@ -1536,7 +1536,10 @@ bool AsmParser::ParseDirectiveDarwinTBSS() {
   if (!Sym->isUndefined())
     return Error(IDLoc, "invalid symbol redefinition");
   
-  Out.EmitTBSSSymbol(Sym, Size, Pow2Alignment ? 1 << Pow2Alignment : 0);
+  Out.EmitTBSSSymbol(Ctx.getMachOSection("__DATA", "__thread_bss",
+                                        MCSectionMachO::S_THREAD_LOCAL_ZEROFILL,
+                                        0, SectionKind::getThreadBSS()),
+                     Sym, Size, 1 << Pow2Alignment);
   
   return false;
 }