[lld] r194349 - [ELF] Un-break undef-from-main-dso.test on MSVC 2012.
Rui Ueyama
ruiu at google.com
Sat Nov 9 23:48:34 PST 2013
Author: ruiu
Date: Sun Nov 10 01:48:33 2013
New Revision: 194349
URL: http://llvm.org/viewvc/llvm-project?rev=194349&view=rev
Log:
[ELF] Un-break undef-from-main-dso.test on MSVC 2012.
The result of sizeof(SymbolTable<ELFT>::SymbolEntry) in DynamicSymbolTable
<ELFT>::write() was different from the same expression in RelocationTable
<ELFT>::write(), although the same template parameters were passed. They were
40 and 32, respectively. As a result, the same vector was treated as a
vector of 40 byte values in some places and a vector of 32 values in other
places. That caused an weird issue, resulting in collapse of the rela.dyn
section.
I suspect that this is a padding size calculation bug in MSVC 2012, but I
may be wrong. Reordering the fields to eliminate padding seems to fix the
issue.
Modified:
lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
Modified: lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h?rev=194349&r1=194348&r2=194349&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h Sun Nov 10 01:48:33 2013
@@ -614,12 +614,12 @@ class SymbolTable : public Section<ELFT>
struct SymbolEntry {
SymbolEntry(const Atom *a, const Elf_Sym &sym,
const lld::AtomLayout *layout)
- : _atom(a), _symbol(sym), _atomLayout(layout) {}
+ : _atom(a), _atomLayout(layout), _symbol(sym) {}
SymbolEntry() : _atom(nullptr) {}
const Atom *_atom;
- Elf_Sym _symbol;
const lld::AtomLayout *_atomLayout;
+ Elf_Sym _symbol;
};
public:
More information about the llvm-commits
mailing list