diff options
| author | Paul Eggert <eggert@cs.ucla.edu> | 2022-07-27 08:53:35 -0700 |
|---|---|---|
| committer | Paul Eggert <eggert@cs.ucla.edu> | 2022-07-27 08:56:12 -0700 |
| commit | 234fc6c86613ed3f366dd1d88996e4d5d85ee222 (patch) | |
| tree | 7f3bd2a6bc2d34d6be83a4c771a2461a10b8c93a | |
| parent | e50a50c4dc5cf58b772413c719c5a0eb673dc251 (diff) | |
| download | autoconf-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.m4 | 21 |
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 |
