[yaml2obj] Write the section header table after section contents
authorFangrui Song <maskray@google.com>
Thu, 5 Sep 2019 14:25:57 +0000 (14:25 +0000)
committerFangrui Song <maskray@google.com>
Thu, 5 Sep 2019 14:25:57 +0000 (14:25 +0000)
Linkers (ld.bfd/gold/lld) place the section header table at the very
end. This allows tools to strip it, which is optional in executable/shared objects.
In addition, if we add or section, the size of the section header table
will change. Placing the section header table in the end keeps section
offsets unchanged.

yaml2obj currently places the section header table immediately after the
program header. Follow what linkers do to make offset updating easier.

Reviewed By: grimar

Differential Revision: https://reviews.llvm.org/D67221

llvm-svn: 371074

36 files changed:
llvm/lib/ObjectYAML/ELFEmitter.cpp
llvm/test/Object/invalid.test
llvm/test/tools/llvm-objcopy/ELF/group-reorder.test
llvm/test/tools/llvm-objcopy/ELF/invalid-e_shoff.test
llvm/test/tools/llvm-objcopy/ELF/invalid-p_filesz-p_offset.test
llvm/test/tools/llvm-objcopy/ELF/overlapping-sections-in-segments.test
llvm/test/tools/llvm-objcopy/ELF/overlapping-sections.test
llvm/test/tools/llvm-objcopy/ELF/preserve-segment-contents-ehdr-phdrs.test
llvm/test/tools/llvm-readobj/elf-broken-dynsym-link.test
llvm/test/tools/llvm-readobj/elf-dynamic-malformed.test
llvm/test/tools/llvm-readobj/elf-dynamic-no-pt-dynamic.test
llvm/test/tools/llvm-readobj/elf-file-headers.test
llvm/test/tools/llvm-readobj/elf-hidden-versym.test
llvm/test/tools/llvm-readobj/elf-invalid-shstrndx.test
llvm/test/tools/llvm-readobj/elf-invalid-versioning.test
llvm/test/tools/llvm-readobj/elf-loadname.test
llvm/test/tools/llvm-readobj/elf-packed-relocs.test
llvm/test/tools/llvm-readobj/elf-relr-relocs.test
llvm/test/tools/llvm-readobj/elf-versioninfo.test
llvm/test/tools/llvm-readobj/elf-wrong-shstrtab-type.test
llvm/test/tools/llvm-readobj/gnu-notes.test
llvm/test/tools/llvm-readobj/gnu-sections.test
llvm/test/tools/llvm-readobj/reloc-types-elf-i386.test
llvm/test/tools/llvm-readobj/reloc-types-elf-x64.test
llvm/test/tools/llvm-readobj/unwind.test
llvm/test/tools/yaml2obj/dynsymtab-implicit-sections-size-content.yaml
llvm/test/tools/yaml2obj/elf-custom-null-section.yaml
llvm/test/tools/yaml2obj/elf-header-sh-fields.yaml
llvm/test/tools/yaml2obj/elf-override-shsize.yaml
llvm/test/tools/yaml2obj/explicit-dynsym-no-dynstr.yaml
llvm/test/tools/yaml2obj/implicit-sections.test
llvm/test/tools/yaml2obj/program-header-align.yaml
llvm/test/tools/yaml2obj/section-size-content.yaml
llvm/test/tools/yaml2obj/strtab-implicit-sections-size-content.yaml
llvm/test/tools/yaml2obj/symtab-implicit-sections-size-content.yaml
llvm/test/tools/yaml2obj/versym-section.yaml

