[GCC-XML] problem with gcc 3.4.6

Stefan Roiser stefan.roiser at cern.ch
Tue Aug 12 11:40:38 EDT 2008


Hi,

we found a problem with parsing header files on a Redhat based Linux  
(Scientific Linux 4). The gccxml version is a checkout from yesterday.



[lxbuild115] /build/roiser > uname -a
Linux lxbuild115.cern.ch 2.6.25.1-pfm080429 #1 SMP Tue May 6 17:53:24  
CEST 2008 x86_64 x86_64 x86_64 GNU/Linux
[lxbuild115] /build/roiser > which gccxml
/build/roiser/gccxml/0.9.0_20080811/slc4_amd64_gcc34/bin/gccxml
[lxbuild115] /build/roiser > gccxml --version
GCC-XML version 0.9.0_20080811
[lxbuild115] /build/roiser > cat test.h
#include <iosfwd>
[lxbuild115] /build/roiser > gccxml test.h -fxml=test.xml
In file included from /usr/lib/gcc/x86_64-redhat-linux/ 
3.4.6/../../../../include/c++/3.4.6/x86_64-redhat-linux/bits/gthr.h:104,
                  from /usr/lib/gcc/x86_64-redhat-linux/ 
3.4.6/../../../../include/c++/3.4.6/x86_64-redhat-linux/bits/c++io.h:37,
                  from /usr/lib/gcc/x86_64-redhat-linux/ 
3.4.6/../../../../include/c++/3.4.6/iosfwd:47,
                  from test.h:1:
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:68: error: weakref 'int  
__gthrw_pthread_once(pthread_once_t*, void (*)())' must have static  
linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:69: error: weakref 'int  
__gthrw_pthread_key_create(pthread_key_t*, void (*)(void*))' must have  
static linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:70: error: weakref 'int  
__gthrw_pthread_key_delete(pthread_key_t)' must have static linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:71: error: weakref 'void*  
__gthrw_pthread_getspecific(pthread_key_t)' must have static linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:72: error: weakref 'int  
__gthrw_pthread_setspecific(pthread_key_t, const void*)' must have  
static linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:73: error: weakref 'int  
__gthrw_pthread_create(pthread_t*, const pthread_attr_t*, void* (*) 
(void*), void*)' must have static linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:75: error: weakref 'int  
__gthrw_pthread_mutex_lock(pthread_mutex_t*)' must have static linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:76: error: weakref 'int  
__gthrw_pthread_mutex_trylock(pthread_mutex_t*)' must have static  
linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:77: error: weakref 'int  
__gthrw_pthread_mutex_unlock(pthread_mutex_t*)' must have static linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:78: error: weakref 'int  
__gthrw_pthread_mutexattr_init(pthread_mutexattr_t*)' must have static  
linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:79: error: weakref 'int  
__gthrw_pthread_mutexattr_settype(pthread_mutexattr_t*, int)' must  
have static linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:80: error: weakref 'int  
__gthrw_pthread_mutexattr_destroy(pthread_mutexattr_t*)' must have  
static linkage
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/ 
x86_64-redhat-linux/bits/gthr-default.h:82: error: weakref 'int  
__gthrw_pthread_mutex_init(pthread_mutex_t*, const  
pthread_mutexattr_t*)' must have static linkage



Looking into gthr-default.h



      61 #if __GXX_WEAK__ && _GLIBCXX_GTHREAD_USE_WEAK && defined  
__GNUC_RH_RELEASE__ \
      62     && ((__GNUC__ == 3 && __GNUC_MINOR__ == 4 &&  
(__GNUC_PATCHLEVEL__ > 4 || (__GNUC_PATCHLEVEL__ == 4 &&  
__GNUC_RH_RELEASE__ > 2))) \
      63         || (__GNUC__ == 4 && __GNUC_MINOR__ == 0 &&  
(__GNUC_PATCHLEVEL__ > 2 || (__GNUC_PATCHLEVEL__ == 2 &&  
__GNUC_RH_RELEASE__ > 6)))) \
      64     && ! defined __attribute__
      65 # define __gthrw(name) \
      66   extern __typeof(name) __gthrw_ ## name __attribute__  
((__weakref__(#name)))
      67
      68 __gthrw(pthread_once);
      69 __gthrw(pthread_key_create);
      70 __gthrw(pthread_key_delete);
      71 __gthrw(pthread_getspecific);
      72 __gthrw(pthread_setspecific);
      73 __gthrw(pthread_create);
      74
      75 __gthrw(pthread_mutex_lock);
      76 __gthrw(pthread_mutex_trylock);
      77 __gthrw(pthread_mutex_unlock);
      78 __gthrw(pthread_mutexattr_init);
      79 __gthrw(pthread_mutexattr_settype);
      80 __gthrw(pthread_mutexattr_destroy);
      81
      82 __gthrw(pthread_mutex_init);



it seems that the macro __GXX_WEAK__ is the culprit because the system  
compiler does not define it while the gccxml compiled version does



[lxbuild115] /build/roiser > echo | /usr/bin/c++ -E -dD - | grep  
GXX_WEAK
[lxbuild115] /build/roiser > echo | /build/roiser/gccxml/ 
0.9.0_20080811/slc4_amd64_gcc34/bin/gccxml_cc1plus -E -dD - | grep  
GXX_WEAK
#define __GXX_WEAK__ 1


and invoking the following line works fine


[lxbuild115] /build/roiser > gccxml --gccxml-cxxflags "-U__GXX_WEAK__"  
test.h -fxml=test.xml
[lxbuild115] /build/roiser >



Would it be possible to build gccxml(_cc1plus) without the  
__GXX_WEAK__ symbol? Or would there be another solution to this?

Thx for any help

	Stefan


---
Stefan Roiser, CERN, PH Department, CH-1211 Geneva 23
tel:+41 22 76 74838, cell: +41 76 48 75334, fax:+41 22 76 69119





More information about the gccxml mailing list