The PT_GNU_PROPERTY program header describes the location of the .note.gnu.property SHT_NOTES section. The linux kernel uses this program header to find the .note.gnu.property section rather than parsing. Executables that have properties that the kernel needs to act on that don't have the PT_GNU_PROPERTY program header will not boot.
The change to add the program header is simple. It shifts the addresses around in the existing .note.gnu.property tests, but otherwise has no effect.
Depends on D70959 for definition of PT_GNU_PROPERTY and llvm-readobj support.
- PT_GNU_PROPERTY is described in https://github.com/hjl-tools/linux-abi/wiki/linux-abi-draft.pdf
- Somewhat long binutils thread that introduces PT_GNU_PROPERTY https://sourceware.org/ml/binutils/2018-11/msg00191.html, also spills over into December.
- Backport for binutils referencing kernel requirements for PT_GNU_PROPERTY for intel CET https://bugzilla.redhat.com/show_bug.cgi?id=1721606
Recently I think we can probably keep the address for the first instruction of a basic block and omit addresses for the rest of instructions.
Addresses of instructions that are neither the first instructions nor jump targets are not useful, and can make address updating annoying.