From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19589 invoked by alias); 10 Sep 2013 09:36:42 -0000 Mailing-List: contact libc-ports-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: libc-ports-owner@sourceware.org Received: (qmail 19568 invoked by uid 89); 10 Sep 2013 09:36:41 -0000 Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 10 Sep 2013 09:36:41 +0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.2 required=5.0 tests=AWL,BAYES_00,KAM_STOCKTIP,KHOP_THREADED,RDNS_NONE,SPF_HELO_FAIL autolearn=no version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: relay1.mentorg.com Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1VJKN9-0002vI-Sy from Maciej_Rozycki@mentor.com ; Tue, 10 Sep 2013 02:36:35 -0700 Received: from SVR-IES-FEM-01.mgc.mentorg.com ([137.202.0.104]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Tue, 10 Sep 2013 02:36:35 -0700 Received: from [172.30.64.29] (137.202.0.76) by SVR-IES-FEM-01.mgc.mentorg.com (137.202.0.104) with Microsoft SMTP Server id 14.2.247.3; Tue, 10 Sep 2013 10:36:28 +0100 Date: Tue, 10 Sep 2013 09:36:00 -0000 From: "Maciej W. Rozycki" To: "Joseph S. Myers" CC: , , Doug Gilmore Subject: Re: [RFC][PATCH v2] MIPS: IEEE 754-2008 NaN encoding support In-Reply-To: Message-ID: References: User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" X-SW-Source: 2013-09/txt/msg00075.txt.bz2 On Fri, 6 Sep 2013, Joseph S. Myers wrote: > > Thanks for your review. Here's an updated version. I hope this is OK, > > in which case I'll repost it with the kernel version requirement updated > > once the required functionality has made its way there; otherwise please > > let me know. > > This is OK (with the year in the ChangeLog entry fixed) on the basis that > you'll update the kernel version once the kernel support is upstream (and > until then, put a comment on it about it not being the final kernel > version), but leave it a few days before commit in case anyone else spots > anything wrong. I infer you'd prefer to have this change committed even though the required kernel part isn't there yet, right? I have therefore set the minimum version required artificially to 10.0.0 so that this code is not accidentally activated on a kernel that doesn't support the 2008-NaN feature and put a FIXME note next to it. Please let me know if this is what you had in mind. 2013-09-10 Maciej W. Rozycki ChangeLog: * config.h.in (HAVE_MIPS_NAN2008): New macro. * elf/elf.h (EF_MIPS_NAN2008): Likewise. * sysdeps/generic/ldconfig.h (FLAG_MIPS_LIB32_NAN2008): Likewise. (FLAG_MIPS64_LIBN32_NAN2008): Likewise. (FLAG_MIPS64_LIBN64_NAN2008): Likewise. * elf/cache.c (print_entry): Handle the new cache flags. ports/ChangeLog.mips * sysdeps/mips/dl-machine.h (ELF_MACHINE_NAN2008): New macro. (elf_machine_matches_host): Reject objects that use a different NaN encoding convention. * sysdeps/mips/fpu_control.h: Document IEEE 754-2008 feature control bits. (_FPU_ABS2008, _FPU_NAN2008): New macros. (_FPU_RESERVED): Clear bits #20 and #19. (_FPU_DEFAULT) [__mips_nan2008]: Set bit #18. (_FPU_IEEE) [__mips_nan2008]: Likewise. * sysdeps/mips/mips64/soft-fp/sfp-machine.h [__mips_nan2008] (_FP_NANFRAC_S, _FP_NANFRAC_D, _FP_NANFRAC_Q): Define 2008-NaN payloads. (_FP_QNANNEGATEDP): Set to 0. * sysdeps/mips/soft-fp/sfp-machine.h [__mips_nan2008] (_FP_NANFRAC_S, _FP_NANFRAC_D, _FP_NANFRAC_Q): Define 2008-NaN payloads. (_FP_QNANNEGATEDP): Set to 0. * sysdeps/unix/sysv/linux/mips/dl-cache.h (_DL_CACHE_DEFAULT_ID): Define 2008 NaN encoding values. * sysdeps/unix/sysv/linux/mips/readelflib.c (process_elf_file): Handle 2008-NaN libraries. * sysdeps/mips/shlib-versions [HAVE_MIPS_NAN2008]: Set ld=ld-linux-mipsn8.so.1. * sysdeps/mips/configure.in: Define HAVE_MIPS_NAN2008 if the 2008 NaN encoding is used. * sysdeps/unix/sysv/linux/mips/Makefile (abi-variants): Add 2008-NaN ABI variants. (abi-o32_soft-options, abi-o32_soft-condition): Update with the __mips_nan2008 macro. (abi-o32_hard-options, abi-o32_hard-condition): Likewise. (abi-n32_soft-options, abi-n32_soft-condition): Likewise. (abi-n32_hard-options, abi-n32_hard-condition): Likewise. (abi-n64_soft-options, abi-n64_soft-condition): Likewise. (abi-n64_hard-options, abi-n64_hard-condition): Likewise. (abi-o32_soft-ld-soname, abi-o32_hard-ld-soname): New macros. (abi-n32_soft-ld-soname, abi-n32_hard-ld-soname): Likewise. (abi-n64_soft-ld-soname, abi-n64_hard-ld-soname): Likewise. (abi-o32_soft_2008-options): Likewise. (abi-o32_soft_2008-condition): Likewise. (abi-o32_hard_2008-options): Likewise. (abi-o32_hard_2008-condition): Likewise. (abi-n32_soft_2008-options): Likewise. (abi-n32_soft_2008-condition): Likewise. (abi-n32_hard_2008-options): Likewise. (abi-n32_hard_2008-condition): Likewise. (abi-n64_soft_2008-options): Likewise. (abi-n64_soft_2008-condition): Likewise. (abi-n64_hard_2008-options): Likewise. (abi-n64_hard_2008-condition): Likewise. (abi-o32_soft_2008-ld-soname): Likewise. (abi-o32_hard_2008-ld-soname): Likewise. (abi-n32_soft_2008-ld-soname): Likewise. (abi-n32_hard_2008-ld-soname): Likewise. (abi-n64_soft_2008-ld-soname): Likewise. (abi-n64_hard_2008-ld-soname): Likewise. * sysdeps/unix/sysv/linux/mips/configure.in: Include the NaN encoding selection in default-abi. Set arch_minimum_kernel to 10.0.0 if 2008 NaN encoding is used. * sysdeps/mips/configure: Regenerate. * sysdeps/unix/sysv/linux/mips/configure: Regenerate. Maciej glibc-mips-nan2008.diff Index: glibc-fsf-trunk-quilt/config.h.in =================================================================== --- glibc-fsf-trunk-quilt.orig/config.h.in 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/config.h.in 2013-09-10 00:18:22.018801136 +0100 @@ -241,4 +241,8 @@ /* The pt_chown binary is being built and used by grantpt. */ #undef HAVE_PT_CHOWN +/* ports/sysdeps/mips/configure.in */ +/* Define if using the IEEE 754-2008 NaN encoding on the MIPS target. */ +#undef HAVE_MIPS_NAN2008 + #endif Index: glibc-fsf-trunk-quilt/elf/cache.c =================================================================== --- glibc-fsf-trunk-quilt.orig/elf/cache.c 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/elf/cache.c 2013-09-10 00:18:22.018801136 +0100 @@ -105,6 +105,15 @@ print_entry (const char *lib, int flag, case FLAG_ARM_LIBSF: fputs (",soft-float", stdout); break; + case FLAG_MIPS_LIB32_NAN2008: + fputs (",nan2008", stdout); + break; + case FLAG_MIPS64_LIBN32_NAN2008: + fputs (",N32,nan2008", stdout); + break; + case FLAG_MIPS64_LIBN64_NAN2008: + fputs (",64bit,nan2008", stdout); + break; case 0: break; default: Index: glibc-fsf-trunk-quilt/elf/elf.h =================================================================== --- glibc-fsf-trunk-quilt.orig/elf/elf.h 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/elf/elf.h 2013-09-10 00:18:22.018801136 +0100 @@ -1383,6 +1383,7 @@ typedef struct #define EF_MIPS_64BIT_WHIRL 16 #define EF_MIPS_ABI2 32 #define EF_MIPS_ABI_ON32 64 +#define EF_MIPS_NAN2008 1024 /* Uses IEEE 754-2008 NaN encoding. */ #define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level. */ /* Legal values for MIPS architecture level. */ Index: glibc-fsf-trunk-quilt/ports/sysdeps/mips/configure =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/mips/configure 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/mips/configure 2013-09-10 00:18:22.018801136 +0100 @@ -1,3 +1,163 @@ # This file is generated from configure.in by Autoconf. DO NOT EDIT! # Local configure fragment for sysdeps/mips. + + + +{ $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" + { test -f "$ac_path_GREP" && $as_test_x "$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" + { test -f "$ac_path_EGREP" && $as_test_x "$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" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is using the 2008 NaN encoding" >&5 +$as_echo_n "checking whether the compiler is using the 2008 NaN encoding... " >&6; } +if ${libc_cv_mips_nan2008+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +dnl +#ifdef __mips_nan2008 +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + libc_cv_mips_nan2008=yes +else + libc_cv_mips_nan2008=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mips_nan2008" >&5 +$as_echo "$libc_cv_mips_nan2008" >&6; } +if test x$libc_cv_mips_nan2008 = xyes; then + $as_echo "#define HAVE_MIPS_NAN2008 1" >>confdefs.h + +fi Index: glibc-fsf-trunk-quilt/ports/sysdeps/mips/configure.in =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/mips/configure.in 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/mips/configure.in 2013-09-10 00:18:22.018801136 +0100 @@ -4,3 +4,12 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the dnl No MIPS GCC supports accessing static and hidden symbols in an dnl position independent way. dnl AC_DEFINE(PI_STATIC_AND_HIDDEN) + +AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding], + libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl +#ifdef __mips_nan2008 +yes +#endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)]) +if test x$libc_cv_mips_nan2008 = xyes; then + AC_DEFINE(HAVE_MIPS_NAN2008) +fi Index: glibc-fsf-trunk-quilt/ports/sysdeps/mips/dl-machine.h =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/mips/dl-machine.h 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/mips/dl-machine.h 2013-09-10 00:18:22.018801136 +0100 @@ -73,6 +73,16 @@ do { if ((l)->l_info[DT_MIPS (RLD_MAP)]) (ElfW(Addr)) (r); \ } while (0) +#if ((defined __mips_nan2008 && !defined HAVE_MIPS_NAN2008) \ + || (!defined __mips_nan2008 && defined HAVE_MIPS_NAN2008)) +# error "Configuration inconsistency: __mips_nan2008 != HAVE_MIPS_NAN2008, overridden CFLAGS?" +#endif +#ifdef __mips_nan2008 +# define ELF_MACHINE_NAN2008 EF_MIPS_NAN2008 +#else +# define ELF_MACHINE_NAN2008 0 +#endif + /* Return nonzero iff ELF header is compatible with the running host. */ static inline int __attribute_used__ elf_machine_matches_host (const ElfW(Ehdr) *ehdr) @@ -83,6 +93,10 @@ elf_machine_matches_host (const ElfW(Ehd return 0; #endif + /* Don't link 2008-NaN and legacy-NaN objects together. */ + if ((ehdr->e_flags & EF_MIPS_NAN2008) != ELF_MACHINE_NAN2008) + return 0; + switch (ehdr->e_machine) { case EM_MIPS: Index: glibc-fsf-trunk-quilt/ports/sysdeps/mips/fpu_control.h =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/mips/fpu_control.h 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/mips/fpu_control.h 2013-09-10 00:18:22.018801136 +0100 @@ -29,7 +29,9 @@ * available for MIPS III and newer. * 23 -> Condition bit * 22-21 -> reserved for architecture implementers - * 20-18 -> reserved (read as 0, write with 0) + * 20 -> reserved (read as 0, write with 0) + * 19 -> IEEE 754-2008 non-arithmetic ABS.fmt and NEG.fmt enable + * 18 -> IEEE 754-2008 recommended NaN encoding enable * 17 -> cause bit for unimplemented operation * 16 -> cause bit for invalid exception * 15 -> cause bit for division by zero exception @@ -79,22 +81,33 @@ extern fpu_control_t __fpu_control; /* flush denormalized numbers to zero */ #define _FPU_FLUSH_TZ 0x1000000 +/* IEEE 754-2008 compliance control. */ +#define _FPU_ABS2008 0x80000 +#define _FPU_NAN2008 0x40000 + /* rounding control */ #define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ #define _FPU_RC_ZERO 0x1 #define _FPU_RC_UP 0x2 #define _FPU_RC_DOWN 0x3 -#define _FPU_RESERVED 0xfe9c0000 /* Reserved bits in cw */ +#define _FPU_RESERVED 0xfe840000 /* Reserved bits in cw, incl NAN2008. */ /* The fdlibm code requires strict IEEE double precision arithmetic, and no interrupts for exceptions, rounding to nearest. */ +#ifdef __mips_nan2008 +# define _FPU_DEFAULT 0x00040000 +#else +# define _FPU_DEFAULT 0x00000000 +#endif -#define _FPU_DEFAULT 0x00000000 - -/* IEEE: same as above, but exceptions */ -#define _FPU_IEEE 0x00000F80 +/* IEEE: same as above, but exceptions. */ +#ifdef __mips_nan2008 +# define _FPU_IEEE 0x00040F80 +#else +# define _FPU_IEEE 0x00000F80 +#endif /* Type of the control word. */ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); Index: glibc-fsf-trunk-quilt/ports/sysdeps/mips/mips64/soft-fp/sfp-machine.h =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/mips/mips64/soft-fp/sfp-machine.h 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/mips/mips64/soft-fp/sfp-machine.h 2013-09-10 00:18:22.018801136 +0100 @@ -24,15 +24,25 @@ #define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) #define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) -#define _FP_NANFRAC_S (_FP_QNANBIT_S - 1) -#define _FP_NANFRAC_D (_FP_QNANBIT_D - 1) -#define _FP_NANFRAC_Q (_FP_QNANBIT_Q - 1), -1 +#ifdef __mips_nan2008 +# define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) +# define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) +# define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 +#else +# define _FP_NANFRAC_S (_FP_QNANBIT_S - 1) +# define _FP_NANFRAC_D (_FP_QNANBIT_D - 1) +# define _FP_NANFRAC_Q (_FP_QNANBIT_Q - 1), -1 +#endif #define _FP_NANSIGN_S 0 #define _FP_NANSIGN_D 0 #define _FP_NANSIGN_Q 0 #define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 1 +#ifdef __mips_nan2008 +# define _FP_QNANNEGATEDP 0 +#else +# define _FP_QNANNEGATEDP 1 +#endif /* From my experiments it seems X is chosen unless one of the NaNs is sNaN, in which case the result is NANSIGN/NANFRAC. */ Index: glibc-fsf-trunk-quilt/ports/sysdeps/mips/shlib-versions =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/mips/shlib-versions 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/mips/shlib-versions 2013-09-10 00:18:22.018801136 +0100 @@ -3,7 +3,11 @@ mips.*-.*-linux.* libm=6 GLIBC_2.0 GLI # Working mips versions were never released between 2.0 and 2.2. mips.*-.*-linux.* libc=6 GLIBC_2.0 GLIBC_2.2 +%ifdef HAVE_MIPS_NAN2008 +mips.*-.*-linux.* ld=ld-linux-mipsn8.so.1 GLIBC_2.0 GLIBC_2.2 +%else mips.*-.*-linux.* ld=ld.so.1 GLIBC_2.0 GLIBC_2.2 +%endif mips.*-.*-linux.* libdl=2 GLIBC_2.0 GLIBC_2.2 mips.*-.*-linux.* libresolv=2 GLIBC_2.0 GLIBC_2.2 Index: glibc-fsf-trunk-quilt/ports/sysdeps/mips/soft-fp/sfp-machine.h =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/mips/soft-fp/sfp-machine.h 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/mips/soft-fp/sfp-machine.h 2013-09-10 00:18:22.018801136 +0100 @@ -21,15 +21,25 @@ #define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) #define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) -#define _FP_NANFRAC_S (_FP_QNANBIT_S - 1) -#define _FP_NANFRAC_D (_FP_QNANBIT_D - 1), -1 -#define _FP_NANFRAC_Q (_FP_QNANBIT_Q - 1), -1, -1, -1 +#ifdef __mips_nan2008 +# define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) +# define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 +# define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 +#else +# define _FP_NANFRAC_S (_FP_QNANBIT_S - 1) +# define _FP_NANFRAC_D (_FP_QNANBIT_D - 1), -1 +# define _FP_NANFRAC_Q (_FP_QNANBIT_Q - 1), -1, -1, -1 +#endif #define _FP_NANSIGN_S 0 #define _FP_NANSIGN_D 0 #define _FP_NANSIGN_Q 0 #define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 1 +#ifdef __mips_nan2008 +# define _FP_QNANNEGATEDP 0 +#else +# define _FP_QNANNEGATEDP 1 +#endif /* From my experiments it seems X is chosen unless one of the NaNs is sNaN, in which case the result is NANSIGN/NANFRAC. */ Index: glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/Makefile =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/unix/sysv/linux/mips/Makefile 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/Makefile 2013-09-10 00:18:22.018801136 +0100 @@ -8,7 +8,9 @@ sysdep_routines += cachectl cacheflush s sysdep_headers += sys/cachectl.h sys/sysmips.h sys/tas.h endif -abi-variants := o32_soft o32_hard n32_soft n32_hard n64_soft n64_hard +abi-variants := o32_soft o32_hard o32_soft_2008 o32_hard_2008 +abi-variants += n32_soft n32_hard n32_soft_2008 n32_hard_2008 +abi-variants += n64_soft n64_hard n64_soft_2008 n64_hard_2008 ifeq (,$(filter $(default-abi),$(abi-variants))) Unknown ABI, must be one of $(abi-variants) @@ -18,29 +20,89 @@ abi-includes := sgidefs.h # _MIPS_SIM_ABI32 == 1, _MIPS_SIM_NABI32 == 2, _MIPS_SIM_ABI64 == 3 abi-o32_soft-options := -U_MIPS_SIM -D_MIPS_SIM=1 \ - -D__mips_soft_float -U__mips_hard_float -abi-o32_soft-condition := defined(__mips_soft_float) \ - && (_MIPS_SIM == _MIPS_SIM_ABI32) + -D__mips_soft_float -U__mips_hard_float \ + -U__mips_nan2008 +abi-o32_soft-condition := !defined(__mips_nan2008) \ + && defined(__mips_soft_float) \ + && (_MIPS_SIM == _MIPS_SIM_ABI32) +abi-o32_soft-ld-soname := ld.so.1 abi-o32_hard-options := -U_MIPS_SIM -D_MIPS_SIM=1 \ - -D__mips_hard_float -U__mips_soft_float -abi-o32_hard-condition := defined(__mips_hard_float) \ + -D__mips_hard_float -U__mips_soft_float \ + -U__mips_nan2008 +abi-o32_hard-condition := !defined(__mips_nan2008) \ + && defined(__mips_hard_float) \ && (_MIPS_SIM == _MIPS_SIM_ABI32) +abi-o32_hard-ld-soname := ld.so.1 +abi-o32_soft_2008-options := -U_MIPS_SIM -D_MIPS_SIM=1 \ + -D__mips_soft_float -U__mips_hard_float \ + -D__mips_nan2008 +abi-o32_soft_2008-condition := defined(__mips_nan2008) \ + && defined(__mips_soft_float) \ + && (_MIPS_SIM == _MIPS_SIM_ABI32) +abi-o32_soft_2008-ld-soname := ld-linux-mipsn8.so.1 +abi-o32_hard_2008-options := -U_MIPS_SIM -D_MIPS_SIM=1 \ + -D__mips_hard_float -U__mips_soft_float \ + -D__mips_nan2008 +abi-o32_hard_2008-condition := defined(__mips_nan2008) \ + && defined(__mips_hard_float) \ + && (_MIPS_SIM == _MIPS_SIM_ABI32) +abi-o32_hard_2008-ld-soname := ld-linux-mipsn8.so.1 abi-n32_soft-options := -U_MIPS_SIM -D_MIPS_SIM=2 \ - -D__mips_soft_float -U__mips_hard_float -abi-n32_soft-condition := defined(__mips_soft_float) \ + -D__mips_soft_float -U__mips_hard_float \ + -U__mips_nan2008 +abi-n32_soft-condition := !defined(__mips_nan2008) \ + && defined(__mips_soft_float) \ && (_MIPS_SIM == _MIPS_SIM_NABI32) +abi-n32_soft-ld-soname := ld.so.1 abi-n32_hard-options := -U_MIPS_SIM -D_MIPS_SIM=2 \ - -D__mips_hard_float -U__mips_soft_float -abi-n32_hard-condition := defined(__mips_hard_float) \ + -D__mips_hard_float -U__mips_soft_float \ + -U__mips_nan2008 +abi-n32_hard-condition := !defined(__mips_nan2008) \ + && defined(__mips_hard_float) \ && (_MIPS_SIM == _MIPS_SIM_NABI32) +abi-n32_hard-ld-soname := ld.so.1 +abi-n32_soft_2008-options := -U_MIPS_SIM -D_MIPS_SIM=2 \ + -D__mips_soft_float -U__mips_hard_float \ + -D__mips_nan2008 +abi-n32_soft_2008-condition := defined(__mips_nan2008) \ + && defined(__mips_soft_float) \ + && (_MIPS_SIM == _MIPS_SIM_NABI32) +abi-n32_soft_2008-ld-soname := ld-linux-mipsn8.so.1 +abi-n32_hard_2008-options := -U_MIPS_SIM -D_MIPS_SIM=2 \ + -D__mips_hard_float -U__mips_soft_float \ + -D__mips_nan2008 +abi-n32_hard_2008-condition := defined(__mips_nan2008) \ + && defined(__mips_hard_float) \ + && (_MIPS_SIM == _MIPS_SIM_NABI32) +abi-n32_hard_2008-ld-soname := ld-linux-mipsn8.so.1 abi-n64_soft-options := -U_MIPS_SIM -D_MIPS_SIM=3 \ - -D__mips_soft_float -U__mips_hard_float -abi-n64_soft-condition := defined(__mips_soft_float) \ + -D__mips_soft_float -U__mips_hard_float \ + -U__mips_nan2008 +abi-n64_soft-condition := !defined(__mips_nan2008) \ + && defined(__mips_soft_float) \ && (_MIPS_SIM == _MIPS_SIM_ABI64) +abi-n64_soft-ld-soname := ld.so.1 abi-n64_hard-options := -U_MIPS_SIM -D_MIPS_SIM=3 \ - -D__mips_hard_float -U__mips_soft_float -abi-n64_hard-condition := defined(__mips_hard_float) \ + -D__mips_hard_float -U__mips_soft_float \ + -U__mips_nan2008 +abi-n64_hard-condition := !defined(__mips_nan2008) \ + && defined(__mips_hard_float) \ && (_MIPS_SIM == _MIPS_SIM_ABI64) +abi-n64_hard-ld-soname := ld.so.1 +abi-n64_soft_2008-options := -U_MIPS_SIM -D_MIPS_SIM=3 \ + -D__mips_soft_float -U__mips_hard_float \ + -D__mips_nan2008 +abi-n64_soft_2008-condition := defined(__mips_nan2008) \ + && defined(__mips_soft_float) \ + && (_MIPS_SIM == _MIPS_SIM_ABI64) +abi-n64_soft_2008-ld-soname := ld-linux-mipsn8.so.1 +abi-n64_hard_2008-options := -U_MIPS_SIM -D_MIPS_SIM=3 \ + -D__mips_hard_float -U__mips_soft_float \ + -D__mips_nan2008 +abi-n64_hard_2008-condition := defined(__mips_nan2008) \ + && defined(__mips_hard_float) \ + && (_MIPS_SIM == _MIPS_SIM_ABI64) +abi-n64_hard_2008-ld-soname := ld-linux-mipsn8.so.1 ifeq ($(subdir),elf) ifeq ($(build-shared),yes) Index: glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/configure =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/unix/sysv/linux/mips/configure 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/configure 2013-09-10 00:27:40.429686137 +0100 @@ -105,8 +105,168 @@ if test -z "$libc_mips_float"; then as_fn_error $? "could not determine if compiler is using hard or soft floating point ABI" "$LINENO" 5 fi + +{ $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" + { test -f "$ac_path_GREP" && $as_test_x "$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" + { test -f "$ac_path_EGREP" && $as_test_x "$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" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is using the 2008 NaN encoding" >&5 +$as_echo_n "checking whether the compiler is using the 2008 NaN encoding... " >&6; } +if ${libc_cv_mips_nan2008+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +dnl +#ifdef __mips_nan2008 +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + libc_cv_mips_nan2008=yes +else + libc_cv_mips_nan2008=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mips_nan2008" >&5 +$as_echo "$libc_cv_mips_nan2008" >&6; } + +libc_mips_nan= +if test x"$libc_cv_mips_nan2008" = xyes; then + libc_mips_nan=_2008 +fi + config_vars="$config_vars -default-abi = ${libc_mips_abi}_${libc_mips_float}" +default-abi = ${libc_mips_abi}_${libc_mips_float}${libc_mips_nan}" case "$prefix" in /usr | /usr/) @@ -138,3 +298,12 @@ case "$prefix" in esac libc_cv_gcc_unwind_find_fde=yes + +if test -z "$arch_minimum_kernel"; then + if test x$libc_cv_mips_nan2008 = xyes; then + # FIXME: Adjust this setting to the actual first upstream kernel + # version to support the 2008 NaN encoding and then remove this + # comment. + arch_minimum_kernel=10.0.0 + fi +fi Index: glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/configure.in =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/unix/sysv/linux/mips/configure.in 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/configure.in 2013-09-10 00:27:26.428109202 +0100 @@ -44,7 +44,19 @@ if test -z "$libc_mips_float"; then AC_MSG_ERROR([could not determine if compiler is using hard or soft floating point ABI]) fi -LIBC_CONFIG_VAR([default-abi], [${libc_mips_abi}_${libc_mips_float}]) +AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding], + libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl +#ifdef __mips_nan2008 +yes +#endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)]) + +libc_mips_nan= +if test x"$libc_cv_mips_nan2008" = xyes; then + libc_mips_nan=_2008 +fi + +LIBC_CONFIG_VAR([default-abi], + [${libc_mips_abi}_${libc_mips_float}${libc_mips_nan}]) case "$prefix" in /usr | /usr/) @@ -76,3 +88,12 @@ case "$prefix" in esac libc_cv_gcc_unwind_find_fde=yes + +if test -z "$arch_minimum_kernel"; then + if test x$libc_cv_mips_nan2008 = xyes; then + # FIXME: Adjust this setting to the actual first upstream kernel + # version to support the 2008 NaN encoding and then remove this + # comment. + arch_minimum_kernel=10.0.0 + fi +fi Index: glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/dl-cache.h =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/unix/sysv/linux/mips/dl-cache.h 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/dl-cache.h 2013-09-10 00:18:22.018801136 +0100 @@ -18,11 +18,27 @@ #include -/* Redefine the cache ID for new ABIs; o32 keeps using the generic check. */ -#if _MIPS_SIM == _ABI64 -# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN64 | FLAG_ELF_LIBC6) -#elif _MIPS_SIM == _ABIN32 -# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN32 | FLAG_ELF_LIBC6) +#if ((defined __mips_nan2008 && !defined HAVE_MIPS_NAN2008) \ + || (!defined __mips_nan2008 && defined HAVE_MIPS_NAN2008)) +# error "Configuration inconsistency: __mips_nan2008 != HAVE_MIPS_NAN2008, overridden CFLAGS?" +#endif + +/* Redefine the cache ID for new ABIs and 2008 NaN support; legacy o32 + keeps using the generic check. */ +#ifdef __mips_nan2008 +# if _MIPS_SIM == _ABIO32 +# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS_LIB32_NAN2008 | FLAG_ELF_LIBC6) +# elif _MIPS_SIM == _ABI64 +# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN64_NAN2008 | FLAG_ELF_LIBC6) +# elif _MIPS_SIM == _ABIN32 +# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN32_NAN2008 | FLAG_ELF_LIBC6) +# endif +#else +# if _MIPS_SIM == _ABI64 +# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN64 | FLAG_ELF_LIBC6) +# elif _MIPS_SIM == _ABIN32 +# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN32 | FLAG_ELF_LIBC6) +# endif #endif #ifdef _DL_CACHE_DEFAULT_ID Index: glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/readelflib.c =================================================================== --- glibc-fsf-trunk-quilt.orig/ports/sysdeps/unix/sysv/linux/mips/readelflib.c 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/ports/sysdeps/unix/sysv/linux/mips/readelflib.c 2013-09-10 00:18:22.018801136 +0100 @@ -33,19 +33,32 @@ process_elf_file (const char *file_name, unsigned int *osversion, char **soname, void *file_contents, size_t file_length) { - ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; + union + { + Elf64_Ehdr *eh64; + Elf32_Ehdr *eh32; + ElfW(Ehdr) *eh; + } + elf_header; int ret; - if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) + elf_header.eh = file_contents; + if (elf_header.eh->e_ident [EI_CLASS] == ELFCLASS32) { - Elf32_Ehdr *elf32_header = (Elf32_Ehdr *) elf_header; - ret = process_elf32_file (file_name, lib, flag, osversion, soname, file_contents, file_length); + if (!ret) + { + Elf32_Word flags = elf_header.eh32->e_flags; + int nan2008 = (flags & EF_MIPS_NAN2008) != 0; - /* n32 libraries are always libc.so.6+. */ - if (!ret && (elf32_header->e_flags & EF_MIPS_ABI2) != 0) - *flag = FLAG_MIPS64_LIBN32|FLAG_ELF_LIBC6; + /* n32 libraries are always libc.so.6+, o32 only if 2008 NaN. */ + if ((flags & EF_MIPS_ABI2) != 0) + *flag = (nan2008 ? FLAG_MIPS64_LIBN32_NAN2008 + : FLAG_MIPS64_LIBN32) | FLAG_ELF_LIBC6; + else if (nan2008) + *flag = FLAG_MIPS_LIB32_NAN2008 | FLAG_ELF_LIBC6; + } } else { @@ -53,7 +66,13 @@ process_elf_file (const char *file_name, file_contents, file_length); /* n64 libraries are always libc.so.6+. */ if (!ret) - *flag = FLAG_MIPS64_LIBN64|FLAG_ELF_LIBC6; + { + Elf64_Word flags = elf_header.eh64->e_flags; + int nan2008 = (flags & EF_MIPS_NAN2008) != 0; + + *flag = (nan2008 ? FLAG_MIPS64_LIBN64_NAN2008 + : FLAG_MIPS64_LIBN64) | FLAG_ELF_LIBC6; + } } return ret; Index: glibc-fsf-trunk-quilt/sysdeps/generic/ldconfig.h =================================================================== --- glibc-fsf-trunk-quilt.orig/sysdeps/generic/ldconfig.h 2013-09-10 00:17:30.000000000 +0100 +++ glibc-fsf-trunk-quilt/sysdeps/generic/ldconfig.h 2013-09-10 00:18:22.018801136 +0100 @@ -21,24 +21,27 @@ #include -#define FLAG_ANY -1 -#define FLAG_TYPE_MASK 0x00ff -#define FLAG_LIBC4 0x0000 -#define FLAG_ELF 0x0001 -#define FLAG_ELF_LIBC5 0x0002 -#define FLAG_ELF_LIBC6 0x0003 -#define FLAG_REQUIRED_MASK 0xff00 -#define FLAG_SPARC_LIB64 0x0100 -#define FLAG_IA64_LIB64 0x0200 -#define FLAG_X8664_LIB64 0x0300 -#define FLAG_S390_LIB64 0x0400 -#define FLAG_POWERPC_LIB64 0x0500 -#define FLAG_MIPS64_LIBN32 0x0600 -#define FLAG_MIPS64_LIBN64 0x0700 -#define FLAG_X8664_LIBX32 0x0800 -#define FLAG_ARM_LIBHF 0x0900 -#define FLAG_AARCH64_LIB64 0x0a00 -#define FLAG_ARM_LIBSF 0x0b00 +#define FLAG_ANY -1 +#define FLAG_TYPE_MASK 0x00ff +#define FLAG_LIBC4 0x0000 +#define FLAG_ELF 0x0001 +#define FLAG_ELF_LIBC5 0x0002 +#define FLAG_ELF_LIBC6 0x0003 +#define FLAG_REQUIRED_MASK 0xff00 +#define FLAG_SPARC_LIB64 0x0100 +#define FLAG_IA64_LIB64 0x0200 +#define FLAG_X8664_LIB64 0x0300 +#define FLAG_S390_LIB64 0x0400 +#define FLAG_POWERPC_LIB64 0x0500 +#define FLAG_MIPS64_LIBN32 0x0600 +#define FLAG_MIPS64_LIBN64 0x0700 +#define FLAG_X8664_LIBX32 0x0800 +#define FLAG_ARM_LIBHF 0x0900 +#define FLAG_AARCH64_LIB64 0x0a00 +#define FLAG_ARM_LIBSF 0x0b00 +#define FLAG_MIPS_LIB32_NAN2008 0x0c00 +#define FLAG_MIPS64_LIBN32_NAN2008 0x0d00 +#define FLAG_MIPS64_LIBN64_NAN2008 0x0e00 /* Name of auxiliary cache. */ #define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache"