mirror of
https://github.com/intel/llvm.git
synced 2026-01-23 16:06:39 +08:00
COFF: Fix locally-imported symbol's size for x86.
llvm-svn: 241860
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
50
lld/test/COFF/locally-imported32.test
Normal file
50
lld/test/COFF/locally-imported32.test
Normal 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
|
||||
...
|
||||
Reference in New Issue
Block a user