[PATCH] D150022: [Object] Fix handling of Elf_Nhdr with sh_addralign=8
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat May 6 00:54:44 PDT 2023
MaskRay created this revision.
MaskRay added a reviewer: jhenderson.
Herald added subscribers: hiraditya, arichardson, emaste.
Herald added a project: All.
MaskRay requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
The generic ABI says:
> Padding is present, if necessary, to ensure 8 or 4-byte alignment for the next note entry (depending on whether the file is a 64-bit or 32-bit object). Such padding is not included in descsz.
Our parsing code currently aligns n_namesz. Fix the bug by aligning the start
offset of the descriptor instead. This issue has been benign because the primary
uses of sh_addralign=8 notes are `.note.gnu.property`, where
`sizeof(Elf_Nhdr) + sizeof("GNU") = 16` (already aligned by 8).
In practice, many 64-bit systems incorrectly use sh_addralign=4 notes.
We can use sh_addralign (= p_align) to decide the descriptor padding.
Treat an alignment of 0 and 1 as 4. This approach matches modern GNU readelf
(since 2018).
We have a few tests incorrectly using sh_addralign=0. We may make our behavior
stricter after fixing these tests.
Linux kernel dumped core files use `p_align=0` notes, so we need to support the
case for compatibility.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D150022
Files:
lld/ELF/InputFiles.cpp
llvm/include/llvm/Object/ELF.h
llvm/include/llvm/Object/ELFTypes.h
llvm/lib/Object/BuildID.cpp
llvm/test/tools/llvm-readobj/ELF/AArch64/aarch64-note-gnu-property.s
llvm/test/tools/llvm-readobj/ELF/note-alignment-invalid.test
llvm/test/tools/llvm-readobj/ELF/note-gnu-property2.s
llvm/test/tools/llvm-readobj/ELF/note-unknown.s
llvm/tools/llvm-readobj/ELFDumper.cpp
llvm/tools/obj2yaml/elf2yaml.cpp
llvm/unittests/Object/ELFTypesTest.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150022.520039.patch
Type: text/x-patch
Size: 17749 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230506/971138c8/attachment.bin>
More information about the llvm-commits
mailing list