extension init cleanup

Tomas Carnecky tom at dbservice.com
Thu Feb 5 14:27:01 PST 2009

On 02/05/2009 10:53 PM, Paulo César Pereira de Andrade wrote:
> Tomas Carnecky wrote:
>> I tried to clean up the header files that contain declarations
>> for the various extension. Basically, in the end the header
>> include/extinit.h contains the declarations of the extension
>> init functions and declarations of the noXxxExtension booleans,
>> sorted and put under their respective ifdef guards.
>> It's that many patches because I tried to keep each commit
>> as simple as possible, to make it easier to review. It should
>> also be git-bisect friendly, meaning that after each single
>> commit the tree builds.
>> If you would rather see the patches, I can send them to the
>> list as well. But I think I spammed the list enough yesterday
>> so today it's just this cover mail.
>    Hi,
>    I Just looked up superficially, as I curious about the
> "Clean up declarations to make sdksyms.sh happy" commit.

Actually, neither before nor after this commit does sdksyms.sh complain. 
That's because I put a whitespace before every extern declaration. I 
know that's cheatning, but I did this so I could work on the code 
without build failures - with the intention to fix it at the end, when I 
see the big picture (which functions are used from where etc).

>    I did not track in which commit the prototypes were
> added to extinit.h, but if a symbol there is to be used
> by other shared objects, you should use
> extern _X_EXPORT type name();
> and not just
> extern type name();
>    There is already enough mess in the source tree, so, if
> you added _X_EXPORT to the function definition, I suggest
> reconsider :-), as it makes it harder to have automated
> tools handling this stuff... And the only usages in sources,
> so far are basically GL and fooModuleData.
>    The problem of adding it to sources is also mainly due
> to way too much functions declared by macros; Things
> things like xf86rename.h can easily get out of control.

I kept the noXxxExtension declarations as-is (they were _X_EXPORT in 
includes/global.h, I just moved them to extinit.h). I didn't add any 
attribute to the functions though. Some are used only from within 
mi/miinitext.c (GE, SHAPE, bigreq, xkb, sync, xfixes and a few others). 
Other extensions are used from other modules (screensaver, dga, dri, 
glx, record, xv, ...).

When I was chatting with Adam about extern and the various attributes, 
he said that he would like to make 'hidden' the default, and that you'd 
have to explicitly mark symbols for export. What's preventing us from 
using -fvisibility=hidden ?

I'm willing to add the proper attributes the the functions. However 
there still is one issue: I need to prevent sdksyms.sh from picking up 
certain declarations, like this one:
  extern void DPMSExtensionInit(void);
This function is defined in dbe/dbe.c, but is not being linked into 
libxorg.a but into a shared library that is later loaded by Xorg. So the 
final link fails because the symbol is missing. I worked around that by 
adding a whitespace before the declaration. Shouldn't sdksyms.sh only 
pick up declarations with _X_EXPORT?


More information about the xorg mailing list