diff options
-rw-r--r-- | lld/ELF/Writer.cpp | 6 | ||||
-rw-r--r-- | lld/test/elf2/string-table.s | 2 |
2 files changed, 6 insertions, 2 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index b754ba38818..79ab8807fbe 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -174,9 +174,11 @@ template <class ELFT> void Writer<ELFT>::assignAddresses() { std::stable_sort(OutputSections.begin(), OutputSections.end(), compSec<ELFT>); for (OutputSection<ELFT> *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 80bfe7b1244..81b740d31d3 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" |