On 2018-09-17 11:02 AM, Jeff Law wrote:
On 9/14/18 5:44 PM, John David Anglin wrote:
The attached change fixes the canonicalization of method and void
pointers in comparisons against
another method or function pointer on 32-bit hppa targets. As far as I
know, 32-bit hppa is the only
architecture that requires function pointer canonicalization due to lazy
binding.
Tested on hppa2.0w-hp-hpux11.11 and hppa-unknown-linux-gnu, GCC trunk
and 8. Committed to
trunk and gcc-8 branch.
My recollection is HP's engineers were really concerned about the cost
of indirect calls and wanted to drop all the $$dyncall and associated
canonicalization of function pointers as they went to the 64 bit ABI.
As things stand, the linker and glibc would have to change to use OPDs.
I doubt very much
much that this can be done without breaking compatibility with existing
applications. In linux,
there is a problem with the trampoline design used for lazy binding. Of
course, the code to
canonicalize function pointers is pretty horrible and fragile.
Helge has been pushing to get the 64-bit ABI working on linux. I tend
to think it would be easier
to get a 64-bit glibc working than solve the above. Helge has the
kernel interface more or less
done.
Dave
--
John David Anglin dave.ang...@bell.net