ID: 31358
Updated by: [EMAIL PROTECTED]
Reported By: hawk at pld-linux dot org
Status: Open
Bug Type: Compile Failure
Operating System: PLD Linux 1.0 running on PowerPC
PHP Version: 4.3.10
Assigned To: stas
New Comment:
va_copy is a C99 invention, so that's why it's not in gcc-2.95.2
(though some older gcc's had a __va_copy). But even in C99 va_copy is
explicitly allowed to be a function not a macro, I can't see any
guarantee that it is defined for the preprocessor as this code assumes.
(C99/7.15.1)
Previous Comments:
------------------------------------------------------------------------
[2005-01-04 14:35:44] hawk at pld-linux dot org
According to 'gcc -v':
Reading specs from /usr/lib/gcc-lib/ppc-pld-linux/2.95.4/specs
gcc version 2.95.4 20010319 (prerelease)
And yes, there is stdarg.h in
/usr/lib/gcc-lib/ppc-pld-linux/2.95.4/include/stdarg.h
------------------------------------------------------------------------
[2005-01-02 08:58:47] [EMAIL PROTECTED]
Which GCC do you have? It is rather strange va_copy is not defined on
Linux. Do you have stdarg.h anywhere?
------------------------------------------------------------------------
[2004-12-31 19:46:59] hawk at pld-linux dot org
The bug affects only PPC systems with older GCC which don't support
va_copy (sorry, didn't noticed this earlier), the workaround is to
change line 776 of zend.c:
usr_copy = args;
into
memcpy(usr_copy, args, sizeof(va_list));
for these architectures. It seems to work perfectly
------------------------------------------------------------------------
[2004-12-30 22:03:06] hawk at pld-linux dot org
Description:
------------
The compilation of PHP 4.3.10 fails on Linux running on PowerPC with
following error:
/home/users/builder/rpm/BUILD/php-4.3.10/Zend/zend.c -o Zend/zend.lo
/home/users/builder/rpm/BUILD/php-4.3.10/Zend/zend.c: In function
`zend_error':
/home/users/builder/rpm/BUILD/php-4.3.10/Zend/zend.c:776: incompatible
types in assignment
make: *** [Zend/zend.lo] Error 1
Following code change is reponsible for this bug:
cvs diff -u -r 1.162.2.21 -r 1.162.2.22 Zend/zend.c
Line 776 is:
usr_copy = args;
where both usr_copy and args are of type va_list. Such code will not
compile on Linux on PowerPC (and probably on some other architectures
too) because va_list is struct here.
I know only two ways for fixing it. One is to use va_copy, but I'm not
sure if its safe to change following portion of code:
#if defined(va_copy)
va_copy(usr_copy, args);
#else
usr_copy = args;
#endif
just into:
va_copy(usr_copy, args);
Probably its not safe. The second way is to use
usr_copy[0] = args[0];
for the affected architectures, but its not safe either AFAIR.
I also suppose that php 5.0.3 is affected too, because it contains same
code
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=31358&edit=1