Commit 2db634d8 authored by Rafael Espindola's avatar Rafael Espindola
Browse files

Correctly align output sections.

They don't need to be aligned to page boundaries. Only segments need that.

llvm-svn: 244942
parent 0160a281
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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());
  }

+2 −2
Original line number Diff line number Diff line
@@ -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
@@ -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
+8 −8
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
+8 −8
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
+7 −7
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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