[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)
commitc3bc697974d2d7f3c151cb9853b40cc6bf73ba4b
tree84f1b811c199c8e32538cb219ea5b9cbc8db633d
parent9cef6400014a3124880e4c87e32acaf0b4c7c415
[yaml2obj] Write the section header table after section contents

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