[PECOFF] Fix entry point address.
Because of a bug, the entry point address in the PE/COFF header was not correct. llvm-svn: 213802
This commit is contained in:
parent
d3c7942f4a
commit
23314e1ca6
|
@ -303,6 +303,8 @@ private:
|
|||
StringRef entrySym = _ctx->allocate(_ctx->decorateSymbol(getEntry()));
|
||||
_undefinedAtoms._atoms.push_back(
|
||||
new (_alloc) SimpleUndefinedAtom(*this, entrySym));
|
||||
_ctx->setHasEntry(true);
|
||||
_ctx->setEntrySymbolName(entrySym);
|
||||
if (_ctx->deadStrip())
|
||||
_ctx->addDeadStripRoot(entrySym);
|
||||
}
|
||||
|
|
|
@ -968,14 +968,14 @@ void PECOFFWriter::build(const File &linkedFile) {
|
|||
// Find the virtual address of the entry point symbol if any. PECOFF spec
|
||||
// says that entry point for dll images is optional, in which case it must
|
||||
// be set to 0.
|
||||
if (_ctx.entrySymbolName().empty() && _ctx.isDll()) {
|
||||
peHeader->setAddressOfEntryPoint(0);
|
||||
} else {
|
||||
if (_ctx.hasEntry()) {
|
||||
uint64_t entryPointAddress =
|
||||
dyn_cast<AtomChunk>(section)
|
||||
->getAtomVirtualAddress(_ctx.entrySymbolName());
|
||||
->getAtomVirtualAddress(_ctx.getEntrySymbolName());
|
||||
if (entryPointAddress != 0)
|
||||
peHeader->setAddressOfEntryPoint(entryPointAddress);
|
||||
} else {
|
||||
peHeader->setAddressOfEntryPoint(0);
|
||||
}
|
||||
}
|
||||
if (section->getSectionName() == ".data")
|
||||
|
|
|
@ -23,4 +23,11 @@ symbols:
|
|||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
||||
|
||||
- Name: _bar
|
||||
Value: 4
|
||||
SectionNumber: 1
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
||||
...
|
||||
|
|
|
@ -25,3 +25,9 @@ WINMAIN: _WinMainCRTStartup
|
|||
# RUN: FileCheck -check-prefix=WWINMAIN %s < %t.log
|
||||
|
||||
WWINMAIN: _wWinMainCRTStartup
|
||||
|
||||
# RUN: lld -flavor link /out:%t.exe /alternatename:_main=_foo \
|
||||
# RUN: /alternatename:_mainCRTStartup=_bar -- %t.obj
|
||||
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=MAINADDR %s
|
||||
|
||||
MAINADDR: AddressOfEntryPoint: 0x1004
|
||||
|
|
Loading…
Reference in New Issue