Commit: 865cc3a8005ed82282f6c366c5d681160e52e221 Author: Gustavo Lopes <glo...@nebm.ist.utl.pt> Tue, 30 Apr 2013 19:36:08 +0200 Parents: 062519ed4186d5f19a131a3a4c0e430a83dc0766 514afd67b651bea834bdb84b7685b48e9e56ac21 Branches: PHP-5.5 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=865cc3a8005ed82282f6c366c5d681160e52e221 Log: Merge branch 'PHP-5.4' into PHP-5.5 * PHP-5.4: Fix bug #64729: compilation failure on x32 Conflicts: Zend/zend_alloc.c Bugs: https://bugs.php.net/64729 Changed paths: MM Zend/zend_alloc.c MM Zend/zend_multiply.h Diff: diff --cc Zend/zend_alloc.c index 1c76bd4,0bbd59a..c6aee57 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@@ -672,7 -672,7 +672,7 @@@ static inline unsigned int zend_mm_high #elif defined(__GNUC__) && defined(__x86_64__) unsigned long n; - __asm__("bsrq %1,%0\n\t" : "=r" (n) : "rm" (_size) : "cc"); - __asm__("bsr %1,%0\n\t" : "=r" (n) : "rm" (_size)); ++ __asm__("bsr %1,%0\n\t" : "=r" (n) : "rm" (_size) : "cc"); return (unsigned int)n; #elif defined(_MSC_VER) && defined(_M_IX86) __asm { @@@ -700,14 -698,12 +700,14 @@@ static inline unsigned int zend_mm_low_ #elif defined(__GNUC__) && defined(__x86_64__) unsigned long n; - __asm__("bsfq %1,%0\n\t" : "=r" (n) : "rm" (_size) : "cc"); - __asm__("bsf %1,%0\n\t" : "=r" (n) : "rm" (_size)); ++ __asm__("bsf %1,%0\n\t" : "=r" (n) : "rm" (_size) : "cc"); return (unsigned int)n; #elif defined(_MSC_VER) && defined(_M_IX86) __asm { bsf eax, _size -- } ++ } +#elif defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__)) + return __builtin_ctzl(_size); #else static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}; unsigned int n; @@@ -2491,46 -2495,7 +2499,47 @@@ static inline size_t safe_address(size_ "rm"(size), "rm"(offset)); + #undef LP_SUFF + if (UNEXPECTED(overflow)) { + zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset); + return 0; + } + return res; +} + +#elif defined(__GNUC__) && defined(__arm__) + +static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) +{ + size_t res; + unsigned long overflow; + + __asm__ ("umlal %0,%1,%2,%3" + : "=r"(res), "=r"(overflow) + : "r"(nmemb), + "r"(size), + "0"(offset), + "1"(0)); + + if (UNEXPECTED(overflow)) { + zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset); + return 0; + } + return res; +} + +#elif defined(__GNUC__) && defined(__aarch64__) + +static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) +{ + size_t res; + unsigned long overflow; + + __asm__ ("mul %0,%2,%3\n\tumulh %1,%2,%3\n\tadds %0,%0,%4\n\tadc %1,%1,%1" + : "=&r"(res), "=&r"(overflow) + : "r"(nmemb), + "r"(size), + "r"(offset)); if (UNEXPECTED(overflow)) { zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php