Index: ELF/LinkerScript.cpp =================================================================== --- ELF/LinkerScript.cpp +++ ELF/LinkerScript.cpp @@ -142,10 +142,7 @@ Sym->Value = V.getValue(); } else { Sym->Section = V.Sec; - if (Sym->Section->Flags & SHF_ALLOC) - Sym->Value = alignTo(V.Val, V.Alignment); - else - Sym->Value = V.getValue(); + Sym->Value = alignTo(V.Val, V.Alignment); } } @@ -649,7 +646,9 @@ if (!Sec) return; - if (Cmd->AddrExpr && (Sec->Flags & SHF_ALLOC)) + if (!(Sec->Flags & SHF_ALLOC)) + Dot = 0; + else if (Cmd->AddrExpr) setDot(Cmd->AddrExpr, Cmd->Location, false); if (Cmd->LMAExpr) { @@ -950,8 +949,6 @@ OutputSection *Sec = Cmd->Sec; if (Sec->Flags & SHF_ALLOC) MinVA = std::min(MinVA, Sec->Addr); - else - Sec->Addr = 0; } allocateHeaders(Phdrs, OutputSectionCommands, MinVA); Index: test/ELF/linkerscript/locationcountererr2.s =================================================================== --- test/ELF/linkerscript/locationcountererr2.s +++ test/ELF/linkerscript/locationcountererr2.s @@ -1,7 +1,7 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o # RUN: echo "SECTIONS {" > %t.script -# RUN: echo ". = 0x20; . = 0x10; }" >> %t.script +# RUN: echo ". = 0x20; . = 0x10; .text : {} }" >> %t.script # RUN: not ld.lld %t.o --script %t.script -o %t -shared 2>&1 | FileCheck %s # CHECK: {{.*}}.script:2: unable to move location counter backward Index: test/ELF/linkerscript/symbols-non-alloc.s =================================================================== --- test/ELF/linkerscript/symbols-non-alloc.s +++ test/ELF/linkerscript/symbols-non-alloc.s @@ -13,7 +13,7 @@ # CHECK: .nonalloc 00000008 0000000000000000 # CHECK: SYMBOL TABLE: -# CHECK: 00000000000000f0 .nonalloc 00000000 Sym +# CHECK: 0000000000000008 .nonalloc 00000000 Sym .section .nonalloc,"" .quad 0