>>3Windows never needed PIC for DLLs, they just use relocation when necessary and fall back to having two copies of pages with relocations if there's an address conflict. It works well enough with only 32 bits, and with 64 bits every DLL can get an essentially unique load address without any problem.
In contrast, dynamic linking on *nix is a horrible mess. GOTs, PLTs, and all that other crap.
Well, a first thought might be to change the register used for the hidden argument, but that can't be done without breaking the ABI contract between the compiler and linker, so it's out.
Fuck the ABI. Why are compilers so stupid? Because the narrowminded academics who wrote them were also too stupid to realise that having fixed calling conventions for every function is idiotic and everyone who came after them just mindlessly copied the same shit. Meanwhile Asm programmers have been naturally using the most suitable way for each function, and only recently are compilers
finally introducing "custom calling conventions" as an optimisation.
32-bit x86 has 7 GP registers but all you see are the RISCtards and compiler writers complaining about how insufficient that is. Because they're too fucking retarded to know how to write efficient code or make compilers that can and waste their time complaining about the lack of registers rather than actually trying to make it work.
http://yarchive.net/comp/linux/x86.html