On Thu, Jul 30, 2020 at 6:02 PM Florian Weimer <fweimer@xxxxxxxxxx> wrote: > Functions no longer start with the ENDBR64 prefix. Instead, the link > editor produces a PLT entry with an ENDBR64 prefix if it detects any > address-significant relocation for it. The PLT entry performs a NOTRACK > jump to the target address. This assumes that the target address is > subject to RELRO, of course, so that redirection is not possible. > Without address-significant relocations, the link editor produces a PLT > entry without the ENDBR64 prefix (but still with the NOTRACK jump), or > perhaps no PLT entry at all. How would this interact with function pointer comparisons? As in, if library A exports a function func1 without referencing it, and libraries B and C both take references to func1, would they end up with different function pointers (pointing to their respective PLT entries)? Would this mean that the behavior of a program that compares function pointers obtained through different shared libraries might change? I guess you could maybe canonicalize function pointers somehow, but that'd probably at least break dlclose(), right?