[PATCH] D41459: [lld] Fix output section offset and contents when linker script uses memory region and data commands
Owen Shaw via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 21 10:19:56 PST 2017
owenpshaw updated this revision to Diff 127910.
owenpshaw removed a reviewer: lld.
owenpshaw added a comment.
Thanks for the help!
Updated the patch with suggested changes to braces.
https://reviews.llvm.org/D41459
Files:
ELF/LinkerScript.cpp
test/ELF/linkerscript/data-commands.s
Index: test/ELF/linkerscript/data-commands.s
===================================================================
--- test/ELF/linkerscript/data-commands.s
+++ test/ELF/linkerscript/data-commands.s
@@ -44,6 +44,42 @@
# BE-NEXT: ff12ff11 22ff1122 3346ff11 22334455
# BE-NEXT: 667788
+# RUN: echo "MEMORY { \
+# RUN: rom (rwx) : ORIGIN = 0x00, LENGTH = 2K \
+# RUN: } \
+# RUN: SECTIONS { \
+# RUN: .foo : { \
+# RUN: *(.foo.1) \
+# RUN: BYTE(0x11) \
+# RUN: *(.foo.2) \
+# RUN: SHORT(0x1122) \
+# RUN: *(.foo.3) \
+# RUN: LONG(0x11223344) \
+# RUN: *(.foo.4) \
+# RUN: QUAD(0x1122334455667788) \
+# RUN: } > rom \
+# RUN: .bar : { \
+# RUN: *(.bar.1) \
+# RUN: BYTE(a + 1) \
+# RUN: *(.bar.2) \
+# RUN: SHORT(b) \
+# RUN: *(.bar.3) \
+# RUN: LONG(c + 2) \
+# RUN: *(.bar.4) \
+# RUN: QUAD(d) \
+# RUN: } > rom \
+# RUN: }" > %t-memory.script
+# RUN: ld.lld -o %t-memory %t.o --script %t-memory.script
+# RUN: llvm-objdump -s %t-memory | FileCheck %s --check-prefix=MEM
+
+# MEM: Contents of section .foo:
+# MEM-NEXT: 0000 ff11ff22 11ff4433 2211ff88 77665544
+# MEM-NEXT: 0010 332211
+
+# MEM: Contents of section .bar:
+# MEM-NEXT: 0013 ff12ff22 11ff4633 2211ff88 77665544
+# MEM-NEXT: 0023 332211
+
.global a
a = 0x11
Index: ELF/LinkerScript.cpp
===================================================================
--- ELF/LinkerScript.cpp
+++ ELF/LinkerScript.cpp
@@ -693,6 +693,8 @@
if (auto *Cmd = dyn_cast<ByteCommand>(Base)) {
Cmd->Offset = Dot - Ctx->OutSec->Addr;
Dot += Cmd->Size;
+ if (Ctx->MemRegion)
+ Ctx->MemRegionOffset[Ctx->MemRegion] += Cmd->Size;
Ctx->OutSec->Size = Dot - Ctx->OutSec->Addr;
continue;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D41459.127910.patch
Type: text/x-patch
Size: 2145 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171221/d7ca34a0/attachment.bin>
More information about the llvm-commits
mailing list