Skip to content

[LLD] [COFF] Set the right alignment for DelayDirectoryChunk #84697

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lld/COFF/DLL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ binImports(COFFLinkerContext &ctx,
// A chunk for the delay import descriptor table etnry.
class DelayDirectoryChunk : public NonSectionChunk {
public:
explicit DelayDirectoryChunk(Chunk *n) : dllName(n) {}
explicit DelayDirectoryChunk(Chunk *n) : dllName(n) { setAlignment(4); }

size_t getSize() const override {
return sizeof(delay_import_directory_table_entry);
Expand Down
25 changes: 19 additions & 6 deletions lld/test/COFF/delayimports-armnt.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,17 @@
# RUN: llvm-readobj --coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
# RUN: llvm-readobj --coff-basereloc %t.exe | FileCheck -check-prefix=BASEREL %s
# RUN: llvm-objdump --no-print-imm-hex -d %t.exe | FileCheck --check-prefix=DISASM %s
# RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=DIR %s

# IMPORT: Format: COFF-ARM
# IMPORT-NEXT: Arch: thumb
# IMPORT-NEXT: AddressSize: 32bit
# IMPORT-NEXT: DelayImport {
# IMPORT-NEXT: Name: library.dll
# IMPORT-NEXT: Attributes: 0x1
# IMPORT-NEXT: ModuleHandle: 0x3000
# IMPORT-NEXT: ImportAddressTable: 0x3008
# IMPORT-NEXT: ImportNameTable: 0x2040
# IMPORT-NEXT: ModuleHandle: 0x3008
# IMPORT-NEXT: ImportAddressTable: 0x3010
# IMPORT-NEXT: ImportNameTable: 0x2044
# IMPORT-NEXT: BoundDelayImportTable: 0x0
# IMPORT-NEXT: UnloadDelayImportTable: 0x0
# IMPORT-NEXT: Import {
Expand Down Expand Up @@ -43,7 +44,7 @@
# BASEREL-NEXT: }
# BASEREL-NEXT: Entry {
# BASEREL-NEXT: Type: HIGHLOW
# BASEREL-NEXT: Address: 0x3008
# BASEREL-NEXT: Address: 0x3010
# BASEREL-NEXT: }
# BASEREL-NEXT: Entry {
# BASEREL-NEXT: Type: ABSOLUTE
Expand All @@ -52,20 +53,24 @@
# BASEREL-NEXT: ]
#
# DISASM: 00401000 <.text>:
# DISASM: 40100c: f243 0c08 movw r12, #12296
# DISASM: 40100c: f243 0c10 movw r12, #12304
# DISASM-NEXT: f2c0 0c40 movt r12, #64
# DISASM-NEXT: f000 b800 b.w {{.+}} @ imm = #0
# DISASM-NEXT: e92d 480f push.w {r0, r1, r2, r3, r11, lr}
# DISASM-NEXT: f20d 0b10 addw r11, sp, #16
# DISASM-NEXT: ed2d 0b10 vpush {d0, d1, d2, d3, d4, d5, d6, d7}
# DISASM-NEXT: 4661 mov r1, r12
# DISASM-NEXT: f242 0000 movw r0, #8192
# DISASM-NEXT: f242 0004 movw r0, #8196
# DISASM-NEXT: f2c0 0040 movt r0, #64
# DISASM-NEXT: f7ff ffe7 bl 0x401000 <.text>
# DISASM-NEXT: 4684 mov r12, r0
# DISASM-NEXT: ecbd 0b10 vpop {d0, d1, d2, d3, d4, d5, d6, d7}
# DISASM-NEXT: e8bd 480f pop.w {r0, r1, r2, r3, r11, lr}
# DISASM-NEXT: 4760 bx r12
#
# DIR: DelayImportDescriptorRVA: 0x2004
# DIR-NEXT: DelayImportDescriptorSize: 0x40


--- !COFF
header:
Expand All @@ -80,6 +85,14 @@ sections:
- VirtualAddress: 0
SymbolName: __imp_function
Type: IMAGE_REL_ARM_MOV32T
- Name: .rdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
Alignment: 1
SectionData: 01
- Name: .data
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
Alignment: 1
SectionData: 02
symbols:
- Name: .text
Value: 0
Expand Down