]> git.pld-linux.org Git - packages/php.git/blob - x32.patch
patch for x32 with suhosin enabled as well
[packages/php.git] / x32.patch
1 From: Gustavo Lopes <glopes@nebm.ist.utl.pt>
2 Date: Tue, 30 Apr 2013 17:00:31 +0000 (+0200)
3 Subject: Fix bug #64729: compilation failure on x32
4 X-Git-Tag: php-5.4.16RC1~30^2~10
5 X-Git-Url: http://72.52.91.13:8000/?p=php-src.git;a=commitdiff_plain;h=514afd67b651bea834bdb84b7685b48e9e56ac21;hp=4a92ae34011ad2246500f27469f378b66d832976
6
7 Fix bug #64729: compilation failure on x32
8 ---
9
10 --- php-5.3.29/Zend/zend_alloc.c~       2015-02-28 01:32:39.000000000 +0200
11 +++ php-5.3.29/Zend/zend_alloc.c        2015-02-28 01:35:13.896183585 +0200
12 @@ -672,7 +672,7 @@ static inline unsigned int zend_mm_high_bit(size_t _size)
13  #elif defined(__GNUC__) && defined(__x86_64__)
14         unsigned long n;
15  
16 -        __asm__("bsrq %1,%0\n\t" : "=r" (n) : "rm"  (_size));
17 +        __asm__("bsr %1,%0\n\t" : "=r" (n) : "rm"  (_size));
18          return (unsigned int)n;
19  #elif defined(_MSC_VER) && defined(_M_IX86)
20         __asm {
21 @@ -698,12 +698,12 @@ static inline unsigned int zend_mm_low_bit(size_t _size)
22  #elif defined(__GNUC__) && defined(__x86_64__)
23          unsigned long n;
24  
25 -        __asm__("bsfq %1,%0\n\t" : "=r" (n) : "rm"  (_size));
26 +        __asm__("bsf %1,%0\n\t" : "=r" (n) : "rm"  (_size));
27          return (unsigned int)n;
28  #elif defined(_MSC_VER) && defined(_M_IX86)
29         __asm {
30                 bsf eax, _size
31 -   }
32 +       }
33  #else
34         static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0};
35         unsigned int n;
36 @@ -2406,12 +2406,22 @@
37          size_t res = nmemb;
38          unsigned long overflow = 0;
39  
40 -        __asm__ ("mulq %3\n\taddq %4,%0\n\tadcq $0,%1"
41 +#ifdef __ILP32__ /* x32 */
42 +# define LP_SUFF "l"
43 +#else /* amd64 */
44 +# define LP_SUFF "q"
45 +#endif
46 +
47 +        __asm__ ("mul" LP_SUFF  " %3\n\t"
48 +                 "add %4,%0\n\t"
49 +                 "adc $0,%1"
50               : "=&a"(res), "=&d" (overflow)
51               : "%0"(res),
52                 "rm"(size),
53                 "rm"(offset));
54  
55 +#undef LP_SUFF
56 +
57          if (UNEXPECTED(overflow)) {
58                  zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset);
59                  return 0;
60 --- a/Zend/zend_alloc_canary.c
61 +++ b/Zend/zend_alloc_canary.c
62 @@ -720,7 +720,7 @@ static inline unsigned int zend_mm_high_bit(size_t _size)
63  #elif defined(__GNUC__) && defined(__x86_64__)
64         unsigned long n;
65  
66 -        __asm__("bsrq %1,%0\n\t" : "=r" (n) : "rm"  (_size));
67 +        __asm__("bsr %1,%0\n\t" : "=r" (n) : "rm"  (_size));
68          return (unsigned int)n;
69  #elif defined(_MSC_VER) && defined(_M_IX86)
70         __asm {
71 @@ -746,12 +746,12 @@ static inline unsigned int zend_mm_low_bit(size_t _size)
72  #elif defined(__GNUC__) && defined(__x86_64__)
73          unsigned long n;
74  
75 -        __asm__("bsfq %1,%0\n\t" : "=r" (n) : "rm"  (_size));
76 +        __asm__("bsf %1,%0\n\t" : "=r" (n) : "rm"  (_size));
77          return (unsigned int)n;
78  #elif defined(_MSC_VER) && defined(_M_IX86)
79         __asm {
80                 bsf eax, _size
81 -   }
82 +       }
83  #else
84         static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0};
85         unsigned int n;
86 @@ -2481,12 +2481,22 @@ static inline size_t safe_address(size_t nmemb, size_t size, size_t offset)
87          size_t res = nmemb;
88          unsigned long overflow = 0;
89  
90 -        __asm__ ("mulq %3\n\taddq %4,%0\n\tadcq %1,%1"
91 +#ifdef __ILP32__ /* x32 */
92 +# define LP_SUFF "l"
93 +#else /* amd64 */
94 +# define LP_SUFF "q"
95 +#endif
96 +
97 +        __asm__ ("mul" LP_SUFF  " %3\n\t"
98 +                 "add %4,%0\n\t"
99 +                 "adc %1,%1"
100               : "=&a"(res), "=&d" (overflow)
101               : "%0"(res),
102                 "rm"(size),
103                 "rm"(offset));
104  
105 +#undef LP_SUFF
106 +
107          if (UNEXPECTED(overflow)) {
108                  zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset);
109                  return 0;
110 --- php-5.3.29/Zend/zend_multiply.h~    2014-08-13 22:22:50.000000000 +0300
111 +++ php-5.3.29/Zend/zend_multiply.h     2015-02-28 01:57:48.989051739 +0200
112 @@ -19,7 +19,7 @@
113  
114  /* $Id$ */
115  
116 -#if defined(__i386__) && defined(__GNUC__)
117 +#if (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)
118  
119  #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {      \
120         long __tmpvar;                                                                                                  \
This page took 0.110078 seconds and 3 git commands to generate.