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: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: jan dot rous at matfyz dot cz
New email:
PHP Version: OS:

 

 [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

Pull Requests

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-2024 The PHP Group
All rights reserved.
Last updated: Tue Dec 03 17:01:29 2024 UTC