rtld: Handle IFUNC symbols at non-PLT relocations
An example of this is initializing a global variable with a pointer to
ifunc. This adds a symble type check and call resolver for STT_GNU_IFNC
symbol types whien processing non-PLT relocations, but only after
non-IFUNC relocations are done. The two-phase processing is required
since resolvers may reference other symbols which most be ready to use
when resolver calls are done.
This restructures reloc_non_plt() to call find_symdef() and handle IFUNC
in a single place.
Taken from: FreeBSD svn 270798 (29 Aug 2014)
FreeBSD svn 270802 (29 Aug 2014)