how to add -fPIC support ?

William Tambe tambewilliam@gmail.com
Mon Feb 24 06:23:00 GMT 2020


Are there any machine-description constructs specific to -fPIC ?
if yes, where can I find their documentation ?

On Sun, Feb 23, 2020 at 6:58 AM Segher Boessenkool
<segher@kernel.crashing.org> wrote:
>
> On Sun, Feb 23, 2020 at 10:05:16AM +0100, Florian Weimer wrote:
> > * William Tambe:
> >
> > > What needs to be done to support -fPIC ?
> > >
> > > Is there a commit that describe what needs to be done to support
> > > -fPIC ?
> >
> > This is entirely target-specific.  Some targets are always PIC.
>
> Not really, no.
>
> '-fpic'
>      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).
>
> '-fPIC'
>      If supported for the target machine, emit position-independent
>      code, suitable for dynamic linking and avoiding any limit on the
>      size of the global offset table.
>
> Some processor architectures do not (normally) use absolute addresses,
> or only via a GP or similar.  Sure.  But a) you *can* create code that
> depends on the address it runs at, even then; b) you can generate code
> that isn't in "normally"; and c) -fpic has the additional constraint
> that it isn't just position-independent code, but also suitable for
> use in a shared library, and -fPIC code also typically has to assume
> that any "external" object or code can be anywhere in the address
> space.
>
> And yes, you will encounter at least one of a), b) and c) on most
> ports.
>
> Both -fpic and -fPIC enable specific programming models for shared
> libraries, following some specific ABI.  Often, non-fpic code is quite
> a bit more efficient than fpic code, even if both are position-
> independent.
>
> As a very simple example, many targets have a "small data" section,
> pointed to by some special base pointer.  Often fpic code cannot use
> that section (it would have to set up the base pointer for itself,
> giving overhead on all calls, many ABIs choose not to).
>
>
> Segher



More information about the Gcc-help mailing list