> 1) Whether or not the function references any global data because the> variables might be accessed relative to the program counter.

I would expect only constant data to be referenced relative to the
program counter. There should be faster ways to reference other data,
at least on most machines around.

> 2) Whether or not the function calls any other functions because again> the branches could be relative vs absolute.

As long as you move them together, it should be fine. I don't know if
any do that, though. If they do, the relocation information should be
supplied.

(snip)

> [The whole point of PIC is so you can move code from one place to> another without having to modify it. If you want to be able to> relocate the code, use PIC, if you don't, don't. -John]

I remember from the SunOS 4.x days, the DLL for the C library,
libc.so.? as supplied by sun didn't include routines to query a
nameserver. DLL's required PIC, but the static C library, libc.a,
didn't use PIC because it was slower. Sun then supplied a separate C
library that was PIC. One extracts all the entries as .o files,
replaces the desired files, and then creates a new libc.so from the
contents.

On most machines PIC is bigger and slower, and so is not used by
default. For any machine where it wasn't slower, it would probably be
used, to save the relocation time on program load.