Skip to content
Open
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
9 changes: 7 additions & 2 deletions lld/ELF/ScriptParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -996,8 +996,13 @@ OutputDesc *ScriptParser::readOverlaySectionDescription() {
ctx.script->createOutputSection(readName(), getCurrentLocation());
osd->osec.inOverlay = true;
expect("{");
while (auto tok = till("}"))
osd->osec.commands.push_back(readInputSectionDescription(tok));
while (auto tok = till("}")) {
if (SymbolAssignment *assign = readAssignment(tok)) {
osd->osec.commands.push_back(assign);
} else {
osd->osec.commands.push_back(readInputSectionDescription(tok));
}
}
osd->osec.phdrs = readOutputSectionPhdrs();
return osd;
}
Expand Down
32 changes: 32 additions & 0 deletions lld/test/ELF/linkerscript/overlay-symbol-assign.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# REQUIRES: x86
# RUN: echo 'nop; .section .small, "a"; .long 0; .section .big1, "a"; .quad 1; .section .big2, "a"; .quad 2;' \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use RUN: rm -rf %t && split-file %s %t && cd %t pattern to prepare the input assembly file.
You can use #--- a.s for assembly and #--- 1.lds for the linker script.

# RUN: | llvm-mc -filetype=obj -triple=x86_64 - -o %t.o
# RUN: ld.lld %t.o --script %s -o %t

SECTIONS {
OVERLAY 0x1000 : AT ( 0x4000 ) {
.out.big {
*(.big1)
. = ALIGN(0x100);
*(.big2)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also define a symbol sym = .? Does GNU ld accept it?

}
.out.small { *(.small) }
}
}

## A variant of overlay.test with explicit program header assingment.
## Check that we generate two program headers consistent with the overlay

# RUN: llvm-readelf -S -l %t | FileCheck %s

# CHECK: Section Headers:
# CHECK: Name Type Address Off Size
# CHECK: .out.big PROGBITS 0000000000001000 001000 000108
# CHECK-NEXT: .out.small PROGBITS 0000000000001000 002000 000004

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just one blank line


# CHECK: Program Headers:
# CHECK: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
# CHECK-NEXT: LOAD 0x001000 0x0000000000001000 0x0000000000004000 0x000108 0x000108 R 0x1000
# CHECK-NEXT: LOAD 0x002000 0x0000000000001000 0x0000000000004108 0x000004 0x000004 R 0x1000

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

delete blank lines at the end