aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-12-24 14:05:16 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-12-24 14:05:16 +0000
commite30c72b844bec93f6c197ea6c7c8cd0188964208 (patch)
tree1d71fce50e0553f474b76ee72ce01aa497f4947b
parent0d9ba4fe26725cacc7253fc3c72c4574f26bc099 (diff)
downloadsrc-e30c72b844bec93f6c197ea6c7c8cd0188964208.tar.gz
src-e30c72b844bec93f6c197ea6c7c8cd0188964208.zip
Vendor import of lld trunk r321426:vendor/lld/lld-trunk-r321426
Notes
Notes: svn path=/vendor/lld/dist/; revision=327158 svn path=/vendor/lld/lld-trunk-r321426/; revision=327159; tag=vendor/lld/lld-trunk-r321426
-rw-r--r--ELF/LinkerScript.cpp2
-rw-r--r--test/ELF/linkerscript/data-commands.s36
2 files changed, 38 insertions, 0 deletions
diff --git a/ELF/LinkerScript.cpp b/ELF/LinkerScript.cpp
index 91873e318f54..8f50a977fd75 100644
--- a/ELF/LinkerScript.cpp
+++ b/ELF/LinkerScript.cpp
@@ -693,6 +693,8 @@ void LinkerScript::assignOffsets(OutputSection *Sec) {
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;
}
diff --git a/test/ELF/linkerscript/data-commands.s b/test/ELF/linkerscript/data-commands.s
index ef154eda9f83..5a5655620dd9 100644
--- a/test/ELF/linkerscript/data-commands.s
+++ b/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