index cd3a0fa..362a943 100644 (file)
@@ -116,7 +116,6 @@ template <class ELFT> class ELFState {
 
   bool buildSectionIndex();
   bool buildSymbolIndexes();
-  void initELFHeader(Elf_Ehdr &Header);
   void initProgramHeaders(std::vector<Elf_Phdr> &PHeaders);
   bool initImplicitHeader(ContiguousBlobAccumulator &CBA, Elf_Shdr &Header,
                           StringRef SecName, ELFYAML::Section *YAMLSec);
@@ -132,6 +131,7 @@ template <class ELFT> class ELFState {
   void setProgramHeaderLayout(std::vector<Elf_Phdr> &PHeaders,
                               std::vector<Elf_Shdr> &SHeaders);
   void finalizeStrings();
+  void writeELFHeader(ContiguousBlobAccumulator &CBA, raw_ostream &OS);
   bool writeSectionContent(Elf_Shdr &SHeader,
                            const ELFYAML::RawContentSection &Section,
                            ContiguousBlobAccumulator &CBA);
@@ -205,8 +205,11 @@ template <class ELFT> ELFState<ELFT>::ELFState(ELFYAML::Object &D) : Doc(D) {
   }
 }
 
-template <class ELFT> void ELFState<ELFT>::initELFHeader(Elf_Ehdr &Header) {
+template <class ELFT>
+void ELFState<ELFT>::writeELFHeader(ContiguousBlobAccumulator &CBA, raw_ostream &OS) {
   using namespace llvm::ELF;
+
+  Elf_Ehdr Header;
   zero(Header);
   Header.e_ident[EI_MAG0] = 0x7f;
   Header.e_ident[EI_MAG1] = 'E';
@@ -230,14 +233,18 @@ template <class ELFT> void ELFState<ELFT>::initELFHeader(Elf_Ehdr &Header) {
   Header.e_shentsize =
       Doc.Header.SHEntSize ? (uint16_t)*Doc.Header.SHEntSize : sizeof(Elf_Shdr);
   // Immediately following the ELF header and program headers.
-  Header.e_shoff =
-      Doc.Header.SHOffset
-          ? (typename ELFT::uint)(*Doc.Header.SHOffset)
-          : sizeof(Header) + sizeof(Elf_Phdr) * Doc.ProgramHeaders.size();
+  // Align the start of the section header and write the ELF header.
+  uint64_t ShOffset;
+  CBA.getOSAndAlignedOffset(ShOffset, sizeof(typename ELFT::uint));
+  Header.e_shoff = Doc.Header.SHOffset
+                       ? typename ELFT::uint(*Doc.Header.SHOffset)
+                       : ShOffset;
   Header.e_shnum =
       Doc.Header.SHNum ? (uint16_t)*Doc.Header.SHNum : Doc.Sections.size();
   Header.e_shstrndx = Doc.Header.SHStrNdx ? (uint16_t)*Doc.Header.SHStrNdx
                                           : SN2I.get(".shstrtab");
+
+  OS.write((const char *)&Header, sizeof(Header));
 }
 
 template <class ELFT>
@@ -1040,19 +1047,13 @@ int ELFState<ELFT>::writeELF(raw_ostream &OS, ELFYAML::Object &Doc) {
   if (!State.buildSectionIndex() || !State.buildSymbolIndexes())
     return 1;
 
-  Elf_Ehdr Header;
-  State.initELFHeader(Header);
-
-  // TODO: Flesh out section header support.
-
   std::vector<Elf_Phdr> PHeaders;
   State.initProgramHeaders(PHeaders);
 
   // XXX: This offset is tightly coupled with the order that we write
   // things to `OS`.
-  const size_t SectionContentBeginOffset = Header.e_ehsize +
-                                           Header.e_phentsize * Header.e_phnum +
-                                           Header.e_shentsize * Header.e_shnum;
+  const size_t SectionContentBeginOffset =
+      sizeof(Elf_Ehdr) + sizeof(Elf_Phdr) * Doc.ProgramHeaders.size();
   ContiguousBlobAccumulator CBA(SectionContentBeginOffset);
 
   std::vector<Elf_Shdr> SHeaders;
@@ -1062,10 +1063,10 @@ int ELFState<ELFT>::writeELF(raw_ostream &OS, ELFYAML::Object &Doc) {
   // Now we can decide segment offsets
   State.setProgramHeaderLayout(PHeaders, SHeaders);
 
-  OS.write((const char *)&Header, sizeof(Header));
+  State.writeELFHeader(CBA, OS);
   writeArrayData(OS, makeArrayRef(PHeaders));
-  writeArrayData(OS, makeArrayRef(SHeaders));
   CBA.writeBlobToStream(OS);
+  writeArrayData(OS, makeArrayRef(SHeaders));
   return 0;
 }
 
index 8a75ecd..397c948 100644 (file)
@@ -315,7 +315,7 @@ FileHeader:
 # RUN: yaml2obj %s --docnum=16 -o %t16
 # RUN: not llvm-readobj -r %t16 2>&1 | FileCheck -DFILE=%t16 --check-prefix=INVALID-REL-SYM %s
 
-# INVALID-REL-SYM: error: '[[FILE]]': unable to access section [index 2] data at 0x18000180: offset goes past the end of file
+# INVALID-REL-SYM: error: '[[FILE]]': unable to access section [index 2] data at 0x18000040: offset goes past the end of file
 
 --- !ELF
 FileHeader:
@@ -565,7 +565,7 @@ Sections:
 # RUN: yaml2obj --docnum=26 %s -o %t26
 # RUN: not llvm-readobj -h %t26 2>&1 | FileCheck -DFILE=%t26 --check-prefix=INVALID-SEC-NUM1 %s
 
-# INVALID-SEC-NUM1: error: '[[FILE]]': invalid section header table offset (e_shoff = 0x40) or invalid number of sections specified in the first section header's sh_size field (0x3ffffffffffffff)
+# INVALID-SEC-NUM1: error: '[[FILE]]': invalid section header table offset (e_shoff = 0x78) or invalid number of sections specified in the first section header's sh_size field (0x3ffffffffffffff)
 
 --- !ELF
 FileHeader:
index 25d0cd5..25c57be 100644 (file)
@@ -8,12 +8,12 @@
 # aren't purely sorting based on offsets (it gets moved to the beginning
 # despite having a larger offset).
 
-# IN:      There are 7 section headers, starting at offset 0x40:
+# IN:      There are 7 section headers, starting at offset 0x160:
 # IN:        [Nr] Name              Type            Address          Off    Size
 # IN-NEXT:   [ 0]                   NULL            0000000000000000 000000 000000
-# IN-NEXT:   [ 1] .foo              PROGBITS        0000000000000000 000200 000040
-# IN-NEXT:   [ 2] .group            GROUP           0000000000000000 000240 000008
-# IN-NEXT:   [ 3] .bar              PROGBITS        0000000000000000 000248 000040
+# IN-NEXT:   [ 1] .foo              PROGBITS        0000000000000000 000040 000040
+# IN-NEXT:   [ 2] .group            GROUP           0000000000000000 000080 000008
+# IN-NEXT:   [ 3] .bar              PROGBITS        0000000000000000 000088 000040
 
 # IN:      COMDAT group section [    2] `.group' [bar] contains 1 sections:
 # IN-NEXT:    [Index]    Name
index 9ebfc11..fc2e084 100644 (file)
@@ -7,13 +7,13 @@
 
 ## Sanity check that the section header table is at offset 64:
 # RUN: llvm-readobj --file-headers %t.o | FileCheck %s --check-prefix=VALIDATE
-# VALIDATE: SectionHeaderOffset: 0x40{{$}}
+# VALIDATE: SectionHeaderOffset: 0x80{{$}}
 
 ## Truncate the file to end before the section header table ends.
-# RUN: %python -c "with open('%/t.o', 'r+b') as input: input.truncate(65)"
+# RUN: %python -c "with open('%/t.o', 'r+b') as input: input.truncate(0x7f)"
 # RUN: not llvm-objcopy %t.o 2>&1 | FileCheck %s -DINPUT=%t.o --check-prefix=CASE1
 
-# CASE1: error: '[[INPUT]]': section header table goes past the end of the file: e_shoff = 0x40
+# CASE1: error: '[[INPUT]]': section header table goes past the end of the file: e_shoff = 0x80
 
 ## Set the e_shoff field to a value much larger than the object file size.
 # RUN: %python -c "with open('%/t2.o', 'r+b') as input: import struct; bytes = struct.pack('<Q', 0x40000000); input.seek(40); input.write(bytes)"
index fdb54da..b2f746e 100644 (file)
@@ -4,7 +4,7 @@
 
 # RUN: yaml2obj --docnum=1 %s -o %t1.o
 # RUN: not llvm-objcopy %t1.o 2>&1 | FileCheck %s --check-prefix=ERR1
-# ERR1: error: program header with offset 0x1b8 and file size 0x100000 goes past the end of the file
+# ERR1: error: program header with offset 0x78 and file size 0x100000 goes past the end of the file
 
 --- !ELF
 FileHeader:
index 2998d5c..cd92a7e 100644 (file)
@@ -4,14 +4,13 @@
 ## inputs somehow.
 # RUN: yaml2obj %s -o %t.o
 
-## First, check that the section header table appears immediately after the program
-## header table.
+## First, check the address of the section header table.
 # RUN: llvm-readobj --file-headers %t.o | FileCheck %s --check-prefix=SHDRS-OFFSET
-# SHDRS-OFFSET: SectionHeaderOffset: 0x78{{$}}
+# SHDRS-OFFSET: SectionHeaderOffset: 0x1050{{$}}
 
 ## Binary edit the section header sh_offset field of the second section to
-## overlap the first one.
-# RUN: %python -c "with open('%/t.o', 'r+b') as input: import struct; bytes = struct.pack('<Q', 0x1001); input.seek(272); input.write(bytes)"
+## (e_shoff+64*2+24 = 0x10e8) overlap the first one.
+# RUN: %python -c "with open('%/t.o', 'r+b') as input: import struct; bytes = struct.pack('<Q', 0x1001); input.seek(0x10e8); input.write(bytes)"
 
 ## Sanity check that the binary editing modified the correct field.
 # RUN: llvm-readobj --section-headers %t.o | FileCheck %s
index 1ab0bb6..2c470e6 100644 (file)
@@ -3,14 +3,13 @@
 ## inputs somehow.
 # RUN: yaml2obj %s -o %t.o
 
-## First, check that the section header table appears immediately after the ELF
-## header.
+## First, check the address of the section header table.
 # RUN: llvm-readobj --file-headers %t.o | FileCheck %s --check-prefix=SHDRS-OFFSET
-# SHDRS-OFFSET: SectionHeaderOffset: 0x40{{$}}
+# SHDRS-OFFSET: SectionHeaderOffset: 0x1050{{$}}
 
 ## Binary edit the section header sh_offset field of the second section to
-## overlap the first one.
-# RUN: %python -c "with open('%/t.o', 'r+b') as input: import struct; bytes = struct.pack('<Q', 0x1001); input.seek(216); input.write(bytes)"
+## (e_shoff+64*2+24 = 0x10e8) overlap the first one.
+# RUN: %python -c "with open('%/t.o', 'r+b') as input: import struct; bytes = struct.pack('<Q', 0x1001); input.seek(0x10e8); input.write(bytes)"
 
 ## Sanity check that the binary editing modified the correct field.
 # RUN: llvm-readobj --section-headers %t.o | FileCheck %s --check-prefix=VALIDATE
index 3352313..4afd2c9 100644 (file)
@@ -11,7 +11,7 @@
 # BEFORE:      Type: PT_LOAD
 # BEFORE-NEXT: Offset: 0x0
 # BEFORE:      Type: PT_LOAD
-# BEFORE-NEXT: Offset: 0x240
+# BEFORE-NEXT: Offset: 0xC0
 
 # AFTER:      SectionHeaderCount: 3
 # AFTER:      Type: PT_LOAD
index bbd13b8..d64b1df 100644 (file)
 # LLVM-NEXT:    SHF_ALLOC
 # LLVM-NEXT:  ]
 # LLVM-NEXT:  Address: 0x0
-# LLVM-NEXT:  Offset: 0x180
+# LLVM-NEXT:  Offset: 0x40
 # LLVM-NEXT:  Size: 24
 # LLVM-NEXT:  Link: 0
 
 # GNU:      Section Headers:
 # GNU-NEXT:  [Nr] Name    Type   Address          Off    Size   ES Flg Lk
 # GNU-NEXT:  [ 0]         NULL   0000000000000000 000000 000000 00 0   0
-# GNU-NEXT:  [ 1] .dynsym DYNSYM 0000000000000000 000180 000018 18 A   0
+# GNU-NEXT:  [ 1] .dynsym DYNSYM 0000000000000000 000040 000018 18 A   0
 
 --- !ELF
 FileHeader:
@@ -58,11 +58,11 @@ Sections:
 # LLVM2-NEXT:    SHF_ALLOC
 # LLVM2-NEXT:  ]
 # LLVM2-NEXT:  Address: 0x0
-# LLVM2-NEXT:  Offset: 0x180
+# LLVM2-NEXT:  Offset: 0x40
 # LLVM2-NEXT:  Size: 24
 # LLVM2-NEXT:  Link: 255
 
 # GNU2:      Section Headers:
 # GNU2-NEXT:  [Nr] Name    Type   Address          Off    Size   ES Flg Lk
 # GNU2-NEXT:  [ 0]         NULL   0000000000000000 000000 000000 00 0   0
-# GNU2-NEXT:  [ 1] .dynsym DYNSYM 0000000000000000 000180 000018 18 A   255
+# GNU2-NEXT:  [ 1] .dynsym DYNSYM 0000000000000000 000040 000018 18 A   255
index 9a11728..b377eae 100644 (file)
@@ -216,7 +216,7 @@ ProgramHeaders:
 # BAD-RELA-NEXT:   0x0000000000000007 RELA 0x1000000
 # BAD-RELA-NEXT:   0x0000000000000000 NULL 0x0
 # BAD-RELA-NEXT: ]
-# BAD-RELA-GNU:      Dynamic section at offset 0x1f0 contains 2 entries:
+# BAD-RELA-GNU:      Dynamic section at offset 0xb0 contains 2 entries:
 # BAD-RELA-GNU-NEXT: Tag                Type   Name/Value
 # BAD-RELA-GNU-NEXT: 0x0000000000000007 (RELA) 0x1000000
 # BAD-RELA-GNU-NEXT: 0x0000000000000000 (NULL) 0x0
index 89e6603..8fa7f65 100644 (file)
@@ -14,7 +14,7 @@
 # LLVM-NEXT:   0x0000000000000000 NULL 0x0
 # LLVM-NEXT: ]
 
-# GNU:      Dynamic section at offset 0x1b8 contains 1 entries:
+# GNU:      Dynamic section at offset 0x78 contains 1 entries:
 # GNU-NEXT: Tag                Type   Name/Value
 # GNU-NEXT: 0x0000000000000000 (NULL) 0x0
 
index d48f31b..21631ca 100644 (file)
@@ -21,7 +21,7 @@
 # I386-NEXT:  Version: 1
 # I386-NEXT:  Entry: 0x0
 # I386-NEXT:  ProgramHeaderOffset: 0x34
-# I386-NEXT:  SectionHeaderOffset: 0x34
+# I386-NEXT:  SectionHeaderOffset: 0x64
 # I386-NEXT:  Flags [ (0x0)
 # I386-NEXT:  ]
 # I386-NEXT:  HeaderSize: 52
@@ -65,7 +65,7 @@ FileHeader:
 # X86-64-NEXT:  Version: 1
 # X86-64-NEXT:  Entry: 0x0
 # X86-64-NEXT:  ProgramHeaderOffset: 0x40
-# X86-64-NEXT:  SectionHeaderOffset: 0x40
+# X86-64-NEXT:  SectionHeaderOffset: 0x78
 # X86-64-NEXT:  Flags [ (0x0)
 # X86-64-NEXT:  ]
 # X86-64-NEXT:  HeaderSize: 64
@@ -116,7 +116,7 @@ FileHeader:
 # LANAI-NEXT:  Version: 1
 # LANAI-NEXT:  Entry: 0x0
 # LANAI-NEXT:  ProgramHeaderOffset: 0x34
-# LANAI-NEXT:  SectionHeaderOffset: 0x34
+# LANAI-NEXT:  SectionHeaderOffset: 0x64
 # LANAI-NEXT:  Flags [ (0x0)
 # LANAI-NEXT:  ]
 # LANAI-NEXT:  HeaderSize: 52
index 0b37b9c..b6cf05a 100644 (file)
@@ -2,7 +2,7 @@
 # RUN: llvm-readelf -V %t | FileCheck %s --check-prefix=HIDDEN
 
 # HIDDEN:      Version symbols section '.gnu.version' contains 2 entries:
-# HIDDEN-NEXT:  Addr: 0000000000200210  Offset: 0x000240  Link: 6 (.dynsym)
+# HIDDEN-NEXT:  Addr: 0000000000200210  Offset: 0x000040  Link: 6 (.dynsym)
 # HIDDEN-NEXT:   000:   0 (*local*)       3h(hiddensym)
 
 --- !ELF
index 6dc3b11..ba89914 100644 (file)
@@ -4,7 +4,7 @@
 
 # GNU:      ELF Header:
 # GNU:        Section header string table index: 255
-# GNU-NEXT:   There are 4 section headers, starting at offset 0x40:
+# GNU-NEXT:   There are 4 section headers, starting at offset 0x78:
 # GNU:      Section Headers:
 # GNU-NEXT:  [Nr] Name
 # GNU-EMPTY:
index a1acc9a..ae1b2ad 100644 (file)
@@ -2,7 +2,7 @@
 # RUN: llvm-readelf -V %t | FileCheck %s --check-prefix=INVALID
 
 # INVALID:      Version symbols section '.gnu.version' contains 2 entries:
-# INVALID-NEXT:  Addr: 0000000000200210  Offset: 0x000240  Link: 6 (.dynsym)
+# INVALID-NEXT:  Addr: 0000000000200210  Offset: 0x000040  Link: 6 (.dynsym)
 # INVALID-NEXT:   000:   0 (*local*)       3 (*invalid*)
 
 --- !ELF
index 17006a1..d12076f 100644 (file)
@@ -9,7 +9,7 @@
 # LLVM-NEXT: AddressSize: 64bit
 # LLVM-NEXT: LoadName: test.so
 
-# GNU:       Dynamic section at offset 0x200 contains 4 entries:
+# GNU:       Dynamic section at offset 0x80 contains 4 entries:
 # GNU-NEXT:   Tag                Type     Name/Value
 # GNU-NEXT:   0x0000000000000005 (STRTAB) 0x0
 # GNU-NEXT:   0x000000000000000a (STRSZ)  7 (bytes)
index 4de725d..4c1ddfc 100644 (file)
@@ -14,7 +14,7 @@
 # LLVM1-NEXT: }
 
 # RUN: yaml2obj -docnum 1 %s | llvm-readelf -relocations - | FileCheck --check-prefix=GNU1 %s
-# GNU1:      Relocation section '.rela.dyn' at offset 0x180 contains 8 entries:
+# GNU1:      Relocation section '.rela.dyn' at offset 0x40 contains 8 entries:
 # GNU1:      0000000000001100  0000000000000008 R_X86_64_RELATIVE                 0
 # GNU1-NEXT: 0000000000001180  0000000000000008 R_X86_64_RELATIVE                 0
 # GNU1-NEXT: 0000000000001188  0000000100000001 R_X86_64_64            0000000000000000 sym1 + 0
@@ -62,7 +62,7 @@ Symbols:
 # LLVM2-NEXT: }
 
 # RUN: yaml2obj -docnum 2 %s | llvm-readelf -relocations - | FileCheck --check-prefix=GNU2 %s
-# GNU2:      Relocation section '.rel.dyn' at offset 0xfc contains 10 entries:
+# GNU2:      Relocation section '.rel.dyn' at offset 0x34 contains 10 entries:
 # GNU2:      00001008  00000101 R_386_32               00000000   sym1
 # GNU2-NEXT: 00001010  00000203 R_386_GOT32            00000000   sym2
 # GNU2-NEXT: 0000100c  00000008 R_386_RELATIVE
@@ -109,7 +109,7 @@ Symbols:
 # LLVM3-NEXT: }
 
 # RUN: yaml2obj -docnum 3 %s | llvm-readelf -relocations - | FileCheck --check-prefix=GNU3 %s
-# GNU3:      Relocation section '.rela.dyn' at offset 0x180 contains 6 entries:
+# GNU3:      Relocation section '.rela.dyn' at offset 0x40 contains 6 entries:
 # GNU3: 0000000000001100  0000000000000008 R_X86_64_RELATIVE                 0
 # GNU3-NEXT: 0000000000001180  0000000000000008 R_X86_64_RELATIVE                 8
 # GNU3-NEXT: 0000000000001200  0000000100000001 R_X86_64_64            0000000000000000 sym1 + 0
index da1b6ab..3badb73 100644 (file)
@@ -42,7 +42,7 @@
 # RUN: yaml2obj -docnum 1 %s \
 # RUN:   | llvm-readelf -relocations -raw-relr - \
 # RUN:   | FileCheck --check-prefix=RAW-GNU1 %s
-# RAW-GNU1:      Relocation section '.relr.dyn' at offset 0x180 contains 5 entries:
+# RAW-GNU1:      Relocation section '.relr.dyn' at offset 0x40 contains 5 entries:
 # RAW-GNU1:      0000000000010d60
 # RAW-GNU1-NEXT: 0000000000000103
 # RAW-GNU1-NEXT: 0000000000020000
@@ -52,7 +52,7 @@
 # RUN: yaml2obj -docnum 1 %s \
 # RUN:   | llvm-readelf -relocations - \
 # RUN:   | FileCheck --check-prefix=GNU1 %s
-# GNU1:      Relocation section '.relr.dyn' at offset 0x180 contains 21 entries:
+# GNU1:      Relocation section '.relr.dyn' at offset 0x40 contains 21 entries:
 # GNU1:      0000000000010d60  0000000000000008 R_X86_64_RELATIVE
 # GNU1-NEXT: 0000000000010d68  0000000000000008 R_X86_64_RELATIVE
 # GNU1-NEXT: 0000000000010da0  0000000000000008 R_X86_64_RELATIVE
@@ -127,7 +127,7 @@ Sections:
 # RUN: yaml2obj -docnum 2 %s \
 # RUN:   | llvm-readelf -relocations -raw-relr - \
 # RUN:   | FileCheck --check-prefix=RAW-GNU2 %s
-# RAW-GNU2:      Relocation section '.relr.dyn' at offset 0xfc contains 5 entries:
+# RAW-GNU2:      Relocation section '.relr.dyn' at offset 0x34 contains 5 entries:
 # RAW-GNU2:      00010d60
 # RAW-GNU2-NEXT: 00000103
 # RAW-GNU2-NEXT: 00020000
@@ -137,7 +137,7 @@ Sections:
 # RUN: yaml2obj -docnum 2 %s \
 # RUN:   | llvm-readelf -relocations - \
 # RUN:   | FileCheck --check-prefix=GNU2 %s
-# GNU2:      Relocation section '.relr.dyn' at offset 0xfc contains 14 entries:
+# GNU2:      Relocation section '.relr.dyn' at offset 0x34 contains 14 entries:
 # GNU2:      00010d60  00000008 R_386_RELATIVE
 # GNU2-NEXT: 00010d64  00000008 R_386_RELATIVE
 # GNU2-NEXT: 00010d80  00000008 R_386_RELATIVE
index ba48e91..606a96a 100644 (file)
@@ -80,7 +80,7 @@ DynamicSymbols:
 # LLVM:      Version symbols {
 # LLVM-NEXT:   Section Name: .gnu.version
 # LLVM-NEXT:   Address: 0x0
-# LLVM-NEXT:   Offset: 0x280
+# LLVM-NEXT:   Offset: 0x40
 # LLVM-NEXT:   Link: 7
 # LLVM-NEXT:   Symbols [
 # LLVM-NEXT:     Symbol {
@@ -170,12 +170,12 @@ DynamicSymbols:
 # LLVM-NEXT: }
 
 # GNU:      Version symbols section '.gnu.version' contains 6 entries:
-# GNU-NEXT:  Addr: 0000000000000000  Offset: 0x000280  Link: 7 (.dynsym)
+# GNU-NEXT:  Addr: 0000000000000000  Offset: 0x000040  Link: 7 (.dynsym)
 # GNU-NEXT:   000:   0 (*local*) 2 (VERSION1) 3 (VERSION2) 4 (v1)
 # GNU-NEXT:   004:   5 (v2)      6 (v3)
 # GNU-EMPTY:
 # GNU-NEXT: Version definition section '.gnu.version_d' contains 3 entries:
-# GNU-NEXT:  Addr: 0000000000000000  Offset: 0x00028c  Link: 8 (.dynstr)
+# GNU-NEXT:  Addr: 0000000000000000  Offset: 0x00004c  Link: 8 (.dynstr)
 # GNU-NEXT:   0x0000: Rev: 1  Flags: none  Index: 2  Cnt: 1  Name: VERSION1
 # GNU-NEXT:   0x001c: Rev: 1  Flags: none  Index: 3  Cnt: 2  Name: VERSION2
 # GNU-NEXT:   0x0038: Parent 1: VERSION1
@@ -183,7 +183,7 @@ DynamicSymbols:
 # GNU-NEXT:   0x0038: Parent 1: VERSION1
 # GNU-EMPTY:
 # GNU-NEXT: Version needs section '.gnu.version_r' contains 2 entries:
-# GNU-NEXT:  Addr: 0000000000000000  Offset: 0x0002cc  Link: 8 (.dynstr)
+# GNU-NEXT:  Addr: 0000000000000000  Offset: 0x00008c  Link: 8 (.dynstr)
 # GNU-NEXT:   0x0000: Version: 1  File: verneed1.so.0  Cnt: 2
 # GNU-NEXT:   0x0010:   Name: v1  Flags: none  Version: 4
 # GNU-NEXT:   0x0020:   Name: v2  Flags: none  Version: 5
index 24e6d3c..6a600dc 100644 (file)
@@ -15,7 +15,7 @@
 # GNU: Section Headers:
 # GNU:   [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
 # GNU: warning: '[[FILE]]': invalid sh_type for string table section [index 1]: expected SHT_STRTAB, but got SHT_PROGBITS
-# GNU:   [ 1] .shstrtab         PROGBITS        0000000000000000 000140 00001b 00 0   0  0
+# GNU:   [ 1] .shstrtab         PROGBITS        0000000000000000 000040 00001b 00 0   0  0
 
 ## Test we report multiple identical warnings (one for each object) when dumping an archive.
 
index b72a6e3..b3801f5 100644 (file)
@@ -7,24 +7,24 @@
 # RUN: llvm-readelf --notes %t1.stripped.so | FileCheck %s --check-prefix=GNU-STRIPPED --strict-whitespace --match-full-lines
 # RUN: llvm-readobj --notes %t1.stripped.so | FileCheck %s --check-prefix=LLVM-STRIPPED
 
-#      GNU:Displaying notes found at file offset 0x00000238 with length 0x00000020:
+#      GNU:Displaying notes found at file offset 0x00000078 with length 0x00000020:
 # GNU-NEXT:  Owner                Data size    Description
 # GNU-NEXT:  GNU                  0x00000010   NT_GNU_ABI_TAG (ABI version tag)
 # GNU-NEXT:    OS: Linux, ABI: 2.6.32
 
-#      GNU:Displaying notes found at file offset 0x00000258 with length 0x00000020:
+#      GNU:Displaying notes found at file offset 0x00000098 with length 0x00000020:
 # GNU-NEXT:  Owner                Data size    Description
 # GNU-NEXT:  GNU                  0x00000010   NT_GNU_BUILD_ID (unique build ID bitstring)
 # GNU-NEXT:    Build ID: 4fcb712aa6387724a9f465a32cd8c14b
 
-#      GNU:Displaying notes found at file offset 0x00000278 with length 0x0000001c:
+#      GNU:Displaying notes found at file offset 0x000000b8 with length 0x0000001c:
 # GNU-NEXT:  Owner                Data size    Description
 # GNU-NEXT:  GNU                  0x00000009   NT_GNU_GOLD_VERSION (gold version)
 # GNU-NEXT:    Version: gold 1.11
 
 # LLVM:      Notes [
 # LLVM-NEXT:   NoteSection {
-# LLVM-NEXT:     Offset: 0x238
+# LLVM-NEXT:     Offset: 0x78
 # LLVM-NEXT:     Size: 0x20
 # LLVM-NEXT:     Note {
 # LLVM-NEXT:       Owner: GNU
@@ -35,7 +35,7 @@
 # LLVM-NEXT:     }
 # LLVM-NEXT:   }
 # LLVM-NEXT:   NoteSection {
-# LLVM-NEXT:     Offset: 0x258
+# LLVM-NEXT:     Offset: 0x98
 # LLVM-NEXT:     Size: 0x20
 # LLVM-NEXT:     Note {
 # LLVM-NEXT:       Owner: GNU
@@ -45,7 +45,7 @@
 # LLVM-NEXT:     }
 # LLVM-NEXT:   }
 # LLVM-NEXT:   NoteSection {
-# LLVM-NEXT:     Offset: 0x278
+# LLVM-NEXT:     Offset: 0xB8
 # LLVM-NEXT:     Size: 0x1C
 # LLVM-NEXT:     Note {
 # LLVM-NEXT:       Owner: GNU
@@ -128,7 +128,7 @@ Sections:
 # RUN: not llvm-readelf --notes %t3.so 2>&1 | FileCheck -DFILE=%t3.so %s --check-prefix=ERR2
 # RUN: not llvm-readobj --notes %t3.so 2>&1 | FileCheck -DFILE=%t3.so %s --check-prefix=ERR2
 
-# ERR2: error: '[[FILE]]': SHT_NOTE section [index 1] has invalid offset (0x180) or size (0xffff0000)
+# ERR2: error: '[[FILE]]': SHT_NOTE section [index 1] has invalid offset (0x40) or size (0xffff0000)
 
 --- !ELF
 FileHeader:
@@ -172,7 +172,7 @@ ProgramHeaders:
 # RUN: not llvm-readelf --notes %t5.so 2>&1 | FileCheck -DFILE=%t5.so  %s --check-prefix=ERR4
 # RUN: not llvm-readobj --notes %t5.so 2>&1 | FileCheck -DFILE=%t5.so %s --check-prefix=ERR4
 
-# ERR4: error: '[[FILE]]': PT_NOTE header has invalid offset (0x1b8) or size (0xffff0000)
+# ERR4: error: '[[FILE]]': PT_NOTE header has invalid offset (0x78) or size (0xffff0000)
 
 --- !ELF
 FileHeader:
index 17a0c4c..c5c6733 100644 (file)
@@ -1,18 +1,18 @@
 # RUN: yaml2obj --docnum=1 %s -o %t-i386.o
 # RUN: llvm-readelf -S %t-i386.o | FileCheck %s -check-prefix ELF32
 
-# ELF32:      There are 8 section headers, starting at offset 0x34:
+# ELF32:      There are 8 section headers, starting at offset 0x90:
 # ELF32-EMPTY:
 # ELF32-NEXT: Section Headers:
 # ELF32-NEXT:   [Nr] Name              Type            Address  Off    Size   ES Flg Lk Inf Al
 # ELF32-NEXT:   [ 0]                   NULL            00000000 000000 000000 00      0   0  0
-# ELF32-NEXT:   [ 1] .text             PROGBITS        00000000 000174 000001 00  AX  0   0  4
-# ELF32-NEXT:   [ 2] .rel.text         REL             00000000 000178 000000 08      5   1  4
-# ELF32-NEXT:   [ 3] .data             PROGBITS        00000000 000178 000000 00  WA  0   0  4
-# ELF32-NEXT:   [ 4] .bss              NOBITS          00000000 000178 000000 00  WA  0   0  4
-# ELF32-NEXT:   [ 5] .symtab           SYMTAB          00000000 000178 000020 10      6   2  8
-# ELF32-NEXT:   [ 6] .strtab           STRTAB          00000000 000198 000007 00      0   0  1
-# ELF32-NEXT:   [ 7] .shstrtab         STRTAB          00000000 00019f 000030 00      0   0  1
+# ELF32-NEXT:   [ 1] .text             PROGBITS        00000000 000034 000001 00  AX  0   0  4
+# ELF32-NEXT:   [ 2] .rel.text         REL             00000000 000038 000000 08      5   1  4
+# ELF32-NEXT:   [ 3] .data             PROGBITS        00000000 000038 000000 00  WA  0   0  4
+# ELF32-NEXT:   [ 4] .bss              NOBITS          00000000 000038 000000 00  WA  0   0  4
+# ELF32-NEXT:   [ 5] .symtab           SYMTAB          00000000 000038 000020 10      6   2  8
+# ELF32-NEXT:   [ 6] .strtab           STRTAB          00000000 000058 000007 00      0   0  1
+# ELF32-NEXT:   [ 7] .shstrtab         STRTAB          00000000 00005f 000030 00      0   0  1
 # ELF32-NEXT: Key to Flags:
 # ELF32-NEXT:   W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
 # ELF32-NEXT:   I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
@@ -63,18 +63,18 @@ Symbols:
 # RUN:   | FileCheck %s -check-prefix ELF64
 # RUN: llvm-readelf -W -S %t-x64.o | FileCheck %s -check-prefix ELF64
 
-# ELF64:      There are 8 section headers, starting at offset 0x40:
+# ELF64:      There are 8 section headers, starting at offset 0xb0:
 # ELF64-EMPTY: 
 # ELF64-NEXT: Section Headers:
 # ELF64-NEXT:   [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
 # ELF64-NEXT:   [ 0]                   NULL            0000000000000000 000000 000000 00  0  0  0
-# ELF64-NEXT:   [ 1] .text             PROGBITS        0000000000000000 000240 000001 00  AX 0   0  4
-# ELF64-NEXT:   [ 2] .rela.text        RELA            0000000000000000 000248 000000 18  5  1  8
-# ELF64-NEXT:   [ 3] .data             PROGBITS        0000000000000000 000248 000000 00  WA 0   0  4
-# ELF64-NEXT:   [ 4] .bss              NOBITS          0000000000000000 000248 000000 00  WA 0   0  4
-# ELF64-NEXT:   [ 5] .symtab           SYMTAB          0000000000000000 000248 000030 18  6  2  8
-# ELF64-NEXT:   [ 6] .strtab           STRTAB          0000000000000000 000278 000007 00  0  0  1
-# ELF64-NEXT:   [ 7] .shstrtab         STRTAB          0000000000000000 00027f 000031 00  0  0  1
+# ELF64-NEXT:   [ 1] .text             PROGBITS        0000000000000000 000040 000001 00  AX 0   0  4
+# ELF64-NEXT:   [ 2] .rela.text        RELA            0000000000000000 000048 000000 18  5  1  8
+# ELF64-NEXT:   [ 3] .data             PROGBITS        0000000000000000 000048 000000 00  WA 0   0  4
+# ELF64-NEXT:   [ 4] .bss              NOBITS          0000000000000000 000048 000000 00  WA 0   0  4
+# ELF64-NEXT:   [ 5] .symtab           SYMTAB          0000000000000000 000048 000030 18  6  2  8
+# ELF64-NEXT:   [ 6] .strtab           STRTAB          0000000000000000 000078 000007 00  0  0  1
+# ELF64-NEXT:   [ 7] .shstrtab         STRTAB          0000000000000000 00007f 000031 00  0  0  1
 # ELF64-NEXT: Key to Flags:
 # ELF64-NEXT:   W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
 # ELF64-NEXT:   I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
index 1f661e4..8606f3f 100644 (file)
@@ -47,7 +47,7 @@
 # LLVM: Type: R_386_IRELATIVE (42)
 # LLVM: Type: R_386_GOT32X (43)
 
-# GNU:      Relocation section '.rel.text' at offset 0x128 contains 41 entries:
+# GNU:      Relocation section '.rel.text' at offset 0x38 contains 41 entries:
 # GNU-NEXT:  Offset     Info    Type                Sym. Value  Symbol's Name
 # GNU-NEXT: 00000002  00000100 R_386_NONE             00000000   foo
 # GNU-NEXT: 00000008  00000101 R_386_32               00000000   foo
index 021fbb5..ad4e06f 100644 (file)
@@ -46,7 +46,7 @@
 # LLVM: Type: R_X86_64_GOTPCRELX (41)
 # LLVM: Type: R_X86_64_REX_GOTPCRELX (42)
 
-# GNU:      Relocation section '.rela.text' at offset 0x1c8 contains 40 entries:
+# GNU:      Relocation section '.rela.text' at offset 0x48 contains 40 entries:
 # GNU-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
 # GNU-NEXT: 0000000000000003  0000000100000000 R_X86_64_NONE          0000000000000000 foo + 0
 # GNU-NEXT: 000000000000000a  0000000100000001 R_X86_64_64            0000000000000000 foo + 0
index fa7aa5c..7463b27 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK:      EH_FRAME Header [
 # CHECK-NEXT:  Address: 0x4013c0
-# CHECK-NEXT:  Offset: 0x27c
+# CHECK-NEXT:  Offset: 0xbc
 # CHECK-NEXT:  Size: 0x3c
 # CHECK-NEXT:  Corresponding Section: .eh_frame_hdr
 # CHECK-NEXT:  Header {
@@ -40,7 +40,7 @@
 # CHECK-NEXT:  }
 # CHECK-NEXT:]
 
-# CHECK:      .eh_frame section at offset 0x2b8 address 0x401400:
+# CHECK:      .eh_frame section at offset 0xf8 address 0x401400:
 # CHECK-NEXT:  [0x401400] CIE length=20
 # CHECK-NEXT:    version: 1
 # CHECK-NEXT:    augmentation: zR
index c8e583f..47f1380 100644 (file)
@@ -75,7 +75,7 @@ DynamicSymbols:
 # CASE4-NEXT:   SHF_ALLOC
 # CASE4-NEXT: ]
 # CASE4-NEXT: Address: 0x0
-# CASE4-NEXT: Offset: 0x180
+# CASE4-NEXT: Offset: 0x40
 # CASE4-NEXT: Size: 2
 # CASE4-NEXT: Link: 0
 # CASE4-NEXT: Info: 1
@@ -107,7 +107,7 @@ Sections:
 # CASE5-NEXT:   SHF_ALLOC
 # CASE5-NEXT: ]
 # CASE5-NEXT: Address: 0x0
-# CASE5-NEXT: Offset: 0x180
+# CASE5-NEXT: Offset: 0x40
 # CASE5-NEXT: Size: 5
 # CASE5-NEXT: Link: 0
 # CASE5-NEXT: Info: 1
@@ -141,7 +141,7 @@ Sections:
 # CASE6-NEXT:   SHF_ALLOC
 # CASE6-NEXT: ]
 # CASE6-NEXT: Address: 0x0
-# CASE6-NEXT: Offset: 0x180
+# CASE6-NEXT: Offset: 0x40
 # CASE6-NEXT: Size: 4
 # CASE6-NEXT: Link: 0
 # CASE6-NEXT: Info: 1
@@ -175,7 +175,7 @@ Sections:
 # CASE7-NEXT:    SHF_ALLOC
 # CASE7-NEXT:  ]
 # CASE7-NEXT:  Address: 0x0
-# CASE7-NEXT:  Offset: 0x180
+# CASE7-NEXT:  Offset: 0x40
 # CASE7-NEXT:  Size: 2
 # CASE7-NEXT:  Link: 0
 # CASE7-NEXT:  Info: 1
index dc74a7b..ea5f456 100644 (file)
@@ -8,9 +8,9 @@
 # DEFAULT:      Section Headers:
 # DEFAULT-NEXT:  [Nr] Name      Type   Address          Off    Size   ES Flg Lk Inf Al
 # DEFAULT-NEXT:  [ 0]           NULL   0000000000000000 000000 000000 00 0   0  0
-# DEFAULT-NEXT:  [ 1] .symtab   SYMTAB 0000000000000000 000140 000018 18 2   1  8
-# DEFAULT-NEXT:  [ 2] .strtab   STRTAB 0000000000000000 000158 000001 00 0   0  1
-# DEFAULT-NEXT:  [ 3] .shstrtab STRTAB 0000000000000000 000159 00001b 00 0   0  1
+# DEFAULT-NEXT:  [ 1] .symtab   SYMTAB 0000000000000000 000040 000018 18 2   1  8
+# DEFAULT-NEXT:  [ 2] .strtab   STRTAB 0000000000000000 000058 000001 00 0   0  1
+# DEFAULT-NEXT:  [ 3] .shstrtab STRTAB 0000000000000000 000059 00001b 00 0   0  1
 
 --- !ELF
 FileHeader:
@@ -104,10 +104,10 @@ Sections:
 # OTHER-SECTION:      Section Headers:
 # OTHER-SECTION-NEXT:   [Nr] Name      Type     Address          Off    Size   ES Flg Lk Inf Al
 # OTHER-SECTION-NEXT:   [ 0]           NULL     0000000000000000 000000 000000 00 0   0  0
-# OTHER-SECTION-NEXT:   [ 1] foo       PROGBITS 0000000000000000 000180 000000 00 0   0  0
-# OTHER-SECTION-NEXT:   [ 2] .symtab   SYMTAB   0000000000000000 000180 000018 18 3   1  8
-# OTHER-SECTION-NEXT:   [ 3] .strtab   STRTAB   0000000000000000 000198 000001 00 0   0  1
-# OTHER-SECTION-NEXT:   [ 4] .shstrtab STRTAB   0000000000000000 000199 00001f 00 0   0  1
+# OTHER-SECTION-NEXT:   [ 1] foo       PROGBITS 0000000000000000 000040 000000 00 0   0  0
+# OTHER-SECTION-NEXT:   [ 2] .symtab   SYMTAB   0000000000000000 000040 000018 18 3   1  8
+# OTHER-SECTION-NEXT:   [ 3] .strtab   STRTAB   0000000000000000 000058 000001 00 0   0  1
+# OTHER-SECTION-NEXT:   [ 4] .shstrtab STRTAB   0000000000000000 000059 00001f 00 0   0  1
 
 --- !ELF
 FileHeader:
@@ -164,7 +164,7 @@ Sections:
 # MULTIPLE:      Section Headers:
 # MULTIPLE-NEXT:  [Nr] Name Type Address          Off    Size   ES Flg Lk Inf Al
 # MULTIPLE-NEXT:  [ 0]      NULL 0000000000000000 000000 000000 00 0   0  0
-# MULTIPLE-NEXT:  [ 1] .foo NULL 0000000000000123 000180 000020 10 A   1  2   0
+# MULTIPLE-NEXT:  [ 1] .foo NULL 0000000000000123 000040 000020 10 A   1  2   0
 
 --- !ELF
 FileHeader:
index 9bf64cd..b887c0a 100644 (file)
@@ -6,7 +6,7 @@
 # RUN: yaml2obj --docnum=1 %s -o %t1
 # RUN: llvm-readelf --file-headers %t1 | FileCheck %s --check-prefix=DEFAULT
 
-# DEFAULT:   Start of section headers:          64 (bytes into file)
+# DEFAULT:   Start of section headers:          120 (bytes into file)
 # DEFAULT:   Size of section headers:           64 (bytes)
 # DEFAULT:   Number of section headers:         4
 # DEFAULT:   Section header string table index: 3
index 9873698..de2bb77 100644 (file)
@@ -7,17 +7,17 @@
 # CASE1:      Section Headers:
 # CASE1-NEXT:  [Nr] Name           Type     Address          Off    Size  
 # CASE1-NEXT:  [ 0]                NULL     0000000000000000 000000 000000
-# CASE1-NEXT:  [ 1] .dynsym        DYNSYM   0000000000000000 000380 000001
-# CASE1-NEXT:  [ 2] .symtab        SYMTAB   0000000000000000 000398 000002
-# CASE1-NEXT:  [ 3] .dynamic       DYNAMIC  0000000000000000 0003b0 000003
-# CASE1-NEXT:  [ 4] .rela          RELA     0000000000000000 0003b0 000004
-# CASE1-NEXT:  [ 5] .nobits        NOBITS   0000000000000000 0003b0 000005
-# CASE1-NEXT:  [ 6] .group         GROUP    0000000000000000 0003b0 000006
-# CASE1-NEXT:  [ 7] .gnu.version   VERSYM   0000000000000000 0003b0 000007
-# CASE1-NEXT:  [ 8] .gnu.version_r VERNEED  0000000000000000 0003b0 000008
-# CASE1-NEXT:  [ 9] .gnu.version_d VERDEF   0000000000000000 0003b0 000009
-# CASE1-NEXT:  [10] .regular       PROGBITS 0000000000000000 0003b0 00000a
-# CASE1-NEXT:  [11] .strtab        STRTAB   0000000000000000 0003b0 00000b
+# CASE1-NEXT:  [ 1] .dynsym        DYNSYM   0000000000000000 000040 000001
+# CASE1-NEXT:  [ 2] .symtab        SYMTAB   0000000000000000 000058 000002
+# CASE1-NEXT:  [ 3] .dynamic       DYNAMIC  0000000000000000 000070 000003
+# CASE1-NEXT:  [ 4] .rela          RELA     0000000000000000 000070 000004
+# CASE1-NEXT:  [ 5] .nobits        NOBITS   0000000000000000 000070 000005
+# CASE1-NEXT:  [ 6] .group         GROUP    0000000000000000 000070 000006
+# CASE1-NEXT:  [ 7] .gnu.version   VERSYM   0000000000000000 000070 000007
+# CASE1-NEXT:  [ 8] .gnu.version_r VERNEED  0000000000000000 000070 000008
+# CASE1-NEXT:  [ 9] .gnu.version_d VERDEF   0000000000000000 000070 000009
+# CASE1-NEXT:  [10] .regular       PROGBITS 0000000000000000 000070 00000a
+# CASE1-NEXT:  [11] .strtab        STRTAB   0000000000000000 000070 00000b
 
 --- !ELF
 FileHeader:
index 88b2a4d..9624dd7 100644 (file)
@@ -9,7 +9,7 @@
 # CHECK:      Section Headers:
 # CHECK-NEXT:  [Nr] Name    Type   Address          Off    Size   ES Flg Lk
 # CHECK-NEXT:  [ 0]         NULL   0000000000000000 000000 000000 00 0   0
-# CHECK-NEXT:  [ 1] .dynsym DYNSYM 0000000000000000 000180 000018 18 A   0
+# CHECK-NEXT:  [ 1] .dynsym DYNSYM 0000000000000000 000040 000018 18 A   0
 
 --- !ELF
 FileHeader:
index fef2f1e..77e9e1c 100644 (file)
 # CHECK:      Section Headers:
 # CHECK-NEXT:  [Nr] Name      Type     Address          Off    Size
 # CHECK-NEXT:  [ 0]           NULL     0000000000000000 000000 000000
-# CHECK-NEXT:  [ 1] .dynstr   STRTAB   0000000000000100 000200 000009
-# CHECK-NEXT:  [ 2] .dynsym   DYNSYM   0000000000000150 000209 000030
-# CHECK-NEXT:  [ 3] .symtab   SYMTAB   0000000000000000 000239 000018
-# CHECK-NEXT:  [ 4] .strtab   STRTAB   0000000000000000 000251 000001
-# CHECK-NEXT:  [ 5] .shstrtab STRTAB   0000000000000000 000252 000035
-# CHECK-NEXT:  [ 6] .text.foo PROGBITS 0000000000000200 000287 000000
+# CHECK-NEXT:  [ 1] .dynstr   STRTAB   0000000000000100 000040 000009
+# CHECK-NEXT:  [ 2] .dynsym   DYNSYM   0000000000000150 000049 000030
+# CHECK-NEXT:  [ 3] .symtab   SYMTAB   0000000000000000 000079 000018
+# CHECK-NEXT:  [ 4] .strtab   STRTAB   0000000000000000 000091 000001
+# CHECK-NEXT:  [ 5] .shstrtab STRTAB   0000000000000000 000092 000035
+# CHECK-NEXT:  [ 6] .text.foo PROGBITS 0000000000000200 0000c7 000000
 
 --- !ELF
 FileHeader:
@@ -55,12 +55,12 @@ DynamicSymbols:
 # NODYNSYM:      Section Headers:
 # NODYNSYM-NEXT: [Nr] Name      Type      Address          Off    Size
 # NODYNSYM-NEXT: [ 0]           NULL      0000000000000000 000000 000000
-# NODYNSYM-NEXT: [ 1] .dynstr   STRTAB    0000000000000100 000200 000001
-# NODYNSYM-NEXT: [ 2] .dynsym   DYNSYM    0000000000000150 000201 000018
-# NODYNSYM-NEXT: [ 3] .symtab   SYMTAB    0000000000000000 000219 000018
-# NODYNSYM-NEXT: [ 4] .strtab   STRTAB    0000000000000000 000231 000001
-# NODYNSYM-NEXT: [ 5] .shstrtab STRTAB    0000000000000000 000232 000035
-# NODYNSYM-NEXT: [ 6] .text.foo PROGBITS  0000000000000200 000267 000000
+# NODYNSYM-NEXT: [ 1] .dynstr   STRTAB    0000000000000100 000040 000001
+# NODYNSYM-NEXT: [ 2] .dynsym   DYNSYM    0000000000000150 000041 000018
+# NODYNSYM-NEXT: [ 3] .symtab   SYMTAB    0000000000000000 000059 000018
+# NODYNSYM-NEXT: [ 4] .strtab   STRTAB    0000000000000000 000071 000001
+# NODYNSYM-NEXT: [ 5] .shstrtab STRTAB    0000000000000000 000072 000035
+# NODYNSYM-NEXT: [ 6] .text.foo PROGBITS  0000000000000200 0000a7 000000
 
 --- !ELF
 FileHeader:
index 88b5d27..7c30771 100644 (file)
@@ -37,7 +37,7 @@ ProgramHeaders:
 #CHECK:     ProgramHeaders [
 #CHECK-NEXT:   ProgramHeader {
 #CHECK-NEXT:    Type: PT_LOAD
-#CHECK-NEXT:    Offset: 0x230
+#CHECK-NEXT:    Offset: 0xB0
 #CHECK-NEXT:    VirtualAddress: 0xAAAA1030
 #CHECK-NEXT:    PhysicalAddress: 0xFFFF1030
 #CHECK-NEXT:    FileSize: 4
@@ -50,7 +50,7 @@ ProgramHeaders:
 #CHECK-NEXT:  }
 #CHECK-NEXT:  ProgramHeader {
 #CHECK-NEXT:    Type: PT_LOAD
-#CHECK-NEXT:    Offset: 0x240
+#CHECK-NEXT:    Offset: 0xC0
 #CHECK-NEXT:    VirtualAddress: 0xAAAA2040
 #CHECK-NEXT:    PhysicalAddress: 0xFFFF2040
 #CHECK-NEXT:    FileSize: 4
index 5b231a8..bc7a1a0 100644 (file)
@@ -31,7 +31,7 @@ Sections:
 # CASE2-NEXT: Flags [
 # CASE2-NEXT: ]
 # CASE2-NEXT: Address: 0x0
-# CASE2-NEXT: Offset: 0x180
+# CASE2-NEXT: Offset: 0x40
 # CASE2-NEXT: Size: 1
 # CASE2-NEXT: Link: 0
 # CASE2-NEXT: Info: 0
@@ -79,7 +79,7 @@ Sections:
 # CASE3-NEXT: Flags [
 # CASE3-NEXT: ]
 # CASE3-NEXT: Address: 0x0
-# CASE3-NEXT: Offset: 0x180
+# CASE3-NEXT: Offset: 0x40
 # CASE3-NEXT: Size: 1
 # CASE3-NEXT: Link: 0
 # CASE3-NEXT: Info: 0
@@ -112,7 +112,7 @@ Sections:
 # CASE4-NEXT: Flags [
 # CASE4-NEXT: ]
 # CASE4-NEXT: Address: 0x0
-# CASE4-NEXT: Offset: 0x180
+# CASE4-NEXT: Offset: 0x40
 # CASE4-NEXT: Size: 3
 # CASE4-NEXT: Link: 0
 # CASE4-NEXT: Info: 0
@@ -144,7 +144,7 @@ Sections:
 # CASE5-NEXT: Flags [
 # CASE5-NEXT: ]
 # CASE5-NEXT: Address: 0x0
-# CASE5-NEXT: Offset: 0x180
+# CASE5-NEXT: Offset: 0x40
 # CASE5-NEXT: Size: 0
 
 --- !ELF
index a634997..a2be271 100644 (file)
@@ -34,7 +34,7 @@ Symbols:
 # CASE2-NEXT: Flags [
 # CASE2-NEXT: ]
 # CASE2-NEXT: Address: 0x0
-# CASE2-NEXT: Offset: 0x140
+# CASE2-NEXT: Offset: 0x40
 # CASE2-NEXT: Size: 2
 # CASE2-NEXT: Link: 0
 # CASE2-NEXT: Info: 0
@@ -69,7 +69,7 @@ Symbols:
 # CASE3-NEXT: Flags [
 # CASE3-NEXT: ]
 # CASE3-NEXT: Address: 0x0
-# CASE3-NEXT: Offset: 0x140
+# CASE3-NEXT: Offset: 0x40
 # CASE3-NEXT: Size: 2
 # CASE3-NEXT: Link: 0
 # CASE3-NEXT: Info: 0
@@ -105,7 +105,7 @@ Symbols:
 # CASE4-NEXT: Flags [
 # CASE4-NEXT: ]
 # CASE4-NEXT: Address: 0x0
-# CASE4-NEXT: Offset: 0x140
+# CASE4-NEXT: Offset: 0x40
 # CASE4-NEXT: Size: 3
 # CASE4-NEXT: Link: 0
 # CASE4-NEXT: Info: 0
@@ -141,7 +141,7 @@ Symbols:
 # CASE5-NEXT: Flags [ (0x0)
 # CASE5-NEXT: ]
 # CASE5-NEXT: Address: 0x0
-# CASE5-NEXT: Offset: 0x140
+# CASE5-NEXT: Offset: 0x40
 # CASE5-NEXT: Size: 2
 # CASE5-NEXT: Link: 0
 # CASE5-NEXT: Info: 0
index 4981dbd..c0c9b4a 100644 (file)
@@ -70,7 +70,7 @@ Symbols:
 # CASE4-NEXT: Flags [ (0x0)
 # CASE4-NEXT: ]
 # CASE4-NEXT: Address: 0x0
-# CASE4-NEXT: Offset: 0x140
+# CASE4-NEXT: Offset: 0x40
 # CASE4-NEXT: Size: 2
 # CASE4-NEXT: Link: 2
 # CASE4-NEXT: Info: 1
@@ -101,7 +101,7 @@ Sections:
 # CASE5-NEXT: Flags [ (0x0)
 # CASE5-NEXT: ]
 # CASE5-NEXT: Address: 0x0
-# CASE5-NEXT: Offset: 0x140
+# CASE5-NEXT: Offset: 0x40
 # CASE5-NEXT: Size: 5
 # CASE5-NEXT: Link: 2
 # CASE5-NEXT: Info: 1
@@ -134,7 +134,7 @@ Sections:
 # CASE6-NEXT: Flags [
 # CASE6-NEXT: ]
 # CASE6-NEXT: Address: 0x0
-# CASE6-NEXT: Offset: 0x140
+# CASE6-NEXT: Offset: 0x40
 # CASE6-NEXT: Size: 4
 # CASE6-NEXT: Link: 2
 # CASE6-NEXT: Info: 1
@@ -167,7 +167,7 @@ Sections:
 # CASE7-NEXT:  Flags [
 # CASE7-NEXT:  ]
 # CASE7-NEXT:  Address: 0x0
-# CASE7-NEXT:  Offset: 0x140
+# CASE7-NEXT:  Offset: 0x40
 # CASE7-NEXT:  Size: 2
 # CASE7-NEXT:  Link: 2
 # CASE7-NEXT:  Info: 1
index 6e0cecb..bd4f610 100644 (file)
@@ -7,7 +7,7 @@
 # CHECK:      Version symbols {
 # CHECK-NEXT:   Section Name: .gnu.version
 # CHECK-NEXT:   Address: 0x200210
-# CHECK-NEXT:   Offset: 0x240
+# CHECK-NEXT:   Offset: 0x40
 # CHECK-NEXT:   Link: 6
 # CHECK-NEXT:   Symbols [
 # CHECK-NEXT:     Symbol {
@@ -97,7 +97,7 @@ DynamicSymbols:
 
 # ENTSIZE: Section Headers:
 # ENTSIZE:   [Nr] Name         Type   Address          Off    Size   ES
-# ENTSIZE:   [ 1] .gnu.version VERSYM 0000000000000000 000180 000000 03
+# ENTSIZE:   [ 1] .gnu.version VERSYM 0000000000000000 000040 000000 03
 
 --- !ELF
 FileHeader: