Met this issue when I was cross compiling the git version of xserver with GCC 3.4.6. E.g.1, prototype in include/os.h is: extern _X_EXPORT void OsBlockSignals (void); // there is an extra blank space Expected result in sdksyms.c is: (void *) &OsBlockSignals, Actual result in sdksyms.c is: (void *) &void, E.g.2, prototype in include/input.h is: extern _X_EXPORT int GetEventList(EventListPtr* list); // not blank but a '*' Expected result in sdksyms.c is: (void *) &GetEventList, Actual result in sdksyms.c: (void *) &list, This is because of the CPP I used, which ignores the `_X_EXPORT' directly. arm-linux-cpp (GCC) 3.4.6 Reading specs from /opt/crosstool/gcc-3.4.6-glibc-2.3.6/arm-linux/lib/gcc/arm-linux/3.4.6/specs Configured with: /home/bztu/crosstool-0.43/build/arm-linux/gcc-3.4.6-glibc-2.3.6/gcc-3.4.6/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/gcc-3.4.6-glibc-2.3.6/arm-linux --with-cpu=arm9tdmi --enable-cxx-flags=-mcpu=arm9tdmi --with-headers=/opt/crosstool/gcc-3.4.6-glibc-2.3.6/arm-linux/arm-linux/include --with-local-prefix=/opt/crosstool/gcc-3.4.6-glibc-2.3.6/arm-linux/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long After preprocessing, the prototypes are: extern void OsBlockSignals (void); // e.g.1 extern int GetEventList(EventListPtr* list); // e.g.2 And in the awk script in sdksyms.sh, n = 3, e.g.1 matches if ($n !~ /[^a-zA-Z0-9_]/) and e.g.2 matches $n ~ /\*$/ therefore we have n++ in each case, then get unexpected result as above.
*** Bug 23779 has been marked as a duplicate of this bug. ***
Confirming that this bug still exists in the current git. It's sdksyms.sh that's at fault, as I suspected. This can be triggered by a simple jhbuild by editing Xfuncproto.h like so... ... #if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__CYGWIN__) # define _X_EXPORT //__attribute__((visibility("default"))) # define _X_HIDDEN //__attribute__((visibility("hidden"))) # define _X_INTERNAL //__attribute__((visibility("internal"))) ... After doing so, trying to just 'Make' will result in the sorts of definitions that the reporter complained about. The problem seems to be around ... # type specifier may not be set, as in # extern _X_EXPORT unsigned name(...) if ($n !~ /[^a-zA-Z0-9_]/) { n++; ... where something like extern _X_EXPORT void OsBlockSignals (void); will have n at OsBlockSignals before the above snippet. After the n++, n becomes (void), resulting in &void being shown.
Created attachment 39892 [details] [review] This patch fixes it for me. I ran into this problem cross-compiling xorg-server-1.7.1 with gcc-3.4.5. This patch fixes it for me.
I too encountered this. Lost an hour and a multi-day delay. David's patch works for me.
Fixes my Solaris builds with gcc 3.4.3 too. (I normally build with Sun Studio CC, which worked with the old script, but occassionally try gcc for the different set of warnings reported.) Submitted the patch to xorg-devel to get it into the review queue so it gets applied instead of just leaving it to rot in bugzilla. http://lists.x.org/archives/xorg-devel/2010-December/017088.html
Pulled into git master now for 1.10: http://cgit.freedesktop.org/xorg/xserver/commit/?id=058b889fde47b4c32534f11ed651bf1749d1dbb2
sdksyms.sh (orig) will not get all extern functions and also has an XV bug. this new one i believe gets all. see patch: https://bugs.freedesktop.org/show_bug.cgi?id=86833 the old one tries to parse cpp output without bison, even though that's not as hard as parsing C, it is far trickier than the author thinks. still not perfect is a rule the new one uses to decide what symb is good. it's better i'd hate to say it's correct - i'm unsure. yet it leaves the casual make user in a much better position.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.