Rethinking GMP's configure
Richard Guenther
rguenther at suse.de
Tue Dec 6 10:53:59 CET 2011
On Tue, 6 Dec 2011, Torbjorn Granlund wrote:
> nisse at lysator.liu.se (Niels Möller) writes:
>
> Makes sense to me. Either --with-cpu=ALL or --with-cpu=HOST would be a
> sensible default.
>
> My thinking is to make --with-cpu=ALL become the default.
>
> > First, let's admit there will be some overhead. At some level, there
> > will be a need to jump through a table, initiated for the run-time CPU.
> > This indirection costs a few cycles each time. But note that in a
> > shared library, we typically access data through a GOT (global offset
> > table) and call functions indirectly through a PLT (procedure linkage
> > table). I think we could stay within the overhead of shared library
> > calls, if we do things right. (For ELF, that is, where we can control
> > such things.)
>
> I think I suggested, some time ago, that one could overwrite the table
> entries in the PLT, with no *additional* indirections. But that may not
> work. If I understand things correctly, there's no *the* PLT, there's a
> PLT in each loadable object (executable or shared library file). And
> then I have already forgotten how that is supposed to work with function
> pointers.
>
> Ian Lance Taylor has written some excellent texts about all this. (They
> should be next to your search engine.)
>
> This is a messy area, even if one ignores the worls outside of ELF.
>
> (The PLT is, as you say, part of the process, and not to be manipulated
> by the shared library. Perhaps it is *possible* to manipulate it using
> some dll calls on *some* systems, but I don't think this would be the
> right path.)
For GNU ELF systems you have the possibility to use IFUNC relocations
(basically the relocation depends on the outcome of a selector function
you implement). GLIBC now internally uses this to select between
different implementations of for example memcpy for the CPU a
program is executed on.
That is basically "PLT modification", but at relocation time
(thus not really "modification").
The IFUNC relocations are a GNU ELF extension (and require recent
dynamic loader and binutils support, of course).
Richard.
--
Richard Guenther <rguenther at suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer
More information about the gmp-devel
mailing list