summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2022-07-27 08:53:35 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2022-07-27 08:56:12 -0700
commit234fc6c86613ed3f366dd1d88996e4d5d85ee222 (patch)
tree7f3bd2a6bc2d34d6be83a4c771a2461a10b8c93a
parente50a50c4dc5cf58b772413c719c5a0eb673dc251 (diff)
downloadautoconf-234fc6c86613ed3f366dd1d88996e4d5d85ee222.tar.gz
Port AC_C_BIGENDIAN to cross gcc -std=c11 -flto
* lib/autoconf/c.m4 (AC_C_BIGENDIAN): Improve the inherently-unportable grep trick well enough to survive gcc -std=c11 -flto when cross-compiling (sr#110687).
-rw-r--r--lib/autoconf/c.m421
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4
index b0c2bf8..abbb83f 100644
--- a/lib/autoconf/c.m4
+++ b/lib/autoconf/c.m4
@@ -1838,8 +1838,8 @@ AC_DEFUN([AC_C_BIGENDIAN],
[ac_cv_c_bigendian=no],
[ac_cv_c_bigendian=yes],
[# Try to guess by grepping values from an object file.
- AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM(
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
[[unsigned short int ascii_mm[] =
{ 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
unsigned short int ascii_ii[] =
@@ -1854,13 +1854,20 @@ AC_DEFUN([AC_C_BIGENDIAN],
int use_ebcdic (int i) {
return ebcdic_mm[i] + ebcdic_ii[i];
}
- extern int foo;
- ]],
- [[return use_ascii (foo) == use_ebcdic (foo);]])],
- [if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+ int
+ main (int argc, char **argv)
+ {
+ /* Intimidate the compiler so that it does not
+ optimize the arrays away. */
+ char *p = argv[0];
+ ascii_mm[1] = *p++; ebcdic_mm[1] = *p++;
+ ascii_ii[1] = *p++; ebcdic_ii[1] = *p++;
+ return use_ascii (argc) == use_ebcdic (*p);
+ }]])],
+ [if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then
ac_cv_c_bigendian=yes
fi
- if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then
if test "$ac_cv_c_bigendian" = unknown; then
ac_cv_c_bigendian=no
else