Files
clang-p2996/lld/test/ELF/linkerscript/overlay.test
George Rimar a582419ac7 [ELF] - Implement linker script OVERLAYs.
This is PR36768.

Linker script OVERLAYs are described in 4.6.9. Overlay Description of the spec:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/sections.html

They are used to allow output sections which have different LMAs but the same VAs
and used for embedded programming.

Currently, LLD restricts overlapping of sections and that seems to be the most desired
behaviour for defaults. My thoughts about possible approaches for PR36768 are on the bug page,
this patch implements OVERLAY keyword and allows VAs overlapping for sections that within the overlay.

Differential revision: https://reviews.llvm.org/D44780

llvm-svn: 335714
2018-06-27 08:08:12 +00:00

31 lines
1.3 KiB
Plaintext

# REQUIRES: x86
# RUN: echo 'nop; .section .small, "a"; .long 0; .section .big, "a"; .quad 1;' \
# RUN: | llvm-mc -filetype=obj -triple=x86_64-unknown-linux - -o %t.o
# RUN: ld.lld %t.o --script %s -o %t
SECTIONS {
OVERLAY 0x1000 : AT ( 0x4000 ) {
.out.big { *(.big) }
.out.small { *(.small) }
}
}
## Here we check that can handle OVERLAY which will produce sections
## .out.big and .out.small with the same starting VAs, but different LMAs.
## Section .big is larger than .small, we check that placing of section
## .text does not cause overlapping error and that
## .text's VA is 0x1000 + max(sizeof(.out.big), sizeof(.out.small)).
# RUN: llvm-readobj -sections -program-headers -elf-output-style=GNU %t | FileCheck %s
# CHECK: Section Headers:
# CHECK: Name Type Address Off Size
# CHECK: .out.big PROGBITS 0000000000001000 001000 000008
# CHECK: .out.small PROGBITS 0000000000001000 002000 000004
# CHECK: .text PROGBITS 0000000000001008 002008 000001
# CHECK: Program Headers:
# CHECK: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
# CHECK-NEXT: LOAD 0x001000 0x0000000000001000 0x0000000000004000 0x000008 0x000008 R E 0x1000
# CHECK-NEXT: LOAD 0x002000 0x0000000000001000 0x0000000000004008 0x000009 0x000009 R E 0x1000