[PATCH v6 11/13] LoongArch: Build Infastructure

caiyinyu caiyinyu@loongson.cn
Fri Jul 15 01:49:59 GMT 2022


diff --git a/sysdeps/loongarch/nptl/Makefile b/sysdeps/loongarch/nptl/Makefile
new file mode 100644
index 0000000000..e73bbf3e21
--- /dev/null
+++ b/sysdeps/loongarch/nptl/Makefile
@@ -0,0 +1,21 @@
+# Makefile for sysdeps/loongarch/nptl.
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+#
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+#<https://www.gnu.org/licenses/>.
+
+ifeq ($(subdir),csu)
+gen-as-const-headers += tcb-offsets.sym
+endif
loongarch does not need this header (you can build glibc if you remove it).

*OK, **sysdeps/loongarch/nptl/Makefile and **tcb-offsets.sym removed.*


diff --git a/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
new file mode 100644
index 0000000000..d42a13e08c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
@@ -0,0 +1,3 @@
+/LD_TRACE_LOADED_OBJECTS=1/a\
+add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out"

This LD_LIBRARY_VERSION is not supported anymore (I forgot to remove them
from ldd-rewrite.sed files).


*OK, removed. Thanks. *
*>>>>>>>>>>>>> diff --git 
a/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed 
b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed index 
d42a13e08c..f8976fd239 100644 --- 
a/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed +++ 
b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed @@ -1,3 +1 @@ 
-/LD_TRACE_LOADED_OBJECTS=1/a\ -add_env="$add_env 
LD_LIBRARY_VERSION=\\$verify_out" 
s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|32\)\(/[^/]*\)\(-loongarch\)\(64\|32\)\(\.so\.[0-9.]*\)[[:blank:]]*$_\1"\2\4\7 
\264\4-loongarch64\7 \232\4-loongarch32\7"_ <<<<<<<<<<<<<<<<<<<<<<<*

  

