* Maciej W. Rozycki: > On Mon, 3 Oct 2016, Matthew Fortune wrote: > >> > It looks like -mxgot has a similar impact on MIPS as using -fPIC >> > (instead of -fpic) on other architectures. >> > >> > Why wasn't the -fpic/-fPIC distinction carried over to MIPS? >> >> Much of the history here is probably folklore and guesswork but for >> my understanding is that MIPS has three levels of 'pic'. >> >> MIPS PIC code is really controlled by -mabicalls and -mshared which >> I assume originate from the MIPS-pro days. >> >> -fpic is simply set to imply -mabicalls and -mshared which is where >> everything gets far more confusing (but let's not get into that >> unless we have to) >> >> The reason there is no -fPIC is probably a conscious decision as >> MIPS has 'multi-got' that allows the small -fpic model to scale to >> most situations. >> >> -mxgot (aka big-got) is however a good match for -fPIC as it is a >> model guaranteed to work irrespective of how big the GOT is. > > For MIPS `-fPIC' is an alias to `-fpic' and the actual reason is these > options have only been retrofitted to the MIPS target when non-PIC support > has been added to shared-library (as opposed to bare-metal) targets. The > original MIPS SVR4 psABI mandated all code to be PIC, even executables, > and the model chosen was controlled with the `-mxgot' option, hardly ever > used, due to the code bloat implied and link-time incompatibility with the > default `-mno-xgot' code. The latter could be rectified to some extent by > a specific GOT entry ordering, but with the advent of multi-GOT there was > little incentive to actually implement it. GHC produces objects which need -mxgot. The GCC documentation doesn't say anything about incompatibilities between -mxgot and -mno-xgot. Will this result in a linker failure at least? (On the glibc side, I don't think we compile libc_nonshared.a twice, once for -mxgot and once for mno-xgot.)