[PATCH] D78628: [obj2yaml] - Program headers: simplify the computation of p_filesz.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 23 04:17:33 PDT 2020
grimar marked an inline comment as done.
grimar added inline comments.
================
Comment at: llvm/lib/ObjectYAML/ELFEmitter.cpp:778-780
+ uint64_t FileSize = Fragments.back().Offset - PHeader.p_offset;
+ if (Fragments.back().Type != llvm::ELF::SHT_NOBITS)
+ FileSize += Fragments.back().Size;
----------------
jhenderson wrote:
> This is a little subtle, and probably deserves a comment to explain why we pay attention to offset but not size of a single trailing SHT_NOBITS sections.
I was about to place the following comment:
```
// SHT_NOBITS sections occupy no physical space in a file, we should not
// take their sizes into account when calculating the file size of a
// segment.
```
But then remembered one thing and started to doubt about the usage of its offset.
It was mentioned in D69192 that the sh_offset of a SHT_NOBITS can be
"larger than the file size with some usage of objcopy".
I was unable to find a proper test case committed for this and I do not think I know a way to achieve it.
(`elf-disassemble-bss.test` (https://github.com/llvm/llvm-project/blob/master/llvm/test/tools/llvm-objdump/X86/elf-disassemble-bss.test) has a non-trailing .bss section that has a too large sh_offset though).
ELF spec says about sh_offset:
"This member's value gives the byte offset from the beginning of the file to
the first byte in the section. One section type, SHT_NOBITS described
below, occupies no space in the file, and its sh_offset member locates
the conceptual placement in the file."
Does "sh_offset member locates the conceptual placement in the file" imply that the
`sh_offset` have to be less than the file size? I am not sure that "in the file." == "can be outside of the file", it is wierd.
So can we use `sh_offset` like I do here?
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D78628/new/
https://reviews.llvm.org/D78628
More information about the llvm-commits
mailing list