libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/3] AIX: use proper ABI flags in search for toolchain


From: Michael Haubenwallner
Subject: [PATCH 1/3] AIX: use proper ABI flags in search for toolchain
Date: Mon, 21 Mar 2016 18:01:49 +0100

The native PowerPC AIX toolchain does accept only 32 bit objects by
default.  They either need the -X32_64 flag to accept both, or the
OBJECT_MODE=64 environment variable to accept 64 bit only.  We rely on
the new gl_POWERPC_AIX_OBJECT_MODE early gnulib macro setting the
gl_cv_powerpc_aix_object_mode configure variable, and then use the
proper abi flags to search for the PowerPC AIX tools, to ensure they
actually work with the object file format the compiler generates.
* gnulib: Bump, for the gl_POWERPC_AIX_OBJECT_MODE macro.
* m4/libtool.m4 (LT_INIT): Require gl_POWERPC_AIX_OBJECT_MODE.
(_LT_PROG_AR): When gl_cv_powerpc_aix_object_mode != no, use the -X32_64
flag to search for the ar tool.
(_LT_CMD_OLD_ARCHIVE): Ditto for strip, ranlib.
(LT_PATH_NM): Ditto for nm.
(LT_PATH_LD): When gl_cv_powerpc_aix_object_mode != no, use the -b32
or -b64 flag to search for the ld program.
(_LT_LINKER_SHLIBS): Instead of testing the shared_archive_member_spec
value, use gl_cv_powerpc_aix_object_mode directly.
* m4/ltoptions.m4 (_LT_WITH_AIX_SONAME): Instead of testing the
OBJECT_MODE environment variable, use gl_cv_powerpc_aix_object_mode to
define the shared_archive_member_spec value.
---
 gnulib          |  2 +-
 m4/libtool.m4   | 38 +++++++++++++++++++++++++++++++-------
 m4/ltoptions.m4 |  4 +---
 3 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/gnulib b/gnulib
