This is the mail archive of the
mailing list for the GCC project.
Re: what does -fno-pic do
- From: Yubin Ruan <ablacktshirt at gmail dot com>
- To: Mason <slash dot tmp at free dot fr>
- Cc: gcc at gcc dot gnu dot org
- Date: Mon, 11 Jul 2016 18:59:44 +0800
- Subject: Re: what does -fno-pic do
- Authentication-results: sourceware.org; auth=none
- References: <5782588A.email@example.com> <57835C81.firstname.lastname@example.org>
On 2016年07月11日 16:44, Mason wrote:
On 10/07/2016 16:15, Yubin Ruan wrote:
I am reading some OS kernel codes, and I find that in the Makefile
used to build the kernel, there is a **-fno-pic** flag. I totally don't
understand what that mean. I try to find some description from the man
pages but can find no direct description about that flag (same for the
Really? A search for gcc fpic returns many relevant results.
Here, pic stands for "position-independent code".
The latest gcc documentation states:
( https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html )
Generate position-independent code (PIC) suitable for use in a shared
library, if supported for the target machine. Such code accesses all
constant addresses through a global offset table (GOT). The dynamic
loader resolves the GOT entries when the program starts (the dynamic
loader is not part of GCC; it is part of the operating system). If
the GOT size for the linked executable exceeds a machine-specific
maximum size, you get an error message from the linker indicating
that -fpic does not work; in that case, recompile with -fPIC instead.
(These maximums are 8k on the SPARC, 28k on AArch64 and 32k on the
m68k and RS/6000. The x86 has no such limit.)
Position-independent code requires special support, and therefore
works only on certain machines. For the x86, GCC supports PIC for
System V but not for the Sun 386i. Code generated for the IBM RS/6000
is always position-independent.
When this flag is set, the macros __pic__ and __PIC__ are defined to 1.
I really search carefully in the man pages on my Ubuntu/Linux-14.04-LTS.
I cannot find much description about that. Afterwards I find the online
manual that you describe.
Actually, I wonder why the man pages on my Ubuntu/Linux is so different
from that online.