COFF: Fix locally-imported symbol's size for x86.

llvm-svn: 241860
This commit is contained in:
Rui Ueyama
2015-07-09 21:15:58 +00:00
parent b379643f7c
commit d4b351f0de
3 changed files with 60 additions and 2 deletions

View File

@@ -266,8 +266,16 @@ void LocalImportChunk::getBaserels(std::vector<uint32_t> *Res,
Res->push_back(getRVA() + Config->ImageBase);
}
size_t LocalImportChunk::getSize() const {
return Config->is64() ? 8 : 4;
}
void LocalImportChunk::writeTo(uint8_t *Buf) {
write64le(Buf + FileOff, Sym->getRVA() + Config->ImageBase);
if (Config->is64()) {
write64le(Buf + FileOff, Sym->getRVA() + Config->ImageBase);
} else {
write32le(Buf + FileOff, Sym->getRVA() + Config->ImageBase);
}
}
// Windows-specific.

View File

@@ -245,7 +245,7 @@ private:
class LocalImportChunk : public Chunk {
public:
explicit LocalImportChunk(Defined *S) : Sym(S) {}
size_t getSize() const override { return 8; }
size_t getSize() const override;
void getBaserels(std::vector<uint32_t> *Res, Defined *ImageBase) override;
void writeTo(uint8_t *Buf) override;

View File

@@ -0,0 +1,50 @@
# RUN: yaml2obj < %s > %t.obj
# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
# RUN: llvm-objdump -s %t.exe | FileCheck %s
# CHECK: Contents of section .text:
# CHECK-NEXT: 1000 00200000
# CHECK: Contents of section .rdata:
# CHECK-NEXT: 2000 04100040
---
header:
Machine: IMAGE_FILE_MACHINE_I386
Characteristics: []
sections:
- Name: .text
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
Alignment: 4
SectionData: 00000000
Relocations:
- VirtualAddress: 0
SymbolName: __imp__main
Type: IMAGE_REL_I386_DIR32NB
symbols:
- Name: .text
Value: 0
SectionNumber: 1
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
Length: 4
NumberOfRelocations: 1
NumberOfLinenumbers: 0
CheckSum: 0
Number: 0
Selection: IMAGE_COMDAT_SELECT_ANY
- Name: _main
Value: 4
SectionNumber: 1
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- Name: __imp__main
Value: 0
SectionNumber: 0
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
...