21 Mar 2003 walken   » (Master)

mathieu: I have read that great article How to write shared libraries from Ulrich Drepper. I was quite enthusiastic - seems like there's a thousand things everyone writing a shared library should know, but I had never seen these written up anywhere. Great stuff.

In particular, I was very interested by Ulrich's comments about -fPIC code. I've heard a thousand persons before him tell me that the -fPIC overhead is negligible, blah blah blah. Well it's not in my experience - in libmpeg2 the -fPIC overhead is about 8% (on an athlon CPU). To me, negligible is defined as being below 1%. But, the very interesting thing I learnt from Ulrich's paper is that if you use gcc's visibility attribute so your library's internal symbols do not get exported, gcc (>= 3.1) can use that knowledge to avoid generating PIC code. Supposedly this should get rid of most of the -fPIC overheads.

So I was very excited to try it. But all I got out of it was a gcc warning: `visibility' attribute directive ignored. Even Ulrich's own C example gives me the same error. And it still generates PIC code for places where it should not have to.

Now I feel cheated... The whole PIC infrastructure is a huge mess. libtool also has a -prefer-non-pic option for those who want to avoid the PIC overhead on architectures that can tolerate this... but the damn option is broken, it still tries to generate non-pic code on some of the architectures that dont tolerate it... It's not even difficult to test for, it's a 20 line autoconf macro, but why use libtool and why does it have a -prefer-non-pic option if you're still required to worry about architecture specificities...

Latest blog entries     Older blog entries

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!