[llvm] r195053 - Revert "COFF: Emit all MCSymbols rather than filtering out some of them"
Reid Kleckner
reid at kleckner.net
Mon Nov 18 15:08:12 PST 2013
Author: rnk
Date: Mon Nov 18 17:08:12 2013
New Revision: 195053
URL: http://llvm.org/viewvc/llvm-project?rev=195053&view=rev
Log:
Revert "COFF: Emit all MCSymbols rather than filtering out some of them"
This reverts commit r190888, to fix PR17967. The original change wasn't
the right way to get @feat.00 into the object file. The right fix is to
make @feat.00 be a global symbol.
Added:
llvm/trunk/test/MC/COFF/lset0.s (with props)
Modified:
llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
llvm/trunk/test/MC/COFF/alias.s
llvm/trunk/test/MC/COFF/feat00.s
Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=195053&r1=195052&r2=195053&view=diff
==============================================================================
--- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Mon Nov 18 17:08:12 2013
@@ -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
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::ExecutePostLay
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,
Modified: llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp?rev=195053&r1=195052&r2=195053&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp Mon Nov 18 17:08:12 2013
@@ -535,6 +535,7 @@ void X86AsmPrinter::EmitStartOfAsmFile(M
// cause the process to terminate immediately. LLVM does not know how to
// register any SEH handlers, so its object files should be safe.
S->setAbsolute();
+ OutStreamer.EmitSymbolAttribute(S, MCSA_Global);
OutStreamer.EmitAssignment(
S, MCConstantExpr::Create(int64_t(1), MMI->getContext()));
}
Modified: llvm/trunk/test/MC/COFF/alias.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/alias.s?rev=195053&r1=195052&r2=195053&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/alias.s (original)
+++ llvm/trunk/test/MC/COFF/alias.s Mon Nov 18 17:08:12 2013
@@ -45,15 +45,6 @@ weak_aliased_to_external = external2
// CHECK-NEXT: AuxSymbolCount: 0
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: external_aliased_to_local
-// CHECK-NEXT: Value: 0
-// CHECK-NEXT: Section: .text (1)
-// CHECK-NEXT: BaseType: Null (0x0)
-// CHECK-NEXT: ComplexType: Null (0x0)
-// CHECK-NEXT: StorageClass: Static (0x3)
-// CHECK-NEXT: AuxSymbolCount: 0
-// CHECK-NEXT: }
-// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: global_aliased_to_external
// CHECK-NEXT: Value: 0
// CHECK-NEXT: Section: (0)
@@ -98,7 +89,7 @@ weak_aliased_to_external = external2
// CHECK-NEXT: StorageClass: WeakExternal (0x69)
// CHECK-NEXT: AuxSymbolCount: 1
// CHECK-NEXT: AuxWeakExternal {
-// CHECK-NEXT: Linked: external2 (10)
+// CHECK-NEXT: Linked: external2 (9)
// CHECK-NEXT: Search: Library (0x2)
// CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00)
// CHECK-NEXT: }
Modified: llvm/trunk/test/MC/COFF/feat00.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/feat00.s?rev=195053&r1=195052&r2=195053&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/feat00.s (original)
+++ llvm/trunk/test/MC/COFF/feat00.s Mon Nov 18 17:08:12 2013
@@ -1,6 +1,7 @@
// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-readobj -t | FileCheck %s
"@feat.00" = 123
+.globl @feat.00
// CHECK: Symbol {
// CHECK: Name: @feat.00
Added: llvm/trunk/test/MC/COFF/lset0.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/lset0.s?rev=195053&view=auto
==============================================================================
--- llvm/trunk/test/MC/COFF/lset0.s (added)
+++ llvm/trunk/test/MC/COFF/lset0.s Mon Nov 18 17:08:12 2013
@@ -0,0 +1,12 @@
+// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-nm | FileCheck %s
+
+not_global = 123
+global = 456
+.globl global
+.Llocal = 789
+
+// CHECK-NOT: not_global
+// CHECK-NOT: Llocal
+// CHECK: global
+// CHECK-NOT: not_global
+// CHECK-NOT: Llocal
Propchange: llvm/trunk/test/MC/COFF/lset0.s
------------------------------------------------------------------------------
svn:executable = *
More information about the llvm-commits
mailing list