libiberty: Disable hwcaps for sha1.o

This patch

commit bf4f40cc31
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Nov 28 13:14:05 2023 +0100

    libiberty: Use x86 HW optimized sha1

broke Solaris/x86 bootstrap with the native as:

libtool: compile:  /var/gcc/regression/master/11.4-gcc/build/./gcc/gccgo -B/var/gcc/regression/master/11.4-gcc/build/./gcc/ -B/vol/gcc/i386-pc-solaris2.11/bin/ -B/vol/gcc/i386-pc-solaris2.11/lib/ -isystem /vol/gcc/i386-pc-solaris2.11/include -isystem /vol/gcc/i386-pc-solaris2.11/sys-include -fchecking=1 -minline-all-stringops -O2 -g -I . -c -fgo-pkgpath=internal/goarch /vol/gcc/src/hg/master/local/libgo/go/internal/goarch/goarch.go zgoarch.go
ld.so.1: go1: fatal: /var/gcc/regression/master/11.4-gcc/build/gcc/go1: hardware capability (CA_SUNW_HW_2) unsupported: 0x4000000  [ SHA1 ]
gccgo: fatal error: Killed signal terminated program go1

As is already done in a couple of other similar cases, this patches
disables hwcaps support for libiberty.

Initially, this didn't work because config/hwcaps.m4 uses target_os, but
didn't ensure it is defined.

Tested on i386-pc-solaris2.11 with as and gas.

2023-11-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	config:
	* hwcaps.m4 (GCC_CHECK_ASSEMBLER_HWCAP): Require
	AC_CANONICAL_TARGET.

	libiberty:
	* configure.ac (GCC_CHECK_ASSEMBLER_HWCAP): Invoke.
	* configure, aclocal.m4: Regenerate.
	* Makefile.in (COMPILE.c): Add HWCAP_CFLAGS.
pull/97/head
Rainer Orth 2023-11-30 10:06:23 +01:00
parent 248bf19714
commit f2c52c0dfd
5 changed files with 97 additions and 1 deletions

View File

@ -7,6 +7,7 @@ dnl HWCAP_CFLAGS='-Wa,-nH' if possible.
dnl
AC_DEFUN([GCC_CHECK_ASSEMBLER_HWCAP], [
test -z "$HWCAP_CFLAGS" && HWCAP_CFLAGS=''
AC_REQUIRE([AC_CANONICAL_TARGET])
# Restrict the test to Solaris, other assemblers (e.g. AIX as) have -nH
# with a different meaning.

View File

@ -114,7 +114,7 @@ INCDIR=$(srcdir)/$(MULTISRCTOP)../include
COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) \
$(HDEFINES) @ac_libiberty_warn_cflags@ -D_GNU_SOURCE \
@CET_HOST_FLAGS@
@CET_HOST_FLAGS@ @HWCAP_CFLAGS@
# Just to make sure we don't use a built-in rule with VPATH
.c.$(objext):

View File

@ -16,7 +16,9 @@ m4_include([../config/acx.m4])
m4_include([../config/cet.m4])
m4_include([../config/enable.m4])
m4_include([../config/gcc-plugin.m4])
m4_include([../config/hwcaps.m4])
m4_include([../config/no-executables.m4])
m4_include([../config/override.m4])
m4_include([../config/picflag.m4])
m4_include([../config/warnings.m4])
m4_include([acinclude.m4])

91
libiberty/configure vendored
View File

@ -626,6 +626,11 @@ pexecute
target_header_dir
CHECK
LIBOBJS
HWCAP_CFLAGS
target_os
target_vendor
target_cpu
target
CET_HOST_FLAGS
NOASANFLAG
PICFLAG
@ -1325,6 +1330,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
--target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@ -2462,6 +2468,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# This works around the fact that libtool configuration may change LD
# for this particular configuration, but some shells, instead of
# keeping the changes in LD private, export them just because LD is
@ -5631,6 +5640,88 @@ LDFLAGS="$cet_save_LDFLAGS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
$as_echo_n "checking target system type... " >&6; }
if ${ac_cv_target+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "x$target_alias" = x; then
ac_cv_target=$ac_cv_host
else
ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
$as_echo "$ac_cv_target" >&6; }
case $ac_cv_target in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
esac
target=$ac_cv_target
ac_save_IFS=$IFS; IFS='-'
set x $ac_cv_target
shift
target_cpu=$1
target_vendor=$2
shift; shift
# Remember, the first character of IFS is used to create $*,
# except with old shells:
target_os=$*
IFS=$ac_save_IFS
case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
# The aliases save the names the user supplied, while $host etc.
# will get canonicalized.
test -n "$target_alias" &&
test "$program_prefix$program_suffix$program_transform_name" = \
NONENONEs,x,x, &&
program_prefix=${target_alias}-
test -z "$HWCAP_CFLAGS" && HWCAP_CFLAGS=''
# Restrict the test to Solaris, other assemblers (e.g. AIX as) have -nH
# with a different meaning.
case ${target_os} in
solaris2*)
ac_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Wa,-nH"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for as that supports -Wa,-nH" >&5
$as_echo_n "checking for as that supports -Wa,-nH... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
return 0;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
ac_hwcap_flags=yes
else
ac_hwcap_flags=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
if test "$ac_hwcap_flags" = "yes"; then
HWCAP_CFLAGS="-Wa,-nH $HWCAP_CFLAGS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_hwcap_flags" >&5
$as_echo "$ac_hwcap_flags" >&6; }
CFLAGS="$ac_save_CFLAGS"
;;
esac
echo "# Warning: this fragment is automatically generated" > temp-frag
if [ -n "${frag}" ] && [ -f "${frag}" ]; then

View File

@ -265,6 +265,8 @@ AC_SUBST(NOASANFLAG)
GCC_CET_HOST_FLAGS(CET_HOST_FLAGS)
AC_SUBST(CET_HOST_FLAGS)
GCC_CHECK_ASSEMBLER_HWCAP
echo "# Warning: this fragment is automatically generated" > temp-frag
if [[ -n "${frag}" ]] && [[ -f "${frag}" ]]; then