I looked at the wiki and have the following comments.
Now that this is x86-64-specific, I think function descriptors should be mentioned.
For the same reason, it should be possible to mention concrete relocation types.
I think it should be possible to make a large set of existing objects (without additional markup) provably compatible with the new way of doing things, based on the relocations they use and the symbols they reference.
I do not think generic GNU properties and automatic OR/AND combinations are a good fit here. Compatibility of objects depends on relocations and referenced symbols. Coarse processing at the object-file level does not seem particularly helpful.
Ideally, I would like to have something that could one day replace the hidden aliases we use for internal symbol references inside glibc. However, that will probably need a mechanism to turn STV_PROTECTED into STV_DEFAULT at final link, given that for most symbols, we do not actually care that the canonical address is different outside of glibc (and our hidden prototypes frequently cause this today).
Action of linker and dynamic linker is always per-relocation. The
property marker is used in the following ways:
Linker can decide the best way to resolve a relocation against a protected symbol BEFORE seeing ALL relocations against the symbol.
Dynamic linker can decide if it is an error to have a copy
relocation against the protected symbol based on if the shared library is built with -fno-direct-extern-access.
FUNC symbols can be made protected with -fno-direct-extern-access. With
the property marker, we don't need to turn STV_PROTECTED FUNC symbols
into STV_DEFAULT.