summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2014-12-16 08:42:18 +0100
committerAnatol Belski <ab@php.net>2014-12-16 08:42:18 +0100
commit50a93357fb748ee1976fb7993abccae9c8105157 (patch)
tree32a08ccf075812816de8e2beaddd31c9914ea3e5
parentc0cb3a1dc400e6d5120b4b5f941969b7865a5160 (diff)
parent62691b2d6a70b62b80f9b586c3f48c776b041c7f (diff)
downloadphp-git-50a93357fb748ee1976fb7993abccae9c8105157.tar.gz
Merge remote-tracking branch 'origin/master' into native-tls
* origin/master: fix perms fix perms PowerPC64 support in safe_address function
-rw-r--r--Zend/zend_multiply.h24
-rw-r--r--[-rwxr-xr-x]ext/openssl/openssl.c0
-rw-r--r--[-rwxr-xr-x]ext/phar/phar_object.c0
3 files changed, 24 insertions, 0 deletions
diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h
index ab5fd6279d..b0000449af 100644
--- a/Zend/zend_multiply.h
+++ b/Zend/zend_multiply.h
@@ -224,6 +224,30 @@ static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, si
return res;
}
+#elif defined(__GNUC__) && defined(__powerpc64__)
+
+static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow)
+{
+ size_t res;
+ unsigned long m_overflow;
+
+ __asm__ ("mulld %0,%2,%3\n\t"
+ "mulhdu %1,%2,%3\n\t"
+ "addc %0,%0,%4\n\t"
+ "addze %1,%1\n"
+ : "=&r"(res), "=&r"(m_overflow)
+ : "r"(nmemb),
+ "r"(size),
+ "r"(offset));
+
+ if (UNEXPECTED(m_overflow)) {
+ *overflow = 1;
+ return 0;
+ }
+ *overflow = 0;
+ return res;
+}
+
#elif SIZEOF_SIZE_T == 4
static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow)
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index a69ce8190b..a69ce8190b 100755..100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index 70577ff496..70577ff496 100755..100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c