git-svn: trunk@3586
Török Edvin authored on 2008/02/06 06:09:56... | ... |
@@ -1,3 +1,7 @@ |
1 |
+Tue Feb 5 22:51:39 EET 2008 (edwin) |
|
2 |
+------------------------------------ |
|
3 |
+ * configure.in, configure: enhance CLI_ISCONTAINED checks, reorder checks |
|
4 |
+ |
|
1 | 5 |
Tue Feb 5 20:06:28 EET 2008 (edwin) |
2 | 6 |
------------------------------------ |
3 | 7 |
* libclamav/lzma_iface.[ch], nsis/nulsft.c: |
... | ... |
@@ -10404,8 +10404,8 @@ fi |
10404 | 10404 |
|
10405 | 10405 |
|
10406 | 10406 |
|
10407 |
-{ echo "$as_me:$LINENO: checking for gcc bug PR28045" >&5 |
|
10408 |
-echo $ECHO_N "checking for gcc bug PR28045... $ECHO_C" >&6; } |
|
10407 |
+{ echo "$as_me:$LINENO: checking for gcc bug PR26763-2" >&5 |
|
10408 |
+echo $ECHO_N "checking for gcc bug PR26763-2... $ECHO_C" >&6; } |
|
10409 | 10409 |
if test "$cross_compiling" = yes; then |
10410 | 10410 |
{ echo "$as_me:$LINENO: result: cross-compiling, assumed ok" >&5 |
10411 | 10411 |
echo "${ECHO_T}cross-compiling, assumed ok" >&6; } |
... | ... |
@@ -10417,24 +10417,21 @@ cat confdefs.h >>conftest.$ac_ext |
10417 | 10417 |
cat >>conftest.$ac_ext <<_ACEOF |
10418 | 10418 |
/* end confdefs.h. */ |
10419 | 10419 |
|
10420 |
-/* (C) Andrew Pinski */ |
|
10420 |
+/* (C) Richard Guenther */ |
|
10421 | 10421 |
extern void abort(void); |
10422 |
-struct a |
|
10423 |
-{ |
|
10424 |
- unsigned int bits : 1; |
|
10425 |
- signed long val : ((sizeof(long) * 8) - 1); |
|
10426 |
-}; |
|
10427 |
-int Fnegate (struct a b) |
|
10422 |
+ |
|
10423 |
+int try (char *a, int d) |
|
10428 | 10424 |
{ |
10429 |
- if ((-((long)b.val)) <= ((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL)) |
|
10430 |
- && (-((long)b.val)) >= (-(((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL))) - 1)) |
|
10431 |
- return 0 ; |
|
10432 |
- abort (); |
|
10425 |
+ return a + d > a; |
|
10433 | 10426 |
} |
10434 |
-int main () |
|
10427 |
+ |
|
10428 |
+int main(void) |
|
10435 | 10429 |
{ |
10436 |
- struct a b = {1, 1}; |
|
10437 |
- Fnegate (b); |
|
10430 |
+ char bla[100]; |
|
10431 |
+ |
|
10432 |
+ if (try (bla + 50, -1)) |
|
10433 |
+ abort (); |
|
10434 |
+ |
|
10438 | 10435 |
return 0; |
10439 | 10436 |
} |
10440 | 10437 |
|
... | ... |
@@ -10467,8 +10464,8 @@ echo "$as_me: failed program was:" >&5 |
10467 | 10467 |
sed 's/^/| /' conftest.$ac_ext >&5 |
10468 | 10468 |
|
10469 | 10469 |
( exit $ac_status ) |
10470 |
-{ { echo "$as_me:$LINENO: error: your compiler has gcc PR28045 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28045" >&5 |
|
10471 |
-echo "$as_me: error: your compiler has gcc PR28045 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28045" >&2;} |
|
10470 |
+{ { echo "$as_me:$LINENO: error: your compiler has gcc PR26763-2 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26763" >&5 |
|
10471 |
+echo "$as_me: error: your compiler has gcc PR26763-2 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26763" >&2;} |
|
10472 | 10472 |
{ (exit 1); exit 1; }; } |
10473 | 10473 |
fi |
10474 | 10474 |
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext |
... | ... |
@@ -10476,8 +10473,8 @@ fi |
10476 | 10476 |
|
10477 | 10477 |
|
10478 | 10478 |
|
10479 |
-{ echo "$as_me:$LINENO: checking for gcc bug PR26763-2" >&5 |
|
10480 |
-echo $ECHO_N "checking for gcc bug PR26763-2... $ECHO_C" >&6; } |
|
10479 |
+{ echo "$as_me:$LINENO: checking for valid code generation of CLI_ISCONTAINED" >&5 |
|
10480 |
+echo $ECHO_N "checking for valid code generation of CLI_ISCONTAINED... $ECHO_C" >&6; } |
|
10481 | 10481 |
if test "$cross_compiling" = yes; then |
10482 | 10482 |
{ echo "$as_me:$LINENO: result: cross-compiling, assumed ok" >&5 |
10483 | 10483 |
echo "${ECHO_T}cross-compiling, assumed ok" >&6; } |
... | ... |
@@ -10489,22 +10486,61 @@ cat confdefs.h >>conftest.$ac_ext |
10489 | 10489 |
cat >>conftest.$ac_ext <<_ACEOF |
10490 | 10490 |
/* end confdefs.h. */ |
10491 | 10491 |
|
10492 |
-/* (C) Richard Guenther */ |
|
10492 |
+#include <stdio.h> |
|
10493 |
+static struct v{ |
|
10494 |
+ char* dst; |
|
10495 |
+ unsigned int dsize; |
|
10496 |
+ unsigned int dcur; |
|
10497 |
+ unsigned int backsize; |
|
10498 |
+ signed int unp_offset; |
|
10499 |
+} values[] = { |
|
10500 |
+ {(char*)0xf78ab008, 0x2e000, 1, 4, -1594}, |
|
10501 |
+ {(char*)0xb7af1008, 0x2e000, 1, 4, -1594} |
|
10502 |
+ |
|
10503 |
+}; |
|
10493 | 10504 |
extern void abort(void); |
10494 | 10505 |
|
10495 |
-int try (char *a, int d) |
|
10506 |
+#define CLI_ISCONTAINED(bb, bb_size, sb, sb_size) \ |
|
10507 |
+ (bb_size > 0 && sb_size > 0 && sb_size <= bb_size \ |
|
10508 |
+ && sb >= bb && sb + sb_size <= bb + bb_size && sb + sb_size > bb) |
|
10509 |
+ |
|
10510 |
+int crashtest() |
|
10496 | 10511 |
{ |
10497 |
- return a + d > a; |
|
10512 |
+ unsigned int backsize, dcur,i; |
|
10513 |
+ int dval=0x12000, unp_offset; |
|
10514 |
+ int* dsize = &dval; |
|
10515 |
+ char* dst = (char*)0x12000; |
|
10516 |
+ while(1) { |
|
10517 |
+ backsize=4; |
|
10518 |
+ dcur=0; |
|
10519 |
+ unp_offset=0x800002c7; |
|
10520 |
+ |
|
10521 |
+ if (!CLI_ISCONTAINED(dst, *dsize, dst+dcur+unp_offset, backsize) || !CLI_ISCONTAINED(dst, *dsize, dst+dcur, backsize) || unp_offset >=0) |
|
10522 |
+ return -1; |
|
10523 |
+ abort(); |
|
10524 |
+ } |
|
10525 |
+ return 0; |
|
10498 | 10526 |
} |
10499 | 10527 |
|
10500 |
-int main(void) |
|
10528 |
+int main() |
|
10501 | 10529 |
{ |
10502 |
- char bla[100]; |
|
10503 |
- |
|
10504 |
- if (try (bla + 50, -1)) |
|
10505 |
- abort (); |
|
10530 |
+ int i; |
|
10531 |
+ for(i=0;i<sizeof(values)/sizeof(values[0]);i++) { |
|
10532 |
+ struct v* v= &values[i]; |
|
10533 |
+ char* dst = v->dst; |
|
10534 |
+ unsigned int* dsize = &v->dsize; |
|
10535 |
+ unsigned int dcur = v->dcur; |
|
10536 |
+ unsigned int backsize = v->backsize-1; |
|
10537 |
+ signed int unp_offset = v->unp_offset; |
|
10506 | 10538 |
|
10507 |
- return 0; |
|
10539 |
+ if(!CLI_ISCONTAINED(dst, *dsize, dst+dcur+unp_offset, backsize) || |
|
10540 |
+ !CLI_ISCONTAINED(dst, *dsize,dst+dcur,backsize) || unp_offset >= 0) { |
|
10541 |
+ continue; |
|
10542 |
+ } |
|
10543 |
+ abort(); |
|
10544 |
+ } |
|
10545 |
+ crashtest(); |
|
10546 |
+ return 0; |
|
10508 | 10547 |
} |
10509 | 10548 |
|
10510 | 10549 |
_ACEOF |
... | ... |
@@ -10536,8 +10572,8 @@ echo "$as_me: failed program was:" >&5 |
10536 | 10536 |
sed 's/^/| /' conftest.$ac_ext >&5 |
10537 | 10537 |
|
10538 | 10538 |
( exit $ac_status ) |
10539 |
-{ { echo "$as_me:$LINENO: error: your compiler has gcc PR26763-2 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26763" >&5 |
|
10540 |
-echo "$as_me: error: your compiler has gcc PR26763-2 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26763" >&2;} |
|
10539 |
+{ { echo "$as_me:$LINENO: error: your compiler has a bug that causes clamav bug no. 670, use a different compiler, see http://bugs.clamav.net/bugzilla/show_bug.cgi?id=670" >&5 |
|
10540 |
+echo "$as_me: error: your compiler has a bug that causes clamav bug no. 670, use a different compiler, see http://bugs.clamav.net/bugzilla/show_bug.cgi?id=670" >&2;} |
|
10541 | 10541 |
{ (exit 1); exit 1; }; } |
10542 | 10542 |
fi |
10543 | 10543 |
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext |
... | ... |
@@ -10545,8 +10581,8 @@ fi |
10545 | 10545 |
|
10546 | 10546 |
|
10547 | 10547 |
|
10548 |
-{ echo "$as_me:$LINENO: checking for valid code generation of CLI_ISCONTAINED" >&5 |
|
10549 |
-echo $ECHO_N "checking for valid code generation of CLI_ISCONTAINED... $ECHO_C" >&6; } |
|
10548 |
+{ echo "$as_me:$LINENO: checking for gcc bug PR28045" >&5 |
|
10549 |
+echo $ECHO_N "checking for gcc bug PR28045... $ECHO_C" >&6; } |
|
10550 | 10550 |
if test "$cross_compiling" = yes; then |
10551 | 10551 |
{ echo "$as_me:$LINENO: result: cross-compiling, assumed ok" >&5 |
10552 | 10552 |
echo "${ECHO_T}cross-compiling, assumed ok" >&6; } |
... | ... |
@@ -10558,42 +10594,25 @@ cat confdefs.h >>conftest.$ac_ext |
10558 | 10558 |
cat >>conftest.$ac_ext <<_ACEOF |
10559 | 10559 |
/* end confdefs.h. */ |
10560 | 10560 |
|
10561 |
-#include <stdio.h> |
|
10562 |
-static struct v{ |
|
10563 |
- char* dst; |
|
10564 |
- unsigned long dsize; |
|
10565 |
- unsigned long dcur; |
|
10566 |
- unsigned long backsize; |
|
10567 |
- signed long unp_offset; |
|
10568 |
-} values[] = { |
|
10569 |
- {(char*)0xf78ab008, 0x2e000, 1, 4, 0xfffff9f3}, |
|
10570 |
- {(char*)0xb7af1008, 0x2e000, 1, 4, 0xfffff9f3} |
|
10571 |
- |
|
10572 |
-}; |
|
10561 |
+/* (C) Andrew Pinski */ |
|
10573 | 10562 |
extern void abort(void); |
10574 |
- |
|
10575 |
-#define CLI_ISCONTAINED(bb, bb_size, sb, sb_size) \ |
|
10576 |
- (bb_size > 0 && sb_size > 0 && sb_size <= bb_size \ |
|
10577 |
- && sb >= bb && sb + sb_size <= bb + bb_size && sb + sb_size > bb) |
|
10578 |
- |
|
10579 |
-int main() |
|
10563 |
+struct a |
|
10580 | 10564 |
{ |
10581 |
- int i; |
|
10582 |
- for(i=0;i<sizeof(values)/sizeof(values[0]);i++) { |
|
10583 |
- struct v* v= &values[i]; |
|
10584 |
- char* dst = v->dst; |
|
10585 |
- unsigned long* dsize = &v->dsize; |
|
10586 |
- unsigned long dcur = v->dcur; |
|
10587 |
- unsigned long backsize = v->backsize-1; |
|
10588 |
- signed long unp_offset = v->unp_offset; |
|
10589 |
- |
|
10590 |
- if(!CLI_ISCONTAINED(dst, *dsize, dst+dcur+unp_offset, backsize) || |
|
10591 |
- !CLI_ISCONTAINED(dst, *dsize,dst+dcur,backsize) || unp_offset >= 0) { |
|
10592 |
- continue; |
|
10593 |
- } |
|
10594 |
- abort(); |
|
10595 |
- } |
|
10596 |
- return 0; |
|
10565 |
+ unsigned int bits : 1; |
|
10566 |
+ signed long val : ((sizeof(long) * 8) - 1); |
|
10567 |
+}; |
|
10568 |
+int Fnegate (struct a b) |
|
10569 |
+{ |
|
10570 |
+ if ((-((long)b.val)) <= ((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL)) |
|
10571 |
+ && (-((long)b.val)) >= (-(((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL))) - 1)) |
|
10572 |
+ return 0 ; |
|
10573 |
+ abort (); |
|
10574 |
+} |
|
10575 |
+int main () |
|
10576 |
+{ |
|
10577 |
+ struct a b = {1, 1}; |
|
10578 |
+ Fnegate (b); |
|
10579 |
+ return 0; |
|
10597 | 10580 |
} |
10598 | 10581 |
|
10599 | 10582 |
_ACEOF |
... | ... |
@@ -10625,8 +10644,8 @@ echo "$as_me: failed program was:" >&5 |
10625 | 10625 |
sed 's/^/| /' conftest.$ac_ext >&5 |
10626 | 10626 |
|
10627 | 10627 |
( exit $ac_status ) |
10628 |
-{ { echo "$as_me:$LINENO: error: your compiler has a bug that causes clamav 670, use a different compiler, see http://bugs.clamav.net/bugzilla/show_bug.cgi?id=670" >&5 |
|
10629 |
-echo "$as_me: error: your compiler has a bug that causes clamav 670, use a different compiler, see http://bugs.clamav.net/bugzilla/show_bug.cgi?id=670" >&2;} |
|
10628 |
+{ { echo "$as_me:$LINENO: error: your compiler has gcc PR28045 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28045" >&5 |
|
10629 |
+echo "$as_me: error: your compiler has gcc PR28045 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28045" >&2;} |
|
10630 | 10630 |
{ (exit 1); exit 1; }; } |
10631 | 10631 |
fi |
10632 | 10632 |
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext |
... | ... |
@@ -10658,6 +10677,7 @@ fi |
10658 | 10658 |
|
10659 | 10659 |
|
10660 | 10660 |
|
10661 |
+ |
|
10661 | 10662 |
for ac_header in stdint.h unistd.h sys/int_types.h dlfcn.h inttypes.h sys/inttypes.h memory.h ndir.h stdlib.h strings.h string.h sys/mman.h sys/param.h sys/stat.h sys/types.h malloc.h poll.h limits.h sys/filio.h sys/uio.h termios.h stdbool.h pwd.h grp.h |
10662 | 10663 |
do |
10663 | 10664 |
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` |
... | ... |
@@ -116,34 +116,6 @@ int main() |
116 | 116 |
], [AC_MSG_RESULT([ok, bug not present])], |
117 | 117 |
[AC_MSG_ERROR([your compiler has gcc PR27603 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27603])], [AC_MSG_RESULT([cross-compiling, assumed ok])]) |
118 | 118 |
|
119 |
-dnl Check if compiler produces invalid code on gcc PR28045 (affects upx.c) |
|
120 |
-dnl testcase from gcc testsuite |
|
121 |
-AC_MSG_CHECKING([for gcc bug PR28045]) |
|
122 |
-AC_TRY_RUN( |
|
123 |
- [ |
|
124 |
-/* (C) Andrew Pinski */ |
|
125 |
-extern void abort(void); |
|
126 |
-struct a |
|
127 |
-{ |
|
128 |
- unsigned int bits : 1; |
|
129 |
- signed long val : ((sizeof(long) * 8) - 1); |
|
130 |
-}; |
|
131 |
-int Fnegate (struct a b) |
|
132 |
-{ |
|
133 |
- if ((-((long)b.val)) <= ((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL)) |
|
134 |
- && (-((long)b.val)) >= (-(((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL))) - 1)) |
|
135 |
- return 0 ; |
|
136 |
- abort (); |
|
137 |
-} |
|
138 |
-int main () |
|
139 |
-{ |
|
140 |
- struct a b = {1, 1}; |
|
141 |
- Fnegate (b); |
|
142 |
- return 0; |
|
143 |
-} |
|
144 |
-], [AC_MSG_RESULT([ok, bug not present])], |
|
145 |
-[AC_MSG_ERROR([your compiler has gcc PR28045 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28045])], [AC_MSG_RESULT([cross-compiling, assumed ok])]) |
|
146 |
- |
|
147 | 119 |
dnl Check if compiler produces invalid code on gcc PR26763-2 (affects upx.c) |
148 | 120 |
dnl testcase from gcc testsuite |
149 | 121 |
AC_MSG_CHECKING([for gcc bug PR26763-2]) |
... | ... |
@@ -172,17 +144,17 @@ int main(void) |
172 | 172 |
dnl Check if compiler produces invalid code on own testcase based on upx.c |
173 | 173 |
AC_MSG_CHECKING([for valid code generation of CLI_ISCONTAINED]) |
174 | 174 |
AC_TRY_RUN( |
175 |
- [ |
|
175 |
+ [ |
|
176 | 176 |
#include <stdio.h> |
177 | 177 |
static struct v{ |
178 | 178 |
char* dst; |
179 |
- unsigned long dsize; |
|
180 |
- unsigned long dcur; |
|
181 |
- unsigned long backsize; |
|
182 |
- signed long unp_offset; |
|
179 |
+ unsigned int dsize; |
|
180 |
+ unsigned int dcur; |
|
181 |
+ unsigned int backsize; |
|
182 |
+ signed int unp_offset; |
|
183 | 183 |
} values[] = { |
184 |
- {(char*)0xf78ab008, 0x2e000, 1, 4, 0xfffff9f3}, |
|
185 |
- {(char*)0xb7af1008, 0x2e000, 1, 4, 0xfffff9f3} |
|
184 |
+ {(char*)0xf78ab008, 0x2e000, 1, 4, -1594}, |
|
185 |
+ {(char*)0xb7af1008, 0x2e000, 1, 4, -1594} |
|
186 | 186 |
|
187 | 187 |
}; |
188 | 188 |
extern void abort(void); |
... | ... |
@@ -191,16 +163,34 @@ extern void abort(void); |
191 | 191 |
(bb_size > 0 && sb_size > 0 && sb_size <= bb_size \ |
192 | 192 |
&& sb >= bb && sb + sb_size <= bb + bb_size && sb + sb_size > bb) |
193 | 193 |
|
194 |
+int crashtest() |
|
195 |
+{ |
|
196 |
+ unsigned int backsize, dcur,i; |
|
197 |
+ int dval=0x12000, unp_offset; |
|
198 |
+ int* dsize = &dval; |
|
199 |
+ char* dst = (char*)0x12000; |
|
200 |
+ while(1) { |
|
201 |
+ backsize=4; |
|
202 |
+ dcur=0; |
|
203 |
+ unp_offset=0x800002c7; |
|
204 |
+ |
|
205 |
+ if (!CLI_ISCONTAINED(dst, *dsize, dst+dcur+unp_offset, backsize) || !CLI_ISCONTAINED(dst, *dsize, dst+dcur, backsize) || unp_offset >=0) |
|
206 |
+ return -1; |
|
207 |
+ abort(); |
|
208 |
+ } |
|
209 |
+ return 0; |
|
210 |
+} |
|
211 |
+ |
|
194 | 212 |
int main() |
195 | 213 |
{ |
196 | 214 |
int i; |
197 | 215 |
for(i=0;i<sizeof(values)/sizeof(values[0]);i++) { |
198 | 216 |
struct v* v= &values[i]; |
199 | 217 |
char* dst = v->dst; |
200 |
- unsigned long* dsize = &v->dsize; |
|
201 |
- unsigned long dcur = v->dcur; |
|
202 |
- unsigned long backsize = v->backsize-1; |
|
203 |
- signed long unp_offset = v->unp_offset; |
|
218 |
+ unsigned int* dsize = &v->dsize; |
|
219 |
+ unsigned int dcur = v->dcur; |
|
220 |
+ unsigned int backsize = v->backsize-1; |
|
221 |
+ signed int unp_offset = v->unp_offset; |
|
204 | 222 |
|
205 | 223 |
if(!CLI_ISCONTAINED(dst, *dsize, dst+dcur+unp_offset, backsize) || |
206 | 224 |
!CLI_ISCONTAINED(dst, *dsize,dst+dcur,backsize) || unp_offset >= 0) { |
... | ... |
@@ -208,10 +198,40 @@ int main() |
208 | 208 |
} |
209 | 209 |
abort(); |
210 | 210 |
} |
211 |
+ crashtest(); |
|
211 | 212 |
return 0; |
212 | 213 |
} |
213 | 214 |
], [AC_MSG_RESULT([ok, bug not present])], |
214 |
-[AC_MSG_ERROR([your compiler has a bug that causes clamav 670, use a different compiler, see http://bugs.clamav.net/bugzilla/show_bug.cgi?id=670])], [AC_MSG_RESULT([cross-compiling, assumed ok])]) |
|
215 |
+[AC_MSG_ERROR([your compiler has a bug that causes clamav bug no. 670, use a different compiler, see http://bugs.clamav.net/bugzilla/show_bug.cgi?id=670])], [AC_MSG_RESULT([cross-compiling, assumed ok])]) |
|
216 |
+ |
|
217 |
+dnl Check if compiler produces invalid code on gcc PR28045 (affects upx.c) |
|
218 |
+dnl testcase from gcc testsuite |
|
219 |
+AC_MSG_CHECKING([for gcc bug PR28045]) |
|
220 |
+AC_TRY_RUN( |
|
221 |
+ [ |
|
222 |
+/* (C) Andrew Pinski */ |
|
223 |
+extern void abort(void); |
|
224 |
+struct a |
|
225 |
+{ |
|
226 |
+ unsigned int bits : 1; |
|
227 |
+ signed long val : ((sizeof(long) * 8) - 1); |
|
228 |
+}; |
|
229 |
+int Fnegate (struct a b) |
|
230 |
+{ |
|
231 |
+ if ((-((long)b.val)) <= ((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL)) |
|
232 |
+ && (-((long)b.val)) >= (-(((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL))) - 1)) |
|
233 |
+ return 0 ; |
|
234 |
+ abort (); |
|
235 |
+} |
|
236 |
+int main () |
|
237 |
+{ |
|
238 |
+ struct a b = {1, 1}; |
|
239 |
+ Fnegate (b); |
|
240 |
+ return 0; |
|
241 |
+} |
|
242 |
+], [AC_MSG_RESULT([ok, bug not present])], |
|
243 |
+[AC_MSG_ERROR([your compiler has gcc PR28045 bug, use a different compiler, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28045])], [AC_MSG_RESULT([cross-compiling, assumed ok])]) |
|
244 |
+ |
|
215 | 245 |
|
216 | 246 |
AC_CHECK_HEADERS(stdint.h unistd.h sys/int_types.h dlfcn.h inttypes.h sys/inttypes.h memory.h ndir.h stdlib.h strings.h string.h sys/mman.h sys/param.h sys/stat.h sys/types.h malloc.h poll.h limits.h sys/filio.h sys/uio.h termios.h stdbool.h pwd.h grp.h) |
217 | 247 |
AC_CHECK_HEADER(syslog.h,AC_DEFINE(USE_SYSLOG,1,[use syslog]),) |