[all-commits] [llvm/llvm-project] a7a447: [yaml2obj] - ProgramHeaders: introduce FirstSec/La...

Georgii Rymar via All-commits all-commits at lists.llvm.org
Mon Nov 9 02:15:28 PST 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: a7a447be0fa934505f0c423fb97b91a68c1cc715
      https://github.com/llvm/llvm-project/commit/a7a447be0fa934505f0c423fb97b91a68c1cc715
  Author: Georgii Rymar <grimar at accesssoftek.com>
  Date:   2020-11-09 (Mon, 09 Nov 2020)

  Changed paths:
    M llvm/include/llvm/ObjectYAML/ELFYAML.h
    M llvm/lib/ObjectYAML/ELFEmitter.cpp
    M llvm/lib/ObjectYAML/ELFYAML.cpp
    M llvm/test/DebugInfo/symbolize-build-id-error.test
    M llvm/test/DebugInfo/symbolize-build-id.test
    M llvm/test/Object/invalid.test
    M llvm/test/Object/obj2yaml.test
    M llvm/test/tools/llvm-elfabi/binary-read-add-soname.test
    M llvm/test/tools/llvm-elfabi/binary-read-arch.test
    M llvm/test/tools/llvm-elfabi/binary-read-bad-soname.test
    M llvm/test/tools/llvm-elfabi/binary-read-bad-vaddr.test
    M llvm/test/tools/llvm-elfabi/binary-read-neededlibs-bad-offset.test
    M llvm/test/tools/llvm-elfabi/binary-read-neededlibs.test
    M llvm/test/tools/llvm-elfabi/binary-read-no-dt-strsz.test
    M llvm/test/tools/llvm-elfabi/binary-read-no-dt-strtab.test
    M llvm/test/tools/llvm-elfabi/binary-read-replace-soname.test
    M llvm/test/tools/llvm-elfabi/binary-read-soname-no-null.test
    M llvm/test/tools/llvm-elfabi/binary-read-soname.test
    M llvm/test/tools/llvm-gsymutil/X86/elf-dwarf.yaml
    M llvm/test/tools/llvm-objcopy/ELF/Inputs/ihex-elf-pt-null.yaml
    M llvm/test/tools/llvm-objcopy/ELF/Inputs/ihex-elf-segments.yaml
    M llvm/test/tools/llvm-objcopy/ELF/add-symbol.test
    M llvm/test/tools/llvm-objcopy/ELF/adjacent-segments.test
    M llvm/test/tools/llvm-objcopy/ELF/bad-build-id.test
    M llvm/test/tools/llvm-objcopy/ELF/basic-binary-copy.test
    M llvm/test/tools/llvm-objcopy/ELF/binary-first-seg-offset-zero.test
    M llvm/test/tools/llvm-objcopy/ELF/binary-no-paddr.test
    M llvm/test/tools/llvm-objcopy/ELF/binary-paddr.test
    M llvm/test/tools/llvm-objcopy/ELF/binary-remove-all-but-one.test
    M llvm/test/tools/llvm-objcopy/ELF/binary-remove-end.test
    M llvm/test/tools/llvm-objcopy/ELF/binary-remove-middle.test
    M llvm/test/tools/llvm-objcopy/ELF/binary-segment-layout.test
    M llvm/test/tools/llvm-objcopy/ELF/build-id-link-dir.test
    M llvm/test/tools/llvm-objcopy/ELF/check-addr-offset-align-binary.test
    M llvm/test/tools/llvm-objcopy/ELF/check-addr-offset-align.test
    M llvm/test/tools/llvm-objcopy/ELF/copy-after-strip-sections.test
    M llvm/test/tools/llvm-objcopy/ELF/dump-section.test
    M llvm/test/tools/llvm-objcopy/ELF/empty-section.test
    M llvm/test/tools/llvm-objcopy/ELF/identical-segments.test
    M llvm/test/tools/llvm-objcopy/ELF/invalid-p_filesz-p_offset.test
    M llvm/test/tools/llvm-objcopy/ELF/marker-segment.test
    M llvm/test/tools/llvm-objcopy/ELF/no-build-id.test
    M llvm/test/tools/llvm-objcopy/ELF/only-keep-debug.test
    M llvm/test/tools/llvm-objcopy/ELF/overlap-chain.test
    M llvm/test/tools/llvm-objcopy/ELF/parent-loop-check.test
    M llvm/test/tools/llvm-objcopy/ELF/preserve-segment-contents-ehdr-phdrs.test
    M llvm/test/tools/llvm-objcopy/ELF/preserve-segment-contents.test
    M llvm/test/tools/llvm-objcopy/ELF/program-headers.test
    M llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test
    M llvm/test/tools/llvm-objcopy/ELF/segment-shift-section-remove.test
    M llvm/test/tools/llvm-objcopy/ELF/segment-shift.test
    M llvm/test/tools/llvm-objcopy/ELF/segment-test-remove-section.test
    M llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test
    M llvm/test/tools/llvm-objcopy/ELF/strip-all.test
    M llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test
    M llvm/test/tools/llvm-objcopy/ELF/strip-sections.test
    M llvm/test/tools/llvm-objcopy/ELF/triple-overlap.test
    M llvm/test/tools/llvm-objcopy/ELF/two-seg-remove-end.test
    M llvm/test/tools/llvm-objcopy/ELF/two-seg-remove-first.test
    M llvm/test/tools/llvm-objcopy/ELF/two-seg-remove-third-sec.test
    M llvm/test/tools/llvm-objdump/ELF/dynamic-section-machine-specific.test
    M llvm/test/tools/llvm-objdump/ELF/dynamic-section.test
    M llvm/test/tools/llvm-objdump/X86/elf-disassemble-dynamic-symbols.test
    M llvm/test/tools/llvm-objdump/X86/elf-dynamic-relocs.test
    M llvm/test/tools/llvm-objdump/X86/phdrs-lma.test
    M llvm/test/tools/llvm-objdump/X86/phdrs-lma2.test
    M llvm/test/tools/llvm-objdump/section-filter.test
    M llvm/test/tools/llvm-objdump/warn-on-out-of-range-start-stop-address.test
    M llvm/test/tools/llvm-readobj/ELF/all.test
    M llvm/test/tools/llvm-readobj/ELF/broken-dynamic-reloc.test
    M llvm/test/tools/llvm-readobj/ELF/check-output-order.test
    M llvm/test/tools/llvm-readobj/ELF/demangle.test
    M llvm/test/tools/llvm-readobj/ELF/dyn-symbols-size-from-hash-table.test
    M llvm/test/tools/llvm-readobj/ELF/dyn-symbols.test
    M llvm/test/tools/llvm-readobj/ELF/dynamic-empty.test
    M llvm/test/tools/llvm-readobj/ELF/dynamic-malformed.test
    M llvm/test/tools/llvm-readobj/ELF/dynamic-no-pt-dynamic.test
    M llvm/test/tools/llvm-readobj/ELF/dynamic-not-in-pt-dynamic.test
    M llvm/test/tools/llvm-readobj/ELF/dynamic-reloc-no-section-headers.test
    M llvm/test/tools/llvm-readobj/ELF/dynamic-reloc.test
    M llvm/test/tools/llvm-readobj/ELF/dynamic-table-dtnull.s
    M llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test
    M llvm/test/tools/llvm-readobj/ELF/dynamic-tags.test
    M llvm/test/tools/llvm-readobj/ELF/gnu-notes.test
    M llvm/test/tools/llvm-readobj/ELF/gnu-section-mapping.test
    M llvm/test/tools/llvm-readobj/ELF/gnuhash.test
    M llvm/test/tools/llvm-readobj/ELF/hash-histogram.test
    M llvm/test/tools/llvm-readobj/ELF/hash-symbols.test
    M llvm/test/tools/llvm-readobj/ELF/hash-table.test
    M llvm/test/tools/llvm-readobj/ELF/loadname.test
    M llvm/test/tools/llvm-readobj/ELF/malformed-pt-dynamic.test
    M llvm/test/tools/llvm-readobj/ELF/needed-libs.test
    M llvm/test/tools/llvm-readobj/ELF/non-dynamic-in-pt-dynamic.test
    M llvm/test/tools/llvm-readobj/ELF/note-core-ntfile-bad.test
    M llvm/test/tools/llvm-readobj/ELF/note-core-ntfile.test
    M llvm/test/tools/llvm-readobj/ELF/note-core.test
    M llvm/test/tools/llvm-readobj/ELF/program-headers.test
    M llvm/test/tools/llvm-readobj/ELF/reloc-negative-addend-no-sym.test
    M llvm/test/tools/llvm-readobj/ELF/reloc-zero-name-or-value.test
    M llvm/test/tools/llvm-readobj/ELF/unwind.test
    M llvm/test/tools/llvm-xray/ARM/extract-instrmap.test
    M llvm/test/tools/obj2yaml/ELF/program-headers.yaml
    M llvm/test/tools/yaml2obj/ELF/custom-fill.yaml
    M llvm/test/tools/yaml2obj/ELF/dynamic-section-i386.yaml
    M llvm/test/tools/yaml2obj/ELF/header-sh-fields.yaml
    M llvm/test/tools/yaml2obj/ELF/program-header-address.yaml
    M llvm/test/tools/yaml2obj/ELF/program-header-align.yaml
    M llvm/test/tools/yaml2obj/ELF/program-header-nobits.yaml
    M llvm/test/tools/yaml2obj/ELF/program-header-size-offset.yaml
    M llvm/test/tools/yaml2obj/ELF/program-header.yaml
    M llvm/tools/obj2yaml/elf2yaml.cpp

  Log Message:
  -----------
  [yaml2obj] - ProgramHeaders: introduce FirstSec/LastSec instead of Sections list.

Imagine we have a YAML declaration of few sections: `foo1`, `<unnamed 2>`, `foo3`, `foo4`.

To put them into segment we can do (1*):

```
Sections:
 - Section: foo1
 - Section: foo4
```

or we can use (2*):

```
Sections:
 - Section: foo1
 - Section: foo3
 - Section: foo4
```

or (3*) :

```
Sections:
 - Section: foo1
## "(index 2)" here is a name that we automatically created for a unnamed section.
 - Section: (index 2)
 - Section: foo3
 - Section: foo4
```

It looks really confusing that we don't have to list all of sections.

At first I've tried to make this rule stricter and report an error when there is a gap
(i.e. when a section is included into segment, but not listed explicitly).
This did not work perfect, because such approach conflicts with unnamed sections/fills (see (3*)).

This patch drops "Sections" key and introduces 2 keys instead: `FirstSec` and `LastSec`.
Both are optional.

Differential revision: https://reviews.llvm.org/D90458




More information about the All-commits mailing list