On the Gcc manual page:
When generating code for shared libraries, -fpic means -msmall-data and -fPIC means -large data.
Where:
-msmall-data -mlarge-data When -mexplicit-relocs is in effect, static data is accessed via gp-relative relocations. When -msmall-data is used, objects 8 bytes long or smaller are placed in a small data area (the ".sdata" and ".sbss" sections) and are accessed via 16-bit relocations off of the $gp register. This limits the size of the small data area to 64KB, but allows the variables to be directly accessed via a single instruction. The default is -mlarge-data. With this option the data area is limited to just below 2GB. Programs that require more than 2GB of data must use "malloc" or "mmap" to allocate the data in the heap instead of in the program data segment.
Alexandro de Oliveira Jun 05 '17 at 18:26 2017-06-05 18:26
source share