Loading lld/ELF/Writer.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ public: uintX_t getSize() { return Header.sh_size; } uintX_t getFlags() { return Header.sh_flags; } uintX_t getOffset() { return Header.sh_offset; } uintX_t getAlign() { return Header.sh_addralign; } private: StringRef Name; Loading Loading @@ -213,12 +214,14 @@ template <class ELFT> void Writer<ELFT>::assignAddresses() { compSec<ELFT::Is64Bits>); for (OutputSection<ELFT::Is64Bits> *Sec : OutputSections) { uintX_t Align = Sec->getAlign(); uintX_t Size = Sec->getSize(); if (Sec->getFlags() & SHF_ALLOC) { Sec->setVA(VA); VA += RoundUpToAlignment(Sec->getSize(), PageSize); VA += RoundUpToAlignment(Size, Align); } Sec->setFileOffset(FileOff); FileOff += RoundUpToAlignment(Sec->getSize(), 8); FileOff += RoundUpToAlignment(Size, Align); StrTabBuilder.add(Sec->getName()); } Loading lld/test/elf2/basic.s +2 −2 Original line number Diff line number Diff line Loading @@ -74,7 +74,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Address: 0x1010 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 Loading @@ -90,7 +90,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Address: 0x1010 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 Loading lld/test/elf2/basic32.s +8 −8 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ _start: # CHECK-NEXT: Version: 1 # CHECK-NEXT: Entry: 0x401000 # CHECK-NEXT: ProgramHeaderOffset: 0x34 # CHECK-NEXT: SectionHeaderOffset: 0x102C # CHECK-NEXT: SectionHeaderOffset: 0x1028 # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: HeaderSize: 52 Loading Loading @@ -74,8 +74,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -90,8 +90,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -105,7 +105,7 @@ _start: # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 26 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -119,8 +119,8 @@ _start: # CHECK-NEXT: Offset: 0x0 # CHECK-NEXT: VirtualAddress: 0x400000 # CHECK-NEXT: PhysicalAddress: 0x400000 # CHECK-NEXT: FileSize: 4344 # CHECK-NEXT: MemSize: 4344 # CHECK-NEXT: FileSize: 4336 # CHECK-NEXT: MemSize: 4336 # CHECK-NEXT: Flags [ (0x5) # CHECK-NEXT: PF_R (0x4) # CHECK-NEXT: PF_X (0x1) Loading lld/test/elf2/basic32be.s +8 −8 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ _start: # CHECK-NEXT: Version: 1 # CHECK-NEXT: Entry: 0x401000 # CHECK-NEXT: ProgramHeaderOffset: 0x34 # CHECK-NEXT: SectionHeaderOffset: 0x102C # CHECK-NEXT: SectionHeaderOffset: 0x1028 # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: HeaderSize: 52 Loading Loading @@ -74,8 +74,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -90,8 +90,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -105,7 +105,7 @@ _start: # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 26 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -119,8 +119,8 @@ _start: # CHECK-NEXT: Offset: 0x0 # CHECK-NEXT: VirtualAddress: 0x400000 # CHECK-NEXT: PhysicalAddress: 0x400000 # CHECK-NEXT: FileSize: 4344 # CHECK-NEXT: MemSize: 4344 # CHECK-NEXT: FileSize: 4336 # CHECK-NEXT: MemSize: 4336 # CHECK-NEXT: Flags [ (0x5) # CHECK-NEXT: PF_R (0x4) # CHECK-NEXT: PF_X (0x1) Loading lld/test/elf2/basic64be.s +7 −7 Original line number Diff line number Diff line Loading @@ -79,8 +79,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -95,8 +95,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -111,8 +111,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 24 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -126,7 +126,7 @@ _start: # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 # CHECK-NEXT: Offset: 0x1028 # CHECK-NEXT: Offset: 0x1024 # CHECK-NEXT: Size: 31 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading Loading
lld/ELF/Writer.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ public: uintX_t getSize() { return Header.sh_size; } uintX_t getFlags() { return Header.sh_flags; } uintX_t getOffset() { return Header.sh_offset; } uintX_t getAlign() { return Header.sh_addralign; } private: StringRef Name; Loading Loading @@ -213,12 +214,14 @@ template <class ELFT> void Writer<ELFT>::assignAddresses() { compSec<ELFT::Is64Bits>); for (OutputSection<ELFT::Is64Bits> *Sec : OutputSections) { uintX_t Align = Sec->getAlign(); uintX_t Size = Sec->getSize(); if (Sec->getFlags() & SHF_ALLOC) { Sec->setVA(VA); VA += RoundUpToAlignment(Sec->getSize(), PageSize); VA += RoundUpToAlignment(Size, Align); } Sec->setFileOffset(FileOff); FileOff += RoundUpToAlignment(Sec->getSize(), 8); FileOff += RoundUpToAlignment(Size, Align); StrTabBuilder.add(Sec->getName()); } Loading
lld/test/elf2/basic.s +2 −2 Original line number Diff line number Diff line Loading @@ -74,7 +74,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Address: 0x1010 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 Loading @@ -90,7 +90,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Address: 0x1010 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 Loading
lld/test/elf2/basic32.s +8 −8 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ _start: # CHECK-NEXT: Version: 1 # CHECK-NEXT: Entry: 0x401000 # CHECK-NEXT: ProgramHeaderOffset: 0x34 # CHECK-NEXT: SectionHeaderOffset: 0x102C # CHECK-NEXT: SectionHeaderOffset: 0x1028 # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: HeaderSize: 52 Loading Loading @@ -74,8 +74,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -90,8 +90,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -105,7 +105,7 @@ _start: # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 26 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -119,8 +119,8 @@ _start: # CHECK-NEXT: Offset: 0x0 # CHECK-NEXT: VirtualAddress: 0x400000 # CHECK-NEXT: PhysicalAddress: 0x400000 # CHECK-NEXT: FileSize: 4344 # CHECK-NEXT: MemSize: 4344 # CHECK-NEXT: FileSize: 4336 # CHECK-NEXT: MemSize: 4336 # CHECK-NEXT: Flags [ (0x5) # CHECK-NEXT: PF_R (0x4) # CHECK-NEXT: PF_X (0x1) Loading
lld/test/elf2/basic32be.s +8 −8 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ _start: # CHECK-NEXT: Version: 1 # CHECK-NEXT: Entry: 0x401000 # CHECK-NEXT: ProgramHeaderOffset: 0x34 # CHECK-NEXT: SectionHeaderOffset: 0x102C # CHECK-NEXT: SectionHeaderOffset: 0x1028 # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: HeaderSize: 52 Loading Loading @@ -74,8 +74,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -90,8 +90,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -105,7 +105,7 @@ _start: # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 26 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -119,8 +119,8 @@ _start: # CHECK-NEXT: Offset: 0x0 # CHECK-NEXT: VirtualAddress: 0x400000 # CHECK-NEXT: PhysicalAddress: 0x400000 # CHECK-NEXT: FileSize: 4344 # CHECK-NEXT: MemSize: 4344 # CHECK-NEXT: FileSize: 4336 # CHECK-NEXT: MemSize: 4336 # CHECK-NEXT: Flags [ (0x5) # CHECK-NEXT: PF_R (0x4) # CHECK-NEXT: PF_X (0x1) Loading
lld/test/elf2/basic64be.s +7 −7 Original line number Diff line number Diff line Loading @@ -79,8 +79,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -95,8 +95,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -111,8 +111,8 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x2000 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Address: 0x100C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 24 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading @@ -126,7 +126,7 @@ _start: # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 # CHECK-NEXT: Offset: 0x1028 # CHECK-NEXT: Offset: 0x1024 # CHECK-NEXT: Size: 31 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 Loading