Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ELF] Propagate LMA offset to sections with neither AT() nor AT>
Fixes https://bugs.llvm.org/show_bug.cgi?id=45313 Also fixes linkerscript/{at4.s,overlay.test} LMA address issues exposed by 011b785. Related: D74297 This patch improves emulation of GNU ld's heuristics on the difference between the LMA and the VMA: https://sourceware.org/binutils/docs/ld/Output-Section-LMA.html#Output-Section-LMA New test linkerscript/lma-offset.s (based on at4.s) demonstrates some behaviors. Reviewed By: psmith Differential Revision: https://reviews.llvm.org/D76995
- Loading branch information
Showing
7 changed files
with
79 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
# REQUIRES: x86 | ||
## Test the difference between the VMA and the LMA for sections with AT(). | ||
|
||
# RUN: echo '.globl _start; _start: ret; \ | ||
# RUN: .section .a,"a"; .byte 0; \ | ||
# RUN: .section .b,"a"; .byte 0; \ | ||
# RUN: .section .c,"a"; .byte 0; \ | ||
# RUN: .section .d,"a"; .byte 0; \ | ||
# RUN: .data; .byte 0' | \ | ||
# RUN: llvm-mc -filetype=obj -triple=x86_64 - -o %t.o | ||
# RUN: ld.lld -T %s %t.o -o %t | ||
# RUN: llvm-readelf -l %t | FileCheck %s | ||
|
||
# CHECK: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align | ||
# CHECK-NEXT: LOAD 0x001000 0x0000000000001000 0x0000000000001000 0x000001 0x000001 R 0x1000 | ||
|
||
## .b has AT(). It starts a PT_LOAD segment which also includes .c | ||
# CHECK-NEXT: LOAD 0x001001 0x0000000000001001 0x0000000000002005 0x000002 0x000002 R 0x1000 | ||
|
||
## .d has AT(). It starts a PT_LOAD segment, even if the difference between | ||
## LMA and VMA (0x2007-0x1003) is the same as the previous one. | ||
# CHECK-NEXT: LOAD 0x001003 0x0000000000001003 0x0000000000002007 0x000001 0x000001 R 0x1000 | ||
|
||
## The orphan section .text starts a PT_LOAD segment. The difference between | ||
## LMA and VMA (0x2008-0x1004) remains the same | ||
# CHECK-NEXT: LOAD 0x001004 0x0000000000001004 0x0000000000002008 0x000001 0x000001 R E 0x1000 | ||
|
||
## .data starts a PT_LOAD segment. The difference remains the same. | ||
# CHECK-NEXT: LOAD 0x001005 0x0000000000001005 0x0000000000002009 0x000001 0x000001 RW 0x1000 | ||
|
||
SECTIONS { | ||
. = 0x1000; | ||
.a : { *(.a) } | ||
.b : AT(0x2005) { *(.b) } | ||
.c : { *(.c) } | ||
.d : AT(0x2007) { *(.d) } | ||
## Orphan section .text will be inserted here. | ||
.data : { *(.data) } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters