[lld] r233798 - [ARM] Enhance checks for entry point
Denis Protivensky
dprotivensky at accesssoftek.com
Wed Apr 1 04:36:59 PDT 2015
Author: denis-protivensky
Date: Wed Apr 1 06:36:58 2015
New Revision: 233798
URL: http://llvm.org/viewvc/llvm-project?rev=233798&view=rev
Log:
[ARM] Enhance checks for entry point
Modified:
lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h
Modified: lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h?rev=233798&r1=233797&r2=233798&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h Wed Apr 1 06:36:58 2015
@@ -101,12 +101,22 @@ std::error_code ARMExecutableWriter<ELFT
if (std::error_code ec = ExecutableWriter<ELFT>::setELFHeader())
return ec;
- // Fixup entry point for Thumb code.
StringRef entryName = _ctx.entrySymbolName();
if (const AtomLayout *al = _armLayout.findAtomLayoutByName(entryName)) {
- const auto *ea = dyn_cast<DefinedAtom>(al->_atom);
- if (ea && ea->codeModel() == DefinedAtom::codeARMThumb)
- this->_elfHeader->e_entry(al->_virtualAddr | 0x1);
+ if (const auto *ea = dyn_cast<DefinedAtom>(al->_atom)) {
+ switch (ea->codeModel()) {
+ case DefinedAtom::codeNA:
+ if (al->_virtualAddr & 0x3)
+ llvm_unreachable("Two least bits must be zero for ARM entry point");
+ break;
+ case DefinedAtom::codeARMThumb:
+ // Fixup entry point for Thumb code.
+ this->_elfHeader->e_entry(al->_virtualAddr | 0x1);
+ break;
+ default:
+ llvm_unreachable("Wrong code model of entry point atom");
+ }
+ }
}
return std::error_code();
More information about the llvm-commits
mailing list