From 3168868bb91ac871dbb83c879e763d39a39e607e Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Tue, 17 Sep 2013 21:24:44 +0000 Subject: [PATCH] COFF: Emit all MCSymbols rather than filtering out some of them In particular, this means we emit non-external symbols defined to variables, such as aliases or absolute addresses. This is needed to implement /safeseh, and it appears there was some confusion about what symbols to emit previously. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190888 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/WinCOFFObjectWriter.cpp | 22 +++------------------- test/MC/COFF/alias.s | 11 ++++++++++- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/lib/MC/WinCOFFObjectWriter.cpp b/lib/MC/WinCOFFObjectWriter.cpp index e85c33dc9c7..263151c6afa 100644 --- a/lib/MC/WinCOFFObjectWriter.cpp +++ b/lib/MC/WinCOFFObjectWriter.cpp @@ -154,8 +154,6 @@ 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. @@ -496,18 +494,6 @@ 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; @@ -609,11 +595,9 @@ void WinCOFFObjectWriter::ExecutePostLayoutBinding(MCAssembler &Asm, DefineSection(*i); for (MCAssembler::const_symbol_iterator i = Asm.symbol_begin(), - e = Asm.symbol_end(); i != e; i++) { - if (ExportSymbol(*i, Asm)) { - DefineSymbol(*i, Asm); - } - } + e = Asm.symbol_end(); + i != e; i++) + DefineSymbol(*i, Asm); } void WinCOFFObjectWriter::RecordRelocation(const MCAssembler &Asm, diff --git a/test/MC/COFF/alias.s b/test/MC/COFF/alias.s index f6f6d46bf6a..98ef7e5f190 100644 --- a/test/MC/COFF/alias.s +++ b/test/MC/COFF/alias.s @@ -45,6 +45,15 @@ 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) @@ -89,7 +98,7 @@ weak_aliased_to_external = external2 // CHECK-NEXT: StorageClass: WeakExternal (0x69) // CHECK-NEXT: AuxSymbolCount: 1 // CHECK-NEXT: AuxWeakExternal { -// CHECK-NEXT: Linked: external2 (9) +// CHECK-NEXT: Linked: external2 (10) // CHECK-NEXT: Search: Library (0x2) // CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00) // CHECK-NEXT: } -- 2.34.1