php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #37062 can't compile on armv5l due to endianity issues
Submitted: 2006-04-12 23:52 UTC Modified: 2006-04-15 12:55 UTC
From: jan dot rous at matfyz dot cz Assigned:
Status: Closed Package: Compile Failure
PHP Version: 5.1.2 OS: Linux/Debian
Private report: No CVE-ID:
 [2006-04-12 23:52 UTC] jan dot rous at matfyz dot cz
Description:
------------
Compilation on little endian arm (armv5l, XScale) fails on Zend/zend_strtod.c due to IEEE_LITTLE_ENDIAN and IEE_BIG_ENDIAN both being defined:

defines come from Zend/zend_strtod.c:
    120 #ifdef WORDS_BIGENDIAN
    121 #define IEEE_BIG_ENDIAN
    122 #else
    123 #define IEEE_LITTLE_ENDIAN
    124 #endif
...
    126 #if defined(__arm__) && !defined(__VFP_FP__)
    127 /*
    128  * Although the CPU is little endian the FP has different
    129  * byte and word endianness. The byte order is still little endian
    130  * but the word order is big endian.
    131  */
    132 #define IEEE_BIG_ENDIAN
    133 #endif

and result with errors later on:
    238 #if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + \
    239     defined(IBM) != 1
    240 Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or
    241 IBM should be defined.
    242 #endif


1. such invalid state should be reported using #warning,#error directives. Writing it this way gives ugly errors:

/root/php5-5.1.2.debpkg/Zend/zend_strtod.c:240: error: syntax error before "one"
/root/php5-5.1.2.debpkg/Zend/zend_strtod.c:241: error: syntax error before "IBM"
/root/php5-5.1.2.debpkg/Zend/zend_strtod.c:247: error: syntax error before '}' token
/root/php5-5.1.2.debpkg/Zend/zend_strtod.c:247: warning: data definition has no type or storage class
/root/php5-5.1.2.debpkg/Zend/zend_strtod.c: In function `ulp':
/root/php5-5.1.2.debpkg/Zend/zend_strtod.c:935: error: syntax error before "x"
...

2. commenting out offending section with #warning compilation went without errors.
make test had some failures, but their relation to this is uncertain.

3. as i've looked through the code, I've noticed that although both IEEE_BIG_ENDIAN IEEE_LITTLE_ENDIAN are defined, 
#if defined(LITTLE_ENDIAN) ... #else ... #endif
are used for decisions. 

Under the light of these observations I find lines 126-133 useless on little endian arms without __VFP_FP__ as they only break compilation.




Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-04-13 08:54 UTC] tony2001@php.net
Please send a patch in unified diff format.
And if possible - provide an account on such a rare platform.
 [2006-04-15 12:55 UTC] tony2001@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Fri Apr 18 10:03:03 2014 UTC