summaryrefslogtreecommitdiff
path: root/lib/MC/WinCOFFObjectWriter.cpp
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2013-11-18 23:08:12 +0000
committerReid Kleckner <reid@kleckner.net>2013-11-18 23:08:12 +0000
commita7b7a7d629c3101f6f6c87e6848e865734e0238c (patch)
treedf358ab615a9cc3e0e98f70c0223eed6938d1f5d /lib/MC/WinCOFFObjectWriter.cpp
parent940267e7f208751fdc48dbb7d6b5d86b6310ce7c (diff)
downloadllvm-a7b7a7d629c3101f6f6c87e6848e865734e0238c.tar.gz
llvm-a7b7a7d629c3101f6f6c87e6848e865734e0238c.tar.bz2
llvm-a7b7a7d629c3101f6f6c87e6848e865734e0238c.tar.xz
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195053 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/WinCOFFObjectWriter.cpp')
-rw-r--r--lib/MC/WinCOFFObjectWriter.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/lib/MC/WinCOFFObjectWriter.cpp b/lib/MC/WinCOFFObjectWriter.cpp
index 32523173ee..f0f7836e23 100644
--- a/lib/MC/WinCOFFObjectWriter.cpp
+++ b/lib/MC/WinCOFFObjectWriter.cpp
@@ -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,