They argue, and I tend to agree, that their solution is more secure.
1. It impiles some function pointers to be writable temporarily, not all of them.
2. It doesn't hide writable pointers from a cursory glance not familiar with IFUNC.
The GOT has to be initially writable regardless of ifunc, even with relro, to apply relocations.
The GOT has to be initially writable regardless of ifunc, even with relro, to apply relocations.