summaryrefslogtreecommitdiff
path: root/lib/MC
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2013-09-17 21:24:44 +0000
committerReid Kleckner <reid@kleckner.net>2013-09-17 21:24:44 +0000
commit3168868bb91ac871dbb83c879e763d39a39e607e (patch)
treeb02b361db7270c06389fe563e89721da010eee50 /lib/MC
parent4157d68ece29acc711aa8f1f5a294ddbb6e0c017 (diff)
downloadllvm-3168868bb91ac871dbb83c879e763d39a39e607e.tar.gz
llvm-3168868bb91ac871dbb83c879e763d39a39e607e.tar.bz2
llvm-3168868bb91ac871dbb83c879e763d39a39e607e.tar.xz
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
Diffstat (limited to 'lib/MC')
-rw-r--r--lib/MC/WinCOFFObjectWriter.cpp22
1 files changed, 3 insertions, 19 deletions
diff --git a/lib/MC/WinCOFFObjectWriter.cpp b/lib/MC/WinCOFFObjectWriter.cpp
index e85c33dc9c..263151c6af 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,