diff options
| -rw-r--r-- | lld/ELF/Writer.cpp | 6 | ||||
| -rw-r--r-- | lld/test/elf2/shared.s | 13 |
2 files changed, 17 insertions, 2 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 6d1c94ea8f4..f33257ea8ce 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -704,12 +704,14 @@ template <class ELFT> void Writer<ELFT>::assignAddresses() { uintX_t Align = Sec->getAlign(); uintX_t Size = Sec->getSize(); if (Sec->getFlags() & SHF_ALLOC) { + VA = RoundUpToAlignment(VA, Align); Sec->setVA(VA); - VA += RoundUpToAlignment(Size, Align); + VA += Size; } + FileOff = RoundUpToAlignment(FileOff, Align); Sec->setFileOffset(FileOff); if (Sec->getType() != SHT_NOBITS) - FileOff += RoundUpToAlignment(Size, Align); + FileOff += Size; } // Add a PHDR for the dynamic table. diff --git a/lld/test/elf2/shared.s b/lld/test/elf2/shared.s index e0ad621fbef..1140c9425ac 100644 --- a/lld/test/elf2/shared.s +++ b/lld/test/elf2/shared.s @@ -1,10 +1,23 @@ // RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o // RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared.s -o %t2.o // RUN: lld -flavor gnu2 -shared %t2.o -o %t2.so +// RUN: llvm-readobj -s %t2.so | FileCheck --check-prefix=SO %s // RUN: lld -flavor gnu2 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -rpath foo -rpath bar %t.o %t2.so -o %t // RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data %t | FileCheck %s // REQUIRES: x86 +// Make sure .symtab is properly aligned. +// SO: Name: .symtab +// SO-NEXT: Type: SHT_SYMTAB +// SO-NEXT: Flags [ +// SO-NEXT: ] +// SO-NEXT: Address: +// SO-NEXT: Offset: 0x300C +// SO-NEXT: Size: +// SO-NEXT: Link: +// SO-NEXT: Info: +// SO-NEXT: AddressAlignment: 4 + // CHECK: Name: .interp // CHECK-NEXT: Type: SHT_PROGBITS // CHECK-NEXT: Flags [ |

