On 14.11.2008 19:54, ron minnich wrote:
On Fri, Nov 14, 2008 at 10:52 AM, Stefan Reinauer stepan@coresystems.de wrote:
Carl-Daniel Hailfinger wrote:
We're missing one crucial piece which is necessary to get PIC to work: The linker. PIC code must be linked _after_ its location is known.
That sounds absurd as it would totally defeat the purpose of PIC.
It's position independent code exactly _because_ you can't know the position at link time.
actually, the GCC definiton of PIC is odd to say the least, as compared to what I used to call PIC.
Remember what Segher said: We're (ab)using gcc on x86 in a way that was never envisioned.
But I am afraid carl-daniel is right. PIC in the gcc sense really means "shared libraries" from what I can see, and does require a linker post-pass.
Possibly on machines such as core 2, we should copy the (tiny) initram to CARBASE and run it there, and link it for CARBASE.
At least on AMD Fam10h processors, this is documented to fail. I believe we can trick the processor into doing that anyway, but that would be so highly complicated and processor dependent that the author of that code would become a critical resource ;-)
I'd like to have the initram in CAR option available for emergency situations, though.
Regards, Carl-Daniel