index 5be7728..2575bf3 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit 5be7728cf7c0fb61be1ccbfbd302764ef7e6b72d
+Subproject commit 2575bf3fae3c42e4f90b95437a7692f52e0bf99d
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index ee292af..513e2ae 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -61,6 +61,7 @@ esac
 AC_DEFUN([LT_INIT],
 [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
 AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_REQUIRE([gl_POWERPC_AIX_OBJECT_MODE])dnl
 AC_BEFORE([$0], [LT_LANG])dnl
 AC_BEFORE([$0], [LT_OUTPUT])dnl
 AC_BEFORE([$0], [LTDL_INIT])dnl
@@ -1491,7 +1492,11 @@ need_locks=$enable_libtool_lock
 # _LT_PROG_AR
 # -----------
 m4_defun([_LT_PROG_AR],
-[AC_CHECK_TOOLS(AR, [ar], false)
+[if test no != "$gl_cv_powerpc_aix_object_mode"; then
+  AC_CHECK_TOOLS(AR, ["ar -X32_64"], false)
+else
+  AC_CHECK_TOOLS(AR, [ar], false)
+fi
 : ${AR=ar}
 _LT_DECL([], [AR], [1], [The archiver])
 
@@ -1543,11 +1548,19 @@ _LT_DECL([], [archiver_list_spec], [1],
 m4_defun([_LT_CMD_OLD_ARCHIVE],
 [_LT_PROG_AR
 
-AC_CHECK_TOOL(STRIP, strip, :)
+if test no != "$gl_cv_powerpc_aix_object_mode"; then
+  AC_CHECK_TOOL(STRIP, strip -X32_64, :)
+else
+  AC_CHECK_TOOL(STRIP, strip, :)
+fi
 test -z "$STRIP" && STRIP=:
 _LT_DECL([], [STRIP], [1], [A symbol stripping program])
 
-AC_CHECK_TOOL(RANLIB, ranlib, :)
+if test no != "$gl_cv_powerpc_aix_object_mode"; then
+  AC_CHECK_TOOL(RANLIB, ranlib -X32_64, :)
+else
+  AC_CHECK_TOOL(RANLIB, ranlib, :)
+fi
 test -z "$RANLIB" && RANLIB=:
 _LT_DECL([], [RANLIB], [1],
     [Commands used to install an old-style archive])
@@ -3293,6 +3306,9 @@ if test yes = "$GCC"; then
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
        ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
+      if test no != "$gl_cv_powerpc_aix_object_mode"; then
+       ac_prog="$ac_prog -b$gl_cv_powerpc_aix_object_mode"
+      fi
       test -z "$LD" && LD=$ac_prog
       ;;
   "")
@@ -3331,6 +3347,9 @@ AC_CACHE_VAL(lt_cv_path_LD,
     fi
   done
   IFS=$lt_save_ifs
+  if test no != "$gl_cv_powerpc_aix_object_mode"; then
+    lt_cv_path_LD="$lt_cv_path_LD -b$gl_cv_powerpc_aix_object_mode"
+  fi
 else
   lt_cv_path_LD=$LD # Let the user override the test with a path.
 fi])
@@ -3701,13 +3720,18 @@ else
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+       # AIX nm needs -X32_64 to accept both 32 and 64 bit objects
+       tmp_nmflags=-B
+       if test no != "$gl_cv_powerpc_aix_object_mode"; then
+         tmp_nmflags='-X32_64 -B'
+       fi
        case $build_os in
        mingw*) lt_bad_file=conftest.nm/nofile ;;
        *) lt_bad_file=/dev/null ;;
        esac
-       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+       case `"$tmp_nm" $tmp_nmflags $lt_bad_file 2>&1 | sed '1q'` in
        *$lt_bad_file* | *'Invalid file or object type'*)
-         lt_cv_path_NM="$tmp_nm -B"
+         lt_cv_path_NM="$tmp_nm $tmp_nmflags"
          break 2
          ;;
        *)
@@ -5548,7 +5572,7 @@ _LT_EOF
            _LT_TAGVAR(archive_expsym_cmds, 
$1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o 
$output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry 
'$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR 
$AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
          fi
          if test aix != "$with_aix_soname"; then
-           _LT_TAGVAR(archive_expsym_cmds, 
$1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o 
$output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs 
$wl-bnoentry 
'$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e 
$output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! 
$soname($shared_archive_member_spec.o)"; if test shr_64 = 
"$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 
32"; fi; cat $export_symbols ) > 
$output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS 
$output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o 
$output_objdir/$realname.d/$shared_archive_member_spec.imp'
+           _LT_TAGVAR(archive_expsym_cmds, 
$1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o 
$output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs 
$wl-bnoentry 
'$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e 
$output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! 
$soname($shared_archive_member_spec.o)"; func_echo_all "# 
'$gl_cv_powerpc_aix_object_mode'"; cat $export_symbols ) > 
$output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS 
$output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o 
$output_objdir/$realname.d/$shared_archive_member_spec.imp'
          else
            # used by -dlpreopen to get the symbols
            _LT_TAGVAR(archive_expsym_cmds, 
$1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  
$output_objdir/$realname.d/$soname $output_objdir'
@@ -6623,7 +6647,7 @@ if test yes != "$_lt_caught_CXX_error"; then
              _LT_TAGVAR(archive_expsym_cmds, 
$1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o 
$output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry 
'$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR 
$AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
            fi
            if test aix != "$with_aix_soname"; then
-             _LT_TAGVAR(archive_expsym_cmds, 
$1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o 
$output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs 
$wl-bnoentry 
'$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e 
$output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! 
$soname($shared_archive_member_spec.o)"; if test shr_64 = 
"$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 
32"; fi; cat $export_symbols ) > 
$output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS 
$output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o 
$output_objdir/$realname.d/$shared_archive_member_spec.imp'
+             _LT_TAGVAR(archive_expsym_cmds, 
$1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o 
$output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs 
$wl-bnoentry 
'$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e 
$output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! 
$soname($shared_archive_member_spec.o)"; func_echo_all "# 
'$gl_cv_powerpc_aix_object_mode'"; cat $export_symbols ) > 
$output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS 
$output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o 
$output_objdir/$realname.d/$shared_archive_member_spec.imp'
            else
              # used by -dlpreopen to get the symbols
              _LT_TAGVAR(archive_expsym_cmds, 
$1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  
$output_objdir/$realname.d/$soname $output_objdir'
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
index b34dd2f..30ffacc 100644
--- a/m4/ltoptions.m4
+++ b/m4/ltoptions.m4
@@ -351,9 +351,7 @@ power*-*-aix[[5-9]]*,yes)
     # For the AIX way of multilib, we name the shared archive member
     # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
     # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
-    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
-    # the AIX toolchain works better with OBJECT_MODE set (default 32).
-    if test 64 = "${OBJECT_MODE-32}"; then
+    if test 64 = "$gl_cv_powerpc_aix_object_mode"; then
       shared_archive_member_spec=shr_64
     else
       shared_archive_member_spec=shr
-- 
2.4.6




reply via email to

[Prev in Thread] Current Thread [Next in Thread]