Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[LLD] - Improve handling of AT> linker script commands
Patch by Konstantin Schwarz! The condition to create a new phdr must also check the usage of "AT>" linker script command, and create a new PT_LOAD header if a new LMARegion is used. This fixes PR38307 Differential revision: https://reviews.llvm.org/D50052 llvm-svn: 338679
- Loading branch information
George Rimar
committed
Aug 2, 2018
1 parent
268adb2
commit 34bdf27
Showing
3 changed files
with
48 additions
and
5 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
.global _start | ||
.text | ||
_start: | ||
nop | ||
|
||
.section .sec1,"aw",@progbits | ||
.long 1 | ||
|
||
.section .sec2,"aw",@progbits | ||
.long 2 | ||
|
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,30 @@ | ||
# REQUIRES: x86 | ||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/at6.s -o %t.o | ||
# RUN: ld.lld %t.o --script %s -o %t | ||
# RUN: llvm-readelf -sections -program-headers %t | FileCheck %s | ||
|
||
MEMORY { | ||
FLASH : ORIGIN = 0x08000000, LENGTH = 0x100 | ||
RAM : ORIGIN = 0x20000000, LENGTH = 0x200 | ||
} | ||
|
||
SECTIONS { | ||
.text : { *(.text) } > FLASH | ||
.sec1 : { *(.sec1) } > RAM | ||
.sec2 : { *(.sec2) } > RAM AT > FLASH | ||
} | ||
|
||
# Make sure we create a separate PT_LOAD entry for .sec2. Previously, | ||
# it was added to the PT_LOAD entry of .sec1 | ||
|
||
# CHECK: Name Type Address Off | ||
# CHECK: .text PROGBITS 0000000008000000 001000 | ||
# CHECK: .sec1 PROGBITS 0000000020000000 002000 | ||
# CHECK: .sec2 PROGBITS 0000000020000004 002004 | ||
|
||
# CHECK: Program Headers: | ||
# CHECK: Type Offset VirtAddr PhysAddr | ||
# CHECK-NEXT: LOAD 0x001000 0x0000000008000000 0x0000000008000000 | ||
# CHECK-NEXT: LOAD 0x002000 0x0000000020000000 0x0000000020000000 | ||
# CHECK-NEXT: LOAD 0x002004 0x0000000020000004 0x0000000008000001 | ||
# CHECK-NOT: LOAD |