diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index b754ba38818b..79ab8807fbe3 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -174,9 +174,11 @@ template void Writer::assignAddresses() { std::stable_sort(OutputSections.begin(), OutputSections.end(), compSec); for (OutputSection *Sec : OutputSections) { - Sec->setVA(VA); + if (Sec->getFlags() & SHF_ALLOC) { + Sec->setVA(VA); + VA += RoundUpToAlignment(Sec->getSize(), PageSize); + } Sec->setFileOffset(FileOff); - VA += RoundUpToAlignment(Sec->getSize(), PageSize); FileOff += RoundUpToAlignment(Sec->getSize(), 8); StrTabBuilder.add(Sec->getName()); } diff --git a/lld/test/elf2/string-table.s b/lld/test/elf2/string-table.s index 80bfe7b1244e..81b740d31d3a 100644 --- a/lld/test/elf2/string-table.s +++ b/lld/test/elf2/string-table.s @@ -15,11 +15,13 @@ _start: // CHECK-NEXT: Flags [ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x1000 // CHECK: Name: foobar // CHECK-NEXT: Type: SHT_PROGBITS // CHECK-NEXT: Flags [ // CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x0 // Test that the sting "bar" is merged into "foobar"