On Tuesday, 16 de August de 2011 13:16:44 Laszlo Papp wrote: > > btw, why cannot non-pic libs be prelinked? works for non-pie executables, > > after all. > > Well, by definition, non-pic libraries cannot be prelinked since the > symbols are at fixed addresses. You can not change the symbols using > prelink. It is mentioned in the prelink manual [1], and prelink goes > out of its way to find non-pic libraries and ignore them. You can just > read the preface where it says why the libraries should be PIC, and > how only PIC libraries can actually be prelinked.
Technically, there two dimensions here and the PIC / non-PIC naming is
misleading.
Code position: fixed / movable
Code cleanliness: clean (no relocations) / dirty (has text relocations)
-fPIC creates clean, movable code. Without it, shared libraries are dirty, but
still movable. Non-PIE applications, however, are both dirty and fixed.
So the NVidia libraries have text relocations, but they are still position-
independent. They can be loaded anywhere. The prelinker should be able to
prelink it.
A prelinked, non-PIC library is just like a Windows DLL: the PIC register is
free and, if the loader can load it at its preferred address, will not dirty
its pages (i.e., will be sharable).
--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Software Architect - Intel Open Source Technology Center
PGP/GPG: 0x6EF45358; fingerprint:
E067 918B B660 DBD1 105C 966C 33F5 F005 6EF4 5358
signature.asc
Description: This is a digitally signed message part.
