Index: ELF/LinkerScript.cpp =================================================================== --- ELF/LinkerScript.cpp +++ ELF/LinkerScript.cpp @@ -117,9 +117,9 @@ if (Ctx->MemRegion) expandMemoryRegion(Ctx->MemRegion, Size, Ctx->MemRegion->Name, Ctx->OutSec->Name); - // FIXME: check LMA region overflow too. if (Ctx->LMARegion) - Ctx->LMARegion->CurPos += Size; + expandMemoryRegion(Ctx->LMARegion, Size, Ctx->LMARegion->Name, + Ctx->OutSec->Name); } void LinkerScript::setDot(Expr E, const Twine &Loc, bool InSec) { Index: test/ELF/linkerscript/lma-overflow.test =================================================================== --- test/ELF/linkerscript/lma-overflow.test +++ test/ELF/linkerscript/lma-overflow.test @@ -0,0 +1,18 @@ +# REQUIRES: x86 + +# RUN: echo ".section .foo,\"a\"" > %t.s +# RUN: echo ".quad 1" >> %t.s +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %t.s -o %t.o +# RUN: not ld.lld -o %t %t.o --script %s 2>&1 | FileCheck %s +# CHECK: error: section '.foo' will not fit in region 'flash': overflowed by 264 bytes + +MEMORY { + ram (rwx) : org = 0x1000, len = 0x300 + flash (rwx) : org = 0x1000, len = 0x100 +} +SECTIONS { + .foo : { + *(.foo) + . += 0x200; + } > ram AT>flash +}