[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