Revert "COFF: Emit all MCSymbols rather than filtering out some of them"
[oota-llvm.git] / lib / MC / WinCOFFObjectWriter.cpp
index 32523173ee6eb135380d1a20239de64b3f294880..f0f7836e23b3ec35af874b0e3f5be59357180c23 100644 (file)
@@ -154,6 +154,8 @@ public:
   void MakeSymbolReal(COFFSymbol &S, size_t Index);
   void MakeSectionReal(COFFSection &S, size_t Number);
 
+  bool ExportSymbol(MCSymbolData const &SymbolData, MCAssembler &Asm);
+
   bool IsPhysicalSection(COFFSection *S);
 
   // Entity writing methods.
@@ -503,6 +505,18 @@ void WinCOFFObjectWriter::MakeSymbolReal(COFFSymbol &S, size_t Index) {
   S.Index = Index;
 }
 
+bool WinCOFFObjectWriter::ExportSymbol(MCSymbolData const &SymbolData,
+                                       MCAssembler &Asm) {
+  // This doesn't seem to be right. Strings referred to from the .data section
+  // need symbols so they can be linked to code in the .text section right?
+
+  // return Asm.isSymbolLinkerVisible (&SymbolData);
+
+  // For now, all non-variable symbols are exported,
+  // the linker will sort the rest out for us.
+  return SymbolData.isExternal() || !SymbolData.getSymbol().isVariable();
+}
+
 bool WinCOFFObjectWriter::IsPhysicalSection(COFFSection *S) {
   return (S->Header.Characteristics
          & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA) == 0;
@@ -605,8 +619,11 @@ void WinCOFFObjectWriter::ExecutePostLayoutBinding(MCAssembler &Asm,
 
   for (MCAssembler::const_symbol_iterator i = Asm.symbol_begin(),
                                           e = Asm.symbol_end();
-       i != e; i++)
-    DefineSymbol(*i, Asm, Layout);
+       i != e; i++) {
+    if (ExportSymbol(*i, Asm)) {
+      DefineSymbol(*i, Asm, Layout);
+    }
+  }
 }
 
 void WinCOFFObjectWriter::RecordRelocation(const MCAssembler &Asm,