version 1.1.1.2, 2012/05/29 12:34:35
|
version 1.1.1.4, 2013/10/14 08:02:46
|
Line 2
|
Line 2
|
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| Zend Engine | |
| Zend Engine | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| Copyright (c) 1998-2012 Zend Technologies Ltd. (http://www.zend.com) | | | Copyright (c) 1998-2013 Zend Technologies Ltd. (http://www.zend.com) | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| This source file is subject to version 2.00 of the Zend license, | |
| This source file is subject to version 2.00 of the Zend license, | |
| that is bundled with this package in the file LICENSE, and is | |
| that is bundled with this package in the file LICENSE, and is | |
Line 664 static void *_zend_mm_realloc_int(zend_mm_heap *heap,
|
Line 664 static void *_zend_mm_realloc_int(zend_mm_heap *heap,
|
|
|
static inline unsigned int zend_mm_high_bit(size_t _size) |
static inline unsigned int zend_mm_high_bit(size_t _size) |
{ |
{ |
#if defined(__GNUC__) && defined(i386) | #if defined(__GNUC__) && (defined(__native_client__) || defined(i386)) |
unsigned int n; |
unsigned int n; |
|
|
__asm__("bsrl %1,%0\n\t" : "=r" (n) : "rm" (_size)); |
__asm__("bsrl %1,%0\n\t" : "=r" (n) : "rm" (_size)); |
Line 672 static inline unsigned int zend_mm_high_bit(size_t _si
|
Line 672 static inline unsigned int zend_mm_high_bit(size_t _si
|
#elif defined(__GNUC__) && defined(__x86_64__) |
#elif defined(__GNUC__) && defined(__x86_64__) |
unsigned long n; |
unsigned long n; |
|
|
__asm__("bsrq %1,%0\n\t" : "=r" (n) : "rm" (_size)); | __asm__("bsr %1,%0\n\t" : "=r" (n) : "rm" (_size)); |
return (unsigned int)n; |
return (unsigned int)n; |
#elif defined(_MSC_VER) && defined(_M_IX86) |
#elif defined(_MSC_VER) && defined(_M_IX86) |
__asm { |
__asm { |
Line 690 static inline unsigned int zend_mm_high_bit(size_t _si
|
Line 690 static inline unsigned int zend_mm_high_bit(size_t _si
|
|
|
static inline unsigned int zend_mm_low_bit(size_t _size) |
static inline unsigned int zend_mm_low_bit(size_t _size) |
{ |
{ |
#if defined(__GNUC__) && defined(i386) | #if defined(__GNUC__) && (defined(__native_client__) || defined(i386)) |
unsigned int n; |
unsigned int n; |
|
|
__asm__("bsfl %1,%0\n\t" : "=r" (n) : "rm" (_size)); |
__asm__("bsfl %1,%0\n\t" : "=r" (n) : "rm" (_size)); |
Line 698 static inline unsigned int zend_mm_low_bit(size_t _siz
|
Line 698 static inline unsigned int zend_mm_low_bit(size_t _siz
|
#elif defined(__GNUC__) && defined(__x86_64__) |
#elif defined(__GNUC__) && defined(__x86_64__) |
unsigned long n; |
unsigned long n; |
|
|
__asm__("bsfq %1,%0\n\t" : "=r" (n) : "rm" (_size)); | __asm__("bsf %1,%0\n\t" : "=r" (n) : "rm" (_size)); |
return (unsigned int)n; |
return (unsigned int)n; |
#elif defined(_MSC_VER) && defined(_M_IX86) |
#elif defined(_MSC_VER) && defined(_M_IX86) |
__asm { |
__asm { |
bsf eax, _size |
bsf eax, _size |
} | } |
#else |
#else |
static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}; |
static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}; |
unsigned int n; |
unsigned int n; |
Line 2454 ZEND_API size_t _zend_mem_block_size(void *ptr TSRMLS_
|
Line 2454 ZEND_API size_t _zend_mem_block_size(void *ptr TSRMLS_
|
return _zend_mm_block_size(AG(mm_heap), ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); |
return _zend_mm_block_size(AG(mm_heap), ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); |
} |
} |
|
|
#if defined(__GNUC__) && defined(i386) | #if defined(__GNUC__) && (defined(__native_client__) || defined(i386)) |
|
|
static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) |
static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) |
{ |
{ |
size_t res = nmemb; |
size_t res = nmemb; |
unsigned long overflow = 0; |
unsigned long overflow = 0; |
|
|
__asm__ ("mull %3\n\taddl %4,%0\n\tadcl %1,%1" | __asm__ ("mull %3\n\taddl %4,%0\n\tadcl $0,%1" |
: "=&a"(res), "=&d" (overflow) |
: "=&a"(res), "=&d" (overflow) |
: "%0"(res), |
: "%0"(res), |
"rm"(size), |
"rm"(size), |
Line 2481 static inline size_t safe_address(size_t nmemb, size_t
|
Line 2481 static inline size_t safe_address(size_t nmemb, size_t
|
size_t res = nmemb; |
size_t res = nmemb; |
unsigned long overflow = 0; |
unsigned long overflow = 0; |
|
|
__asm__ ("mulq %3\n\taddq %4,%0\n\tadcq %1,%1" | #ifdef __ILP32__ /* x32 */ |
| # define LP_SUFF "l" |
| #else /* amd64 */ |
| # define LP_SUFF "q" |
| #endif |
| |
| __asm__ ("mul" LP_SUFF " %3\n\t" |
| "add %4,%0\n\t" |
| "adc $0,%1" |
: "=&a"(res), "=&d" (overflow) |
: "=&a"(res), "=&d" (overflow) |
: "%0"(res), |
: "%0"(res), |
"rm"(size), |
"rm"(size), |
"rm"(offset)); |
"rm"(offset)); |
|
|
|
#undef LP_SUFF |
|
|
if (UNEXPECTED(overflow)) { |
if (UNEXPECTED(overflow)) { |
zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset); |
zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset); |