在 2022/7/14 上午1:48, Adhemerval Zanella Netto 写道:
> Looks ok, some comments below.
>
> On 08/07/22 03:52, caiyinyu wrote:
>> ---
>>   sysdeps/loongarch/Implies                     |   3 +
>>   sysdeps/loongarch/Makefile                    |  15 ++
>>   sysdeps/loongarch/configure                   |   5 +
>>   sysdeps/loongarch/configure.ac                |   6 +
>>   sysdeps/loongarch/lp64/Implies-after          |   1 +
>>   sysdeps/loongarch/nptl/Makefile               |  21 +++
>>   sysdeps/loongarch/preconfigure                |  52 ++++++
>>   sysdeps/loongarch/preconfigure.ac             |  46 +++++
>>   sysdeps/loongarch/sys/regdef.h                |  93 ++++++++++
>>   sysdeps/unix/sysv/linux/loongarch/Implies     |   1 +
>>   sysdeps/unix/sysv/linux/loongarch/Makefile    |   4 +
>>   sysdeps/unix/sysv/linux/loongarch/configure   | 174 ++++++++++++++++++
>>   .../unix/sysv/linux/loongarch/configure.ac    |  22 +++
>>   .../unix/sysv/linux/loongarch/ldd-rewrite.sed |   3 +
>>   .../unix/sysv/linux/loongarch/lp64/Implies    |   3 +
>>   .../unix/sysv/linux/loongarch/shlib-versions  |   7 +
>>   16 files changed, 456 insertions(+)
>>   create mode 100644 sysdeps/loongarch/Implies
>>   create mode 100644 sysdeps/loongarch/Makefile
>>   create mode 100644 sysdeps/loongarch/configure
>>   create mode 100644 sysdeps/loongarch/configure.ac
>>   create mode 100644 sysdeps/loongarch/lp64/Implies-after
>>   create mode 100644 sysdeps/loongarch/nptl/Makefile
>>   create mode 100644 sysdeps/loongarch/preconfigure
>>   create mode 100644 sysdeps/loongarch/preconfigure.ac
>>   create mode 100644 sysdeps/loongarch/sys/regdef.h
>>   create mode 100644 sysdeps/unix/sysv/linux/loongarch/Implies
>>   create mode 100644 sysdeps/unix/sysv/linux/loongarch/Makefile
>>   create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure
>>   create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure.ac
>>   create mode 100644 sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
>>   create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/Implies
>>   create mode 100644 sysdeps/unix/sysv/linux/loongarch/shlib-versions
>>
>> diff --git a/sysdeps/loongarch/Implies b/sysdeps/loongarch/Implies
>> new file mode 100644
>> index 0000000000..1945b1f4bb
>> --- /dev/null
>> +++ b/sysdeps/loongarch/Implies
>> @@ -0,0 +1,3 @@
>> +ieee754/ldbl-128
>> +ieee754/dbl-64
>> +ieee754/flt-32
>> diff --git a/sysdeps/loongarch/Makefile b/sysdeps/loongarch/Makefile
>> new file mode 100644
>> index 0000000000..41c3449670
>> --- /dev/null
>> +++ b/sysdeps/loongarch/Makefile
>> @@ -0,0 +1,15 @@
>> +ifeq ($(subdir),misc)
>> +sysdep_headers += sys/asm.h
>> +endif
>> +
>> +# LoongArch's assembler also needs to know about PIC as it changes the
>> +# definition of some assembler macros.
>> +ASFLAGS-.os += $(pic-ccflag)
>> +
>> +abi-variants := lp64
>> +
>> +ifeq (,$(filter $(default-abi),$(abi-variants)))
>> +$(error Unknown ABI $(default-abi), must be one of $(abi-variants))
>> +endif
>> +
>> +abi-lp64-condition    := defined __loongarch_lp64
>> diff --git a/sysdeps/loongarch/configure b/sysdeps/loongarch/configure
>> new file mode 100644
>> index 0000000000..43b54d4965
>> --- /dev/null
>> +++ b/sysdeps/loongarch/configure
>> @@ -0,0 +1,5 @@
>> +# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
>> + # Local configure fragment for sysdeps/loongarch/elf.
>> +
>> +$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h
>> +
>> diff --git a/sysdeps/loongarch/configure.ac b/sysdeps/loongarch/configure.ac
>> new file mode 100644
>> index 0000000000..f744367bf3
>> --- /dev/null
>> +++ b/sysdeps/loongarch/configure.ac
>> @@ -0,0 +1,6 @@
>> +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
>> +# Local configure fragment for sysdeps/loongarch/elf.
>> +
>> +dnl It is always possible to access static and hidden symbols in an
>> +dnl position independent way.
>> +AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)
>> diff --git a/sysdeps/loongarch/lp64/Implies-after b/sysdeps/loongarch/lp64/Implies-after
>> new file mode 100644
>> index 0000000000..a8cae95f9d
>> --- /dev/null
>> +++ b/sysdeps/loongarch/lp64/Implies-after
>> @@ -0,0 +1 @@
>> +wordsize-64
>> diff --git a/sysdeps/loongarch/nptl/Makefile b/sysdeps/loongarch/nptl/Makefile
>> new file mode 100644
>> index 0000000000..e73bbf3e21
>> --- /dev/null
>> +++ b/sysdeps/loongarch/nptl/Makefile
>> @@ -0,0 +1,21 @@
>> +# Makefile for sysdeps/loongarch/nptl.
>> +# Copyright (C) 2022 Free Software Foundation, Inc.
>> +# This file is part of the GNU C Library.
>> +#
>> +# The GNU C Library is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU Lesser General Public
>> +# License as published by the Free Software Foundation; either
>> +# version 2.1 of the License, or (at your option) any later version.
>> +#
>> +# The GNU C Library is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>> +# Lesser General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU Lesser General Public
>> +# License along with the GNU C Library; if not, see
>> +#<https://www.gnu.org/licenses/>.
>> +
>> +ifeq ($(subdir),csu)
>> +gen-as-const-headers += tcb-offsets.sym
>> +endif
> loongarch does not need this header (you can build glibc if you remove it).
>
>> diff --git a/sysdeps/loongarch/preconfigure b/sysdeps/loongarch/preconfigure
>> new file mode 100644
>> index 0000000000..489af6f0b7
>> --- /dev/null
>> +++ b/sysdeps/loongarch/preconfigure
>> @@ -0,0 +1,52 @@
>> +# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
>> +# Local preconfigure fragment for sysdeps/loongarch
>> +
>> +case "$machine" in
>> +loongarch*)
>> +
>> +    grlen=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_grlen \(.*\)/\1/p'`
>> +    float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(soft\|single\|double\)_float.*/\1/p'`
>> +
>> +    with_fp_cond="!defined __loongarch_soft_float"
>> +
>> +    case "$float_abi" in
>> +    soft)
>> +	abi_flen=0
>> +	as_fn_error 1 "loongarch does not yet support soft floating-point  ABI!!" "$LINENO" 5
>> +	;;
>> +    single)
>> +	as_fn_error 1 "glibc does not yet support the single floating-point ABI!!" "$LINENO" 5
>> +	;;
>> +    double)
>> +	abi_flen=64
>> +	;;
>> +    *)
>> +	as_fn_error 1 "Unable to determine floating-point ABI!!" "$LINENO" 5
>> +	;;
>> +    esac
>> +
>> +    case "$grlen" in
>> +    32)
>> +	as_fn_error 1 "loongarch does not yet support ilp32 ABI!!" "$LINENO" 5
>> +	;;
>> +    64)
>> +	machine=loongarch/lp64
>> +	;;
>> +    *)
>> +	as_fn_error 1 "Unable to determine GRLEN!!" "$LINENO" 5
>> +	;;
>> +    esac
>> +
>> +    cat >>confdefs.h <<_ACEOF
>> +#define LOONGARCH_ABI_GRLEN $grlen
>> +_ACEOF
>> +
>> +    cat >>confdefs.h <<_ACEOF
>> +#define LOONGARCH_ABI_FRLEN $abi_flen
>> +_ACEOF
>> +
>> +
>> +    base_machine=loongarch
>> +    ;;
>> +esac
>> +
>> diff --git a/sysdeps/loongarch/preconfigure.ac b/sysdeps/loongarch/preconfigure.ac
>> new file mode 100644
>> index 0000000000..8eb94e9efe
>> --- /dev/null
>> +++ b/sysdeps/loongarch/preconfigure.ac
>> @@ -0,0 +1,46 @@
>> +GLIBC_PROVIDES[]dnl See aclocal.m4 in the top level source directory.
>> +# Local preconfigure fragment for sysdeps/loongarch
>> +
>> +case "$machine" in
>> +loongarch*)
>> +
>> +    grlen=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_grlen \(.*\)/\1/p'`
>> +    float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(soft\|single\|double\)_float.*/\1/p'`
>> +
>> +    with_fp_cond="!defined __loongarch_soft_float"
>> +
>> +    case "$float_abi" in
>> +    soft)
>> +	abi_flen=0
>> +	AC_MSG_ERROR([loongarch does not yet support soft floating-point  ABI!!], 1)
>> +	;;
>> +    single)
>> +	AC_MSG_ERROR([glibc does not yet support the single floating-point ABI!!], 1)
>> +	;;
>> +    double)
>> +	abi_flen=64
>> +	;;
>> +    *)
>> +	AC_MSG_ERROR([Unable to determine floating-point ABI!!], 1)
>> +	;;
>> +    esac
>> +
>> +    case "$grlen" in
>> +    32)
>> +	AC_MSG_ERROR([loongarch does not yet support ilp32 ABI!!], 1)
>> +	;;
>> +    64)
>> +	machine=loongarch/lp64
>> +	;;
>> +    *)
>> +	AC_MSG_ERROR([Unable to determine GRLEN!!], 1)
>> +	;;
>> +    esac
>> +
>> +    AC_DEFINE_UNQUOTED([LOONGARCH_ABI_GRLEN], [$grlen])
>> +    AC_DEFINE_UNQUOTED([LOONGARCH_ABI_FRLEN], [$abi_flen])
>> +
>> +    base_machine=loongarch
>> +    ;;
>> +esac
>> +
>> diff --git a/sysdeps/loongarch/sys/regdef.h b/sysdeps/loongarch/sys/regdef.h
>> new file mode 100644
>> index 0000000000..d266df372d
>> --- /dev/null
>> +++ b/sysdeps/loongarch/sys/regdef.h
>> @@ -0,0 +1,93 @@
>> +/* Register Macro definitions
>> +   Copyright (C) 2022 Free Software Foundation, Inc.
>> +   This file is part of the GNU C Library.
>> +
>> +
>> +   The GNU C Library is free software; you can redistribute it and/or
>> +   modify it under the terms of the GNU Lesser General Public
>> +   License as published by the Free Software Foundation; either
>> +   version 2.1 of the License, or (at your option) any later version.
>> +
>> +   The GNU C Library is distributed in the hope that it will be useful,
>> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>> +   Lesser General Public License for more details.
>> +
>> +   You should have received a copy of the GNU Lesser General Public
>> +   License along with the GNU C Library.  If not, see
>> +<https://www.gnu.org/licenses/>.  */
>> +
>> +#ifndef _SYS_REGDEF_H
>> +#define _SYS_REGDEF_H
>> +
>> +#define zero $r0
>> +#define ra $r1
>> +#define tp $r2
>> +#define sp $r3
>> +#define a0 $r4
>> +#define a1 $r5
>> +#define a2 $r6
>> +#define a3 $r7
>> +#define a4 $r8
>> +#define a5 $r9
>> +#define a6 $r10
>> +#define a7 $r11
>> +#define v0 $r4
>> +#define v1 $r5
>> +#define t0 $r12
>> +#define t1 $r13
>> +#define t2 $r14
>> +#define t3 $r15
>> +#define t4 $r16
>> +#define t5 $r17
>> +#define t6 $r18
>> +#define t7 $r19
>> +#define t8 $r20
>> +#define x $r21
>> +#define fp $r22
>> +#define s0 $r23
>> +#define s1 $r24
>> +#define s2 $r25
>> +#define s3 $r26
>> +#define s4 $r27
>> +#define s5 $r28
>> +#define s6 $r29
>> +#define s7 $r30
>> +#define s8 $r31
>> +
>> +#define fa0 $f0
>> +#define fa1 $f1
>> +#define fa2 $f2
>> +#define fa3 $f3
>> +#define fa4 $f4
>> +#define fa5 $f5
>> +#define fa6 $f6
>> +#define fa7 $f7
>> +#define fv0 $f0
>> +#define fv1 $f1
>> +#define ft0 $f8
>> +#define ft1 $f9
>> +#define ft2 $f10
>> +#define ft3 $f11
>> +#define ft4 $f12
>> +#define ft5 $f13
>> +#define ft6 $f14
>> +#define ft7 $f15
>> +#define ft8 $f16
>> +#define ft9 $f17
>> +#define ft10 $f18
>> +#define ft11 $f19
>> +#define ft12 $f20
>> +#define ft13 $f21
>> +#define ft14 $f22
>> +#define ft15 $f23
>> +#define fs0 $f24
>> +#define fs1 $f25
>> +#define fs2 $f26
>> +#define fs3 $f27
>> +#define fs4 $f28
>> +#define fs5 $f29
>> +#define fs6 $f30
>> +#define fs7 $f31
>> +
>> +#endif /* _SYS_REGDEF_H */
>> diff --git a/sysdeps/unix/sysv/linux/loongarch/Implies b/sysdeps/unix/sysv/linux/loongarch/Implies
>> new file mode 100644
>> index 0000000000..e52b1ac310
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/loongarch/Implies
>> @@ -0,0 +1 @@
>> +loongarch/nptl
>> diff --git a/sysdeps/unix/sysv/linux/loongarch/Makefile b/sysdeps/unix/sysv/linux/loongarch/Makefile
>> new file mode 100644
>> index 0000000000..730bfa7465
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/loongarch/Makefile
>> @@ -0,0 +1,4 @@
>> +ifeq ($(subdir),stdlib)
>> +gen-as-const-headers += ucontext_i.sym
>> +endif
>> +
>> diff --git a/sysdeps/unix/sysv/linux/loongarch/configure b/sysdeps/unix/sysv/linux/loongarch/configure
>> new file mode 100644
>> index 0000000000..54ccd1528e
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/loongarch/configure
>> @@ -0,0 +1,174 @@
>> +# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
>> + # Local configure fragment for sysdeps/unix/sysv/linux/loongarch.
>> +
>> +arch_minimum_kernel=5.19.0
>> +
>> +libc_cv_loongarch_int_abi=no
>> +
>> +
>> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
>> +$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
>> +if ${ac_cv_path_GREP+:} false; then :
>> +  $as_echo_n "(cached) " >&6
>> +else
>> +  if test -z "$GREP"; then
>> +  ac_path_GREP_found=false
>> +  # Loop through the user's path and test for each of PROGNAME-LIST
>> +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
>> +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
>> +do
>> +  IFS=$as_save_IFS
>> +  test -z "$as_dir" && as_dir=.
>> +    for ac_prog in grep ggrep; do
>> +    for ac_exec_ext in '' $ac_executable_extensions; do
>> +      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
>> +      as_fn_executable_p "$ac_path_GREP" || continue
>> +# Check for GNU ac_path_GREP and select it if it is found.
>> +  # Check for GNU $ac_path_GREP
>> +case `"$ac_path_GREP" --version 2>&1` in
>> +*GNU*)
>> +  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
>> +*)
>> +  ac_count=0
>> +  $as_echo_n 0123456789 >"conftest.in"
>> +  while :
>> +  do
>> +    cat "conftest.in" "conftest.in" >"conftest.tmp"
>> +    mv "conftest.tmp" "conftest.in"
>> +    cp "conftest.in" "conftest.nl"
>> +    $as_echo 'GREP' >> "conftest.nl"
>> +    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
>> +    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
>> +    as_fn_arith $ac_count + 1 && ac_count=$as_val
>> +    if test $ac_count -gt ${ac_path_GREP_max-0}; then
>> +      # Best one so far, save it but keep looking for a better one
>> +      ac_cv_path_GREP="$ac_path_GREP"
>> +      ac_path_GREP_max=$ac_count
>> +    fi
>> +    # 10*(2^10) chars as input seems more than enough
>> +    test $ac_count -gt 10 && break
>> +  done
>> +  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
>> +esac
>> +
>> +      $ac_path_GREP_found && break 3
>> +    done
>> +  done
>> +  done
>> +IFS=$as_save_IFS
>> +  if test -z "$ac_cv_path_GREP"; then
>> +    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
>> +  fi
>> +else
>> +  ac_cv_path_GREP=$GREP
>> +fi
>> +
>> +fi
>> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
>> +$as_echo "$ac_cv_path_GREP" >&6; }
>> + GREP="$ac_cv_path_GREP"
>> +
>> +
>> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
>> +$as_echo_n "checking for egrep... " >&6; }
>> +if ${ac_cv_path_EGREP+:} false; then :
>> +  $as_echo_n "(cached) " >&6
>> +else
>> +  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
>> +   then ac_cv_path_EGREP="$GREP -E"
>> +   else
>> +     if test -z "$EGREP"; then
>> +  ac_path_EGREP_found=false
>> +  # Loop through the user's path and test for each of PROGNAME-LIST
>> +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
>> +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
>> +do
>> +  IFS=$as_save_IFS
>> +  test -z "$as_dir" && as_dir=.
>> +    for ac_prog in egrep; do
>> +    for ac_exec_ext in '' $ac_executable_extensions; do
>> +      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
>> +      as_fn_executable_p "$ac_path_EGREP" || continue
>> +# Check for GNU ac_path_EGREP and select it if it is found.
>> +  # Check for GNU $ac_path_EGREP
>> +case `"$ac_path_EGREP" --version 2>&1` in
>> +*GNU*)
>> +  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
>> +*)
>> +  ac_count=0
>> +  $as_echo_n 0123456789 >"conftest.in"
>> +  while :
>> +  do
>> +    cat "conftest.in" "conftest.in" >"conftest.tmp"
>> +    mv "conftest.tmp" "conftest.in"
>> +    cp "conftest.in" "conftest.nl"
>> +    $as_echo 'EGREP' >> "conftest.nl"
>> +    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
>> +    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
>> +    as_fn_arith $ac_count + 1 && ac_count=$as_val
>> +    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
>> +      # Best one so far, save it but keep looking for a better one
>> +      ac_cv_path_EGREP="$ac_path_EGREP"
>> +      ac_path_EGREP_max=$ac_count
>> +    fi
>> +    # 10*(2^10) chars as input seems more than enough
>> +    test $ac_count -gt 10 && break
>> +  done
>> +  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
>> +esac
>> +
>> +      $ac_path_EGREP_found && break 3
>> +    done
>> +  done
>> +  done
>> +IFS=$as_save_IFS
>> +  if test -z "$ac_cv_path_EGREP"; then
>> +    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
>> +  fi
>> +else
>> +  ac_cv_path_EGREP=$EGREP
>> +fi
>> +
>> +   fi
>> +fi
>> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
>> +$as_echo "$ac_cv_path_EGREP" >&6; }
>> + EGREP="$ac_cv_path_EGREP"
>> +
>> +
>> +cat confdefs.h - <<_ACEOF >conftest.$ac_ext
>> +/* end confdefs.h.  */
>> +__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
>> +
>> +_ACEOF
>> +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
>> +  $EGREP "4 8 8" >/dev/null 2>&1; then :
>> +  libc_cv_loongarch_int_abi=lp64
>> +fi
>> +rm -f conftest*
>> +
>> +if test $libc_cv_loongarch_int_abi = no; then
>> +  as_fn_error $? "Unable to determine integer ABI" "$LINENO" 5
>> +fi
>> +
>> +config_vars="$config_vars
>> +default-abi = $libc_cv_loongarch_int_abi"
>> +
>> +case $libc_cv_loongarch_int_abi in
>> +lp64)
>> +  test -n "$libc_cv_slibdir" ||
>> +case "$prefix" in
>> +/usr | /usr/)
>> +  libc_cv_slibdir='/lib64'
>> +  libc_cv_rtlddir='/lib64'
>> +  if test "$libdir" = '${exec_prefix}/lib'; then
>> +    libdir='${exec_prefix}/lib64';
>> +    # Locale data can be shared between 32-bit and 64-bit libraries.
>> +    libc_cv_complocaledir='${exec_prefix}/lib/locale'
>> +  fi
>> +  ;;
>> +esac
>> +  ;;
>> +esac
>> +
>> +ldd_rewrite_script=sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
>> diff --git a/sysdeps/unix/sysv/linux/loongarch/configure.ac b/sysdeps/unix/sysv/linux/loongarch/configure.ac
>> new file mode 100644
>> index 0000000000..07da5eed76
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/loongarch/configure.ac
>> @@ -0,0 +1,22 @@
>> +sinclude(./aclocal.m4)dnl Autoconf lossage
>> +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
>> +# Local configure fragment for sysdeps/unix/sysv/linux/loongarch.
>> +
>> +arch_minimum_kernel=5.19.0
>> +
>> +libc_cv_loongarch_int_abi=no
>> +AC_EGREP_CPP(4 8 8, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
>> +  ], libc_cv_loongarch_int_abi=lp64)
>> +if test $libc_cv_loongarch_int_abi = no; then
>> +  AC_MSG_ERROR([Unable to determine integer ABI])
>> +fi
>> +
>> +LIBC_CONFIG_VAR([default-abi], [$libc_cv_loongarch_int_abi])
>> +
>> +case $libc_cv_loongarch_int_abi in
>> +lp64)
>> +  LIBC_SLIBDIR_RTLDDIR([lib64], [lib64])
>> +  ;;
>> +esac
>> +
>> +ldd_rewrite_script=sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
>> diff --git a/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
>> new file mode 100644
>> index 0000000000..d42a13e08c
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
>> @@ -0,0 +1,3 @@
>> +/LD_TRACE_LOADED_OBJECTS=1/a\
>> +add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out"
> This LD_LIBRARY_VERSION is not supported anymore (I forgot to remove them
> from ldd-rewrite.sed files).
>
>> +s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|32\)\(/[^/]*\)\(-loongarch\)\(64\|32\)\(\.so\.[0-9.]*\)[[:blank:]]*$_\1"\2\4\7 \264\4-loongarch64\7 \232\4-loongarch32\7"_
>> diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/Implies b/sysdeps/unix/sysv/linux/loongarch/lp64/Implies
>> new file mode 100644
>> index 0000000000..117c2b8efe
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/Implies
>> @@ -0,0 +1,3 @@
>> +unix/sysv/linux/loongarch
>> +unix/sysv/linux/generic
>> +unix/sysv/linux/wordsize-64
>> diff --git a/sysdeps/unix/sysv/linux/loongarch/shlib-versions b/sysdeps/unix/sysv/linux/loongarch/shlib-versions
>> new file mode 100644
>> index 0000000000..dc2220b4be
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/loongarch/shlib-versions
>> @@ -0,0 +1,7 @@
>> +DEFAULT		GLIBC_2.36
>> +
>> +%if LOONGARCH_ABI_GRLEN == 64 && LOONGARCH_ABI_FRLEN == 64
>> +ld=ld-linux-loongarch-lp64d.so.1
>> +%else
>> +%error cannot determine ABI
>> +%endif


More information about the Libc-alpha mailing list