From 3d219e70d33bea18a78a4c9f0c7b6e190d9fe95a Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Thu, 13 Aug 2015 13:44:33 +0300 Subject: [PATCH 01/65] add 'vita' system --- newlib/configure.host | 7 + newlib/libc/sys/configure | 282 +- newlib/libc/sys/configure.in | 1 + newlib/libc/sys/vita/Makefile.am | 18 + newlib/libc/sys/vita/Makefile.in | 465 +++ newlib/libc/sys/vita/aclocal.m4 | 983 ++++++ newlib/libc/sys/vita/configure | 4775 +++++++++++++++++++++++++++++ newlib/libc/sys/vita/configure.in | 7 + newlib/libc/sys/vita/crt0.c | 5 + newlib/libc/sys/vita/syscalls.c | 127 + 10 files changed, 6533 insertions(+), 137 deletions(-) create mode 100755 newlib/libc/sys/vita/Makefile.am create mode 100644 newlib/libc/sys/vita/Makefile.in create mode 100644 newlib/libc/sys/vita/aclocal.m4 create mode 100755 newlib/libc/sys/vita/configure create mode 100755 newlib/libc/sys/vita/configure.in create mode 100755 newlib/libc/sys/vita/crt0.c create mode 100755 newlib/libc/sys/vita/syscalls.c diff --git a/newlib/configure.host b/newlib/configure.host index dac461b731..c85d8041f9 100644 --- a/newlib/configure.host +++ b/newlib/configure.host @@ -397,6 +397,9 @@ case "${host}" in arc-*-*) sys_dir=arc ;; + arm*vita*) + sys_dir=vita + ;; arm*-*-*) sys_dir=arm if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then @@ -610,6 +613,10 @@ case "${host}" in arc-*-*) syscall_dir=syscalls ;; + arm*vita*) + syscall_dir=syscalls + newlib_cflags="${newlib_cflags} -D__DYNAMIC_REENT__ -DREENTRANT_SYSCALLS_PROVIDED" + ;; arm*-*-pe) syscall_dir=syscalls ;; diff --git a/newlib/libc/sys/configure b/newlib/libc/sys/configure index 6b2b6eac8a..8bbe8eea18 100755 --- a/newlib/libc/sys/configure +++ b/newlib/libc/sys/configure @@ -1,11 +1,9 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for newlib 2.2.0. +# Generated by GNU Autoconf 2.69 for newlib 2.2.0. # # -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -134,6 +132,31 @@ export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh @@ -167,7 +190,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi -test x\$exitcode = x0 || exit 1" +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && @@ -220,21 +244,25 @@ IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi if test x$as_have_required = xno; then : @@ -336,6 +364,14 @@ $as_echo X"$as_dir" | } # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take @@ -457,6 +493,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). @@ -491,16 +531,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -512,28 +552,8 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -810,6 +830,7 @@ sysvi386 sysvnecv70 tic80 tirtos +vita w65 z8ksim' @@ -1266,8 +1287,6 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1535,9 +1554,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF newlib configure 2.2.0 -generated by GNU Autoconf 2.68 +generated by GNU Autoconf 2.69 -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1613,7 +1632,7 @@ $as_echo "$ac_try_echo"; } >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext + test -x conftest$ac_exeext }; then : ac_retval=0 else @@ -1813,7 +1832,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by newlib $as_me 2.2.0, which was -generated by GNU Autoconf 2.68. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2303,7 +2322,7 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -2472,7 +2491,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2512,7 +2531,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2563,7 +2582,7 @@ do test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ @@ -2616,7 +2635,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2944,7 +2963,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3112,7 +3131,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue @@ -3290,7 +3309,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3330,7 +3349,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3382,7 +3401,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3422,7 +3441,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3474,7 +3493,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3514,7 +3533,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3566,7 +3585,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_READELF="${ac_tool_prefix}readelf" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3606,7 +3625,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_READELF="readelf" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3789,7 +3808,7 @@ do for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue + as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in @@ -3923,7 +3942,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3963,7 +3982,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4015,7 +4034,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4055,7 +4074,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4107,7 +4126,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4147,7 +4166,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4269,7 +4288,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4309,7 +4328,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4362,7 +4381,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4403,7 +4422,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue @@ -4461,7 +4480,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4505,7 +4524,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4951,8 +4970,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -5181,7 +5199,7 @@ do 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 + 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 @@ -5247,7 +5265,7 @@ do 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 + 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 @@ -5314,7 +5332,7 @@ do for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue + as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in @@ -5570,7 +5588,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5614,7 +5632,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5954,7 +5972,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5994,7 +6012,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6271,7 +6289,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6311,7 +6329,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6376,7 +6394,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6416,7 +6434,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6475,7 +6493,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6515,7 +6533,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7105,7 +7123,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7145,7 +7163,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7197,7 +7215,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7237,7 +7255,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7289,7 +7307,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7329,7 +7347,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7381,7 +7399,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7421,7 +7439,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7473,7 +7491,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7513,7 +7531,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11456,7 +11474,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11459 "configure" +#line 11477 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11562,7 +11580,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11565 "configure" +#line 11583 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11854,6 +11872,8 @@ subdirs="$subdirs a29khif" tic80) subdirs="$subdirs tic80" ;; tirtos) subdirs="$subdirs tirtos" + ;; + vita) subdirs="$subdirs vita" ;; w65) subdirs="$subdirs w65" ;; @@ -12378,16 +12398,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -12447,28 +12467,16 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -12490,7 +12498,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by newlib $as_me 2.2.0, which was -generated by GNU Autoconf 2.68. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -12547,10 +12555,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ newlib config.status 2.2.0 -configured by $0, generated by GNU Autoconf 2.68, +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -12630,7 +12638,7 @@ fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' diff --git a/newlib/libc/sys/configure.in b/newlib/libc/sys/configure.in index 4c6266d60c..276d0f8b4a 100644 --- a/newlib/libc/sys/configure.in +++ b/newlib/libc/sys/configure.in @@ -47,6 +47,7 @@ if test -n "${sys_dir}"; then sysvnecv70) AC_CONFIG_SUBDIRS(sysvnecv70) ;; tic80) AC_CONFIG_SUBDIRS(tic80) ;; tirtos) AC_CONFIG_SUBDIRS(tirtos) ;; + vita) AC_CONFIG_SUBDIRS(vita) ;; w65) AC_CONFIG_SUBDIRS(w65) ;; z8ksim) AC_CONFIG_SUBDIRS(z8ksim) ;; esac; diff --git a/newlib/libc/sys/vita/Makefile.am b/newlib/libc/sys/vita/Makefile.am new file mode 100755 index 0000000000..cf77a1cfab --- /dev/null +++ b/newlib/libc/sys/vita/Makefile.am @@ -0,0 +1,18 @@ +## Process this file with automake to generate Makefile.in + +AUTOMAKE_OPTIONS = cygnus + +INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) + +AM_CCASFLAGS = $(INCLUDES) + +noinst_LIBRARIES = lib.a + +lib_a_SOURCES = syscalls.c +lib_a_CCASFLAGS = $(AM_CCASFLAGS) +lib_a_CFLAGS = $(AM_CFLAGS) + +all-local: crt0.o + +ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. +CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host diff --git a/newlib/libc/sys/vita/Makefile.in b/newlib/libc/sys/vita/Makefile.in new file mode 100644 index 0000000000..5917807dd3 --- /dev/null +++ b/newlib/libc/sys/vita/Makefile.in @@ -0,0 +1,465 @@ +# Makefile.in generated by automake 1.12.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ + $(top_srcdir)/../../../../mkinstalldirs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../../../acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/../../../../mkinstalldirs +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +lib_a_AR = $(AR) $(ARFLAGS) +lib_a_LIBADD = +am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) +lib_a_OBJECTS = $(am_lib_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = +am__depfiles_maybe = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(lib_a_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +AM_RECURSIVE_TARGETS = cscope +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NEWLIB_CFLAGS = @NEWLIB_CFLAGS@ +NO_INCLUDE_LIST = @NO_INCLUDE_LIST@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +READELF = @READELF@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +aext = @aext@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +libm_machine_dir = @libm_machine_dir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lpfx = @lpfx@ +machine_dir = @machine_dir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +newlib_basedir = @newlib_basedir@ +oext = @oext@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sys_dir = @sys_dir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = cygnus +INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) +AM_CCASFLAGS = $(INCLUDES) +noinst_LIBRARIES = lib.a +lib_a_SOURCES = syscalls.c +lib_a_CCASFLAGS = $(AM_CCASFLAGS) +lib_a_CFLAGS = $(AM_CFLAGS) +ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. +CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --cygnus'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --cygnus \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --cygnus Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES) $(EXTRA_lib_a_DEPENDENCIES) + -rm -f lib.a + $(lib_a_AR) lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD) + $(RANLIB) lib.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +.c.o: + $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -c `$(CYGPATH_W) '$<'` + +lib_a-syscalls.o: syscalls.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-syscalls.o `test -f 'syscalls.c' || echo '$(srcdir)/'`syscalls.c + +lib_a-syscalls.obj: syscalls.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-syscalls.obj `if test -f 'syscalls.c'; then $(CYGPATH_W) 'syscalls.c'; else $(CYGPATH_W) '$(srcdir)/syscalls.c'; fi` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) + +clean-cscope: + -rm -f cscope.files + +cscope.files: clean-cscope cscopelist + +cscopelist: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files +check-am: +check: check-am +all-am: Makefile $(LIBRARIES) all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local am--refresh check check-am \ + clean clean-cscope clean-generic clean-noinstLIBRARIES cscope \ + cscopelist ctags distclean distclean-compile distclean-generic \ + distclean-tags dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +all-local: crt0.o + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/newlib/libc/sys/vita/aclocal.m4 b/newlib/libc/sys/vita/aclocal.m4 new file mode 100644 index 0000000000..5fb014d775 --- /dev/null +++ b/newlib/libc/sys/vita/aclocal.m4 @@ -0,0 +1,983 @@ +# generated automatically by aclocal 1.12.6 -*- Autoconf -*- + +# Copyright (C) 1996-2012 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.12' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.12.6], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.12.6])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], +[$0: two- and three-arguments forms are deprecated. For more info, see: +http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +dnl Support for Objective C++ was only introduced in Autoconf 2.65, +dnl but we still cater to Autoconf 2.62. +m4_ifdef([AC_PROG_OBJCXX], +[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of '-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([../../../acinclude.m4]) diff --git a/newlib/libc/sys/vita/configure b/newlib/libc/sys/vita/configure new file mode 100755 index 0000000000..548219857f --- /dev/null +++ b/newlib/libc/sys/vita/configure @@ -0,0 +1,4775 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for newlib 2.2.0. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='newlib' +PACKAGE_TARNAME='newlib' +PACKAGE_VERSION='2.2.0' +PACKAGE_STRING='newlib 2.2.0' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="crt0.c" +ac_subst_vars='LTLIBOBJS +LIBOBJS +sys_dir +machine_dir +libm_machine_dir +lpfx +aext +oext +OBJEXT +USE_LIBTOOL_FALSE +USE_LIBTOOL_TRUE +ELIX_LEVEL_4_FALSE +ELIX_LEVEL_4_TRUE +ELIX_LEVEL_3_FALSE +ELIX_LEVEL_3_TRUE +ELIX_LEVEL_2_FALSE +ELIX_LEVEL_2_TRUE +ELIX_LEVEL_1_FALSE +ELIX_LEVEL_1_TRUE +ELIX_LEVEL_0_FALSE +ELIX_LEVEL_0_TRUE +LDFLAGS +NO_INCLUDE_LIST +NEWLIB_CFLAGS +CCASFLAGS +CCAS +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +READELF +RANLIB +AR +AS +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +newlib_basedir +MAY_SUPPLY_SYSCALLS_FALSE +MAY_SUPPLY_SYSCALLS_TRUE +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_multilib +enable_target_optspace +enable_malloc_debugging +enable_newlib_multithread +enable_newlib_iconv +enable_newlib_elix_level +enable_newlib_io_float +enable_newlib_supplied_syscalls +enable_dependency_tracking +enable_maintainer_mode +' + ac_precious_vars='build_alias +host_alias +target_alias +CCAS +CCASFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures newlib 2.2.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/newlib] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of newlib 2.2.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-multilib build many library versions (default) + --enable-target-optspace optimize for space + --enable-malloc-debugging indicate malloc debugging requested + --enable-newlib-multithread enable support for multiple threads + --enable-newlib-iconv enable iconv library support + --enable-newlib-elix-level supply desired elix library level (1-4) + --disable-newlib-io-float disable printf/scanf family float support + --disable-newlib-supplied-syscalls disable newlib from supplying syscalls + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + +Some influential environment variables: + CCAS assembler compiler command (defaults to CC) + CCASFLAGS assembler compiler flags (defaults to CFLAGS) + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +newlib configure 2.2.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by newlib $as_me 2.2.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_aux_dir= +for ac_dir in ../../../.. "$srcdir"/../../../..; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../../../.. \"$srcdir\"/../../../.." "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +am__api_version='1.12' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +# Check whether --enable-multilib was given. +if test "${enable_multilib+set}" = set; then : + enableval=$enable_multilib; case "${enableval}" in + yes) multilib=yes ;; + no) multilib=no ;; + *) as_fn_error $? "bad value ${enableval} for multilib option" "$LINENO" 5 ;; + esac +else + multilib=yes +fi + +# Check whether --enable-target-optspace was given. +if test "${enable_target_optspace+set}" = set; then : + enableval=$enable_target_optspace; case "${enableval}" in + yes) target_optspace=yes ;; + no) target_optspace=no ;; + *) as_fn_error $? "bad value ${enableval} for target-optspace option" "$LINENO" 5 ;; + esac +else + target_optspace= +fi + +# Check whether --enable-malloc-debugging was given. +if test "${enable_malloc_debugging+set}" = set; then : + enableval=$enable_malloc_debugging; case "${enableval}" in + yes) malloc_debugging=yes ;; + no) malloc_debugging=no ;; + *) as_fn_error $? "bad value ${enableval} for malloc-debugging option" "$LINENO" 5 ;; + esac +else + malloc_debugging= +fi + +# Check whether --enable-newlib-multithread was given. +if test "${enable_newlib_multithread+set}" = set; then : + enableval=$enable_newlib_multithread; case "${enableval}" in + yes) newlib_multithread=yes ;; + no) newlib_multithread=no ;; + *) as_fn_error $? "bad value ${enableval} for newlib-multithread option" "$LINENO" 5 ;; + esac +else + newlib_multithread=yes +fi + +# Check whether --enable-newlib-iconv was given. +if test "${enable_newlib_iconv+set}" = set; then : + enableval=$enable_newlib_iconv; if test "${newlib_iconv+set}" != set; then + case "${enableval}" in + yes) newlib_iconv=yes ;; + no) newlib_iconv=no ;; + *) as_fn_error $? "bad value ${enableval} for newlib-iconv option" "$LINENO" 5 ;; + esac + fi +else + newlib_iconv=${newlib_iconv} +fi + +# Check whether --enable-newlib-elix-level was given. +if test "${enable_newlib_elix_level+set}" = set; then : + enableval=$enable_newlib_elix_level; case "${enableval}" in + 0) newlib_elix_level=0 ;; + 1) newlib_elix_level=1 ;; + 2) newlib_elix_level=2 ;; + 3) newlib_elix_level=3 ;; + 4) newlib_elix_level=4 ;; + *) as_fn_error $? "bad value ${enableval} for newlib-elix-level option" "$LINENO" 5 ;; + esac +else + newlib_elix_level=0 +fi + +# Check whether --enable-newlib-io-float was given. +if test "${enable_newlib_io_float+set}" = set; then : + enableval=$enable_newlib_io_float; case "${enableval}" in + yes) newlib_io_float=yes ;; + no) newlib_io_float=no ;; + *) as_fn_error $? "bad value ${enableval} for newlib-io-float option" "$LINENO" 5 ;; + esac +else + newlib_io_float=yes +fi + +# Check whether --enable-newlib-supplied-syscalls was given. +if test "${enable_newlib_supplied_syscalls+set}" = set; then : + enableval=$enable_newlib_supplied_syscalls; case "${enableval}" in + yes) newlib_may_supply_syscalls=yes ;; + no) newlib_may_supply_syscalls=no ;; + *) as_fn_error $? "bad value ${enableval} for newlib-supplied-syscalls option" "$LINENO" 5 ;; + esac +else + newlib_may_supply_syscalls=yes +fi + + if test x${newlib_may_supply_syscalls} = xyes; then + MAY_SUPPLY_SYSCALLS_TRUE= + MAY_SUPPLY_SYSCALLS_FALSE='#' +else + MAY_SUPPLY_SYSCALLS_TRUE='#' + MAY_SUPPLY_SYSCALLS_FALSE= +fi + + + +test -z "${with_target_subdir}" && with_target_subdir=. + +if test "${srcdir}" = "."; then + if test "${with_target_subdir}" != "."; then + newlib_basedir="${srcdir}/${with_multisrctop}../../../.." + else + newlib_basedir="${srcdir}/${with_multisrctop}../../.." + fi +else + newlib_basedir="${srcdir}/../../.." +fi + + + + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='newlib' + VERSION='2.2.0' + + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# FIXME: We temporarily define our own version of AC_PROG_CC. This is +# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We +# are probably using a cross compiler, which will not be able to fully +# link an executable. This should really be fixed in autoconf +# itself. + + + + + + + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -z "$CC" && as_fn_error $? "no acceptable cc found in \$PATH" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using GNU C" >&5 +$as_echo_n "checking whether we are using GNU C... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_c_compiler_gnu=yes +else + ac_cv_c_compiler_gnu=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } + +if test $ac_cv_c_compiler_gnu = yes; then + GCC=yes + ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-O2" + fi +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}readelf", so it can be a program name with args. +set dummy ${ac_tool_prefix}readelf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_READELF+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$READELF"; then + ac_cv_prog_READELF="$READELF" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_READELF="${ac_tool_prefix}readelf" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +READELF=$ac_cv_prog_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_READELF"; then + ac_ct_READELF=$READELF + # Extract the first word of "readelf", so it can be a program name with args. +set dummy readelf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_READELF+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_READELF"; then + ac_cv_prog_ac_ct_READELF="$ac_ct_READELF" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_READELF="readelf" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_READELF=$ac_cv_prog_ac_ct_READELF +if test -n "$ac_ct_READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_READELF" >&5 +$as_echo "$ac_ct_READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_READELF" = x; then + READELF=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + READELF=$ac_ct_READELF + fi +else + READELF="$ac_cv_prog_READELF" +fi + + + + +# Hack to ensure that INSTALL won't be set to "../" with autoconf 2.13. */ +ac_given_INSTALL=$INSTALL + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + +# By default we simply use the C compiler to build assembly code. + +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS + + + + +# We need AC_EXEEXT to keep automake happy in cygnus mode. However, +# at least currently, we never actually build a program, so we never +# need to use $(EXEEXT). Moreover, the test for EXEEXT normally +# fails, because we are probably configuring with a cross compiler +# which can't create executables. So we include AC_EXEEXT to keep +# automake happy, but we don't execute it, since we don't care about +# the result. +if false; then + + dummy_var=1 +fi + +. ${newlib_basedir}/configure.host + +newlib_cflags="${newlib_cflags} -fno-builtin" + +NEWLIB_CFLAGS=${newlib_cflags} + + +NO_INCLUDE_LIST=${noinclude} + + +LDFLAGS=${ldflags} + + + if test x${newlib_elix_level} = x0; then + ELIX_LEVEL_0_TRUE= + ELIX_LEVEL_0_FALSE='#' +else + ELIX_LEVEL_0_TRUE='#' + ELIX_LEVEL_0_FALSE= +fi + + if test x${newlib_elix_level} = x1; then + ELIX_LEVEL_1_TRUE= + ELIX_LEVEL_1_FALSE='#' +else + ELIX_LEVEL_1_TRUE='#' + ELIX_LEVEL_1_FALSE= +fi + + if test x${newlib_elix_level} = x2; then + ELIX_LEVEL_2_TRUE= + ELIX_LEVEL_2_FALSE='#' +else + ELIX_LEVEL_2_TRUE='#' + ELIX_LEVEL_2_FALSE= +fi + + if test x${newlib_elix_level} = x3; then + ELIX_LEVEL_3_TRUE= + ELIX_LEVEL_3_FALSE='#' +else + ELIX_LEVEL_3_TRUE='#' + ELIX_LEVEL_3_FALSE= +fi + + if test x${newlib_elix_level} = x4; then + ELIX_LEVEL_4_TRUE= + ELIX_LEVEL_4_FALSE='#' +else + ELIX_LEVEL_4_TRUE='#' + ELIX_LEVEL_4_FALSE= +fi + + + if test x${use_libtool} = xyes; then + USE_LIBTOOL_TRUE= + USE_LIBTOOL_FALSE='#' +else + USE_LIBTOOL_TRUE='#' + USE_LIBTOOL_FALSE= +fi + + +# Hard-code OBJEXT. Normally it is set by AC_OBJEXT, but we +# use oext, which is set in configure.host based on the target platform. +OBJEXT=${oext} + + + + + + + + + + +ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAY_SUPPLY_SYSCALLS_TRUE}" && test -z "${MAY_SUPPLY_SYSCALLS_FALSE}"; then + as_fn_error $? "conditional \"MAY_SUPPLY_SYSCALLS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ELIX_LEVEL_0_TRUE}" && test -z "${ELIX_LEVEL_0_FALSE}"; then + as_fn_error $? "conditional \"ELIX_LEVEL_0\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ELIX_LEVEL_1_TRUE}" && test -z "${ELIX_LEVEL_1_FALSE}"; then + as_fn_error $? "conditional \"ELIX_LEVEL_1\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ELIX_LEVEL_2_TRUE}" && test -z "${ELIX_LEVEL_2_FALSE}"; then + as_fn_error $? "conditional \"ELIX_LEVEL_2\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ELIX_LEVEL_3_TRUE}" && test -z "${ELIX_LEVEL_3_FALSE}"; then + as_fn_error $? "conditional \"ELIX_LEVEL_3\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ELIX_LEVEL_4_TRUE}" && test -z "${ELIX_LEVEL_4_FALSE}"; then + as_fn_error $? "conditional \"ELIX_LEVEL_4\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_LIBTOOL_TRUE}" && test -z "${USE_LIBTOOL_FALSE}"; then + as_fn_error $? "conditional \"USE_LIBTOOL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by newlib $as_me 2.2.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +newlib config.status 2.2.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/newlib/libc/sys/vita/configure.in b/newlib/libc/sys/vita/configure.in new file mode 100755 index 0000000000..9e15348313 --- /dev/null +++ b/newlib/libc/sys/vita/configure.in @@ -0,0 +1,7 @@ +AC_PREREQ(2.59) +AC_INIT([newlib], [NEWLIB_VERSION]) +AC_CONFIG_SRCDIR([crt0.c]) +AC_CONFIG_AUX_DIR(../../../..) +NEWLIB_CONFIGURE(../../..) +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c new file mode 100755 index 0000000000..d9016dfdb8 --- /dev/null +++ b/newlib/libc/sys/vita/crt0.c @@ -0,0 +1,5 @@ +int main(int argc, const char* argv[]); + +void _start() { + exit(main(1, (const char*[]){"", 0})); +} \ No newline at end of file diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c new file mode 100755 index 0000000000..dd27dac26c --- /dev/null +++ b/newlib/libc/sys/vita/syscalls.c @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include + +_ssize_t +_write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) +{ + reent->_errno = ENOSYS; + return -1; +} + +void +_exit(int rc) +{ + while (1) {} +} + +int +_close_r(struct _reent *reent, int fildes) +{ + reent->_errno = ENOSYS; + return -1; +} + +char *__env[1] = { 0 }; +char **environ = __env; + +int +_execve_r(struct _reent *reent, const char *name, char * const *argv, + char * const *env) +{ + reent->_errno = ENOSYS; + return -1; +} + +int +_fork_r(struct _reent *reent) +{ + errno = ENOSYS; + return -1; +} + +int +_fstat_r(struct _reent *reent, int fildes, struct stat *st) +{ + reent->_errno = ENOSYS; + return -1; +} + +int +_getpid_r(struct _reent *reent) +{ + reent->_errno = ENOSYS; + return -1; +} + +int +_gettimeofday(struct _reent *reent, struct timeval *ptimeval, void *ptimezone) +{ + reent->_errno = ENOSYS; + return -1; +} + +int +_isatty_r(struct _reent *reent, int file) +{ + reent->_errno = ENOSYS; + return 0; +} + +int +_kill_r(struct _reent *reent, int pid, int sig) +{ + reent->_errno = ENOSYS; + return -1; +} + +int +_link_r(struct _reent *reent, const char *existing, const char *new) +{ + reent->_errno = ENOSYS; + return -1; +} + +_off_t +_lseek_r(struct _reent *reent, int file, _off_t ptr, int dir) +{ + errno = ENOSYS; + return -1; +} + +int +_open(struct _reent *reent, char *file, int flags, int mode) +{ + reent->_errno = ENOSYS; + return -1; +} + +_ssize_t +_read_r(struct _reent *reent, int file, void *ptr, size_t len) +{ + reent->_errno = ENOSYS; + return -1; +} + +int +_readlink_r(struct _reent *reent, const char *path, char *buf, size_t bufsize) +{ + reent->_errno = ENOSYS; + return -1; +} + +int +_stat_r(struct _reent *reent, const char *path, struct stat *buf) +{ + reent->_errno = EIO; + return -1; +} + +int +_unlink_r(struct _reent *reent, const char * path) +{ + reent->_errno = EIO; + return (-1); +} From 69b0d566c9977e37216ce48ca236bebe4a0219d0 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Thu, 13 Aug 2015 16:31:57 +0300 Subject: [PATCH 02/65] working (not thread safe) sbrk --- newlib/libc/sys/vita/Makefile.am | 2 +- newlib/libc/sys/vita/Makefile.in | 10 ++++++++-- newlib/libc/sys/vita/crt0.c | 32 +++++++++++++++++++++++++++++++- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/newlib/libc/sys/vita/Makefile.am b/newlib/libc/sys/vita/Makefile.am index cf77a1cfab..ddff53a4fa 100755 --- a/newlib/libc/sys/vita/Makefile.am +++ b/newlib/libc/sys/vita/Makefile.am @@ -8,7 +8,7 @@ AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c +lib_a_SOURCES = syscalls.c sbrk.c lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) diff --git a/newlib/libc/sys/vita/Makefile.in b/newlib/libc/sys/vita/Makefile.in index 5917807dd3..abaabf01c4 100644 --- a/newlib/libc/sys/vita/Makefile.in +++ b/newlib/libc/sys/vita/Makefile.in @@ -68,7 +68,7 @@ LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru lib_a_AR = $(AR) $(ARFLAGS) lib_a_LIBADD = -am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) +am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) lib_a-sbrk.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -194,7 +194,7 @@ AUTOMAKE_OPTIONS = cygnus INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c +lib_a_SOURCES = syscalls.c sbrk.c lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. @@ -263,6 +263,12 @@ lib_a-syscalls.o: syscalls.c lib_a-syscalls.obj: syscalls.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-syscalls.obj `if test -f 'syscalls.c'; then $(CYGPATH_W) 'syscalls.c'; else $(CYGPATH_W) '$(srcdir)/syscalls.c'; fi` +lib_a-sbrk.o: sbrk.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sbrk.o `test -f 'sbrk.c' || echo '$(srcdir)/'`sbrk.c + +lib_a-sbrk.obj: sbrk.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sbrk.obj `if test -f 'sbrk.c'; then $(CYGPATH_W) 'sbrk.c'; else $(CYGPATH_W) '$(srcdir)/sbrk.c'; fi` + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index d9016dfdb8..aff06bb328 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -1,5 +1,35 @@ int main(int argc, const char* argv[]); +extern int _newlib_heap_memblock; +extern unsigned _newlib_heap_size; +extern char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; + +void _init_vita_heap(void) { + int ret; + // Create a memblock for the heap memory, 32MB + _newlib_heap_size = 32 * 1024 * 1024; + _newlib_heap_memblock = sceKernelAllocMemBlock("Newlib heap", 0x0c20d060, _newlib_heap_size, 0); + if (_newlib_heap_memblock < 0) { + goto failure; + } + if ((ret = sceKernelGetMemBlockBase(_newlib_heap_memblock, &_newlib_heap_base)) < 0) { + goto failure; + } + _newlib_heap_end = _newlib_heap_base + _newlib_heap_size; + _newlib_heap_cur = _newlib_heap_base; + + return; +failure: + _newlib_heap_memblock = 0; + _newlib_heap_base = 0; + _newlib_heap_cur = 0; +} + +void _init_vita_newlib(void) { + _init_vita_heap(); +} + void _start() { + _init_vita_newlib(); exit(main(1, (const char*[]){"", 0})); -} \ No newline at end of file +} From 624ead333fa22a1e7350ef2d596df180bfbb7aba Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Thu, 13 Aug 2015 23:48:52 +0300 Subject: [PATCH 03/65] [Vita] Implement a proper thread safe _sbrk_r. --- newlib/libc/sys/vita/crt0.c | 7 +++++-- newlib/libc/sys/vita/sbrk.c | 22 ++++++++++++++++++++++ newlib/libc/sys/vita/syscalls.c | 2 +- 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100755 newlib/libc/sys/vita/sbrk.c diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index aff06bb328..a1d7b48fef 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -3,16 +3,19 @@ int main(int argc, const char* argv[]); extern int _newlib_heap_memblock; extern unsigned _newlib_heap_size; extern char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; +extern char _newlib_sbrk_mutex[32]; void _init_vita_heap(void) { - int ret; + // Create a mutex to use inside _sbrk_r + if (sceKernelCreateLwMutex(_newlib_sbrk_mutex, "sbrk mutex", 0, 0, 0) < 0) + goto failure; // Create a memblock for the heap memory, 32MB _newlib_heap_size = 32 * 1024 * 1024; _newlib_heap_memblock = sceKernelAllocMemBlock("Newlib heap", 0x0c20d060, _newlib_heap_size, 0); if (_newlib_heap_memblock < 0) { goto failure; } - if ((ret = sceKernelGetMemBlockBase(_newlib_heap_memblock, &_newlib_heap_base)) < 0) { + if (sceKernelGetMemBlockBase(_newlib_heap_memblock, &_newlib_heap_base) < 0) { goto failure; } _newlib_heap_end = _newlib_heap_base + _newlib_heap_size; diff --git a/newlib/libc/sys/vita/sbrk.c b/newlib/libc/sys/vita/sbrk.c new file mode 100755 index 0000000000..ea3745bcf6 --- /dev/null +++ b/newlib/libc/sys/vita/sbrk.c @@ -0,0 +1,22 @@ +#include +#include + +int _newlib_heap_memblock; +unsigned _newlib_heap_size; +char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; + +char _newlib_sbrk_mutex[32] __attribute__ ((aligned (8))); + +void * _sbrk_r(struct _reent *reent, ptrdiff_t incr) { + if (sceKernelLockLwMutex(_newlib_sbrk_mutex, 1, 0) < 0 || !_newlib_heap_base || _newlib_heap_cur + incr >= _newlib_heap_end) { + sceKernelUnlockLwMutex(_newlib_sbrk_mutex, 1); + reent->_errno = ENOMEM; + return -1; + } + + char *prev_heap_end = _newlib_heap_cur; + _newlib_heap_cur += incr; + + sceKernelUnlockLwMutex(_newlib_sbrk_mutex, 1); + return (void*) prev_heap_end; +} diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index dd27dac26c..827636255a 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -92,7 +92,7 @@ _lseek_r(struct _reent *reent, int file, _off_t ptr, int dir) } int -_open(struct _reent *reent, char *file, int flags, int mode) +_open_r(struct _reent *reent, const char *file, int flags, int mode) { reent->_errno = ENOSYS; return -1; From 2bbaa43caf8e53a10a16782f90042b5e04429205 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Fri, 14 Aug 2015 21:58:37 +0300 Subject: [PATCH 04/65] [Vita] Implement a per-thread reent, also a small fix to sbrk. --- newlib/libc/reent/getreent.c | 2 + newlib/libc/sys/vita/Makefile.am | 2 +- newlib/libc/sys/vita/Makefile.in | 17 +++- newlib/libc/sys/vita/crt0.c | 7 +- newlib/libc/sys/vita/reent.c | 136 +++++++++++++++++++++++++++++++ newlib/libc/sys/vita/sbrk.c | 5 +- newlib/libc/sys/vita/threading.c | 105 ++++++++++++++++++++++++ 7 files changed, 269 insertions(+), 5 deletions(-) create mode 100644 newlib/libc/sys/vita/reent.c create mode 100755 newlib/libc/sys/vita/threading.c diff --git a/newlib/libc/reent/getreent.c b/newlib/libc/reent/getreent.c index 60ae6fbb71..e5ee830711 100644 --- a/newlib/libc/reent/getreent.c +++ b/newlib/libc/reent/getreent.c @@ -7,8 +7,10 @@ #undef __getreent #endif +#if 0 struct _reent * _DEFUN_VOID(__getreent) { return _impure_ptr; } +#endif \ No newline at end of file diff --git a/newlib/libc/sys/vita/Makefile.am b/newlib/libc/sys/vita/Makefile.am index ddff53a4fa..ff73b44250 100755 --- a/newlib/libc/sys/vita/Makefile.am +++ b/newlib/libc/sys/vita/Makefile.am @@ -8,7 +8,7 @@ AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c sbrk.c +lib_a_SOURCES = syscalls.c sbrk.c threading.c reent.c lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) diff --git a/newlib/libc/sys/vita/Makefile.in b/newlib/libc/sys/vita/Makefile.in index abaabf01c4..8dde28318c 100644 --- a/newlib/libc/sys/vita/Makefile.in +++ b/newlib/libc/sys/vita/Makefile.in @@ -68,7 +68,8 @@ LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru lib_a_AR = $(AR) $(ARFLAGS) lib_a_LIBADD = -am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) lib_a-sbrk.$(OBJEXT) +am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) lib_a-sbrk.$(OBJEXT) \ + lib_a-threading.$(OBJEXT) lib_a-reent.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -194,7 +195,7 @@ AUTOMAKE_OPTIONS = cygnus INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c sbrk.c +lib_a_SOURCES = syscalls.c sbrk.c threading.c reent.c lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. @@ -269,6 +270,18 @@ lib_a-sbrk.o: sbrk.c lib_a-sbrk.obj: sbrk.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sbrk.obj `if test -f 'sbrk.c'; then $(CYGPATH_W) 'sbrk.c'; else $(CYGPATH_W) '$(srcdir)/sbrk.c'; fi` +lib_a-threading.o: threading.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-threading.o `test -f 'threading.c' || echo '$(srcdir)/'`threading.c + +lib_a-threading.obj: threading.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-threading.obj `if test -f 'threading.c'; then $(CYGPATH_W) 'threading.c'; else $(CYGPATH_W) '$(srcdir)/threading.c'; fi` + +lib_a-reent.o: reent.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-reent.o `test -f 'reent.c' || echo '$(srcdir)/'`reent.c + +lib_a-reent.obj: reent.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-reent.obj `if test -f 'reent.c'; then $(CYGPATH_W) 'reent.c'; else $(CYGPATH_W) '$(srcdir)/reent.c'; fi` + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index a1d7b48fef..1f8c9759fd 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -6,9 +6,11 @@ extern char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; extern char _newlib_sbrk_mutex[32]; void _init_vita_heap(void) { + int ret; // Create a mutex to use inside _sbrk_r - if (sceKernelCreateLwMutex(_newlib_sbrk_mutex, "sbrk mutex", 0, 0, 0) < 0) + if ((ret = sceKernelCreateLwMutex(_newlib_sbrk_mutex, "sbrk mutex", 0, 0, 0)) < 0) { goto failure; + } // Create a memblock for the heap memory, 32MB _newlib_heap_size = 32 * 1024 * 1024; _newlib_heap_memblock = sceKernelAllocMemBlock("Newlib heap", 0x0c20d060, _newlib_heap_size, 0); @@ -28,8 +30,11 @@ void _init_vita_heap(void) { _newlib_heap_cur = 0; } +void _init_vita_reent(void); + void _init_vita_newlib(void) { _init_vita_heap(); + _init_vita_reent(); } void _start() { diff --git a/newlib/libc/sys/vita/reent.c b/newlib/libc/sys/vita/reent.c new file mode 100644 index 0000000000..b6c2abf02e --- /dev/null +++ b/newlib/libc/sys/vita/reent.c @@ -0,0 +1,136 @@ +/* +FUNCTION + <>---definition of impure data. + +INDEX + reent + +DESCRIPTION + This module defines the impure data area used by the + non-reentrant functions, such as strtok. +*/ + +#include +#include + +#ifdef _REENT_ONLY +#ifndef REENTRANT_SYSCALLS_PROVIDED +#define REENTRANT_SYSCALLS_PROVIDED +#endif +#endif + +#ifndef REENTRANT_SYSCALLS_PROVIDED + +/* We use the errno variable used by the system dependent layer. */ +#undef errno +int errno; + +#endif + +/* Interim cleanup code */ + +void +_DEFUN (cleanup_glue, (ptr, glue), + struct _reent *ptr _AND + struct _glue *glue) +{ + /* Have to reclaim these in reverse order: */ + if (glue->_next) + cleanup_glue (ptr, glue->_next); + + _free_r (ptr, glue); +} + +void +_DEFUN (_reclaim_reent, (ptr), + struct _reent *ptr) +{ + if (ptr != _impure_ptr) + { + /* used by mprec routines. */ +#ifdef _REENT_SMALL + if (ptr->_mp) /* don't bother allocating it! */ + { +#endif + if (_REENT_MP_FREELIST(ptr)) + { + int i; + for (i = 0; i < _Kmax; i++) + { + struct _Bigint *thisone, *nextone; + + nextone = _REENT_MP_FREELIST(ptr)[i]; + while (nextone) + { + thisone = nextone; + nextone = nextone->_next; + _free_r (ptr, thisone); + } + } + + _free_r (ptr, _REENT_MP_FREELIST(ptr)); + } + if (_REENT_MP_RESULT(ptr)) + _free_r (ptr, _REENT_MP_RESULT(ptr)); +#ifdef _REENT_SMALL + } +#endif + +#ifdef _REENT_SMALL + if (ptr->_emergency) + _free_r (ptr, ptr->_emergency); + if (ptr->_mp) + _free_r (ptr, ptr->_mp); + if (ptr->_r48) + _free_r (ptr, ptr->_r48); + if (ptr->_localtime_buf) + _free_r (ptr, ptr->_localtime_buf); + if (ptr->_asctime_buf) + _free_r (ptr, ptr->_asctime_buf); + if (ptr->_signal_buf) + _free_r (ptr, ptr->_signal_buf); + if (ptr->_misc) + _free_r (ptr, ptr->_misc); +#endif + +#ifndef _REENT_GLOBAL_ATEXIT + /* atexit stuff */ +# ifdef _REENT_SMALL + if (ptr->_atexit && ptr->_atexit->_on_exit_args_ptr) + _free_r (ptr, ptr->_atexit->_on_exit_args_ptr); +# else + if ((ptr->_atexit) && (ptr->_atexit != &ptr->_atexit0)) + { + struct _atexit *p, *q; + for (p = ptr->_atexit; p != &ptr->_atexit0;) + { + q = p; + p = p->_next; + _free_r (ptr, q); + } + } +# endif +#endif + + if (ptr->_cvtbuf) + _free_r (ptr, ptr->_cvtbuf); + /* We should free _sig_func to avoid a memory leak, but how to + do it safely considering that a signal may be delivered immediately + after the free? + if (ptr->_sig_func) + _free_r (ptr, ptr->_sig_func);*/ + + if (ptr->__sdidinit) + { + /* cleanup won't reclaim memory 'coz usually it's run + before the program exits, and who wants to wait for that? */ + ptr->__cleanup (ptr); + + if (ptr->__sglue._next) + cleanup_glue (ptr, ptr->__sglue._next); + } + + /* Malloc memory not reclaimed; no good way to return memory anyway. */ + + } +} diff --git a/newlib/libc/sys/vita/sbrk.c b/newlib/libc/sys/vita/sbrk.c index ea3745bcf6..895fa7ea06 100755 --- a/newlib/libc/sys/vita/sbrk.c +++ b/newlib/libc/sys/vita/sbrk.c @@ -8,8 +8,11 @@ char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; char _newlib_sbrk_mutex[32] __attribute__ ((aligned (8))); void * _sbrk_r(struct _reent *reent, ptrdiff_t incr) { - if (sceKernelLockLwMutex(_newlib_sbrk_mutex, 1, 0) < 0 || !_newlib_heap_base || _newlib_heap_cur + incr >= _newlib_heap_end) { + if (sceKernelLockLwMutex(_newlib_sbrk_mutex, 1, 0) < 0) + goto fail; + if (!_newlib_heap_base || _newlib_heap_cur + incr >= _newlib_heap_end) { sceKernelUnlockLwMutex(_newlib_sbrk_mutex, 1); +fail: reent->_errno = ENOMEM; return -1; } diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c new file mode 100755 index 0000000000..7e90b18e9c --- /dev/null +++ b/newlib/libc/sys/vita/threading.c @@ -0,0 +1,105 @@ +// This provides support for __getreent() as well as implementation of our thread-related wrappers + +#include + +#define MAX_THREADS 64 + +typedef struct reent_for_thread { + int thread_id; + int needs_reclaim; + struct _reent reent; +} reent_for_thread; + +reent_for_thread reent_list[MAX_THREADS]; +int _newlib_reent_mutex; +struct _reent _newlib_global_reent; + +int sceKernelExitThread(int); +int sceKernelExitDeleteThread(int); + +#define TLS_REENT_PTR sceKernelGetTLSAddr(0x88) + +#define list_entry(ptr, type, member) \ + ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) + +int _exit_thread_common(int exit_status, int (*exit_func)(int)) { + int ret, thread_id; + struct reent_for_thread *for_thread; + // We only need to cleanup if reent is allocated, i.e. if it's on our TLS + // We also don't need to clean up the global reent + struct _reent **on_tls = TLS_REENT_PTR; + if (!*on_tls || *on_tls == &_newlib_global_reent) + return exit_func(exit_status); + for_thread = list_entry(*on_tls, struct reent_for_thread, reent); + // Remove from TLS + *on_tls = 0; + // Lock the list because we'll be modifying it + sceKernelLockMutex(_newlib_reent_mutex); + // Set thread id to zero, which means the reent is free + thread_id = for_thread->thread_id; + for_thread->thread_id = 0; + // We can't reclaim it here, will be done later in __getreent + for_thread->needs_reclaim = 1; + // Try to actually exit the thread + ret = exit_func(exit_status); + // If it succeeds, the mutex is unlocked, and we don't get here + // However, if it fails, we need to restore thread_id and unlock the mutex + for_thread->thread_id = thread_id; + sceKernelUnlockMutex(_newlib_reent_mutex); + // And put it back on TLS + *on_tls = &for_thread->reent; + return ret; +} + +int vita_exit_thread(int exit_status) { + return _exit_thread_common(exit_status, sceKernelExitThread); +} + +int vita_exit_delete_thread(int exit_status) { + return _exit_thread_common(exit_status, sceKernelExitDeleteThread); +} + +struct _reent *__getreent(void) { + int i; + struct reent_for_thread *free_reent = 0; + struct _reent *returned_reent = 0; + // A pointer to our reent should be on the TLS + struct _reent **on_tls = TLS_REENT_PTR; + if (*on_tls) { + return *on_tls; + } + // If it's not on the TLS this means the thread doesn't have a reent allocated yet + // We allocate one and put a pointer to it on the TLS + sceKernelLockMutex(_newlib_reent_mutex, 1, 0); + for (i = 0; i < MAX_THREADS; ++i) + if (reent_list[i].thread_id == 0) { + free_reent = &reent_list[i]; + break; + } + if (!free_reent) { + returned_reent = &_newlib_global_reent; + } else { + // First, check if it needs to be cleaned up (if it came from another thread) + if (free_reent->needs_reclaim) { + _reclaim_reent(&free_reent->reent); + free_reent->needs_reclaim = 0; + } + // Set it up + free_reent->thread_id = sceKernelGetThreadId(); + _REENT_INIT_PTR(&free_reent->reent); + returned_reent = &free_reent->reent; + } + sceKernelUnlockMutex(_newlib_reent_mutex, 1); + // Put it on TLS for faster access time + *on_tls = returned_reent; + return returned_reent; +} + +// Called from _start to set up the main thread reentrancy structure +void _init_vita_reent(void) { + _newlib_reent_mutex = sceKernelCreateMutex("reent list access mutex", 0, 0, 0); + reent_list[0].thread_id = sceKernelGetThreadId(); + _REENT_INIT_PTR(&reent_list[0].reent); + *(struct _reent **)(sceKernelGetTLSAddr(0x88)) = &reent_list[0].reent; + _REENT_INIT_PTR(&_newlib_global_reent); +} From 5a8abc088f52f669693a8d5d71e8f9f8cad55b1b Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Fri, 14 Aug 2015 22:55:06 +0300 Subject: [PATCH 05/65] [Vita] Implement proper __malloc_lock, __malloc_unlock --- newlib/libc/sys/vita/Makefile.am | 2 +- newlib/libc/sys/vita/Makefile.in | 12 +-- newlib/libc/sys/vita/crt0.c | 33 +------- newlib/libc/sys/vita/mlock.c | 13 +++ newlib/libc/sys/vita/reent.c | 136 ------------------------------- newlib/libc/sys/vita/sbrk.c | 24 ++++++ 6 files changed, 45 insertions(+), 175 deletions(-) create mode 100755 newlib/libc/sys/vita/mlock.c delete mode 100644 newlib/libc/sys/vita/reent.c diff --git a/newlib/libc/sys/vita/Makefile.am b/newlib/libc/sys/vita/Makefile.am index ff73b44250..800371e24a 100755 --- a/newlib/libc/sys/vita/Makefile.am +++ b/newlib/libc/sys/vita/Makefile.am @@ -8,7 +8,7 @@ AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c sbrk.c threading.c reent.c +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) diff --git a/newlib/libc/sys/vita/Makefile.in b/newlib/libc/sys/vita/Makefile.in index 8dde28318c..11740df66b 100644 --- a/newlib/libc/sys/vita/Makefile.in +++ b/newlib/libc/sys/vita/Makefile.in @@ -69,7 +69,7 @@ ARFLAGS = cru lib_a_AR = $(AR) $(ARFLAGS) lib_a_LIBADD = am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) lib_a-sbrk.$(OBJEXT) \ - lib_a-threading.$(OBJEXT) lib_a-reent.$(OBJEXT) + lib_a-threading.$(OBJEXT) lib_a-mlock.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -195,7 +195,7 @@ AUTOMAKE_OPTIONS = cygnus INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c sbrk.c threading.c reent.c +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. @@ -276,11 +276,11 @@ lib_a-threading.o: threading.c lib_a-threading.obj: threading.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-threading.obj `if test -f 'threading.c'; then $(CYGPATH_W) 'threading.c'; else $(CYGPATH_W) '$(srcdir)/threading.c'; fi` -lib_a-reent.o: reent.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-reent.o `test -f 'reent.c' || echo '$(srcdir)/'`reent.c +lib_a-mlock.o: mlock.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-mlock.o `test -f 'mlock.c' || echo '$(srcdir)/'`mlock.c -lib_a-reent.obj: reent.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-reent.obj `if test -f 'reent.c'; then $(CYGPATH_W) 'reent.c'; else $(CYGPATH_W) '$(srcdir)/reent.c'; fi` +lib_a-mlock.obj: mlock.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-mlock.obj `if test -f 'mlock.c'; then $(CYGPATH_W) 'mlock.c'; else $(CYGPATH_W) '$(srcdir)/mlock.c'; fi` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index 1f8c9759fd..1027055e03 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -1,40 +1,9 @@ int main(int argc, const char* argv[]); -extern int _newlib_heap_memblock; -extern unsigned _newlib_heap_size; -extern char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; -extern char _newlib_sbrk_mutex[32]; - -void _init_vita_heap(void) { - int ret; - // Create a mutex to use inside _sbrk_r - if ((ret = sceKernelCreateLwMutex(_newlib_sbrk_mutex, "sbrk mutex", 0, 0, 0)) < 0) { - goto failure; - } - // Create a memblock for the heap memory, 32MB - _newlib_heap_size = 32 * 1024 * 1024; - _newlib_heap_memblock = sceKernelAllocMemBlock("Newlib heap", 0x0c20d060, _newlib_heap_size, 0); - if (_newlib_heap_memblock < 0) { - goto failure; - } - if (sceKernelGetMemBlockBase(_newlib_heap_memblock, &_newlib_heap_base) < 0) { - goto failure; - } - _newlib_heap_end = _newlib_heap_base + _newlib_heap_size; - _newlib_heap_cur = _newlib_heap_base; - - return; -failure: - _newlib_heap_memblock = 0; - _newlib_heap_base = 0; - _newlib_heap_cur = 0; -} - -void _init_vita_reent(void); - void _init_vita_newlib(void) { _init_vita_heap(); _init_vita_reent(); + _init_vita_malloc(); } void _start() { diff --git a/newlib/libc/sys/vita/mlock.c b/newlib/libc/sys/vita/mlock.c new file mode 100755 index 0000000000..969d83e34e --- /dev/null +++ b/newlib/libc/sys/vita/mlock.c @@ -0,0 +1,13 @@ +char _newlib_malloc_mutex[32] __attribute__ ((aligned (8))); + +void __malloc_lock(struct _reent *r) { + sceKernelLockLwMutex(_newlib_malloc_mutex, 1, 0); +} + +void __malloc_unlock(struct _reent *r) { + sceKernelUnlockLwMutex(_newlib_malloc_mutex, 1); +} + +void _init_vita_malloc(void) { + sceKernelCreateLwMutex(_newlib_malloc_mutex, "malloc mutex", 2, 0, 0); +} diff --git a/newlib/libc/sys/vita/reent.c b/newlib/libc/sys/vita/reent.c deleted file mode 100644 index b6c2abf02e..0000000000 --- a/newlib/libc/sys/vita/reent.c +++ /dev/null @@ -1,136 +0,0 @@ -/* -FUNCTION - <>---definition of impure data. - -INDEX - reent - -DESCRIPTION - This module defines the impure data area used by the - non-reentrant functions, such as strtok. -*/ - -#include -#include - -#ifdef _REENT_ONLY -#ifndef REENTRANT_SYSCALLS_PROVIDED -#define REENTRANT_SYSCALLS_PROVIDED -#endif -#endif - -#ifndef REENTRANT_SYSCALLS_PROVIDED - -/* We use the errno variable used by the system dependent layer. */ -#undef errno -int errno; - -#endif - -/* Interim cleanup code */ - -void -_DEFUN (cleanup_glue, (ptr, glue), - struct _reent *ptr _AND - struct _glue *glue) -{ - /* Have to reclaim these in reverse order: */ - if (glue->_next) - cleanup_glue (ptr, glue->_next); - - _free_r (ptr, glue); -} - -void -_DEFUN (_reclaim_reent, (ptr), - struct _reent *ptr) -{ - if (ptr != _impure_ptr) - { - /* used by mprec routines. */ -#ifdef _REENT_SMALL - if (ptr->_mp) /* don't bother allocating it! */ - { -#endif - if (_REENT_MP_FREELIST(ptr)) - { - int i; - for (i = 0; i < _Kmax; i++) - { - struct _Bigint *thisone, *nextone; - - nextone = _REENT_MP_FREELIST(ptr)[i]; - while (nextone) - { - thisone = nextone; - nextone = nextone->_next; - _free_r (ptr, thisone); - } - } - - _free_r (ptr, _REENT_MP_FREELIST(ptr)); - } - if (_REENT_MP_RESULT(ptr)) - _free_r (ptr, _REENT_MP_RESULT(ptr)); -#ifdef _REENT_SMALL - } -#endif - -#ifdef _REENT_SMALL - if (ptr->_emergency) - _free_r (ptr, ptr->_emergency); - if (ptr->_mp) - _free_r (ptr, ptr->_mp); - if (ptr->_r48) - _free_r (ptr, ptr->_r48); - if (ptr->_localtime_buf) - _free_r (ptr, ptr->_localtime_buf); - if (ptr->_asctime_buf) - _free_r (ptr, ptr->_asctime_buf); - if (ptr->_signal_buf) - _free_r (ptr, ptr->_signal_buf); - if (ptr->_misc) - _free_r (ptr, ptr->_misc); -#endif - -#ifndef _REENT_GLOBAL_ATEXIT - /* atexit stuff */ -# ifdef _REENT_SMALL - if (ptr->_atexit && ptr->_atexit->_on_exit_args_ptr) - _free_r (ptr, ptr->_atexit->_on_exit_args_ptr); -# else - if ((ptr->_atexit) && (ptr->_atexit != &ptr->_atexit0)) - { - struct _atexit *p, *q; - for (p = ptr->_atexit; p != &ptr->_atexit0;) - { - q = p; - p = p->_next; - _free_r (ptr, q); - } - } -# endif -#endif - - if (ptr->_cvtbuf) - _free_r (ptr, ptr->_cvtbuf); - /* We should free _sig_func to avoid a memory leak, but how to - do it safely considering that a signal may be delivered immediately - after the free? - if (ptr->_sig_func) - _free_r (ptr, ptr->_sig_func);*/ - - if (ptr->__sdidinit) - { - /* cleanup won't reclaim memory 'coz usually it's run - before the program exits, and who wants to wait for that? */ - ptr->__cleanup (ptr); - - if (ptr->__sglue._next) - cleanup_glue (ptr, ptr->__sglue._next); - } - - /* Malloc memory not reclaimed; no good way to return memory anyway. */ - - } -} diff --git a/newlib/libc/sys/vita/sbrk.c b/newlib/libc/sys/vita/sbrk.c index 895fa7ea06..8b03267128 100755 --- a/newlib/libc/sys/vita/sbrk.c +++ b/newlib/libc/sys/vita/sbrk.c @@ -23,3 +23,27 @@ void * _sbrk_r(struct _reent *reent, ptrdiff_t incr) { sceKernelUnlockLwMutex(_newlib_sbrk_mutex, 1); return (void*) prev_heap_end; } + +void _init_vita_heap(void) { + // Create a mutex to use inside _sbrk_r + if (sceKernelCreateLwMutex(_newlib_sbrk_mutex, "sbrk mutex", 0, 0, 0) < 0) { + goto failure; + } + // Create a memblock for the heap memory, 32MB + _newlib_heap_size = 32 * 1024 * 1024; + _newlib_heap_memblock = sceKernelAllocMemBlock("Newlib heap", 0x0c20d060, _newlib_heap_size, 0); + if (_newlib_heap_memblock < 0) { + goto failure; + } + if (sceKernelGetMemBlockBase(_newlib_heap_memblock, &_newlib_heap_base) < 0) { + goto failure; + } + _newlib_heap_end = _newlib_heap_base + _newlib_heap_size; + _newlib_heap_cur = _newlib_heap_base; + + return; +failure: + _newlib_heap_memblock = 0; + _newlib_heap_base = 0; + _newlib_heap_cur = 0; +} From d8e5ec59aed742217a87f11b6a11dfb77852a904 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Sat, 15 Aug 2015 00:25:01 +0300 Subject: [PATCH 06/65] [Vita] Implement most of file related syscalls. --- newlib/libc/sys/vita/crt0.c | 3 + newlib/libc/sys/vita/syscalls.c | 134 +++++++++++++++++++++++++++----- 2 files changed, 118 insertions(+), 19 deletions(-) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index 1027055e03..f8f0a5e8f5 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -1,9 +1,12 @@ +extern char _newlib_fd_mutex[32]; + int main(int argc, const char* argv[]); void _init_vita_newlib(void) { _init_vita_heap(); _init_vita_reent(); _init_vita_malloc(); + sceKernelCreateLwMutex(_newlib_fd_mutex, "fd conversion table mutex", 0, 0, 0); } void _start() { diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 827636255a..9b32d662fc 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -1,14 +1,36 @@ #include +#include #include #include #include #include +#include + +#define SCE_ERRNO_MASK 0xFF +#define MAX_OPEN_FILES 1024 + +int fd_to_scefd[MAX_OPEN_FILES]; +char _newlib_fd_mutex[32] __attribute__ ((aligned (8))); _ssize_t _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) { - reent->_errno = ENOSYS; - return -1; + int ret; + if ((unsigned)fd > MAX_OPEN_FILES) { + reent->_errno = EINVAL; + return -1; + } + if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { + reent->_errno = 0; + return nbytes; + } + ret = sceIoWrite(fd_to_scefd[fd], buf, nbytes); + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + reent->_errno = 0; + return ret; } void @@ -18,10 +40,19 @@ _exit(int rc) } int -_close_r(struct _reent *reent, int fildes) -{ - reent->_errno = ENOSYS; - return -1; +_close_r(struct _reent *reent, int fd) +{ + if ((unsigned)fd > MAX_OPEN_FILES) { + reent->_errno = EINVAL; + return -1; + } + reent->_errno = sceIoClose(fd_to_scefd[fd]) & SCE_ERRNO_MASK; + if (reent->_errno == 0) { + sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + fd_to_scefd[fd] = 0; + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + } + return 0; } char *__env[1] = { 0 }; @@ -38,12 +69,12 @@ _execve_r(struct _reent *reent, const char *name, char * const *argv, int _fork_r(struct _reent *reent) { - errno = ENOSYS; + reent->_errno = ENOSYS; return -1; } int -_fstat_r(struct _reent *reent, int fildes, struct stat *st) +_fstat_r(struct _reent *reent, int fd, struct stat *st) { reent->_errno = ENOSYS; return -1; @@ -52,8 +83,8 @@ _fstat_r(struct _reent *reent, int fildes, struct stat *st) int _getpid_r(struct _reent *reent) { - reent->_errno = ENOSYS; - return -1; + reent->_errno = 0; + return sceKernelGetProcessId(); } int @@ -85,24 +116,89 @@ _link_r(struct _reent *reent, const char *existing, const char *new) } _off_t -_lseek_r(struct _reent *reent, int file, _off_t ptr, int dir) -{ - errno = ENOSYS; - return -1; +_lseek_r(struct _reent *reent, int fd, _off_t ptr, int dir) +{ + int ret; + if ((unsigned)fd > MAX_OPEN_FILES || fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { + reent->_errno = EINVAL; + return -1; + } + ret = sceIoLseek32(fd_to_scefd[fd], ptr, dir); + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + return ret; +} + +int _fcntl2sony(int flags) { + int out = 0; + if (flags & O_RDWR) + out |= 3; + else if (flags & O_WRONLY) + out |= 2; + else + out |= 1; + if (flags & O_NONBLOCK) + out |= 4; + if (flags & O_APPEND) + out |= 0x100; + if (flags & O_CREAT) + out |= 0x200; + if (flags & O_TRUNC) + out |= 0x400; + if (flags & O_EXCL) + out |= 0x800; + return out; } int _open_r(struct _reent *reent, const char *file, int flags, int mode) { - reent->_errno = ENOSYS; + int ret, i, found = 0; + flags = _fcntl2sony(flags); + ret = sceIoOpen(file, flags, 0600); + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + // skip stdin, stdout, stderr + for (i = 3; i < MAX_OPEN_FILES; ++i) + if (fd_to_scefd[i] == 0) { + found = i; + break; + } + if (!found) + goto fail; + fd_to_scefd[found] = ret; + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + reent->_errno = 0; + return found; +fail: + reent->_errno = EMFILE; return -1; } _ssize_t -_read_r(struct _reent *reent, int file, void *ptr, size_t len) -{ - reent->_errno = ENOSYS; - return -1; +_read_r(struct _reent *reent, int fd, void *ptr, size_t len) +{ + int ret; + if ((unsigned)fd > MAX_OPEN_FILES) { + reent->_errno = EINVAL; + return 01; + } + if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { + reent->_errno = 0; + return len; + } + ret = sceIoRead(fd_to_scefd[fd], ptr, len); + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + reent->_errno = 0; + return ret; } int From 0c05d372c6cc5f7a70dd1236408f4a1b988a272b Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Mon, 17 Aug 2015 04:24:11 +0300 Subject: [PATCH 07/65] Proper gettimeofday header --- newlib/libc/sys/vita/syscalls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 9b32d662fc..4219ce1711 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -88,7 +88,7 @@ _getpid_r(struct _reent *reent) } int -_gettimeofday(struct _reent *reent, struct timeval *ptimeval, void *ptimezone) +_gettimeofday_r(struct _reent *reent, struct timeval *ptimeval, void *ptimezone) { reent->_errno = ENOSYS; return -1; From 37639ed81a0400283c9e173d933d6f8529e71c07 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Wed, 19 Aug 2015 16:40:59 +0300 Subject: [PATCH 08/65] Disable libgloss for vita build. --- configure | 3 +++ configure.ac | 3 +++ 2 files changed, 6 insertions(+) diff --git a/configure b/configure index ae23ce435b..ac3d3bd0f0 100755 --- a/configure +++ b/configure @@ -3499,6 +3499,9 @@ case "${target}" in alpha*-dec-osf*) noconfigdirs="$noconfigdirs target-newlib target-libgloss" ;; + arm*vita*) + noconfigdirs="$noconfigdirs target-libgloss" + ;; i[3456789]86-*-linux*) # This section makes it possible to build newlib natively on linux. # If we are using a cross compiler then don't configure newlib. diff --git a/configure.ac b/configure.ac index 80313d0601..b41d6c1c95 100644 --- a/configure.ac +++ b/configure.ac @@ -832,6 +832,9 @@ case "${target}" in alpha*-dec-osf*) noconfigdirs="$noconfigdirs target-newlib target-libgloss" ;; + arm*vita*) + noconfigdirs="$noconfigdirs target-libgloss" + ;; i[[3456789]]86-*-linux*) # This section makes it possible to build newlib natively on linux. # If we are using a cross compiler then don't configure newlib. From d4564552689ba57ae16d7b6c20161fbe3acd1d21 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Fri, 18 Sep 2015 01:00:40 +0300 Subject: [PATCH 09/65] Call __libc_init_array in Vita crt0.c Thanks to @frangarcj for testing it. --- newlib/libc/sys/vita/crt0.c | 1 + 1 file changed, 1 insertion(+) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index f8f0a5e8f5..bed90edba4 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -11,5 +11,6 @@ void _init_vita_newlib(void) { void _start() { _init_vita_newlib(); + __libc_init_array(); exit(main(1, (const char*[]){"", 0})); } From 3d792ab7b89a4685a1ec28dfa503daeafd5621c6 Mon Sep 17 00:00:00 2001 From: Glenn Anderson Date: Fri, 4 Sep 2015 01:54:32 -0400 Subject: [PATCH 10/65] Adds a call to uvl_write for handling STDIN, STDOUT, and STDERR. --- newlib/libc/sys/vita/syscalls.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 4219ce1711..c2a2e10478 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -21,6 +21,11 @@ _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) return -1; } if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { + ret = uvl_write(fd, buf, nbytes); + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } reent->_errno = 0; return nbytes; } From 57f41364b098a4664790a9b349795fcb4bbcf3b8 Mon Sep 17 00:00:00 2001 From: Glenn Anderson Date: Sun, 6 Sep 2015 12:46:48 -0400 Subject: [PATCH 11/65] Renames uvl_write to uvl_log_write. --- newlib/libc/sys/vita/syscalls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index c2a2e10478..e9b8ade610 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -21,7 +21,7 @@ _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) return -1; } if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { - ret = uvl_write(fd, buf, nbytes); + ret = uvl_log_write(buf, nbytes); if (ret < 0) { reent->_errno = ret & SCE_ERRNO_MASK; return -1; From f88157db43377cc0860661264840c4b23da67583 Mon Sep 17 00:00:00 2001 From: Glenn Anderson Date: Wed, 9 Sep 2015 00:29:55 -0400 Subject: [PATCH 12/65] exit now calls uvl_exit. --- newlib/libc/sys/vita/syscalls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index e9b8ade610..eacfc3102d 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -41,7 +41,7 @@ _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) void _exit(int rc) { - while (1) {} + uvl_exit(rc); } int From 8b68730104314dfb928af5d6f8c8e222aaf6fdee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Sun, 20 Sep 2015 12:45:42 +0200 Subject: [PATCH 13/65] (Vita) Add user-defined heap size --- newlib/libc/sys/vita/sbrk.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/sbrk.c b/newlib/libc/sys/vita/sbrk.c index 8b03267128..63ff14b22c 100755 --- a/newlib/libc/sys/vita/sbrk.c +++ b/newlib/libc/sys/vita/sbrk.c @@ -2,6 +2,7 @@ #include int _newlib_heap_memblock; +extern unsigned int _newlib_heap_size_user __attribute__((weak)); unsigned _newlib_heap_size; char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; @@ -29,8 +30,12 @@ void _init_vita_heap(void) { if (sceKernelCreateLwMutex(_newlib_sbrk_mutex, "sbrk mutex", 0, 0, 0) < 0) { goto failure; } - // Create a memblock for the heap memory, 32MB - _newlib_heap_size = 32 * 1024 * 1024; + if (&_newlib_heap_size_user != NULL) { + _newlib_heap_size = _newlib_heap_size_user; + } else { + // Create a memblock for the heap memory, 32MB + _newlib_heap_size = 32 * 1024 * 1024; + } _newlib_heap_memblock = sceKernelAllocMemBlock("Newlib heap", 0x0c20d060, _newlib_heap_size, 0); if (_newlib_heap_memblock < 0) { goto failure; From 161dd369d8eb6b946dbea9271e1f5c15722c32d6 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sun, 20 Sep 2015 19:33:45 -0700 Subject: [PATCH 14/65] Implement _gettimeofday_r --- newlib/libc/sys/vita/syscalls.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index eacfc3102d..bdf465484a 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -95,8 +95,13 @@ _getpid_r(struct _reent *reent) int _gettimeofday_r(struct _reent *reent, struct timeval *ptimeval, void *ptimezone) { - reent->_errno = ENOSYS; - return -1; + int ret = sceKernelLibcGettimeofday(ptimeval, ptimezone); + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + reent->_errno = 0; + return 0; } int From 0cb4b2b00a2e9b4cec5d8ec2a1c03fa1bcf7be4a Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Tue, 22 Sep 2015 11:48:43 +0300 Subject: [PATCH 15/65] Unlock _newlib_fd_mutex even when fd_to_scefd is full, fixes #8 --- newlib/libc/sys/vita/syscalls.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index bdf465484a..9c6cd5225f 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -179,15 +179,16 @@ _open_r(struct _reent *reent, const char *file, int flags, int mode) found = i; break; } - if (!found) - goto fail; + if (!found) { + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + sceIoClose(ret); + reent->_errno = EMFILE; + return -1; + } fd_to_scefd[found] = ret; sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); reent->_errno = 0; return found; -fail: - reent->_errno = EMFILE; - return -1; } _ssize_t From aefcd564897f2808d0a13cce5bcf6a07c374fc2e Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Tue, 22 Sep 2015 11:55:23 +0300 Subject: [PATCH 16/65] Simplify _write_r --- newlib/libc/sys/vita/syscalls.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 9c6cd5225f..61f5618cce 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -22,14 +22,11 @@ _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) } if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { ret = uvl_log_write(buf, nbytes); - if (ret < 0) { - reent->_errno = ret & SCE_ERRNO_MASK; - return -1; - } - reent->_errno = 0; - return nbytes; + if (ret == 0) + ret = nbytes; + } else { + ret = sceIoWrite(fd_to_scefd[fd], buf, nbytes); } - ret = sceIoWrite(fd_to_scefd[fd], buf, nbytes); if (ret < 0) { reent->_errno = ret & SCE_ERRNO_MASK; return -1; From 6fcb342ef934027e7c927c3cd2f31092265ffcf4 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Tue, 22 Sep 2015 12:00:38 +0300 Subject: [PATCH 17/65] Add "static" to global variables where applicable. --- newlib/libc/sys/vita/mlock.c | 2 +- newlib/libc/sys/vita/sbrk.c | 8 ++++---- newlib/libc/sys/vita/syscalls.c | 2 +- newlib/libc/sys/vita/threading.c | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/newlib/libc/sys/vita/mlock.c b/newlib/libc/sys/vita/mlock.c index 969d83e34e..8914eacfa4 100755 --- a/newlib/libc/sys/vita/mlock.c +++ b/newlib/libc/sys/vita/mlock.c @@ -1,4 +1,4 @@ -char _newlib_malloc_mutex[32] __attribute__ ((aligned (8))); +static char _newlib_malloc_mutex[32] __attribute__ ((aligned (8))); void __malloc_lock(struct _reent *r) { sceKernelLockLwMutex(_newlib_malloc_mutex, 1, 0); diff --git a/newlib/libc/sys/vita/sbrk.c b/newlib/libc/sys/vita/sbrk.c index 63ff14b22c..068615198b 100755 --- a/newlib/libc/sys/vita/sbrk.c +++ b/newlib/libc/sys/vita/sbrk.c @@ -1,12 +1,12 @@ #include #include -int _newlib_heap_memblock; extern unsigned int _newlib_heap_size_user __attribute__((weak)); -unsigned _newlib_heap_size; -char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; -char _newlib_sbrk_mutex[32] __attribute__ ((aligned (8))); +static int _newlib_heap_memblock; +static unsigned _newlib_heap_size; +static char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; +static char _newlib_sbrk_mutex[32] __attribute__ ((aligned (8))); void * _sbrk_r(struct _reent *reent, ptrdiff_t incr) { if (sceKernelLockLwMutex(_newlib_sbrk_mutex, 1, 0) < 0) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 61f5618cce..2a1283e5fa 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -9,7 +9,7 @@ #define SCE_ERRNO_MASK 0xFF #define MAX_OPEN_FILES 1024 -int fd_to_scefd[MAX_OPEN_FILES]; +static int fd_to_scefd[MAX_OPEN_FILES]; char _newlib_fd_mutex[32] __attribute__ ((aligned (8))); _ssize_t diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c index 7e90b18e9c..aaebda52f2 100755 --- a/newlib/libc/sys/vita/threading.c +++ b/newlib/libc/sys/vita/threading.c @@ -10,9 +10,9 @@ typedef struct reent_for_thread { struct _reent reent; } reent_for_thread; -reent_for_thread reent_list[MAX_THREADS]; -int _newlib_reent_mutex; -struct _reent _newlib_global_reent; +static reent_for_thread reent_list[MAX_THREADS]; +static int _newlib_reent_mutex; +static struct _reent _newlib_global_reent; int sceKernelExitThread(int); int sceKernelExitDeleteThread(int); From 33792acb27d8e5e538710d37224b248915ffb84a Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Tue, 22 Sep 2015 12:01:48 +0300 Subject: [PATCH 18/65] Replace sceKernelGetTLSAddr(0x88) with a #define in _init_vita_reent --- newlib/libc/sys/vita/threading.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c index aaebda52f2..ea1f60fabe 100755 --- a/newlib/libc/sys/vita/threading.c +++ b/newlib/libc/sys/vita/threading.c @@ -100,6 +100,6 @@ void _init_vita_reent(void) { _newlib_reent_mutex = sceKernelCreateMutex("reent list access mutex", 0, 0, 0); reent_list[0].thread_id = sceKernelGetThreadId(); _REENT_INIT_PTR(&reent_list[0].reent); - *(struct _reent **)(sceKernelGetTLSAddr(0x88)) = &reent_list[0].reent; + *(struct _reent **)(TLS_REENT_PTR) = &reent_list[0].reent; _REENT_INIT_PTR(&_newlib_global_reent); } From 6de39677021504a610890bcbb6be2b7cfdeea40d Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Tue, 22 Sep 2015 22:39:12 +0300 Subject: [PATCH 19/65] Implement _unlink_r --- newlib/libc/sys/vita/syscalls.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 2a1283e5fa..ad0651ba86 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -226,6 +226,12 @@ _stat_r(struct _reent *reent, const char *path, struct stat *buf) int _unlink_r(struct _reent *reent, const char * path) { - reent->_errno = EIO; - return (-1); + int ret; + ret = sceIoRemove(path); + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + reent->_errno = 0; + return 0; } From d9c305b8e6ca262ef5976d4e764305d8aebe65df Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Tue, 22 Sep 2015 22:41:58 +0300 Subject: [PATCH 20/65] Implement _rename_r. --- newlib/libc/sys/vita/syscalls.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index ad0651ba86..2e1d5701f3 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -235,3 +235,16 @@ _unlink_r(struct _reent *reent, const char * path) reent->_errno = 0; return 0; } + +int +_rename_r(struct _reent *reent, const char *old, const char *new) +{ + int ret; + ret = sceIoRename(old, new); + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + reent->_errno = 0; + return 0; +} From ccf528d05b0089a31039ad7eb11d5b9721565e84 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Tue, 22 Sep 2015 23:02:22 +0300 Subject: [PATCH 21/65] Implement _times_r. --- newlib/libc/include/machine/time.h | 2 +- newlib/libc/sys/vita/syscalls.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/newlib/libc/include/machine/time.h b/newlib/libc/include/machine/time.h index 6f9a35cc54..42a5ec2e28 100644 --- a/newlib/libc/include/machine/time.h +++ b/newlib/libc/include/machine/time.h @@ -1,7 +1,7 @@ #ifndef _MACHTIME_H_ #define _MACHTIME_H_ -#if defined(__rtems__) || defined(__VISIUM__) +#if defined(__rtems__) || defined(__VISIUM__) || defined(__vita__) #define _CLOCKS_PER_SEC_ 1000000 #elif defined(__aarch64__) || defined(__arm__) || defined(__thumb__) #define _CLOCKS_PER_SEC_ 100 diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 2e1d5701f3..59b7a40183 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #define SCE_ERRNO_MASK 0xFF @@ -248,3 +249,14 @@ _rename_r(struct _reent *reent, const char *old, const char *new) reent->_errno = 0; return 0; } + +clock_t +_times_r(struct _reent *reent, struct tms *ptms) +{ + unsigned result = sceKernelGetProcessTimeLow(); + ptms->tms_utime = result; + ptms->tms_stime = 0; + ptms->tms_cutime = 0; + ptms->tms_cstime = 0; + return result; +} From 6fed0c7f27b1d04ac4201c13f2ff51de0f3b63db Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Wed, 23 Sep 2015 00:09:02 +0300 Subject: [PATCH 22/65] Implement _stat_r and _fstat_r. --- newlib/libc/sys/vita/syscalls.c | 88 +++++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 14 deletions(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 59b7a40183..6dcb224234 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -76,13 +76,6 @@ _fork_r(struct _reent *reent) return -1; } -int -_fstat_r(struct _reent *reent, int fd, struct stat *st) -{ - reent->_errno = ENOSYS; - return -1; -} - int _getpid_r(struct _reent *reent) { @@ -217,13 +210,6 @@ _readlink_r(struct _reent *reent, const char *path, char *buf, size_t bufsize) return -1; } -int -_stat_r(struct _reent *reent, const char *path, struct stat *buf) -{ - reent->_errno = EIO; - return -1; -} - int _unlink_r(struct _reent *reent, const char * path) { @@ -260,3 +246,77 @@ _times_r(struct _reent *reent, struct tms *ptms) ptms->tms_cstime = 0; return result; } + +struct SceDateTime { + unsigned short year; + unsigned short month; + unsigned short day; + unsigned short hour; + unsigned short minute; + unsigned short second; + unsigned int microsecond; +}; + +struct SceIoStat { + int st_mode; + unsigned int st_attr; + long long st_size; + struct SceDateTime st_ctime; + struct SceDateTime st_atime; + struct SceDateTime st_mtime; + unsigned st_private[6]; +}; + +enum { + SCE_DIR = 0x1000, + SCE_REG = 0x2000, + SCE_STATFMT = 0xf000 +}; + +#define SCE_ISREG(x) (((x) & SCE_STATFMT) == SCE_REG) +#define SCE_ISDIR(x) (((x) & SCE_STATFMT) == SCE_DIR) + +static void +scestat_to_stat(struct SceIoStat *in, struct stat *out) { + memset(out, 0, sizeof(*out)); + out->st_size = in->st_size; + if (SCE_ISREG(in->st_mode)) + out->st_mode |= _IFREG; + if (SCE_ISDIR(in->st_mode)) + out->st_mode |= _IFDIR; + sceRtcGetTime_t(&in->st_atime, &out->st_atime); + sceRtcGetTime_t(&in->st_mtime, &out->st_mtime); + sceRtcGetTime_t(&in->st_ctime, &out->st_ctime); +} + +int +_fstat_r(struct _reent *reent, int fd, struct stat *st) +{ + struct SceIoStat stat = {0}; + int ret; + if ((unsigned)fd > MAX_OPEN_FILES) { + reent->_errno = EINVAL; + return -1; + } + if ((ret = sceIoGetstatByFd(fd_to_scefd[fd], &stat)) < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + scestat_to_stat(&stat, st); + reent->_errno = 0; + return 0; +} + +int +_stat_r(struct _reent *reent, const char *path, struct stat *st) +{ + struct SceIoStat stat = {0}; + int ret; + if ((ret = sceIoGetstat(path, &stat)) < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + scestat_to_stat(&stat, st); + reent->_errno = 0; + return 0; +} \ No newline at end of file From d029bbe712d937a378a23c9b7660b2d225aa7541 Mon Sep 17 00:00:00 2001 From: Glenn Anderson Date: Sun, 27 Sep 2015 23:47:17 -0400 Subject: [PATCH 23/65] Allows building the manuals using recent versions of TexInfo. (See here: https://sourceware.org/ml/newlib/2015/msg00624.html) --- newlib/doc/doc.str | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/doc/doc.str b/newlib/doc/doc.str index 51ecef7f4a..aeef6f75ed 100644 --- a/newlib/doc/doc.str +++ b/newlib/doc/doc.str @@ -107,7 +107,7 @@ courierize do_fancy_stuff catstr - "@*\n" catstr + "@sp 1\n" catstr ; : asection From eca3c697853b5c4a258639c48fb8e30901cd6840 Mon Sep 17 00:00:00 2001 From: Glenn Anderson Date: Sun, 8 Nov 2015 12:06:40 -0500 Subject: [PATCH 24/65] Frees the heap memblock when exiting homebrew. --- newlib/libc/sys/vita/crt0.c | 4 ++++ newlib/libc/sys/vita/sbrk.c | 9 +++++++++ newlib/libc/sys/vita/syscalls.c | 2 ++ 3 files changed, 15 insertions(+) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index bed90edba4..eb1b658d11 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -9,6 +9,10 @@ void _init_vita_newlib(void) { sceKernelCreateLwMutex(_newlib_fd_mutex, "fd conversion table mutex", 0, 0, 0); } +void _free_vita_newlib(void) { + _free_vita_heap(); +} + void _start() { _init_vita_newlib(); __libc_init_array(); diff --git a/newlib/libc/sys/vita/sbrk.c b/newlib/libc/sys/vita/sbrk.c index 068615198b..94f93f4966 100755 --- a/newlib/libc/sys/vita/sbrk.c +++ b/newlib/libc/sys/vita/sbrk.c @@ -52,3 +52,12 @@ void _init_vita_heap(void) { _newlib_heap_base = 0; _newlib_heap_cur = 0; } + +void _free_vita_heap(void) { + // Free the heap memblock to avoid memory leakage. + sceKernelFreeMemBlock(_newlib_heap_memblock); + + _newlib_heap_memblock = 0; + _newlib_heap_base = 0; + _newlib_heap_cur = 0; +} diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 6dcb224234..f95080b0a4 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -39,6 +39,8 @@ _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) void _exit(int rc) { + _free_vita_newlib(); + uvl_exit(rc); } From 0003640a6c44a12bdf1a60df1d7f9488bf4c8670 Mon Sep 17 00:00:00 2001 From: Sergi Granell Date: Fri, 22 Jan 2016 17:09:58 +0100 Subject: [PATCH 25/65] Destroy _newlib_sbrk_mutex at _free_vita_heap --- newlib/libc/sys/vita/sbrk.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/newlib/libc/sys/vita/sbrk.c b/newlib/libc/sys/vita/sbrk.c index 94f93f4966..7cf2f96eeb 100755 --- a/newlib/libc/sys/vita/sbrk.c +++ b/newlib/libc/sys/vita/sbrk.c @@ -54,6 +54,9 @@ void _init_vita_heap(void) { } void _free_vita_heap(void) { + // Destroy the sbrk mutex + sceKernelDeleteLwMutex(_newlib_sbrk_mutex); + // Free the heap memblock to avoid memory leakage. sceKernelFreeMemBlock(_newlib_heap_memblock); From 6073de55a3ae87b436e5789835b4984a1cf80ac9 Mon Sep 17 00:00:00 2001 From: Sergi Granell Date: Fri, 22 Jan 2016 17:15:58 +0100 Subject: [PATCH 26/65] Add _free_vita_reent and _free_vita_malloc --- newlib/libc/sys/vita/crt0.c | 2 ++ newlib/libc/sys/vita/mlock.c | 4 ++++ newlib/libc/sys/vita/threading.c | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index eb1b658d11..13bc5dea9a 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -10,6 +10,8 @@ void _init_vita_newlib(void) { } void _free_vita_newlib(void) { + _free_vita_malloc(); + _free_vita_reent(); _free_vita_heap(); } diff --git a/newlib/libc/sys/vita/mlock.c b/newlib/libc/sys/vita/mlock.c index 8914eacfa4..6b5774ce9d 100755 --- a/newlib/libc/sys/vita/mlock.c +++ b/newlib/libc/sys/vita/mlock.c @@ -11,3 +11,7 @@ void __malloc_unlock(struct _reent *r) { void _init_vita_malloc(void) { sceKernelCreateLwMutex(_newlib_malloc_mutex, "malloc mutex", 2, 0, 0); } + +void _free_vita_malloc(void) { + sceKernelDeleteLwMutex(_newlib_malloc_mutex); +} diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c index ea1f60fabe..a16d4eb53c 100755 --- a/newlib/libc/sys/vita/threading.c +++ b/newlib/libc/sys/vita/threading.c @@ -103,3 +103,7 @@ void _init_vita_reent(void) { *(struct _reent **)(TLS_REENT_PTR) = &reent_list[0].reent; _REENT_INIT_PTR(&_newlib_global_reent); } + +void _free_vita_reent(void) { + sceKernelDeleteMutex(_newlib_reent_mutex); +} From 2a77c3980f28c41fff61a43a03aa5fa6c6f91864 Mon Sep 17 00:00:00 2001 From: Sergi Granell Date: Sat, 23 Jan 2016 14:34:20 +0100 Subject: [PATCH 27/65] Free _newlib_fd_mutex at _free_vita_newlib --- newlib/libc/sys/vita/crt0.c | 1 + 1 file changed, 1 insertion(+) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index 13bc5dea9a..2b8eedb459 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -13,6 +13,7 @@ void _free_vita_newlib(void) { _free_vita_malloc(); _free_vita_reent(); _free_vita_heap(); + sceKernelDeleteLwMutex(_newlib_fd_mutex); } void _start() { From 520ff20437c58e013832f186f7122c5a4c94b1ab Mon Sep 17 00:00:00 2001 From: Yifan Lu Date: Thu, 23 Jun 2016 14:04:56 -0500 Subject: [PATCH 28/65] Removed UVL calls from newlib. Is a hack and not the right place. Homebrew using UVL that requires logging should import and make the log call themselves (preferably with a compile time define). Calling uvl_exit() is not needed in normal operations (a return from the thread start function automatically releases the thread). --- newlib/libc/sys/vita/syscalls.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index f95080b0a4..a81f58b47f 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -22,7 +22,6 @@ _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) return -1; } if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { - ret = uvl_log_write(buf, nbytes); if (ret == 0) ret = nbytes; } else { @@ -40,8 +39,6 @@ void _exit(int rc) { _free_vita_newlib(); - - uvl_exit(rc); } int From 8cb9ce7f4e258b124584457230b4bb34d3c4579c Mon Sep 17 00:00:00 2001 From: Yifan Lu Date: Thu, 23 Jun 2016 21:27:26 -0500 Subject: [PATCH 29/65] Added default stdin/out/err implementations for Vita --- newlib/libc/sys/vita/Makefile.am | 2 +- newlib/libc/sys/vita/Makefile.in | 10 +++++-- newlib/libc/sys/vita/crt0.c | 6 ++--- newlib/libc/sys/vita/io.c | 45 ++++++++++++++++++++++++++++++++ newlib/libc/sys/vita/syscalls.c | 14 +++++----- 5 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 newlib/libc/sys/vita/io.c diff --git a/newlib/libc/sys/vita/Makefile.am b/newlib/libc/sys/vita/Makefile.am index 800371e24a..fdbae43a3e 100755 --- a/newlib/libc/sys/vita/Makefile.am +++ b/newlib/libc/sys/vita/Makefile.am @@ -8,7 +8,7 @@ AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) diff --git a/newlib/libc/sys/vita/Makefile.in b/newlib/libc/sys/vita/Makefile.in index 11740df66b..519baa6fb2 100644 --- a/newlib/libc/sys/vita/Makefile.in +++ b/newlib/libc/sys/vita/Makefile.in @@ -69,7 +69,7 @@ ARFLAGS = cru lib_a_AR = $(AR) $(ARFLAGS) lib_a_LIBADD = am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) lib_a-sbrk.$(OBJEXT) \ - lib_a-threading.$(OBJEXT) lib_a-mlock.$(OBJEXT) + lib_a-threading.$(OBJEXT) lib_a-mlock.$(OBJEXT) lib_a-io.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -195,7 +195,7 @@ AUTOMAKE_OPTIONS = cygnus INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. @@ -270,6 +270,12 @@ lib_a-sbrk.o: sbrk.c lib_a-sbrk.obj: sbrk.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sbrk.obj `if test -f 'sbrk.c'; then $(CYGPATH_W) 'sbrk.c'; else $(CYGPATH_W) '$(srcdir)/sbrk.c'; fi` +lib_a-io.o: io.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-io.o `test -f 'io.c' || echo '$(srcdir)/'`io.c + +lib_a-io.obj: io.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-io.obj `if test -f 'io.c'; then $(CYGPATH_W) 'io.c'; else $(CYGPATH_W) '$(srcdir)/io.c'; fi` + lib_a-threading.o: threading.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-threading.o `test -f 'threading.c' || echo '$(srcdir)/'`threading.c diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index 2b8eedb459..8edf156c4d 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -1,19 +1,17 @@ -extern char _newlib_fd_mutex[32]; - int main(int argc, const char* argv[]); void _init_vita_newlib(void) { _init_vita_heap(); _init_vita_reent(); _init_vita_malloc(); - sceKernelCreateLwMutex(_newlib_fd_mutex, "fd conversion table mutex", 0, 0, 0); + _init_vita_io(); } void _free_vita_newlib(void) { + _free_vita_io(); _free_vita_malloc(); _free_vita_reent(); _free_vita_heap(); - sceKernelDeleteLwMutex(_newlib_fd_mutex); } void _start() { diff --git a/newlib/libc/sys/vita/io.c b/newlib/libc/sys/vita/io.c new file mode 100644 index 0000000000..b4c920f826 --- /dev/null +++ b/newlib/libc/sys/vita/io.c @@ -0,0 +1,45 @@ +#include +#include + +extern char _newlib_fd_mutex[]; +extern int fd_to_scefd[]; + +void _init_vita_io(void) { + int ret; + + sceKernelCreateLwMutex(_newlib_fd_mutex, "fd conversion table mutex", 0, 0, 0); + + sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + ret = sceIoOpen("tty0:", O_RDONLY, 0); + if (ret >= 0) { + fd_to_scefd[STDIN_FILENO] = ret; + } + ret = sceIoOpen("tty0:", O_WRONLY, 0); + if (ret >= 0) { + fd_to_scefd[STDOUT_FILENO] = ret; + } + ret = sceIoOpen("tty0:", O_WRONLY, 0); + if (ret >= 0) { + fd_to_scefd[STDERR_FILENO] = ret; + } + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); +} + +void _free_vita_io(void) { + sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + if (fd_to_scefd[STDIN_FILENO]) { + sceIoClose(fd_to_scefd[STDIN_FILENO]); + fd_to_scefd[STDIN_FILENO] = 0; + } + if (fd_to_scefd[STDOUT_FILENO]) { + sceIoClose(fd_to_scefd[STDOUT_FILENO]); + fd_to_scefd[STDOUT_FILENO] = 0; + } + if (fd_to_scefd[STDERR_FILENO]) { + sceIoClose(fd_to_scefd[STDERR_FILENO]); + fd_to_scefd[STDERR_FILENO] = 0; + } + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + + sceKernelDeleteLwMutex(_newlib_fd_mutex); +} diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index a81f58b47f..21c290b017 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -10,7 +10,7 @@ #define SCE_ERRNO_MASK 0xFF #define MAX_OPEN_FILES 1024 -static int fd_to_scefd[MAX_OPEN_FILES]; +int fd_to_scefd[MAX_OPEN_FILES]; char _newlib_fd_mutex[32] __attribute__ ((aligned (8))); _ssize_t @@ -21,9 +21,9 @@ _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) reent->_errno = EINVAL; return -1; } - if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { - if (ret == 0) - ret = nbytes; + if ((fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) + && fd_to_scefd[fd] == 0) { + ret = nbytes; } else { ret = sceIoWrite(fd_to_scefd[fd], buf, nbytes); } @@ -190,8 +190,10 @@ _read_r(struct _reent *reent, int fd, void *ptr, size_t len) return 01; } if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { - reent->_errno = 0; - return len; + if (fd_to_scefd[fd] == 0) { + reent->_errno = 0; + return len; + } } ret = sceIoRead(fd_to_scefd[fd], ptr, len); if (ret < 0) { From 0b71f1aa4b04618d40dcc66c5b84427fb645b0fb Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Sun, 24 Jul 2016 10:34:30 -0400 Subject: [PATCH 30/65] Fix permissions --- newlib/libc/sys/vita/syscalls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 21c290b017..7995daa385 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -157,7 +157,7 @@ _open_r(struct _reent *reent, const char *file, int flags, int mode) { int ret, i, found = 0; flags = _fcntl2sony(flags); - ret = sceIoOpen(file, flags, 0600); + ret = sceIoOpen(file, flags, 0666); if (ret < 0) { reent->_errno = ret & SCE_ERRNO_MASK; return -1; From 0ec1e80dff80865742d9b674c8c143507d213bc2 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Tue, 26 Jul 2016 08:47:26 -0700 Subject: [PATCH 31/65] vita: make read EOF when reading from stdin/out/err --- newlib/libc/sys/vita/syscalls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 7995daa385..ed2ca96ed6 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -192,7 +192,7 @@ _read_r(struct _reent *reent, int fd, void *ptr, size_t len) if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { if (fd_to_scefd[fd] == 0) { reent->_errno = 0; - return len; + return 0; } } ret = sceIoRead(fd_to_scefd[fd], ptr, len); From 90b1a0f5c84d424c7fa54c535b0f5b139f7cf55c Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Tue, 2 Aug 2016 21:41:31 -0700 Subject: [PATCH 32/65] End process when calling exit --- newlib/libc/sys/vita/syscalls.c | 1 + 1 file changed, 1 insertion(+) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index ed2ca96ed6..a0895e12f1 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -39,6 +39,7 @@ void _exit(int rc) { _free_vita_newlib(); + sceKernelExitProcess(rc); } int From 9168bab7b6a524f8b6cc07329c4b6995bbfc1203 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Wed, 17 Aug 2016 19:06:09 -0700 Subject: [PATCH 33/65] Implement a few ways to kill yourself --- newlib/libc/sys/vita/syscalls.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index a0895e12f1..609053f963 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -105,8 +106,21 @@ _isatty_r(struct _reent *reent, int file) int _kill_r(struct _reent *reent, int pid, int sig) { - reent->_errno = ENOSYS; - return -1; + if (pid != sceKernelGetProcessId()) { + reent->_errno = EPERM; + return -1; + } + switch (sig) { + default: + __builtin_trap(); + case SIGINT: + case SIGTERM: + sceKernelExitProcess(-sig); + break; + case SIGCHLD: + case SIGCONT: + return 0; + } } int From 885eb2caa5fece03f474cece4beae1ac07da08b2 Mon Sep 17 00:00:00 2001 From: Davee Date: Sun, 4 Sep 2016 22:01:15 +0100 Subject: [PATCH 34/65] added sockets to newlib --- newlib/libc/sys/vita/Makefile.am | 8 +- newlib/libc/sys/vita/Makefile.in | 88 +++--- newlib/libc/sys/vita/aclocal.m4 | 355 +++++++++++---------- newlib/libc/sys/vita/configure | 148 ++++----- newlib/libc/sys/vita/io.c | 158 +++++++--- newlib/libc/sys/vita/socket.c | 433 ++++++++++++++++++++++++++ newlib/libc/sys/vita/sys/socket.h | 274 ++++++++++++++++ newlib/libc/sys/vita/syscalls.c | 235 ++++++++------ newlib/libc/sys/vita/vitadescriptor.h | 58 ++++ newlib/libc/sys/vita/vitaglue.h | 32 ++ 10 files changed, 1369 insertions(+), 420 deletions(-) create mode 100644 newlib/libc/sys/vita/socket.c create mode 100644 newlib/libc/sys/vita/sys/socket.h create mode 100644 newlib/libc/sys/vita/vitadescriptor.h create mode 100644 newlib/libc/sys/vita/vitaglue.h diff --git a/newlib/libc/sys/vita/Makefile.am b/newlib/libc/sys/vita/Makefile.am index fdbae43a3e..94a5a6acd0 100755 --- a/newlib/libc/sys/vita/Makefile.am +++ b/newlib/libc/sys/vita/Makefile.am @@ -8,11 +8,17 @@ AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c +SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o + +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c +lib_a_LIBADD = ${SOCKET_OBJS} lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) all-local: crt0.o +$(SOCKET_OBJS): socket.c + $(COMPILE) -DF_$* $< -c -o $@ + ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host diff --git a/newlib/libc/sys/vita/Makefile.in b/newlib/libc/sys/vita/Makefile.in index 519baa6fb2..bd19696ceb 100644 --- a/newlib/libc/sys/vita/Makefile.in +++ b/newlib/libc/sys/vita/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.6 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -53,7 +54,7 @@ host_triplet = @host@ subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ - $(top_srcdir)/../../../../mkinstalldirs + $(srcdir)/../../../../mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../../../acinclude.m4 \ $(top_srcdir)/configure.in @@ -67,9 +68,10 @@ CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru lib_a_AR = $(AR) $(ARFLAGS) -lib_a_LIBADD = +lib_a_DEPENDENCIES = $(SOCKET_OBJS) am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) lib_a-sbrk.$(OBJEXT) \ - lib_a-threading.$(OBJEXT) lib_a-mlock.$(OBJEXT) lib_a-io.$(OBJEXT) + lib_a-threading.$(OBJEXT) lib_a-mlock.$(OBJEXT) \ + lib_a-io.$(OBJEXT) lib_a-socket.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -86,8 +88,6 @@ am__can_run_installinfo = \ esac ETAGS = etags CTAGS = ctags -CSCOPE = cscope -AM_RECURSIVE_TARGETS = cscope ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ @@ -182,6 +182,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -195,7 +196,9 @@ AUTOMAKE_OPTIONS = cygnus INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c +SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c +lib_a_LIBADD = ${SOCKET_OBJS} lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. @@ -270,12 +273,6 @@ lib_a-sbrk.o: sbrk.c lib_a-sbrk.obj: sbrk.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sbrk.obj `if test -f 'sbrk.c'; then $(CYGPATH_W) 'sbrk.c'; else $(CYGPATH_W) '$(srcdir)/sbrk.c'; fi` -lib_a-io.o: io.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-io.o `test -f 'io.c' || echo '$(srcdir)/'`io.c - -lib_a-io.obj: io.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-io.obj `if test -f 'io.c'; then $(CYGPATH_W) 'io.c'; else $(CYGPATH_W) '$(srcdir)/io.c'; fi` - lib_a-threading.o: threading.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-threading.o `test -f 'threading.c' || echo '$(srcdir)/'`threading.c @@ -288,6 +285,18 @@ lib_a-mlock.o: mlock.c lib_a-mlock.obj: mlock.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-mlock.obj `if test -f 'mlock.c'; then $(CYGPATH_W) 'mlock.c'; else $(CYGPATH_W) '$(srcdir)/mlock.c'; fi` +lib_a-io.o: io.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-io.o `test -f 'io.c' || echo '$(srcdir)/'`io.c + +lib_a-io.obj: io.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-io.obj `if test -f 'io.c'; then $(CYGPATH_W) 'io.c'; else $(CYGPATH_W) '$(srcdir)/io.c'; fi` + +lib_a-socket.o: socket.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-socket.o `test -f 'socket.c' || echo '$(srcdir)/'`socket.c + +lib_a-socket.obj: socket.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-socket.obj `if test -f 'socket.c'; then $(CYGPATH_W) 'socket.c'; else $(CYGPATH_W) '$(srcdir)/socket.c'; fi` + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -337,32 +346,8 @@ GTAGS: && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) - -clean-cscope: - -rm -f cscope.files - -cscope.files: clean-cscope cscopelist - -cscopelist: $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files check-am: check: check-am all-am: Makefile $(LIBRARIES) all-local @@ -470,21 +455,24 @@ uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am all-local am--refresh check check-am \ - clean clean-cscope clean-generic clean-noinstLIBRARIES cscope \ - cscopelist ctags distclean distclean-compile distclean-generic \ - distclean-tags dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags uninstall uninstall-am + clean clean-generic clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-tags dvi dvi-am \ + html html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am all-local: crt0.o +$(SOCKET_OBJS): socket.c + $(COMPILE) -DF_$* $< -c -o $@ + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/newlib/libc/sys/vita/aclocal.m4 b/newlib/libc/sys/vita/aclocal.m4 index 5fb014d775..62fe272e2c 100644 --- a/newlib/libc/sys/vita/aclocal.m4 +++ b/newlib/libc/sys/vita/aclocal.m4 @@ -1,7 +1,8 @@ -# generated automatically by aclocal 1.12.6 -*- Autoconf -*- - -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# generated automatically by aclocal 1.11.6 -*- Autoconf -*- +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, +# Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,24 +18,27 @@ m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically 'autoreconf'.])]) +To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software +# Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 1 + # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.12' +[am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.12.6], [], +m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -50,22 +54,24 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.12.6])dnl +[AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 1 + # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and @@ -84,7 +90,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you +# harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, @@ -110,19 +116,22 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2012 Free Software Foundation, Inc. +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 9 + # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl @@ -141,14 +150,16 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 12 -# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing @@ -158,7 +169,7 @@ fi])]) # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was @@ -171,13 +182,12 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], - [$1], [UPC], [depcc="$UPC" am_compiler_list=], - [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], @@ -185,8 +195,8 @@ AC_CACHE_CHECK([dependency style of $depcc], # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -226,16 +236,16 @@ AC_CACHE_CHECK([dependency style of $depcc], : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with '-c' and '-o' for the sake of the "dashmstdout" + # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -244,8 +254,8 @@ AC_CACHE_CHECK([dependency style of $depcc], test "$am__universal" = false || continue ;; nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else @@ -253,7 +263,7 @@ AC_CACHE_CHECK([dependency style of $depcc], fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has + # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -301,7 +311,7 @@ AM_CONDITIONAL([am__fastdep$1], [ # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl @@ -311,13 +321,9 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE([dependency-tracking], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' @@ -332,12 +338,14 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ @@ -356,7 +364,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but + # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -368,19 +376,21 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. + # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` @@ -398,7 +408,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will +# is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], @@ -408,12 +418,15 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 16 + # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -458,41 +471,31 @@ AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], -[AC_DIAGNOSE([obsolete], -[$0: two- and three-arguments forms are deprecated. For more info, see: -http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) -m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) - AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -AM_MISSING_PROG([AUTOCONF], [autoconf]) -AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -AM_MISSING_PROG([AUTOHEADER], [autoheader]) -AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl @@ -503,35 +506,28 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES([CC])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -dnl Support for Objective C++ was only introduced in Autoconf 2.65, -dnl but we still cater to Autoconf 2.62. -m4_ifdef([AC_PROG_OBJCXX], -[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) -dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], @@ -559,12 +555,15 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, +# Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 1 + # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. @@ -578,14 +577,16 @@ if test x"${install_sh}" != xset; then install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi -AC_SUBST([install_sh])]) +AC_SUBST(install_sh)]) -# Copyright (C) 2003-2012 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 2 + # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], @@ -602,17 +603,20 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, +# 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 5 + # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless 'enable' is passed literally. -# For symmetry, 'disable' may be passed as well. Anyway, the user +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), @@ -623,11 +627,10 @@ AC_DEFUN([AM_MAINTAINER_MODE], AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], - [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], - am_maintainer_other[ make rules and dependencies not useful - (and sometimes confusing) to the casual installer])], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE @@ -639,12 +642,14 @@ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 4 + # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. @@ -662,7 +667,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. +# Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -689,12 +694,15 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2012 Free Software Foundation, Inc. +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 6 + # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], @@ -702,6 +710,7 @@ AC_DEFUN([AM_MISSING_PROG], $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) + # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. @@ -722,18 +731,50 @@ if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) + AC_MSG_WARN([`missing' script is too old or missing]) fi ]) +# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software +# Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 5 + # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], @@ -743,7 +784,7 @@ AC_DEFUN([_AM_MANGLE_OPTION], # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ @@ -759,16 +800,22 @@ AC_DEFUN([_AM_IF_OPTION], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 5 + # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -779,40 +826,32 @@ case `pwd` in esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac -# Do 'set' in a subshell so we don't clobber the current shell's +# Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - fi - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + test "$[2]" = conftest.file ) then @@ -822,58 +861,46 @@ else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi -AC_MSG_RESULT([yes]) -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) +AC_MSG_RESULT(yes)]) -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 1 + # AM_PROG_INSTALL_STRIP # --------------------- -# One issue with vendor 'install' (even GNU) is that you can't +# One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in "make install-strip", and initialize +# always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2012 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 3 + # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. @@ -887,16 +914,18 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2012 Free Software Foundation, Inc. +# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 2 + # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. -# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory @@ -919,7 +948,7 @@ AC_MSG_CHECKING([how to create a $1 tar archive]) _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of '-'. +# Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in diff --git a/newlib/libc/sys/vita/configure b/newlib/libc/sys/vita/configure index 548219857f..e9c088dfdd 100755 --- a/newlib/libc/sys/vita/configure +++ b/newlib/libc/sys/vita/configure @@ -679,6 +679,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -755,6 +756,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1007,6 +1009,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1144,7 +1155,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1297,6 +1308,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1343,13 +1355,10 @@ Optional Features: --enable-newlib-elix-level supply desired elix library level (1-4) --disable-newlib-io-float disable printf/scanf family float support --disable-newlib-supplied-syscalls disable newlib from supplying syscalls - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --enable-maintainer-mode - enable make rules and dependencies not useful (and - sometimes confusing) to the casual installer + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer Some influential environment variables: CCAS assembler compiler command (defaults to CC) @@ -1926,7 +1935,7 @@ IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -am__api_version='1.12' +am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -2023,6 +2032,9 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -2033,40 +2045,32 @@ case `pwd` in esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac -# Do 'set' in a subshell so we don't clobber the current shell's +# Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + test "$2" = conftest.file ) then @@ -2078,16 +2082,6 @@ Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. @@ -2114,8 +2108,8 @@ if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then @@ -2127,10 +2121,10 @@ if test x"${install_sh}" != xset; then esac fi -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. +# will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. @@ -2269,6 +2263,12 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -2370,7 +2370,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. +# Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -2574,12 +2574,6 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -mkdir_p='$(MKDIR_P)' - # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used @@ -2654,8 +2648,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -2690,16 +2684,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with '-c' and '-o' for the sake of the "dashmstdout" + # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -2708,8 +2702,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else @@ -2717,7 +2711,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has + # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -3594,14 +3588,6 @@ if test -z "${MAY_SUPPLY_SYSCALLS_TRUE}" && test -z "${MAY_SUPPLY_SYSCALLS_FALSE as_fn_error $? "conditional \"MAY_SUPPLY_SYSCALLS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. @@ -4656,7 +4642,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but + # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -4690,19 +4676,21 @@ $as_echo X"$mf" | continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. + # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || diff --git a/newlib/libc/sys/vita/io.c b/newlib/libc/sys/vita/io.c index b4c920f826..cd42b7d51d 100644 --- a/newlib/libc/sys/vita/io.c +++ b/newlib/libc/sys/vita/io.c @@ -1,45 +1,131 @@ #include #include -extern char _newlib_fd_mutex[]; -extern int fd_to_scefd[]; +#include + +#include "vitadescriptor.h" + +DescriptorTranslation *__vita_fdmap[MAX_OPEN_FILES]; +DescriptorTranslation __vita_fdmap_pool[MAX_OPEN_FILES]; + +char _newlib_fd_mutex[32] __attribute__ ((aligned (8))); void _init_vita_io(void) { - int ret; - - sceKernelCreateLwMutex(_newlib_fd_mutex, "fd conversion table mutex", 0, 0, 0); - - sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); - ret = sceIoOpen("tty0:", O_RDONLY, 0); - if (ret >= 0) { - fd_to_scefd[STDIN_FILENO] = ret; - } - ret = sceIoOpen("tty0:", O_WRONLY, 0); - if (ret >= 0) { - fd_to_scefd[STDOUT_FILENO] = ret; - } - ret = sceIoOpen("tty0:", O_WRONLY, 0); - if (ret >= 0) { - fd_to_scefd[STDERR_FILENO] = ret; - } - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + int ret; + sceKernelCreateLwMutex(_newlib_fd_mutex, "fd conversion table mutex", 0, 1, NULL); + + memset(__vita_fdmap, 0, sizeof(__vita_fdmap)); + memset(__vita_fdmap_pool, 0, sizeof(__vita_fdmap_pool)); + + // TODO: do we prefer sceKernelStdin and friends? + ret = sceIoOpen("tty0:", SCE_O_RDONLY, 0); + + if (ret >= 0) { + __vita_fdmap[STDIN_FILENO] = &__vita_fdmap_pool[STDIN_FILENO]; + __vita_fdmap[STDIN_FILENO]->sce_uid = ret; + __vita_fdmap[STDIN_FILENO]->type = VITA_DESCRIPTOR_TTY; + __vita_fdmap[STDIN_FILENO]->ref_count = 1; + } + + ret = sceIoOpen("tty0:", SCE_O_WRONLY, 0); + + if (ret >= 0) { + __vita_fdmap[STDOUT_FILENO] = &__vita_fdmap_pool[STDOUT_FILENO]; + __vita_fdmap[STDOUT_FILENO]->sce_uid = ret; + __vita_fdmap[STDOUT_FILENO]->type = VITA_DESCRIPTOR_TTY; + __vita_fdmap[STDOUT_FILENO]->ref_count = 1; + } + + ret = sceIoOpen("tty0:", SCE_O_WRONLY, 0); + + if (ret >= 0) { + __vita_fdmap[STDERR_FILENO] = &__vita_fdmap_pool[STDERR_FILENO]; + __vita_fdmap[STDERR_FILENO]->sce_uid = ret; + __vita_fdmap[STDERR_FILENO]->type = VITA_DESCRIPTOR_TTY; + __vita_fdmap[STDERR_FILENO]->ref_count = 1; + } + + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); } void _free_vita_io(void) { - sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); - if (fd_to_scefd[STDIN_FILENO]) { - sceIoClose(fd_to_scefd[STDIN_FILENO]); - fd_to_scefd[STDIN_FILENO] = 0; - } - if (fd_to_scefd[STDOUT_FILENO]) { - sceIoClose(fd_to_scefd[STDOUT_FILENO]); - fd_to_scefd[STDOUT_FILENO] = 0; - } - if (fd_to_scefd[STDERR_FILENO]) { - sceIoClose(fd_to_scefd[STDERR_FILENO]); - fd_to_scefd[STDERR_FILENO] = 0; - } - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); - - sceKernelDeleteLwMutex(_newlib_fd_mutex); + sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + + if (__vita_fdmap[STDIN_FILENO]) { + sceIoClose(__vita_fdmap[STDIN_FILENO]->sce_uid); + memset(__vita_fdmap[STDIN_FILENO], 0, sizeof(DescriptorTranslation)); + __vita_fdmap[STDIN_FILENO] = NULL; + } + if (__vita_fdmap[STDOUT_FILENO]) { + sceIoClose(__vita_fdmap[STDOUT_FILENO]->sce_uid); + memset(__vita_fdmap[STDOUT_FILENO], 0, sizeof(DescriptorTranslation)); + __vita_fdmap[STDOUT_FILENO] = NULL; + } + if (__vita_fdmap[STDERR_FILENO]) { + sceIoClose(__vita_fdmap[STDERR_FILENO]->sce_uid); + memset(__vita_fdmap[STDERR_FILENO], 0, sizeof(DescriptorTranslation)); + __vita_fdmap[STDERR_FILENO] = NULL; + } + + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + sceKernelDeleteLwMutex(_newlib_fd_mutex); +} + +int __vita_acquire_descriptor(void) +{ + int fd = -1; + int i = 0; + sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + + // get free descriptor + for (fd = 0; fd < MAX_OPEN_FILES; ++fd) + { + if (__vita_fdmap[fd] == NULL) + { + // get free pool + for (i = 0; i < MAX_OPEN_FILES; ++i) + { + if (__vita_fdmap_pool[i].ref_count == 0) + { + __vita_fdmap[fd] = &__vita_fdmap_pool[i]; + __vita_fdmap[fd]->ref_count = 1; + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + return fd; + } + } + } + } + + // no mores descriptors available... + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + return -1; +} + +int __vita_release_descriptor(int fd) +{ + int ref_count = -1; + + if (!is_fd_valid(fd)) + return -1; + + sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + ref_count = --__vita_fdmap[fd]->ref_count; + + if (__vita_fdmap[fd]->ref_count == 0) + { + memset(__vita_fdmap[fd], 0, sizeof(DescriptorTranslation)); + } + + __vita_fdmap[fd] = NULL; + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + return ref_count; +} + +int __vita_descriptor_ref_count(int fd) +{ + int res = 0; + sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + res = __vita_fdmap[fd]->ref_count; + sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + return res; } diff --git a/newlib/libc/sys/vita/socket.c b/newlib/libc/sys/vita/socket.c new file mode 100644 index 0000000000..96e106c1ea --- /dev/null +++ b/newlib/libc/sys/vita/socket.c @@ -0,0 +1,433 @@ +/* + +Copyright (C) 2016, David "Davee" Morgan + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +*/ + +#include +#include + +#include + +#include "vitadescriptor.h" + +#define SCE_ERRNO_MASK 0xFF + +static inline int is_socket_valid(int s) +{ + return (is_fd_valid(s) && (__vita_fdmap[s]->type == VITA_DESCRIPTOR_SOCKET)); +} + +#ifdef F_accept +int accept(int s, struct sockaddr *addr, socklen_t *addrlen) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetAccept(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int *)addrlen); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + int s2 =__vita_acquire_descriptor(); + + if (s2 < 0) + { + errno = EMFILE; + return -1; + } + + __vita_fdmap[s2]->sce_uid = res; + __vita_fdmap[s2]->type = VITA_DESCRIPTOR_SOCKET; + return s2; +} +#endif + +#ifdef F_bind +int bind(int s, const struct sockaddr *addr, socklen_t addrlen) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetBind(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int)addrlen); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return 0; +} +#endif + +#ifdef F_connect +int connect(int s, const struct sockaddr *addr, socklen_t addrlen) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetConnect(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int)addrlen); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return 0; +} +#endif + +#ifdef F_getpeername +int getpeername(int s, struct sockaddr *addr, socklen_t *addrlen) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetGetpeername(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int *)addrlen); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return 0; +} +#endif + +#ifdef F_getsockname +int getsockname(int s, struct sockaddr *addr, socklen_t *addrlen) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetGetsockname(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int *)addrlen); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return 0; +} +#endif + +#ifdef F_getsockopt +int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetGetsockopt(__vita_fdmap[s]->sce_uid, level, optname, optval, (unsigned int *)optlen); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return 0; +} +#endif + +#ifdef F_listen +int listen(int s, int backlog) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetListen(__vita_fdmap[s]->sce_uid, backlog); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return 0; +} +#endif + +#ifdef F_recv +ssize_t recv(int s, void *buf, size_t len, int flags) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetRecv(__vita_fdmap[s]->sce_uid, buf, len, flags); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return res; +} +#endif + +#ifdef F_recvfrom +ssize_t recvfrom(int s, void *buf, size_t len, int flags, + struct sockaddr *src_addr, socklen_t *addrlen) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetRecvfrom(__vita_fdmap[s]->sce_uid, buf, len, flags, (SceNetSockaddr *)src_addr, (unsigned int *)addrlen); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return res; +} +#endif + +#ifdef F_recvmsg +ssize_t recvmsg(int s, struct msghdr *msg, int flags) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetRecvmsg(__vita_fdmap[s]->sce_uid, (SceNetMsghdr *)msg, flags); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return res; +} +#endif + +#ifdef F_send +ssize_t send(int s, const void *buf, size_t len, int flags) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetSend(__vita_fdmap[s]->sce_uid, buf, len, flags); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return res; + +} +#endif + +#ifdef F_sendto +ssize_t sendto(int s, const void *buf, + size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetSendto(__vita_fdmap[s]->sce_uid, buf, len, flags, (SceNetSockaddr *)dest_addr, (unsigned int)addrlen); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return res; +} +#endif + +#ifdef F_sendmsg +ssize_t sendmsg(int s, const struct msghdr *msg, int flags) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetSendmsg(__vita_fdmap[s]->sce_uid, (const SceNetMsghdr *)msg, flags); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return res; +} +#endif + +#ifdef F_setsockopt +int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetSetsockopt(__vita_fdmap[s]->sce_uid, level, optname, optval, optlen); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return 0; +} +#endif + +#ifdef F_shutdown +int shutdown(int s, int how) +{ + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int res = sceNetShutdown(__vita_fdmap[s]->sce_uid, how); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return 0; +} +#endif + +#ifdef F_socket +int socket(int domain, int type, int protocol) +{ + int res = sceNetSocket("", domain, type, protocol); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + int s = __vita_acquire_descriptor(); + + if (s < 0) + { + errno = EMFILE; + return -1; + } + + __vita_fdmap[s]->sce_uid = res; + __vita_fdmap[s]->type = VITA_DESCRIPTOR_SOCKET; + return s; +} + +int __vita_glue_socket_close(int s) +{ + int res = 0; + + if (!is_socket_valid(s)) + { + errno = EBADF; + return -1; + } + + int sce_uid = __vita_fdmap[s]->sce_uid; + int ref_count = __vita_release_descriptor(s); + + if (ref_count < 0) + { + errno = EBADF; + return -1; + } + + if (ref_count == 0) + { + res = sceNetSocketClose(sce_uid); + } + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + return -1; + } + + return 0; +} + +ssize_t __vita_glue_socket_recv(int s, void *buf, size_t len, int flags) +{ + return recv(s, buf, len, flags); +} + +ssize_t __vita_glue_socket_send(int s, const void *buf, size_t len, int flags) +{ + return send(s, buf, len, flags); +} +#endif diff --git a/newlib/libc/sys/vita/sys/socket.h b/newlib/libc/sys/vita/sys/socket.h new file mode 100644 index 0000000000..5c0898f558 --- /dev/null +++ b/newlib/libc/sys/vita/sys/socket.h @@ -0,0 +1,274 @@ +/* $NetBSD: socket.h,v 1.77 2005/11/29 03:12:16 christos Exp $ */ + +/* + * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Copyright (c) 1982, 1985, 1986, 1988, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)socket.h 8.6 (Berkeley) 5/3/95 + */ + +#ifndef _SYS_SOCKET_H_ +#define _SYS_SOCKET_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +typedef uint8_t sa_family_t; +typedef uint32_t socklen_t; + +/* + * Socket types. + */ +#define SOCK_STREAM 1 /* stream socket */ +#define SOCK_DGRAM 2 /* datagram socket */ +#define SOCK_RAW 3 /* raw-protocol interface */ +#define SOCK_RDM 4 /* reliably-delivered message */ +#define SOCK_SEQPACKET 5 /* sequenced packet stream */ + +/* + * Option flags per-socket. + */ +#define SO_DEBUG 0x0001 /* turn on debugging info recording */ +#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ +#define SO_REUSEADDR 0x0004 /* allow local address reuse */ +#define SO_KEEPALIVE 0x0008 /* keep connections alive */ +#define SO_DONTROUTE 0x0010 /* just use interface addresses */ +#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ +#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ +#define SO_LINGER 0x0080 /* linger on close if data present */ +#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ +#define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ +#define SO_TIMESTAMP 0x0400 /* timestamp received dgram traffic */ + +/* + * Additional options, not kept in so_options. + */ +#define SO_SNDBUF 0x1001 /* send buffer size */ +#define SO_RCVBUF 0x1002 /* receive buffer size */ +#define SO_SNDLOWAT 0x1003 /* send low-water mark */ +#define SO_RCVLOWAT 0x1004 /* receive low-water mark */ +#define SO_SNDTIMEO 0x1005 /* send timeout */ +#define SO_RCVTIMEO 0x1006 /* receive timeout */ +#define SO_ERROR 0x1007 /* get error status and clear */ +#define SO_TYPE 0x1008 /* get socket type */ +#define SO_OVERFLOWED 0x1009 /* datagrams: return packets dropped */ +#define SO_NONBLOCK 0x1009 /* non-blocking I/O */ + +/* + * Structure used for manipulating linger option. + */ +struct linger { + int l_onoff; /* option on/off */ + int l_linger; /* linger time in seconds */ +}; + +/* + * Level number for (get/set)sockopt() to apply to socket itself. + */ +#define SOL_SOCKET 0xffff /* options for socket level */ + +/* + * Address families. + */ +#define AF_UNSPEC 0 /* unspecified */ +#define AF_LOCAL 1 /* local to host (pipes, portals) */ +#define AF_UNIX AF_LOCAL /* backward compatibility */ +#define AF_INET 2 /* internetwork: UDP, TCP, etc. */ +#define AF_IMPLINK 3 /* arpanet imp addresses */ +#define AF_PUP 4 /* pup protocols: e.g. BSP */ +#define AF_CHAOS 5 /* mit CHAOS protocols */ +#define AF_NS 6 /* XEROX NS protocols */ +#define AF_ISO 7 /* ISO protocols */ +#define AF_OSI AF_ISO +#define AF_ECMA 8 /* european computer manufacturers */ +#define AF_DATAKIT 9 /* datakit protocols */ +#define AF_CCITT 10 /* CCITT protocols, X.25 etc */ +#define AF_SNA 11 /* IBM SNA */ +#define AF_DECnet 12 /* DECnet */ +#define AF_DLI 13 /* DEC Direct data link interface */ +#define AF_LAT 14 /* LAT */ +#define AF_HYLINK 15 /* NSC Hyperchannel */ +#define AF_APPLETALK 16 /* Apple Talk */ +#define AF_ROUTE 17 /* Internal Routing Protocol */ +#define AF_LINK 18 /* Link layer interface */ +#define AF_COIP 20 /* connection-oriented IP, aka ST II */ +#define AF_CNT 21 /* Computer Network Technology */ +#define AF_IPX 23 /* Novell Internet Protocol */ +#define AF_INET6 24 /* IP version 6 */ +#define AF_ISDN 26 /* Integrated Services Digital Network*/ +#define AF_E164 AF_ISDN /* CCITT E.164 recommendation */ +#define AF_NATM 27 /* native ATM access */ +#define AF_ARP 28 /* (rev.) addr. res. prot. (RFC 826) */ +#define AF_MAX 31 + +/* + * Structure used by kernel to store most + * addresses. + */ +struct sockaddr { + uint8_t sa_len; /* total length */ + sa_family_t sa_family; /* address family */ + char sa_data[14]; /* actually longer; address value */ +}; + +/* + * Protocol families, same as address families for now. + */ +#define PF_UNSPEC AF_UNSPEC +#define PF_LOCAL AF_LOCAL +#define PF_UNIX PF_LOCAL /* backward compatibility */ +#define PF_INET AF_INET +#define PF_IMPLINK AF_IMPLINK +#define PF_PUP AF_PUP +#define PF_CHAOS AF_CHAOS +#define PF_NS AF_NS +#define PF_ISO AF_ISO +#define PF_OSI AF_ISO +#define PF_ECMA AF_ECMA +#define PF_DATAKIT AF_DATAKIT +#define PF_CCITT AF_CCITT +#define PF_SNA AF_SNA +#define PF_DECnet AF_DECnet +#define PF_DLI AF_DLI +#define PF_LAT AF_LAT +#define PF_HYLINK AF_HYLINK +#define PF_APPLETALK AF_APPLETALK +#define PF_ROUTE AF_ROUTE +#define PF_LINK AF_LINK +#if defined(_NETBSD_SOURCE) +#define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */ +#endif +#define PF_COIP AF_COIP +#define PF_CNT AF_CNT +#define PF_INET6 AF_INET6 +#define PF_IPX AF_IPX /* same format as AF_NS */ +#if defined(_NETBSD_SOURCE) +#define PF_RTIP pseudo_AF_RTIP /* same format as AF_INET */ +#define PF_PIP pseudo_AF_PIP +#endif +#define PF_ISDN AF_ISDN /* same as E164 */ +#define PF_E164 AF_E164 +#define PF_NATM AF_NATM +#define PF_ARP AF_ARP +#if defined(_NETBSD_SOURCE) +#define PF_KEY pseudo_AF_KEY /* like PF_ROUTE, only for key mgmt */ +#endif + +#define PF_MAX AF_MAX + +#define MSG_OOB 0x1 /* process out-of-band data */ +#define MSG_PEEK 0x2 /* peek at incoming message */ +#define MSG_DONTROUTE 0x4 /* send without using routing tables */ +#define MSG_EOR 0x8 /* data completes record */ +#define MSG_TRUNC 0x10 /* data discarded before delivery */ +#define MSG_CTRUNC 0x20 /* control data lost before delivery */ +#define MSG_WAITALL 0x40 /* wait for full request or error */ +#define MSG_DONTWAIT 0x80 /* this message should be nonblocking */ +#define MSG_BCAST 0x100 /* this message was rcvd using link-level brdcst */ +#define MSG_MCAST 0x200 /* this message was rcvd using link-level mcast */ + +/* + * Types of socket shutdown(2). + */ +#define SHUT_RD 0 /* Disallow further receives. */ +#define SHUT_WR 1 /* Disallow further sends. */ +#define SHUT_RDWR 2 /* Disallow further sends/receives. */ + +struct iovec { + void *iov_base; /* Base address. */ + size_t iov_len; /* Length. */ +}; + +struct msghdr { + void *msg_name; /* optional address */ + socklen_t msg_namelen; /* size of address */ + struct iovec *msg_iov; /* scatter/gather array */ + int msg_iovlen; /* # elements in msg_iov */ + void *msg_control; /* ancillary data, see below */ + socklen_t msg_controllen; /* ancillary data buffer len */ + int msg_flags; /* flags on received message */ +}; + +/* BSD-compatible socket API. */ +int accept(int, struct sockaddr * __restrict, socklen_t * __restrict); +int bind(int, const struct sockaddr *, socklen_t); +int connect(int, const struct sockaddr *, socklen_t); +int getpeername(int, struct sockaddr * __restrict, socklen_t * __restrict); +int getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict); +int getsockopt(int, int, int, void * __restrict, socklen_t * __restrict); +int listen(int, int); +ssize_t recv(int, void *, size_t, int); +ssize_t recvfrom(int, void * __restrict, size_t, int, + struct sockaddr * __restrict, socklen_t * __restrict); +ssize_t recvmsg(int s, struct msghdr *msg, int flags); +ssize_t send(int, const void *, size_t, int); +ssize_t sendto(int, const void *, + size_t, int, const struct sockaddr *, socklen_t); +ssize_t sendmsg(int s, const struct msghdr *msg, int flags); +int setsockopt(int, int, int, const void *, socklen_t); +int shutdown(int, int); +int socket(int, int, int); + +#ifdef __cplusplus +} +#endif + +#endif /* !_SYS_SOCKET_H_ */ diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 609053f963..bd9fec4a50 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -8,30 +8,52 @@ #include #include -#define SCE_ERRNO_MASK 0xFF -#define MAX_OPEN_FILES 1024 +#include +#include +#include +#include + +#include + +#include + +#include "vitadescriptor.h" +#include "vitaglue.h" -int fd_to_scefd[MAX_OPEN_FILES]; -char _newlib_fd_mutex[32] __attribute__ ((aligned (8))); + +// TODO: add to SDK +int sceKernelLibcGettimeofday(struct timeval *ptimeval, void *ptimezone); + +#define SCE_ERRNO_MASK 0xFF _ssize_t _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) { int ret; - if ((unsigned)fd > MAX_OPEN_FILES) { - reent->_errno = EINVAL; + + if (!is_fd_valid(fd)) { + reent->_errno = EBADF; return -1; } - if ((fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) - && fd_to_scefd[fd] == 0) { - ret = nbytes; - } else { - ret = sceIoWrite(fd_to_scefd[fd], buf, nbytes); + + switch (__vita_fdmap[fd]->type) + { + case VITA_DESCRIPTOR_FILE: + case VITA_DESCRIPTOR_TTY: + ret = sceIoWrite(__vita_fdmap[fd]->sce_uid, buf, nbytes); + break; + case VITA_DESCRIPTOR_SOCKET: + if (__vita_glue_socket_send) + ret = __vita_glue_socket_send(fd, buf, nbytes, 0); + break; } + if (ret < 0) { - reent->_errno = ret & SCE_ERRNO_MASK; + if (ret != -1) + reent->_errno = ret & SCE_ERRNO_MASK; return -1; } + reent->_errno = 0; return ret; } @@ -41,22 +63,45 @@ _exit(int rc) { _free_vita_newlib(); sceKernelExitProcess(rc); + while (1); } int _close_r(struct _reent *reent, int fd) { - if ((unsigned)fd > MAX_OPEN_FILES) { - reent->_errno = EINVAL; + int ret = 0; + + if (!is_fd_valid(fd)) { + reent->_errno = EBADF; return -1; } - reent->_errno = sceIoClose(fd_to_scefd[fd]) & SCE_ERRNO_MASK; - if (reent->_errno == 0) { - sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); - fd_to_scefd[fd] = 0; - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + + switch (__vita_fdmap[fd]->type) + { + case VITA_DESCRIPTOR_FILE: + case VITA_DESCRIPTOR_TTY: + { + int sce_uid = __vita_fdmap[fd]->sce_uid; + int ref_count = __vita_release_descriptor(fd); + + if (ref_count == 0) + ret = sceIoClose(fd); + break; + } + case VITA_DESCRIPTOR_SOCKET: + if (__vita_glue_socket_close) + ret = __vita_glue_socket_close(fd); + break; } - return 0; + + if (ret < 0) { + if (ret != -1) + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + + reent->_errno = 0; + return ret; } char *__env[1] = { 0 }; @@ -97,10 +142,14 @@ _gettimeofday_r(struct _reent *reent, struct timeval *ptimeval, void *ptimezone) } int -_isatty_r(struct _reent *reent, int file) +_isatty_r(struct _reent *reent, int fd) { - reent->_errno = ENOSYS; - return 0; + if (!is_fd_valid(fd)) { + reent->_errno = EBADF; + return 0; + } + + return (__vita_fdmap[fd]->type == VITA_DESCRIPTOR_TTY); } int @@ -134,36 +183,49 @@ _off_t _lseek_r(struct _reent *reent, int fd, _off_t ptr, int dir) { int ret; - if ((unsigned)fd > MAX_OPEN_FILES || fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { - reent->_errno = EINVAL; + + if (!is_fd_valid(fd)) { + reent->_errno = EBADF; return -1; } - ret = sceIoLseek32(fd_to_scefd[fd], ptr, dir); + + switch (__vita_fdmap[fd]->type) + { + case VITA_DESCRIPTOR_FILE: + ret = sceIoLseek32(__vita_fdmap[fd]->sce_uid, ptr, dir); + break; + case VITA_DESCRIPTOR_TTY: + case VITA_DESCRIPTOR_SOCKET: + ret = EBADF; + break; + } + if (ret < 0) { reent->_errno = ret & SCE_ERRNO_MASK; return -1; } + return ret; } int _fcntl2sony(int flags) { int out = 0; if (flags & O_RDWR) - out |= 3; + out |= SCE_O_RDWR; else if (flags & O_WRONLY) - out |= 2; + out |= SCE_O_WRONLY; else - out |= 1; + out |= SCE_O_RDONLY; if (flags & O_NONBLOCK) - out |= 4; + out |= SCE_O_NBLOCK; if (flags & O_APPEND) - out |= 0x100; + out |= SCE_O_APPEND; if (flags & O_CREAT) - out |= 0x200; + out |= SCE_O_CREAT; if (flags & O_TRUNC) - out |= 0x400; + out |= SCE_O_TRUNC; if (flags & O_EXCL) - out |= 0x800; + out |= SCE_O_EXCL; return out; } @@ -172,26 +234,25 @@ _open_r(struct _reent *reent, const char *file, int flags, int mode) { int ret, i, found = 0; flags = _fcntl2sony(flags); + ret = sceIoOpen(file, flags, 0666); if (ret < 0) { reent->_errno = ret & SCE_ERRNO_MASK; return -1; } - sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); - // skip stdin, stdout, stderr - for (i = 3; i < MAX_OPEN_FILES; ++i) - if (fd_to_scefd[i] == 0) { - found = i; - break; - } - if (!found) { - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + + int fd = __vita_acquire_descriptor(); + + if (fd < 0) + { sceIoClose(ret); reent->_errno = EMFILE; return -1; } - fd_to_scefd[found] = ret; - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + + __vita_fdmap[fd]->sce_uid = ret; + __vita_fdmap[fd]->type = VITA_DESCRIPTOR_FILE; + reent->_errno = 0; return found; } @@ -200,21 +261,30 @@ _ssize_t _read_r(struct _reent *reent, int fd, void *ptr, size_t len) { int ret; - if ((unsigned)fd > MAX_OPEN_FILES) { - reent->_errno = EINVAL; - return 01; + + if (!is_fd_valid(fd)) { + reent->_errno = EBADF; + return -1; } - if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) { - if (fd_to_scefd[fd] == 0) { - reent->_errno = 0; - return 0; - } + + switch (__vita_fdmap[fd]->type) + { + case VITA_DESCRIPTOR_TTY: + case VITA_DESCRIPTOR_FILE: + ret = sceIoRead(__vita_fdmap[fd]->sce_uid, ptr, len); + break; + case VITA_DESCRIPTOR_SOCKET: + if (__vita_glue_socket_recv) + ret = __vita_glue_socket_recv(fd, ptr, len, 0); + break; } - ret = sceIoRead(fd_to_scefd[fd], ptr, len); + if (ret < 0) { - reent->_errno = ret & SCE_ERRNO_MASK; + if (ret != -1) + reent->_errno = ret & SCE_ERRNO_MASK; return -1; } + reent->_errno = 0; return ret; } @@ -263,42 +333,13 @@ _times_r(struct _reent *reent, struct tms *ptms) return result; } -struct SceDateTime { - unsigned short year; - unsigned short month; - unsigned short day; - unsigned short hour; - unsigned short minute; - unsigned short second; - unsigned int microsecond; -}; - -struct SceIoStat { - int st_mode; - unsigned int st_attr; - long long st_size; - struct SceDateTime st_ctime; - struct SceDateTime st_atime; - struct SceDateTime st_mtime; - unsigned st_private[6]; -}; - -enum { - SCE_DIR = 0x1000, - SCE_REG = 0x2000, - SCE_STATFMT = 0xf000 -}; - -#define SCE_ISREG(x) (((x) & SCE_STATFMT) == SCE_REG) -#define SCE_ISDIR(x) (((x) & SCE_STATFMT) == SCE_DIR) - static void scestat_to_stat(struct SceIoStat *in, struct stat *out) { memset(out, 0, sizeof(*out)); out->st_size = in->st_size; - if (SCE_ISREG(in->st_mode)) + if (SCE_S_ISREG(in->st_mode)) out->st_mode |= _IFREG; - if (SCE_ISDIR(in->st_mode)) + if (SCE_S_ISDIR(in->st_mode)) out->st_mode |= _IFDIR; sceRtcGetTime_t(&in->st_atime, &out->st_atime); sceRtcGetTime_t(&in->st_mtime, &out->st_mtime); @@ -310,14 +351,28 @@ _fstat_r(struct _reent *reent, int fd, struct stat *st) { struct SceIoStat stat = {0}; int ret; - if ((unsigned)fd > MAX_OPEN_FILES) { - reent->_errno = EINVAL; + + if (!is_fd_valid(fd)) { + reent->_errno = EBADF; return -1; } - if ((ret = sceIoGetstatByFd(fd_to_scefd[fd], &stat)) < 0) { + + switch (__vita_fdmap[fd]->type) + { + case VITA_DESCRIPTOR_TTY: + case VITA_DESCRIPTOR_FILE: + ret = sceIoGetstatByFd(__vita_fdmap[fd]->sce_uid, &stat); + break; + case VITA_DESCRIPTOR_SOCKET: + ret = EBADF; + break; + } + + if (ret < 0) { reent->_errno = ret & SCE_ERRNO_MASK; return -1; } + scestat_to_stat(&stat, st); reent->_errno = 0; return 0; @@ -335,4 +390,4 @@ _stat_r(struct _reent *reent, const char *path, struct stat *st) scestat_to_stat(&stat, st); reent->_errno = 0; return 0; -} \ No newline at end of file +} diff --git a/newlib/libc/sys/vita/vitadescriptor.h b/newlib/libc/sys/vita/vitadescriptor.h new file mode 100644 index 0000000000..1c54fc0101 --- /dev/null +++ b/newlib/libc/sys/vita/vitadescriptor.h @@ -0,0 +1,58 @@ +/* + +Copyright (C) 2016, David "Davee" Morgan + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +*/ + +#ifndef _VITADESCRIPTOR_H_ +#define _VITADESCRIPTOR_H_ + + +#define MAX_OPEN_FILES 1024 + +typedef enum +{ + VITA_DESCRIPTOR_FILE, + VITA_DESCRIPTOR_SOCKET, + VITA_DESCRIPTOR_TTY +} DescriptorTypes; + +typedef struct +{ + int sce_uid; + DescriptorTypes type; + int ref_count; +} DescriptorTranslation; + +extern DescriptorTranslation *__vita_fdmap[]; + + +int __vita_acquire_descriptor(void); +int __vita_release_descriptor(int fd); +int __vita_descriptor_ref_count(int fd); + +static inline int is_fd_valid(int fd) +{ + return (fd > 0) && (fd < MAX_OPEN_FILES) && (__vita_fdmap[fd] != NULL); +} + +#endif // _VITADESCRIPTOR_H_ + diff --git a/newlib/libc/sys/vita/vitaglue.h b/newlib/libc/sys/vita/vitaglue.h new file mode 100644 index 0000000000..35dce42c49 --- /dev/null +++ b/newlib/libc/sys/vita/vitaglue.h @@ -0,0 +1,32 @@ +/* + +Copyright (C) 2016, David "Davee" Morgan + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +*/ + +#ifndef _VITAGLUE_H_ +#define _VITAGLUE_H_ + +extern int __attribute__((weak)) __vita_glue_socket_close(int s); +extern int __attribute__((weak)) __vita_glue_socket_recv(int s, void *buf, size_t len, int flags); +extern int __attribute__((weak)) __vita_glue_socket_send(int s, const void *buf, size_t len, int flags); + +#endif // _VITAGLUE_H_ From b4f89bc0da69c127dd922fe637de891ed6bc3fdc Mon Sep 17 00:00:00 2001 From: Davee Date: Tue, 6 Sep 2016 00:02:07 +0100 Subject: [PATCH 35/65] fix race conditions --- newlib/libc/sys/vita/io.c | 110 ++++++++++++++---- newlib/libc/sys/vita/socket.c | 161 ++++++++++++++++---------- newlib/libc/sys/vita/syscalls.c | 90 +++++++------- newlib/libc/sys/vita/vitadescriptor.h | 2 + newlib/libc/sys/vita/vitaglue.h | 8 +- 5 files changed, 235 insertions(+), 136 deletions(-) diff --git a/newlib/libc/sys/vita/io.c b/newlib/libc/sys/vita/io.c index cd42b7d51d..5e0915cb30 100644 --- a/newlib/libc/sys/vita/io.c +++ b/newlib/libc/sys/vita/io.c @@ -1,18 +1,24 @@ #include #include +#include +#include #include +#include #include "vitadescriptor.h" +#include "vitaglue.h" + +#define SCE_ERRNO_MASK 0xFF DescriptorTranslation *__vita_fdmap[MAX_OPEN_FILES]; DescriptorTranslation __vita_fdmap_pool[MAX_OPEN_FILES]; -char _newlib_fd_mutex[32] __attribute__ ((aligned (8))); +SceKernelLwMutexWork _newlib_fd_mutex __attribute__ ((aligned (8))); void _init_vita_io(void) { int ret; - sceKernelCreateLwMutex(_newlib_fd_mutex, "fd conversion table mutex", 0, 1, NULL); + sceKernelCreateLwMutex(&_newlib_fd_mutex, "fd conversion table mutex", 0, 1, NULL); memset(__vita_fdmap, 0, sizeof(__vita_fdmap)); memset(__vita_fdmap_pool, 0, sizeof(__vita_fdmap_pool)); @@ -45,11 +51,11 @@ void _init_vita_io(void) { __vita_fdmap[STDERR_FILENO]->ref_count = 1; } - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); } void _free_vita_io(void) { - sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); if (__vita_fdmap[STDIN_FILENO]) { sceIoClose(__vita_fdmap[STDIN_FILENO]->sce_uid); @@ -67,15 +73,15 @@ void _free_vita_io(void) { __vita_fdmap[STDERR_FILENO] = NULL; } - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); - sceKernelDeleteLwMutex(_newlib_fd_mutex); + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + sceKernelDeleteLwMutex(&_newlib_fd_mutex); } int __vita_acquire_descriptor(void) { int fd = -1; int i = 0; - sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); // get free descriptor for (fd = 0; fd < MAX_OPEN_FILES; ++fd) @@ -89,7 +95,7 @@ int __vita_acquire_descriptor(void) { __vita_fdmap[fd] = &__vita_fdmap_pool[i]; __vita_fdmap[fd]->ref_count = 1; - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); return fd; } } @@ -97,35 +103,99 @@ int __vita_acquire_descriptor(void) } // no mores descriptors available... - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); return -1; } int __vita_release_descriptor(int fd) { - int ref_count = -1; + DescriptorTranslation *map = NULL; - if (!is_fd_valid(fd)) - return -1; + sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); - sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); - ref_count = --__vita_fdmap[fd]->ref_count; + if (!is_fd_valid(fd)) + { + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return 0; + } - if (__vita_fdmap[fd]->ref_count == 0) + if (__vita_fd_drop(__vita_fdmap[fd]) < 0) { - memset(__vita_fdmap[fd], 0, sizeof(DescriptorTranslation)); + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return -1; } __vita_fdmap[fd] = NULL; - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); - return ref_count; + + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return 0; } int __vita_descriptor_ref_count(int fd) { int res = 0; - sceKernelLockLwMutex(_newlib_fd_mutex, 1, 0); + sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); res = __vita_fdmap[fd]->ref_count; - sceKernelUnlockLwMutex(_newlib_fd_mutex, 1); + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); return res; } + +DescriptorTranslation *__vita_fd_grab(int fd) +{ + DescriptorTranslation *map = NULL; + + sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); + + if (!is_fd_valid(fd)) + { + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return NULL; + } + + map = __vita_fdmap[fd]; + + if (map) + map->ref_count++; + + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return map; +} + +int __vita_fd_drop(DescriptorTranslation *map) +{ + sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); + + if (map->ref_count == 1) + { + int ret = 0; + + switch (map->type) + { + case VITA_DESCRIPTOR_FILE: + case VITA_DESCRIPTOR_TTY: + { + ret = sceIoClose(map->sce_uid); + break; + } + case VITA_DESCRIPTOR_SOCKET: + if (__vita_glue_socket_close) + ret = __vita_glue_socket_close(map->sce_uid); + break; + } + + if (ret < 0) { + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return -(ret & SCE_ERRNO_MASK); + } + + map->ref_count--; + memset(map, 0, sizeof(DescriptorTranslation)); + } + else + { + map->ref_count--; + } + + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return 0; +} diff --git a/newlib/libc/sys/vita/socket.c b/newlib/libc/sys/vita/socket.c index 96e106c1ea..3cf4871d2a 100644 --- a/newlib/libc/sys/vita/socket.c +++ b/newlib/libc/sys/vita/socket.c @@ -26,6 +26,7 @@ DEALINGS IN THE SOFTWARE. #include #include +#include #include "vitadescriptor.h" @@ -39,13 +40,17 @@ static inline int is_socket_valid(int s) #ifdef F_accept int accept(int s, struct sockaddr *addr, socklen_t *addrlen) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetAccept(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int *)addrlen); + int res = sceNetAccept(fdmap->sce_uid, (SceNetSockaddr *)addr, (unsigned int *)addrlen); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -70,13 +75,17 @@ int accept(int s, struct sockaddr *addr, socklen_t *addrlen) #ifdef F_bind int bind(int s, const struct sockaddr *addr, socklen_t addrlen) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetBind(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int)addrlen); + int res = sceNetBind(fdmap->sce_uid, (SceNetSockaddr *)addr, (unsigned int)addrlen); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -91,13 +100,17 @@ int bind(int s, const struct sockaddr *addr, socklen_t addrlen) #ifdef F_connect int connect(int s, const struct sockaddr *addr, socklen_t addrlen) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetConnect(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int)addrlen); + int res = sceNetConnect(fdmap->sce_uid, (SceNetSockaddr *)addr, (unsigned int)addrlen); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -112,13 +125,17 @@ int connect(int s, const struct sockaddr *addr, socklen_t addrlen) #ifdef F_getpeername int getpeername(int s, struct sockaddr *addr, socklen_t *addrlen) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetGetpeername(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int *)addrlen); + int res = sceNetGetpeername(fdmap->sce_uid, (SceNetSockaddr *)addr, (unsigned int *)addrlen); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -133,13 +150,17 @@ int getpeername(int s, struct sockaddr *addr, socklen_t *addrlen) #ifdef F_getsockname int getsockname(int s, struct sockaddr *addr, socklen_t *addrlen) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetGetsockname(__vita_fdmap[s]->sce_uid, (SceNetSockaddr *)addr, (unsigned int *)addrlen); + int res = sceNetGetsockname(fdmap->sce_uid, (SceNetSockaddr *)addr, (unsigned int *)addrlen); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -154,13 +175,17 @@ int getsockname(int s, struct sockaddr *addr, socklen_t *addrlen) #ifdef F_getsockopt int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetGetsockopt(__vita_fdmap[s]->sce_uid, level, optname, optval, (unsigned int *)optlen); + int res = sceNetGetsockopt(fdmap->sce_uid, level, optname, optval, (unsigned int *)optlen); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -175,13 +200,17 @@ int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) #ifdef F_listen int listen(int s, int backlog) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetListen(__vita_fdmap[s]->sce_uid, backlog); + int res = sceNetListen(fdmap->sce_uid, backlog); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -196,13 +225,17 @@ int listen(int s, int backlog) #ifdef F_recv ssize_t recv(int s, void *buf, size_t len, int flags) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetRecv(__vita_fdmap[s]->sce_uid, buf, len, flags); + int res = sceNetRecv(fdmap->sce_uid, buf, len, flags); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -218,13 +251,17 @@ ssize_t recv(int s, void *buf, size_t len, int flags) ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetRecvfrom(__vita_fdmap[s]->sce_uid, buf, len, flags, (SceNetSockaddr *)src_addr, (unsigned int *)addrlen); + int res = sceNetRecvfrom(fdmap->sce_uid, buf, len, flags, (SceNetSockaddr *)src_addr, (unsigned int *)addrlen); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -239,13 +276,17 @@ ssize_t recvfrom(int s, void *buf, size_t len, int flags, #ifdef F_recvmsg ssize_t recvmsg(int s, struct msghdr *msg, int flags) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetRecvmsg(__vita_fdmap[s]->sce_uid, (SceNetMsghdr *)msg, flags); + int res = sceNetRecvmsg(fdmap->sce_uid, (SceNetMsghdr *)msg, flags); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -260,13 +301,17 @@ ssize_t recvmsg(int s, struct msghdr *msg, int flags) #ifdef F_send ssize_t send(int s, const void *buf, size_t len, int flags) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetSend(__vita_fdmap[s]->sce_uid, buf, len, flags); + int res = sceNetSend(fdmap->sce_uid, buf, len, flags); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -283,13 +328,17 @@ ssize_t send(int s, const void *buf, size_t len, int flags) ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetSendto(__vita_fdmap[s]->sce_uid, buf, len, flags, (SceNetSockaddr *)dest_addr, (unsigned int)addrlen); + int res = sceNetSendto(fdmap->sce_uid, buf, len, flags, (SceNetSockaddr *)dest_addr, (unsigned int)addrlen); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -304,13 +353,17 @@ ssize_t sendto(int s, const void *buf, #ifdef F_sendmsg ssize_t sendmsg(int s, const struct msghdr *msg, int flags) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetSendmsg(__vita_fdmap[s]->sce_uid, (const SceNetMsghdr *)msg, flags); + int res = sceNetSendmsg(fdmap->sce_uid, (const SceNetMsghdr *)msg, flags); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -325,13 +378,17 @@ ssize_t sendmsg(int s, const struct msghdr *msg, int flags) #ifdef F_setsockopt int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetSetsockopt(__vita_fdmap[s]->sce_uid, level, optname, optval, optlen); + int res = sceNetSetsockopt(fdmap->sce_uid, level, optname, optval, optlen); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -346,13 +403,17 @@ int setsockopt(int s, int level, int optname, const void *optval, socklen_t optl #ifdef F_shutdown int shutdown(int s, int how) { - if (!is_socket_valid(s)) + DescriptorTranslation *fdmap = __vita_fd_grab(s); + + if (!fdmap) { errno = EBADF; return -1; } - int res = sceNetShutdown(__vita_fdmap[s]->sce_uid, how); + int res = sceNetShutdown(fdmap->sce_uid, how); + + __vita_fd_drop(fdmap); if (res < 0) { @@ -388,46 +449,18 @@ int socket(int domain, int type, int protocol) return s; } -int __vita_glue_socket_close(int s) +int __vita_glue_socket_close(SceUID scefd) { - int res = 0; - - if (!is_socket_valid(s)) - { - errno = EBADF; - return -1; - } - - int sce_uid = __vita_fdmap[s]->sce_uid; - int ref_count = __vita_release_descriptor(s); - - if (ref_count < 0) - { - errno = EBADF; - return -1; - } - - if (ref_count == 0) - { - res = sceNetSocketClose(sce_uid); - } - - if (res < 0) - { - errno = res & SCE_ERRNO_MASK; - return -1; - } - - return 0; + return sceNetSocketClose(scefd); } -ssize_t __vita_glue_socket_recv(int s, void *buf, size_t len, int flags) +ssize_t __vita_glue_socket_recv(SceUID scefd, void *buf, size_t len, int flags) { - return recv(s, buf, len, flags); + return sceNetRecv(scefd, buf, len, flags); } -ssize_t __vita_glue_socket_send(int s, const void *buf, size_t len, int flags) +ssize_t __vita_glue_socket_send(SceUID scefd, const void *buf, size_t len, int flags) { - return send(s, buf, len, flags); + return sceNetSend(scefd, buf, len, flags); } #endif diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index bd9fec4a50..6c6c23aa50 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -31,23 +31,27 @@ _write_r(struct _reent * reent, int fd, const void *buf, size_t nbytes) { int ret; - if (!is_fd_valid(fd)) { + DescriptorTranslation *fdmap = __vita_fd_grab(fd); + + if (!fdmap) { reent->_errno = EBADF; return -1; } - switch (__vita_fdmap[fd]->type) + switch (fdmap->type) { case VITA_DESCRIPTOR_FILE: case VITA_DESCRIPTOR_TTY: - ret = sceIoWrite(__vita_fdmap[fd]->sce_uid, buf, nbytes); + ret = sceIoWrite(fdmap->sce_uid, buf, nbytes); break; case VITA_DESCRIPTOR_SOCKET: if (__vita_glue_socket_send) - ret = __vita_glue_socket_send(fd, buf, nbytes, 0); + ret = __vita_glue_socket_send(fdmap->sce_uid, buf, nbytes, 0); break; } + __vita_fd_drop(fdmap); + if (ret < 0) { if (ret != -1) reent->_errno = ret & SCE_ERRNO_MASK; @@ -69,39 +73,16 @@ _exit(int rc) int _close_r(struct _reent *reent, int fd) { - int ret = 0; + int res = __vita_release_descriptor(fd); - if (!is_fd_valid(fd)) { - reent->_errno = EBADF; - return -1; - } - - switch (__vita_fdmap[fd]->type) - { - case VITA_DESCRIPTOR_FILE: - case VITA_DESCRIPTOR_TTY: + if (res < 0) { - int sce_uid = __vita_fdmap[fd]->sce_uid; - int ref_count = __vita_release_descriptor(fd); - - if (ref_count == 0) - ret = sceIoClose(fd); - break; - } - case VITA_DESCRIPTOR_SOCKET: - if (__vita_glue_socket_close) - ret = __vita_glue_socket_close(fd); - break; - } - - if (ret < 0) { - if (ret != -1) - reent->_errno = ret & SCE_ERRNO_MASK; + reent->_errno = -res; return -1; } reent->_errno = 0; - return ret; + return 0; } char *__env[1] = { 0 }; @@ -144,12 +125,17 @@ _gettimeofday_r(struct _reent *reent, struct timeval *ptimeval, void *ptimezone) int _isatty_r(struct _reent *reent, int fd) { - if (!is_fd_valid(fd)) { + DescriptorTranslation *fdmap = __vita_fd_grab(fd); + + if (!fdmap) { reent->_errno = EBADF; return 0; } - return (__vita_fdmap[fd]->type == VITA_DESCRIPTOR_TTY); + int istty = fdmap->type == VITA_DESCRIPTOR_TTY; + + __vita_fd_drop(fdmap); + return istty; } int @@ -183,16 +169,12 @@ _off_t _lseek_r(struct _reent *reent, int fd, _off_t ptr, int dir) { int ret; + DescriptorTranslation *fdmap = __vita_fd_grab(fd); - if (!is_fd_valid(fd)) { - reent->_errno = EBADF; - return -1; - } - - switch (__vita_fdmap[fd]->type) + switch (fdmap->type) { case VITA_DESCRIPTOR_FILE: - ret = sceIoLseek32(__vita_fdmap[fd]->sce_uid, ptr, dir); + ret = sceIoLseek32(fdmap->sce_uid, ptr, dir); break; case VITA_DESCRIPTOR_TTY: case VITA_DESCRIPTOR_SOCKET: @@ -200,6 +182,8 @@ _lseek_r(struct _reent *reent, int fd, _off_t ptr, int dir) break; } + __vita_fd_drop(fdmap); + if (ret < 0) { reent->_errno = ret & SCE_ERRNO_MASK; return -1; @@ -232,7 +216,7 @@ int _fcntl2sony(int flags) { int _open_r(struct _reent *reent, const char *file, int flags, int mode) { - int ret, i, found = 0; + int ret; flags = _fcntl2sony(flags); ret = sceIoOpen(file, flags, 0666); @@ -254,7 +238,7 @@ _open_r(struct _reent *reent, const char *file, int flags, int mode) __vita_fdmap[fd]->type = VITA_DESCRIPTOR_FILE; reent->_errno = 0; - return found; + return fd; } _ssize_t @@ -262,23 +246,27 @@ _read_r(struct _reent *reent, int fd, void *ptr, size_t len) { int ret; - if (!is_fd_valid(fd)) { + DescriptorTranslation *fdmap = __vita_fd_grab(fd); + + if (!fdmap) { reent->_errno = EBADF; return -1; } - switch (__vita_fdmap[fd]->type) + switch (fdmap->type) { case VITA_DESCRIPTOR_TTY: case VITA_DESCRIPTOR_FILE: - ret = sceIoRead(__vita_fdmap[fd]->sce_uid, ptr, len); + ret = sceIoRead(fdmap->sce_uid, ptr, len); break; case VITA_DESCRIPTOR_SOCKET: if (__vita_glue_socket_recv) - ret = __vita_glue_socket_recv(fd, ptr, len, 0); + ret = __vita_glue_socket_recv(fdmap->sce_uid, ptr, len, 0); break; } + __vita_fd_drop(fdmap); + if (ret < 0) { if (ret != -1) reent->_errno = ret & SCE_ERRNO_MASK; @@ -352,22 +340,26 @@ _fstat_r(struct _reent *reent, int fd, struct stat *st) struct SceIoStat stat = {0}; int ret; - if (!is_fd_valid(fd)) { + DescriptorTranslation *fdmap = __vita_fd_grab(fd); + + if (!fdmap) { reent->_errno = EBADF; return -1; } - switch (__vita_fdmap[fd]->type) + switch (fdmap->type) { case VITA_DESCRIPTOR_TTY: case VITA_DESCRIPTOR_FILE: - ret = sceIoGetstatByFd(__vita_fdmap[fd]->sce_uid, &stat); + ret = sceIoGetstatByFd(fdmap->sce_uid, &stat); break; case VITA_DESCRIPTOR_SOCKET: ret = EBADF; break; } + __vita_fd_drop(fdmap); + if (ret < 0) { reent->_errno = ret & SCE_ERRNO_MASK; return -1; diff --git a/newlib/libc/sys/vita/vitadescriptor.h b/newlib/libc/sys/vita/vitadescriptor.h index 1c54fc0101..365a2d9ca6 100644 --- a/newlib/libc/sys/vita/vitadescriptor.h +++ b/newlib/libc/sys/vita/vitadescriptor.h @@ -48,6 +48,8 @@ extern DescriptorTranslation *__vita_fdmap[]; int __vita_acquire_descriptor(void); int __vita_release_descriptor(int fd); int __vita_descriptor_ref_count(int fd); +DescriptorTranslation *__vita_fd_grab(int fd); +int __vita_fd_drop(DescriptorTranslation *fdmap); static inline int is_fd_valid(int fd) { diff --git a/newlib/libc/sys/vita/vitaglue.h b/newlib/libc/sys/vita/vitaglue.h index 35dce42c49..69ad9e11ac 100644 --- a/newlib/libc/sys/vita/vitaglue.h +++ b/newlib/libc/sys/vita/vitaglue.h @@ -25,8 +25,10 @@ DEALINGS IN THE SOFTWARE. #ifndef _VITAGLUE_H_ #define _VITAGLUE_H_ -extern int __attribute__((weak)) __vita_glue_socket_close(int s); -extern int __attribute__((weak)) __vita_glue_socket_recv(int s, void *buf, size_t len, int flags); -extern int __attribute__((weak)) __vita_glue_socket_send(int s, const void *buf, size_t len, int flags); +#include + +extern int __attribute__((weak)) __vita_glue_socket_close(SceUID scefd); +extern int __attribute__((weak)) __vita_glue_socket_recv(SceUID scefd, void *buf, size_t len, int flags); +extern int __attribute__((weak)) __vita_glue_socket_send(SceUID scefd, const void *buf, size_t len, int flags); #endif // _VITAGLUE_H_ From 6a4dc0fab8b3fc5b82f191c9bf2c645e9029782e Mon Sep 17 00:00:00 2001 From: Davee Date: Tue, 6 Sep 2016 01:33:40 +0100 Subject: [PATCH 36/65] added measures to enforce that stdin/stdout/stderr fd numbers cannot be allocated --- newlib/libc/sys/vita/io.c | 3 ++- newlib/libc/sys/vita/syscalls.c | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/io.c b/newlib/libc/sys/vita/io.c index 5e0915cb30..8e6c0bb5a9 100644 --- a/newlib/libc/sys/vita/io.c +++ b/newlib/libc/sys/vita/io.c @@ -84,7 +84,8 @@ int __vita_acquire_descriptor(void) sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); // get free descriptor - for (fd = 0; fd < MAX_OPEN_FILES; ++fd) + // only allocate descriptors after stdin/stdout/stderr -> aka 0/1/2 + for (fd = 3; fd < MAX_OPEN_FILES; ++fd) { if (__vita_fdmap[fd] == NULL) { diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 6c6c23aa50..73246c9caa 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -245,7 +245,6 @@ _ssize_t _read_r(struct _reent *reent, int fd, void *ptr, size_t len) { int ret; - DescriptorTranslation *fdmap = __vita_fd_grab(fd); if (!fdmap) { From 2a261eeebfdab27d0648c38ae46ff4dee3e2b0f4 Mon Sep 17 00:00:00 2001 From: Davee Date: Tue, 6 Sep 2016 20:57:40 +0100 Subject: [PATCH 37/65] implemented dirent.h functionality --- newlib/libc/sys/vita/Makefile.am | 8 +- newlib/libc/sys/vita/Makefile.in | 19 ++- newlib/libc/sys/vita/dirent.c | 247 ++++++++++++++++++++++++++++++ newlib/libc/sys/vita/sys/dirent.h | 55 +++++++ 4 files changed, 323 insertions(+), 6 deletions(-) create mode 100644 newlib/libc/sys/vita/dirent.c create mode 100644 newlib/libc/sys/vita/sys/dirent.h diff --git a/newlib/libc/sys/vita/Makefile.am b/newlib/libc/sys/vita/Makefile.am index 94a5a6acd0..54f1c0a8f0 100755 --- a/newlib/libc/sys/vita/Makefile.am +++ b/newlib/libc/sys/vita/Makefile.am @@ -9,9 +9,10 @@ AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o +DIRENT_OBJS = closedir.o opendir.o readdir.o readdir_r.o rewinddir.o seekdir.o telldir.o -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c -lib_a_LIBADD = ${SOCKET_OBJS} +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c dirent.c +lib_a_LIBADD = ${SOCKET_OBJS} ${DIRENT_OBJS} lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) @@ -20,5 +21,8 @@ all-local: crt0.o $(SOCKET_OBJS): socket.c $(COMPILE) -DF_$* $< -c -o $@ +$(DIRENT_OBJS): dirent.c + $(COMPILE) -DF_$* $< -c -o $@ + ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host diff --git a/newlib/libc/sys/vita/Makefile.in b/newlib/libc/sys/vita/Makefile.in index bd19696ceb..ce801542cf 100644 --- a/newlib/libc/sys/vita/Makefile.in +++ b/newlib/libc/sys/vita/Makefile.in @@ -68,10 +68,11 @@ CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru lib_a_AR = $(AR) $(ARFLAGS) -lib_a_DEPENDENCIES = $(SOCKET_OBJS) +lib_a_DEPENDENCIES = $(SOCKET_OBJS) $(DIRENT_OBJS) am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) lib_a-sbrk.$(OBJEXT) \ lib_a-threading.$(OBJEXT) lib_a-mlock.$(OBJEXT) \ - lib_a-io.$(OBJEXT) lib_a-socket.$(OBJEXT) + lib_a-io.$(OBJEXT) lib_a-socket.$(OBJEXT) \ + lib_a-dirent.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -197,8 +198,9 @@ INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c -lib_a_LIBADD = ${SOCKET_OBJS} +DIRENT_OBJS = closedir.o opendir.o readdir.o readdir_r.o rewinddir.o seekdir.o telldir.o +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c dirent.c +lib_a_LIBADD = ${SOCKET_OBJS} ${DIRENT_OBJS} lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. @@ -297,6 +299,12 @@ lib_a-socket.o: socket.c lib_a-socket.obj: socket.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-socket.obj `if test -f 'socket.c'; then $(CYGPATH_W) 'socket.c'; else $(CYGPATH_W) '$(srcdir)/socket.c'; fi` +lib_a-dirent.o: dirent.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-dirent.o `test -f 'dirent.c' || echo '$(srcdir)/'`dirent.c + +lib_a-dirent.obj: dirent.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-dirent.obj `if test -f 'dirent.c'; then $(CYGPATH_W) 'dirent.c'; else $(CYGPATH_W) '$(srcdir)/dirent.c'; fi` + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -473,6 +481,9 @@ all-local: crt0.o $(SOCKET_OBJS): socket.c $(COMPILE) -DF_$* $< -c -o $@ +$(DIRENT_OBJS): dirent.c + $(COMPILE) -DF_$* $< -c -o $@ + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/newlib/libc/sys/vita/dirent.c b/newlib/libc/sys/vita/dirent.c new file mode 100644 index 0000000000..a9c41d820a --- /dev/null +++ b/newlib/libc/sys/vita/dirent.c @@ -0,0 +1,247 @@ +/* + +Copyright (C) 2016, David "Davee" Morgan + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +*/ + +#include +#include +#include +#include + +#include +#include +#include + +#define SCE_ERRNO_MASK 0xFF + + +struct DIR_ +{ + SceUID uid; + struct dirent dir; + int refcount; + char *dirname; + int index; +}; + +static inline void grab_dir(DIR *dirp) +{ + __sync_add_and_fetch(&dirp->refcount, 1); +} + +static inline void drop_dir(DIR *dirp) +{ + if (__sync_add_and_fetch(&dirp->refcount, 1) == 0) + { + free(dirp->dirname); + free(dirp); + } +} + +static inline void release_drop_dir(DIR *dirp) +{ + if (__sync_add_and_fetch(&dirp->refcount, 2) == 0) + { + free(dirp->dirname); + free(dirp); + } +} + +static inline void atomic_exchange(int *obj, int desired) +{ + __sync_synchronize(); + __sync_lock_test_and_set(obj, desired); +} + +#ifdef F_closedir +int closedir(DIR *dirp) +{ + if (!dirp) + { + errno = EBADF; + return -1; + } + + grab_dir(dirp); + + int res = sceIoDclose(dirp->uid); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + drop_dir(dirp); + return -1; + } + + release_drop_dir(dirp); + + errno = 0; + return 0; +} +#endif + +#if F_opendir +DIR *opendir(const char *dirname) +{ + SceUID uid = sceIoDopen(dirname); + + if (uid < 0) + { + errno = uid & SCE_ERRNO_MASK; + return NULL; + } + + DIR *dirp = calloc(1, sizeof(DIR)); + + if (!dirp) + { + sceIoDclose(uid); + errno = ENOMEM; + return NULL; + } + + dirp->refcount = 1; + dirp->uid = uid; + dirp->dirname = strdup(dirname); + dirp->index = 0; + + errno = 0; + return dirp; +} +#endif + +#ifdef F_readdir +struct dirent *readdir(DIR *dirp) +{ + if (!dirp) + { + errno = EBADF; + return NULL; + } + + grab_dir(dirp); + + int res = sceIoDread(dirp->uid, (SceIoDirent *)&dirp->dir); + + if (res < 0) + { + errno = res & SCE_ERRNO_MASK; + drop_dir(dirp); + return NULL; + } + + if (res == 0) + { + errno = 0; + drop_dir(dirp); + return NULL; + } + + __sync_add_and_fetch(&dirp->index, 1); + + struct dirent *dir = &dirp->dir; + drop_dir(dirp); + return dir; +} +#endif +#ifdef F_readdir_r +int readdir_r(DIR *dirp, struct dirent *x, struct dirent **y) +{ + errno = ENOSYS; + return -1; +} +#endif + +#ifdef F_rewinddir +void rewinddir(DIR *dirp) +{ + if (!dirp) + { + errno = EBADF; + return; + } + + grab_dir(dirp); + + SceUID dirfd = sceIoDopen(dirp->dirname); + + if (dirfd < 0) + { + errno = dirfd & SCE_ERRNO_MASK; + drop_dir(dirp); + return; + } + + sceIoDclose(dirp->uid); + atomic_exchange(&dirp->uid, dirfd); + atomic_exchange(&dirp->index, 0); + + drop_dir(dirp); +} +#endif + +#ifdef F_seekdir +void seekdir(DIR *dirp, long int index) +{ + if (!dirp) + { + errno = EBADF; + return; + } + + grab_dir(dirp); + + if (index < dirp->index) + rewinddir(dirp); + + if (index < dirp->index) + { + drop_dir(dirp); + return; + } + + while (index != dirp->index) + { + if (!readdir(dirp)) + { + errno = ENOENT; + drop_dir(dirp); + return; + } + } + + drop_dir(dirp); +} +#endif + +#ifdef F_telldir +long int telldir(DIR *dirp) +{ + if (!dirp) + { + errno = EBADF; + return -1; + } + + return dirp->index; +} +#endif diff --git a/newlib/libc/sys/vita/sys/dirent.h b/newlib/libc/sys/vita/sys/dirent.h new file mode 100644 index 0000000000..00b1b43d5d --- /dev/null +++ b/newlib/libc/sys/vita/sys/dirent.h @@ -0,0 +1,55 @@ +/* + +Copyright (C) 2016, David "Davee" Morgan + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +*/ + +#ifndef _SYS_DIRENT_H_ +#define _SYS_DIRENT_H_ + +#include +#include + +#include + +struct dirent +{ + /** File status. */ + SceIoStat d_stat; + /** File name. */ + char d_name[256]; + /** Device-specific data. */ + void *d_private; + int dummy; +}; + +struct DIR_; +typedef struct DIR_ DIR; + +int closedir(DIR *); +DIR *opendir(const char *); +struct dirent *readdir(DIR *); +int readdir_r(DIR *, struct dirent *, struct dirent **); +void rewinddir(DIR *); +void seekdir(DIR *, long int); +long int telldir(DIR *); + +#endif /* _SYS_DIRENT_H_ */ From 335076337439f3f7461bfaa5587f1fec1b53b589 Mon Sep 17 00:00:00 2001 From: Davee Date: Sun, 4 Sep 2016 23:16:34 +0100 Subject: [PATCH 38/65] update newlib threading for pthread support --- newlib/libc/sys/vita/threading.c | 173 +++++++++++++++++++++++++------ 1 file changed, 143 insertions(+), 30 deletions(-) diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c index a16d4eb53c..99e916eeb6 100755 --- a/newlib/libc/sys/vita/threading.c +++ b/newlib/libc/sys/vita/threading.c @@ -1,12 +1,22 @@ // This provides support for __getreent() as well as implementation of our thread-related wrappers #include +#include +#include -#define MAX_THREADS 64 +#include +#include + +// not in sdk +void sceClibPrintf(const char *fmt, ...); + +#define MAX_THREADS 256 typedef struct reent_for_thread { int thread_id; int needs_reclaim; + void *tls_data_ext; + void *pthread_data_ext; struct _reent reent; } reent_for_thread; @@ -14,40 +24,72 @@ static reent_for_thread reent_list[MAX_THREADS]; static int _newlib_reent_mutex; static struct _reent _newlib_global_reent; -int sceKernelExitThread(int); -int sceKernelExitDeleteThread(int); - -#define TLS_REENT_PTR sceKernelGetTLSAddr(0x88) +#define TLS_REENT_THID_PTR(thid) sceKernelGetThreadTLSAddr(thid, 0x88) +#define TLS_REENT_PTR sceKernelGetTLSAddr(0x88) #define list_entry(ptr, type, member) \ ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) -int _exit_thread_common(int exit_status, int (*exit_func)(int)) { - int ret, thread_id; +int __vita_delete_thread_reent(int thid) +{ struct reent_for_thread *for_thread; + // We only need to cleanup if reent is allocated, i.e. if it's on our TLS // We also don't need to clean up the global reent - struct _reent **on_tls = TLS_REENT_PTR; + struct _reent **on_tls = TLS_REENT_THID_PTR(thid); if (!*on_tls || *on_tls == &_newlib_global_reent) - return exit_func(exit_status); + return 0; + for_thread = list_entry(*on_tls, struct reent_for_thread, reent); + // Remove from TLS *on_tls = 0; - // Lock the list because we'll be modifying it - sceKernelLockMutex(_newlib_reent_mutex); + // Set thread id to zero, which means the reent is free - thread_id = for_thread->thread_id; for_thread->thread_id = 0; + // We can't reclaim it here, will be done later in __getreent for_thread->needs_reclaim = 1; - // Try to actually exit the thread + + return 1; +} + +int vitasdk_delete_thread_reent(int thid) +{ + int res = 0; + // Lock the list because we'll be modifying it + sceKernelLockMutex(_newlib_reent_mutex, 1, NULL); + + res = __vita_delete_thread_reent(thid); + + sceKernelUnlockMutex(_newlib_reent_mutex, 1); + return res; +} + +int _exit_thread_common(int exit_status, int (*exit_func)(int)) { + int res = 0; + int ret = 0; + int thid = sceKernelGetThreadId(); + + // Lock the list because we'll be modifying it + sceKernelLockMutex(_newlib_reent_mutex, 1, NULL); + + res = __vita_delete_thread_reent(thid); + ret = exit_func(exit_status); - // If it succeeds, the mutex is unlocked, and we don't get here - // However, if it fails, we need to restore thread_id and unlock the mutex - for_thread->thread_id = thread_id; - sceKernelUnlockMutex(_newlib_reent_mutex); - // And put it back on TLS - *on_tls = &for_thread->reent; + + if (res) + { + struct _reent **on_tls = TLS_REENT_THID_PTR(thid); + struct reent_for_thread *for_thread = list_entry(*on_tls, struct reent_for_thread, reent); + + for_thread->thread_id = thid; + + // And put it back on TLS + *on_tls = &for_thread->reent; + } + + sceKernelUnlockMutex(_newlib_reent_mutex, 1); return ret; } @@ -59,44 +101,115 @@ int vita_exit_delete_thread(int exit_status) { return _exit_thread_common(exit_status, sceKernelExitDeleteThread); } -struct _reent *__getreent(void) { +static inline void __vita_clean_reent(void) +{ + int i; + SceKernelThreadInfo info; + + for (i = 0; i < MAX_THREADS; ++i) + { + info.size = sizeof(SceKernelThreadInfo); + + if (sceKernelGetThreadInfo(reent_list[i].thread_id, &info) < 0) + { + reent_list[i].thread_id = 0; + reent_list[i].needs_reclaim = 1; + } + } +} + +static inline struct reent_for_thread *__vita_allocate_reent(void) +{ + int i; + struct reent_for_thread *free_reent = 0; + + for (i = 0; i < MAX_THREADS; ++i) + if (reent_list[i].thread_id == 0) { + free_reent = &reent_list[i]; + break; + } + + return free_reent; +} + +struct _reent *__getreent_for_thread(int thid) { int i; struct reent_for_thread *free_reent = 0; struct _reent *returned_reent = 0; + + if (thid == 0) + thid = sceKernelGetThreadId(); + + sceKernelLockMutex(_newlib_reent_mutex, 1, 0); + // A pointer to our reent should be on the TLS - struct _reent **on_tls = TLS_REENT_PTR; + struct _reent **on_tls = TLS_REENT_THID_PTR(thid); if (*on_tls) { + sceKernelUnlockMutex(_newlib_reent_mutex, 1); return *on_tls; } // If it's not on the TLS this means the thread doesn't have a reent allocated yet // We allocate one and put a pointer to it on the TLS - sceKernelLockMutex(_newlib_reent_mutex, 1, 0); - for (i = 0; i < MAX_THREADS; ++i) - if (reent_list[i].thread_id == 0) { - free_reent = &reent_list[i]; - break; - } + free_reent = __vita_allocate_reent(); + if (!free_reent) { - returned_reent = &_newlib_global_reent; + // clean any hanging thread references + __vita_clean_reent(); + + free_reent = __vita_allocate_reent(); + + if (!free_reent) { + // we've exhausted all our resources + sceClibPrintf("[VITASDK] FATAL: Exhausted all thread reent resources!"); + __builtin_trap(); + } } else { // First, check if it needs to be cleaned up (if it came from another thread) if (free_reent->needs_reclaim) { _reclaim_reent(&free_reent->reent); free_reent->needs_reclaim = 0; } + + memset(free_reent, 0, sizeof(struct reent_for_thread)); + // Set it up - free_reent->thread_id = sceKernelGetThreadId(); + free_reent->thread_id = thid; _REENT_INIT_PTR(&free_reent->reent); returned_reent = &free_reent->reent; } - sceKernelUnlockMutex(_newlib_reent_mutex, 1); + // Put it on TLS for faster access time *on_tls = returned_reent; + + sceKernelUnlockMutex(_newlib_reent_mutex, 1); return returned_reent; } +struct _reent *__getreent(void) { + return __getreent_for_thread(sceKernelGetThreadId()); +} + +void **vitasdk_get_tls_data(SceUID thid) +{ + struct reent_for_thread *for_thread; + struct _reent *reent = __getreent_for_thread(thid); + + for_thread = list_entry(reent, struct reent_for_thread, reent); + return &for_thread->tls_data_ext; +} + +void **vitasdk_get_pthread_data(SceUID thid) +{ + struct reent_for_thread *for_thread; + struct _reent *reent = __getreent_for_thread(thid); + + for_thread = list_entry(reent, struct reent_for_thread, reent); + return &for_thread->pthread_data_ext; +} + // Called from _start to set up the main thread reentrancy structure void _init_vita_reent(void) { + memset(reent_list, 0, sizeof(reent_list)); _newlib_reent_mutex = sceKernelCreateMutex("reent list access mutex", 0, 0, 0); reent_list[0].thread_id = sceKernelGetThreadId(); _REENT_INIT_PTR(&reent_list[0].reent); From fa92db835802ac9018c704801bbfa819c537a9c7 Mon Sep 17 00:00:00 2001 From: Davee Date: Wed, 7 Sep 2016 23:54:24 +0100 Subject: [PATCH 39/65] reflect vitasdk/utils.h changes --- newlib/libc/sys/vita/threading.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c index 99e916eeb6..adeb70795d 100755 --- a/newlib/libc/sys/vita/threading.c +++ b/newlib/libc/sys/vita/threading.c @@ -4,7 +4,7 @@ #include #include -#include +#include #include // not in sdk @@ -189,7 +189,7 @@ struct _reent *__getreent(void) { return __getreent_for_thread(sceKernelGetThreadId()); } -void **vitasdk_get_tls_data(SceUID thid) +void *vitasdk_get_tls_data(SceUID thid) { struct reent_for_thread *for_thread; struct _reent *reent = __getreent_for_thread(thid); @@ -198,7 +198,7 @@ void **vitasdk_get_tls_data(SceUID thid) return &for_thread->tls_data_ext; } -void **vitasdk_get_pthread_data(SceUID thid) +void *vitasdk_get_pthread_data(SceUID thid) { struct reent_for_thread *for_thread; struct _reent *reent = __getreent_for_thread(thid); From 979b14778340ee9c461538e2dac70e1d977bf839 Mon Sep 17 00:00:00 2001 From: Davee Date: Tue, 20 Sep 2016 00:55:22 +0100 Subject: [PATCH 40/65] implemented dup() --- newlib/libc/sys/vita/Makefile.am | 2 +- newlib/libc/sys/vita/Makefile.in | 10 +++++-- newlib/libc/sys/vita/dup.c | 40 +++++++++++++++++++++++++++ newlib/libc/sys/vita/io.c | 29 +++++++++++++++++++ newlib/libc/sys/vita/vitadescriptor.h | 1 + 5 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 newlib/libc/sys/vita/dup.c diff --git a/newlib/libc/sys/vita/Makefile.am b/newlib/libc/sys/vita/Makefile.am index 94a5a6acd0..4411050334 100755 --- a/newlib/libc/sys/vita/Makefile.am +++ b/newlib/libc/sys/vita/Makefile.am @@ -10,7 +10,7 @@ noinst_LIBRARIES = lib.a SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c dup.c lib_a_LIBADD = ${SOCKET_OBJS} lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) diff --git a/newlib/libc/sys/vita/Makefile.in b/newlib/libc/sys/vita/Makefile.in index bd19696ceb..d56f3d6ebf 100644 --- a/newlib/libc/sys/vita/Makefile.in +++ b/newlib/libc/sys/vita/Makefile.in @@ -71,7 +71,7 @@ lib_a_AR = $(AR) $(ARFLAGS) lib_a_DEPENDENCIES = $(SOCKET_OBJS) am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) lib_a-sbrk.$(OBJEXT) \ lib_a-threading.$(OBJEXT) lib_a-mlock.$(OBJEXT) \ - lib_a-io.$(OBJEXT) lib_a-socket.$(OBJEXT) + lib_a-io.$(OBJEXT) lib_a-socket.$(OBJEXT) lib_a-dup.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -197,7 +197,7 @@ INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c dup.c lib_a_LIBADD = ${SOCKET_OBJS} lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) @@ -297,6 +297,12 @@ lib_a-socket.o: socket.c lib_a-socket.obj: socket.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-socket.obj `if test -f 'socket.c'; then $(CYGPATH_W) 'socket.c'; else $(CYGPATH_W) '$(srcdir)/socket.c'; fi` +lib_a-dup.o: dup.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-dup.o `test -f 'dup.c' || echo '$(srcdir)/'`dup.c + +lib_a-dup.obj: dup.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-dup.obj `if test -f 'dup.c'; then $(CYGPATH_W) 'dup.c'; else $(CYGPATH_W) '$(srcdir)/dup.c'; fi` + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ diff --git a/newlib/libc/sys/vita/dup.c b/newlib/libc/sys/vita/dup.c new file mode 100644 index 0000000000..9d3a6f0ef5 --- /dev/null +++ b/newlib/libc/sys/vita/dup.c @@ -0,0 +1,40 @@ +/* + +Copyright (C) 2016, David "Davee" Morgan + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +*/ + +#include +#include "vitadescriptor.h" + +int dup(int oldfd) +{ + int fd = __vita_duplicate_descriptor(oldfd); + + if (fd < 0) + { + errno = EBADF; + return -1; + } + + errno = 0; + return fd; +} diff --git a/newlib/libc/sys/vita/io.c b/newlib/libc/sys/vita/io.c index 8e6c0bb5a9..3b7a4d8ff6 100644 --- a/newlib/libc/sys/vita/io.c +++ b/newlib/libc/sys/vita/io.c @@ -132,6 +132,35 @@ int __vita_release_descriptor(int fd) return 0; } +int __vita_duplicate_descriptor(int fd) +{ + int fd2 = -1; + + sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); + + if (!is_fd_valid(fd)) + { + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return -1; + } + + // get free descriptor + // only allocate descriptors after stdin/stdout/stderr -> aka 0/1/2 + for (fd2 = 3; fd2 < MAX_OPEN_FILES; ++fd2) + { + if (__vita_fdmap[fd2] == NULL) + { + __vita_fdmap[fd2] = __vita_fdmap[fd]; + __vita_fdmap[fd2]->ref_count++; + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return fd2; + } + } + + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return -1; +} + int __vita_descriptor_ref_count(int fd) { int res = 0; diff --git a/newlib/libc/sys/vita/vitadescriptor.h b/newlib/libc/sys/vita/vitadescriptor.h index 365a2d9ca6..9d196fe2d0 100644 --- a/newlib/libc/sys/vita/vitadescriptor.h +++ b/newlib/libc/sys/vita/vitadescriptor.h @@ -47,6 +47,7 @@ extern DescriptorTranslation *__vita_fdmap[]; int __vita_acquire_descriptor(void); int __vita_release_descriptor(int fd); +int __vita_duplicate_descriptor(int fd); int __vita_descriptor_ref_count(int fd); DescriptorTranslation *__vita_fd_grab(int fd); int __vita_fd_drop(DescriptorTranslation *fdmap); From cd0ed97be1c16085160f591e29f95968877f99c9 Mon Sep 17 00:00:00 2001 From: Davee Date: Thu, 22 Sep 2016 22:31:39 +0100 Subject: [PATCH 41/65] cleaned up mutex unlocking paths --- newlib/libc/sys/vita/io.c | 55 +++++++++++++++------------------------ 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/newlib/libc/sys/vita/io.c b/newlib/libc/sys/vita/io.c index 3b7a4d8ff6..42d6fa902b 100644 --- a/newlib/libc/sys/vita/io.c +++ b/newlib/libc/sys/vita/io.c @@ -111,25 +111,18 @@ int __vita_acquire_descriptor(void) int __vita_release_descriptor(int fd) { DescriptorTranslation *map = NULL; + int res = -1; sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); - if (!is_fd_valid(fd)) + if (is_fd_valid(fd) && __vita_fd_drop(__vita_fdmap[fd]) >= 0) { - sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); - return 0; + __vita_fdmap[fd] = NULL; + res = 0; } - if (__vita_fd_drop(__vita_fdmap[fd]) < 0) - { - sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); - return -1; - } - - __vita_fdmap[fd] = NULL; - sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); - return 0; + return res; } int __vita_duplicate_descriptor(int fd) @@ -138,22 +131,19 @@ int __vita_duplicate_descriptor(int fd) sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); - if (!is_fd_valid(fd)) + if (is_fd_valid(fd)) { - sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); - return -1; - } - - // get free descriptor - // only allocate descriptors after stdin/stdout/stderr -> aka 0/1/2 - for (fd2 = 3; fd2 < MAX_OPEN_FILES; ++fd2) - { - if (__vita_fdmap[fd2] == NULL) + // get free descriptor + // only allocate descriptors after stdin/stdout/stderr -> aka 0/1/2 + for (fd2 = 3; fd2 < MAX_OPEN_FILES; ++fd2) { - __vita_fdmap[fd2] = __vita_fdmap[fd]; - __vita_fdmap[fd2]->ref_count++; - sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); - return fd2; + if (__vita_fdmap[fd2] == NULL) + { + __vita_fdmap[fd2] = __vita_fdmap[fd]; + __vita_fdmap[fd2]->ref_count++; + sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); + return fd2; + } } } @@ -176,16 +166,13 @@ DescriptorTranslation *__vita_fd_grab(int fd) sceKernelLockLwMutex(&_newlib_fd_mutex, 1, 0); - if (!is_fd_valid(fd)) + if (is_fd_valid(fd)) { - sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); - return NULL; - } + map = __vita_fdmap[fd]; - map = __vita_fdmap[fd]; - - if (map) - map->ref_count++; + if (map) + map->ref_count++; + } sceKernelUnlockLwMutex(&_newlib_fd_mutex, 1); return map; From 1b85d7e114059720d793fce474498e5f23168218 Mon Sep 17 00:00:00 2001 From: Sunguk Lee Date: Fri, 9 Sep 2016 02:48:37 +0900 Subject: [PATCH 42/65] add more network api & macro - select of sys/select.h - gethostbyname of netdb.h - add macros of netinet/in.h --- newlib/Makefile.am | 6 + newlib/Makefile.in | 7 ++ newlib/libc/sys/vita/Makefile.am | 6 +- newlib/libc/sys/vita/Makefile.in | 21 +++- newlib/libc/sys/vita/include/netdb.h | 51 ++++++++ newlib/libc/sys/vita/include/netinet/in.h | 63 ++++++++++ newlib/libc/sys/vita/netdb.c | 36 ++++++ newlib/libc/sys/vita/select.c | 142 ++++++++++++++++++++++ newlib/libc/sys/vita/sys/select.h | 49 ++++++++ 9 files changed, 374 insertions(+), 7 deletions(-) create mode 100644 newlib/libc/sys/vita/include/netdb.h create mode 100644 newlib/libc/sys/vita/include/netinet/in.h create mode 100644 newlib/libc/sys/vita/netdb.c create mode 100644 newlib/libc/sys/vita/select.c create mode 100644 newlib/libc/sys/vita/sys/select.h diff --git a/newlib/Makefile.am b/newlib/Makefile.am index 5ecce4c102..db569ad8cd 100644 --- a/newlib/Makefile.am +++ b/newlib/Makefile.am @@ -322,6 +322,12 @@ endif $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/`basename $$i`; \ else true; fi ; \ done ; \ + $(mkinstalldirs) $(DESTDIR)$(tooldir)/include/netinet; \ + for i in $(srcdir)/libc/sys/$(sys_dir)/include/netinet/*.h; do \ + if [ -f $$i ]; then \ + $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/netinet/`basename $$i`; \ + else true; fi ; \ + done ; \ for i in $(srcdir)/libc/sys/$(sys_dir)/include/*; do \ if [ -d $$i ]; then \ for j in $$i/*.h; do \ diff --git a/newlib/Makefile.in b/newlib/Makefile.in index 468ae9985d..87cece056e 100644 --- a/newlib/Makefile.in +++ b/newlib/Makefile.in @@ -304,6 +304,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -1063,6 +1064,12 @@ install-data-local: install-toollibLIBRARIES $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/`basename $$i`; \ else true; fi ; \ done ; \ + $(mkinstalldirs) $(DESTDIR)$(tooldir)/include/netinet; \ + for i in $(srcdir)/libc/sys/$(sys_dir)/include/netinet/*.h; do \ + if [ -f $$i ]; then \ + $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/netinet/`basename $$i`; \ + else true; fi ; \ + done ; \ for i in $(srcdir)/libc/sys/$(sys_dir)/include/*; do \ if [ -d $$i ]; then \ for j in $$i/*.h; do \ diff --git a/newlib/libc/sys/vita/Makefile.am b/newlib/libc/sys/vita/Makefile.am index 4411050334..6d116cee50 100755 --- a/newlib/libc/sys/vita/Makefile.am +++ b/newlib/libc/sys/vita/Makefile.am @@ -8,16 +8,16 @@ AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o +SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o netdb.o -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c dup.c +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c dup.c select.c netdb.c lib_a_LIBADD = ${SOCKET_OBJS} lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) all-local: crt0.o -$(SOCKET_OBJS): socket.c +$(SOCKET_OBJS): socket.c netdb.c $(COMPILE) -DF_$* $< -c -o $@ ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. diff --git a/newlib/libc/sys/vita/Makefile.in b/newlib/libc/sys/vita/Makefile.in index d56f3d6ebf..d9e16f7f69 100644 --- a/newlib/libc/sys/vita/Makefile.in +++ b/newlib/libc/sys/vita/Makefile.in @@ -71,7 +71,8 @@ lib_a_AR = $(AR) $(ARFLAGS) lib_a_DEPENDENCIES = $(SOCKET_OBJS) am_lib_a_OBJECTS = lib_a-syscalls.$(OBJEXT) lib_a-sbrk.$(OBJEXT) \ lib_a-threading.$(OBJEXT) lib_a-mlock.$(OBJEXT) \ - lib_a-io.$(OBJEXT) lib_a-socket.$(OBJEXT) lib_a-dup.$(OBJEXT) + lib_a-io.$(OBJEXT) lib_a-socket.$(OBJEXT) lib_a-dup.$(OBJEXT) \ + lib_a-select.$(OBJEXT) lib_a-netdb.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -196,8 +197,8 @@ AUTOMAKE_OPTIONS = cygnus INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a -SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o -lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c dup.c +SOCKET_OBJS = accept.o bind.o connect.o getpeername.o getsockname.o getsockopt.o listen.o recv.o recvfrom.o recvmsg.o send.o sendto.o sendmsg.o setsockopt.o shutdown.o socket.o netdb.o +lib_a_SOURCES = syscalls.c sbrk.c threading.c mlock.c io.c socket.c dup.c select.c netdb.c lib_a_LIBADD = ${SOCKET_OBJS} lib_a_CCASFLAGS = $(AM_CCASFLAGS) lib_a_CFLAGS = $(AM_CFLAGS) @@ -303,6 +304,18 @@ lib_a-dup.o: dup.c lib_a-dup.obj: dup.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-dup.obj `if test -f 'dup.c'; then $(CYGPATH_W) 'dup.c'; else $(CYGPATH_W) '$(srcdir)/dup.c'; fi` +lib_a-select.o: select.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-select.o `test -f 'select.c' || echo '$(srcdir)/'`select.c + +lib_a-select.obj: select.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-select.obj `if test -f 'select.c'; then $(CYGPATH_W) 'select.c'; else $(CYGPATH_W) '$(srcdir)/select.c'; fi` + +lib_a-netdb.o: netdb.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-netdb.o `test -f 'netdb.c' || echo '$(srcdir)/'`netdb.c + +lib_a-netdb.obj: netdb.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-netdb.obj `if test -f 'netdb.c'; then $(CYGPATH_W) 'netdb.c'; else $(CYGPATH_W) '$(srcdir)/netdb.c'; fi` + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -476,7 +489,7 @@ uninstall-am: all-local: crt0.o -$(SOCKET_OBJS): socket.c +$(SOCKET_OBJS): socket.c netdb.c $(COMPILE) -DF_$* $< -c -o $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/newlib/libc/sys/vita/include/netdb.h b/newlib/libc/sys/vita/include/netdb.h new file mode 100644 index 0000000000..b7d1c8b212 --- /dev/null +++ b/newlib/libc/sys/vita/include/netdb.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2016, Sunguk Lee + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _NETDB_H_ +#define _NETDB_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +struct hostent { + char *h_name; + char **h_aliases; + int h_addrtype; + int h_length; + char **h_addr_list; +}; +#define h_addr h_addr_list[0] + +struct hostent *gethostbyname(const char *name); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/newlib/libc/sys/vita/include/netinet/in.h b/newlib/libc/sys/vita/include/netinet/in.h new file mode 100644 index 0000000000..0b7c329192 --- /dev/null +++ b/newlib/libc/sys/vita/include/netinet/in.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2016, Sunguk Lee + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _NETINET_IN_H_ +#define _NETINET_IN_H_ + +#include +#include +#include + +#define IPPROTO_IP SCE_NET_IPPROTO_IP +#define IPPROTO_ICMP SCE_NET_IPPROTO_ICMP +#define IPPROTO_IGMP SCE_NET_IPPROTO_IGMP +#define IPPROTO_TCP SCE_NET_IPPROTO_TCP +#define IPPROTO_UDP SCE_NET_IPPROTO_UDP + +typedef uint32_t in_addr_t; +typedef uint16_t in_port_t; + +struct in_addr { + in_addr_t s_addr; +} in_addr; + +struct sockaddr_in { + uint8_t sin_len; + sa_family_t sin_family; + in_port_t sin_port; + struct in_addr sin_addr; + in_port_t sin_vport; + char sin_zero[6]; +} sockaddr_in; + +#define ntohs __builtin_bswap16 +#define htons __builtin_bswap16 +#define ntohl __builtin_bswap32 +#define htonl __builtin_bswap32 + +#endif diff --git a/newlib/libc/sys/vita/netdb.c b/newlib/libc/sys/vita/netdb.c new file mode 100644 index 0000000000..e3116dc44f --- /dev/null +++ b/newlib/libc/sys/vita/netdb.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include + +#define SCE_ERRNO_MASK 0xFF +#define MAX_NAME 512 + +struct hostent *gethostbyname(const char *name) { + static struct hostent ent; + static char sname[MAX_NAME] = ""; + static struct SceNetInAddr saddr = {0}; + static char *addrlist[2] = { (char *) &saddr, NULL }; + + int rid = sceNetResolverCreate("resolver", NULL, 0); + if (rid < 0) { + errno = rid & SCE_ERRNO_MASK; + return NULL; + } + + int err = sceNetResolverStartNtoa(rid, name, &saddr, 0, 0, 0); + sceNetResolverDestroy(rid); + if (err < 0) { + errno = err & SCE_ERRNO_MASK; + return NULL; + } + + ent.h_name = sname; + ent.h_aliases = 0; + ent.h_addrtype = SCE_NET_AF_INET; + ent.h_length = sizeof(struct SceNetInAddr); + ent.h_addr_list = addrlist; + ent.h_addr = addrlist[0]; + + return &ent; +} diff --git a/newlib/libc/sys/vita/select.c b/newlib/libc/sys/vita/select.c new file mode 100644 index 0000000000..3e47b0afe1 --- /dev/null +++ b/newlib/libc/sys/vita/select.c @@ -0,0 +1,142 @@ +/* + +Copyright (C) 2016, Sunguk Lee + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +*/ +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "vitadescriptor.h" + +#define SCE_ERRNO_MASK 0xFF + +#define MAX_EVENTS 255 + +#define LOCK_ARRAY_LENGTH (MAX_OPEN_FILES / 8) + ((MAX_OPEN_FILES % 8) ? 1 : 0) +#define BIT_SET(arr, idx) (arr)[(idx)/8] |= (1<<((idx)%8)) +#define IS_SET(arr, idx) ((arr)[(idx)/8] & (1<<((idx)%8))) != 0 + +int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + struct timeval *timeout) +{ + uint64_t wait = timeout->tv_sec * 1000000 + timeout->tv_usec; + + if (nfds == 0) { + sceKernelDelayThread(wait); + return 0; + } + + uint8_t locked[LOCK_ARRAY_LENGTH] = {0}; + + int i; + int res; + int eid = sceNetEpollCreate("", 0); + if (eid < 0) { + res = (int)eid; + goto exit; + } + for (i = 0; i < nfds; i++) { + SceNetEpollEvent ev = {0}; + ev.data.fd = i; + if (readfds && FD_ISSET(i, readfds)) { + ev.events |= SCE_NET_EPOLLIN; + } + if (writefds && FD_ISSET(i, writefds)) { + ev.events |= SCE_NET_EPOLLOUT; + } + if (exceptfds && FD_ISSET(i, exceptfds)) { + ev.events |= SCE_NET_EPOLLERR; + } + if (ev.events == 0) { + continue; + } + + DescriptorTranslation *fdmap = __vita_fd_grab(i); + if (fdmap == NULL) { + continue; + } + if (fdmap->type != VITA_DESCRIPTOR_SOCKET) { + __vita_fd_drop(fdmap); + continue; + } + BIT_SET(locked, i); + + sceNetEpollControl(eid, SCE_NET_EPOLL_CTL_ADD, fdmap->sce_uid, &ev); + } + SceNetEpollEvent events[MAX_EVENTS] = {0}; + int nev = sceNetEpollWait(eid, events, MAX_EVENTS, wait); + + if (nev < 0) { + res = nev; + goto clean; + } + + if (readfds) { + FD_ZERO(readfds); + } + if (writefds) { + FD_ZERO(writefds); + } + if (exceptfds) { + FD_ZERO(exceptfds); + } + + res = 0; + + for (i = 0; i < nev; i++) { + if (events[i].events) { + if (events[i].events & SCE_NET_EPOLLIN) { + FD_SET(events[i].data.fd, readfds); + res++; + } + if (events[i].events & SCE_NET_EPOLLOUT) { + FD_SET(events[i].data.fd, writefds); + res++; + } + if (events[i].events & SCE_NET_EPOLLERR) { + FD_SET(events[i].data.fd, exceptfds); + res++; + } + } + } + +clean: + sceNetEpollDestroy(eid); +exit: + for (i = 0; i < nfds; i++) { + if (IS_SET(locked, i) && __vita_fdmap[i] != NULL) { + __vita_fd_drop(__vita_fdmap[i]); + } + } + + if (res < 0) { + errno = res & SCE_ERRNO_MASK; + return -1; + } + return res; +} diff --git a/newlib/libc/sys/vita/sys/select.h b/newlib/libc/sys/vita/sys/select.h new file mode 100644 index 0000000000..1fbae93c99 --- /dev/null +++ b/newlib/libc/sys/vita/sys/select.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2016, Sunguk Lee + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _SYS_SELECT_H_ +#define _SYS_SELECT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include + +int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + struct timeval *timeout); + +#ifdef __cplusplus +} +#endif + +#endif From 08624e4995630ca110c4be708e1540d9ccdf5f18 Mon Sep 17 00:00:00 2001 From: Sunguk Lee Date: Tue, 20 Sep 2016 23:50:23 +0900 Subject: [PATCH 43/65] Reduce MAX_OPEN_FILES to 256 --- newlib/libc/sys/vita/vitadescriptor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/vitadescriptor.h b/newlib/libc/sys/vita/vitadescriptor.h index 9d196fe2d0..90e340a7b6 100644 --- a/newlib/libc/sys/vita/vitadescriptor.h +++ b/newlib/libc/sys/vita/vitadescriptor.h @@ -26,7 +26,7 @@ DEALINGS IN THE SOFTWARE. #define _VITADESCRIPTOR_H_ -#define MAX_OPEN_FILES 1024 +#define MAX_OPEN_FILES 256 typedef enum { From e8c7d8a4ac798df6359ff9b5b509eb331f40a6ed Mon Sep 17 00:00:00 2001 From: Sunguk Lee Date: Tue, 20 Sep 2016 23:51:39 +0900 Subject: [PATCH 44/65] Add custom sys/types.h This file have custom fd_set; this struct contain 256bits Now locked list can use fd_set instead of uint8_t array. --- newlib/libc/sys/vita/select.c | 10 +- newlib/libc/sys/vita/sys/types.h | 514 +++++++++++++++++++++++++++++++ 2 files changed, 517 insertions(+), 7 deletions(-) create mode 100644 newlib/libc/sys/vita/sys/types.h diff --git a/newlib/libc/sys/vita/select.c b/newlib/libc/sys/vita/select.c index 3e47b0afe1..b5eea0fc2b 100644 --- a/newlib/libc/sys/vita/select.c +++ b/newlib/libc/sys/vita/select.c @@ -37,10 +37,6 @@ DEALINGS IN THE SOFTWARE. #define MAX_EVENTS 255 -#define LOCK_ARRAY_LENGTH (MAX_OPEN_FILES / 8) + ((MAX_OPEN_FILES % 8) ? 1 : 0) -#define BIT_SET(arr, idx) (arr)[(idx)/8] |= (1<<((idx)%8)) -#define IS_SET(arr, idx) ((arr)[(idx)/8] & (1<<((idx)%8))) != 0 - int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { @@ -51,7 +47,7 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, return 0; } - uint8_t locked[LOCK_ARRAY_LENGTH] = {0}; + fd_set lock = {0}; int i; int res; @@ -84,7 +80,7 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, __vita_fd_drop(fdmap); continue; } - BIT_SET(locked, i); + FD_SET(i, &lock); sceNetEpollControl(eid, SCE_NET_EPOLL_CTL_ADD, fdmap->sce_uid, &ev); } @@ -129,7 +125,7 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, sceNetEpollDestroy(eid); exit: for (i = 0; i < nfds; i++) { - if (IS_SET(locked, i) && __vita_fdmap[i] != NULL) { + if (FD_ISSET(i, &lock) && __vita_fdmap[i] != NULL) { __vita_fd_drop(__vita_fdmap[i]); } } diff --git a/newlib/libc/sys/vita/sys/types.h b/newlib/libc/sys/vita/sys/types.h new file mode 100644 index 0000000000..bffff9e694 --- /dev/null +++ b/newlib/libc/sys/vita/sys/types.h @@ -0,0 +1,514 @@ +/* unified sys/types.h: + start with sef's sysvi386 version. + merge go32 version -- a few ifdefs. + h8300hms, h8300xray, and sysvnecv70 disagree on the following types: + + typedef int gid_t; + typedef int uid_t; + typedef int dev_t; + typedef int ino_t; + typedef int mode_t; + typedef int caddr_t; + + however, these aren't "reasonable" values, the sysvi386 ones make far + more sense, and should work sufficiently well (in particular, h8300 + doesn't have a stat, and the necv70 doesn't matter.) -- eichin + */ + +#ifndef _SYS_TYPES_H + +#include <_ansi.h> +# include + +#ifndef __INTTYPES_DEFINED__ +#define __INTTYPES_DEFINED__ + +#include + +#if defined(__rtems__) || defined(__XMK__) +/* + * The following section is RTEMS specific and is needed to more + * closely match the types defined in the BSD sys/types.h. + * This is needed to let the RTEMS/BSD TCP/IP stack compile. + */ + +/* deprecated */ +#if ___int8_t_defined +typedef __uint8_t u_int8_t; +#endif +#if ___int16_t_defined +typedef __uint16_t u_int16_t; +#endif +#if ___int32_t_defined +typedef __uint32_t u_int32_t; +#endif + +#if ___int64_t_defined +typedef __uint64_t u_int64_t; + +/* deprecated */ +typedef __uint64_t u_quad_t; +typedef __int64_t quad_t; +typedef quad_t * qaddr_t; +#endif + +#endif + +#endif /* ! __INTTYPES_DEFINED */ + +#ifndef __need_inttypes + +#define _SYS_TYPES_H +#include +#include + +#ifdef __i386__ +#if defined (GO32) || defined (__MSDOS__) +#define __MS_types__ +#endif +#endif + +# include +# include + +/* To ensure the stat struct's layout doesn't change when sizeof(int), etc. + changes, we assume sizeof short and long never change and have all types + used to define struct stat use them and not int where possible. + Where not possible, _ST_INTxx are used. It would be preferable to not have + such assumptions, but until the extra fluff is necessary, it's avoided. + No 64 bit targets use stat yet. What to do about them is postponed + until necessary. */ +#ifdef __GNUC__ +#define _ST_INT32 __attribute__ ((__mode__ (__SI__))) +#else +#define _ST_INT32 +#endif + +# if __BSD_VISIBLE + +# define physadr physadr_t +# define quad quad_t + +#ifndef _BSDTYPES_DEFINED +/* also defined in mingw/gmon.h and in w32api/winsock[2].h */ +#ifndef __u_char_defined +typedef unsigned char u_char; +#define __u_char_defined +#endif +#ifndef __u_short_defined +typedef unsigned short u_short; +#define __u_short_defined +#endif +#ifndef __u_int_defined +typedef unsigned int u_int; +#define __u_int_defined +#endif +#ifndef __u_long_defined +typedef unsigned long u_long; +#define __u_long_defined +#endif +#define _BSDTYPES_DEFINED +#endif + +typedef unsigned short ushort; /* System V compatibility */ +typedef unsigned int uint; /* System V compatibility */ +typedef unsigned long ulong; /* System V compatibility */ +# endif /*__BSD_VISIBLE */ + +#ifndef __clock_t_defined +typedef _CLOCK_T_ clock_t; +#define __clock_t_defined +#endif + +#ifndef __time_t_defined +typedef _TIME_T_ time_t; +#define __time_t_defined +#endif + +#ifndef __daddr_t_defined +typedef long daddr_t; +#define __daddr_t_defined +#endif +#ifndef __caddr_t_defined +typedef char * caddr_t; +#define __caddr_t_defined +#endif + +#ifndef __CYGWIN__ +#if defined(__MS_types__) || defined(__rtems__) || \ + defined(__sparc__) || defined(__SPU__) +typedef unsigned long ino_t; +#else +typedef unsigned short ino_t; +#endif +#endif /*__CYGWIN__*/ + +#ifdef __MS_types__ +typedef unsigned long vm_offset_t; +typedef unsigned long vm_size_t; + +#define __BIT_TYPES_DEFINED__ + +typedef signed char int8_t; +typedef unsigned char u_int8_t; +typedef short int16_t; +typedef unsigned short u_int16_t; +typedef int int32_t; +typedef unsigned int u_int32_t; +typedef long long int64_t; +typedef unsigned long long u_int64_t; +typedef int32_t register_t; +#endif /* __MS_types__ */ + +/* + * All these should be machine specific - right now they are all broken. + * However, for all of Cygnus' embedded targets, we want them to all be + * the same. Otherwise things like sizeof (struct stat) might depend on + * how the file was compiled (e.g. -mint16 vs -mint32, etc.). + */ + +#ifndef __CYGWIN__ /* which defines these types in it's own types.h. */ +typedef _off_t off_t; +typedef __dev_t dev_t; +typedef __uid_t uid_t; +typedef __gid_t gid_t; +#endif + +#if defined(__XMK__) +typedef signed char pid_t; +#else +typedef int pid_t; +#endif + +#if defined(__rtems__) +typedef _mode_t mode_t; +#endif + +#ifndef __CYGWIN__ +typedef long key_t; +#endif +typedef _ssize_t ssize_t; + +#if !defined(__CYGWIN__) && !defined(__rtems__) +#ifdef __MS_types__ +typedef char * addr_t; +typedef int mode_t; +#else +#if defined (__sparc__) && !defined (__sparc_v9__) +#ifdef __svr4__ +typedef unsigned long mode_t; +#else +typedef unsigned short mode_t; +#endif +#else +typedef unsigned int mode_t _ST_INT32; +#endif +#endif /* ! __MS_types__ */ +#endif /*__CYGWIN__*/ + +typedef unsigned short nlink_t; + +/* We don't define fd_set and friends if we are compiling POSIX + source, or if we have included (or may include as indicated + by __USE_W32_SOCKETS) the W32api winsock[2].h header which + defines Windows versions of them. Note that a program which + includes the W32api winsock[2].h header must know what it is doing; + it must not call the cygwin32 select function. +*/ +# if !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) +# define _SYS_TYPES_FD_SET +# define NBBY 8 /* number of bits in a byte */ +/* + * Select uses bit masks of file descriptors in longs. + * These macros manipulate such bit fields (the filesystem macros use chars). + * FD_SETSIZE may be defined by the user, but the default here + * should be >= NOFILE (param.h). + */ +# ifndef FD_SETSIZE +# define FD_SETSIZE 256 +# endif + +typedef long fd_mask; +# define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */ +# ifndef howmany +# define howmany(x,y) (((x)+((y)-1))/(y)) +# endif + +/* We use a macro for fd_set so that including Sockets.h afterwards + can work. */ +typedef struct _types_fd_set { + fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; +} _types_fd_set; + +#define fd_set _types_fd_set + +# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS))) +# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS))) +# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) +# define FD_ZERO(p) (__extension__ (void)({ \ + size_t __i; \ + char *__tmp = (char *)p; \ + for (__i = 0; __i < sizeof (*(p)); ++__i) \ + *__tmp++ = 0; \ +})) + +# endif /* !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) */ + +#undef __MS_types__ +#undef _ST_INT32 + + +#ifndef __clockid_t_defined +typedef _CLOCKID_T_ clockid_t; +#define __clockid_t_defined +#endif + +#ifndef __timer_t_defined +typedef _TIMER_T_ timer_t; +#define __timer_t_defined +#endif + +typedef unsigned long useconds_t; + +#ifndef _SUSECONDS_T_DECLARED +typedef __suseconds_t suseconds_t; +#define _SUSECONDS_T_DECLARED +#endif + +typedef __int64_t sbintime_t; + +#include + + +/* Cygwin will probably never have full posix compliance due to little things + * like an inability to set the stackaddress. Cygwin is also using void * + * pointers rather than structs to ensure maximum binary compatability with + * previous releases. + * This means that we don't use the types defined here, but rather in + * + */ +#if defined(_POSIX_THREADS) && !defined(__CYGWIN__) + +#include + +/* + * 2.5 Primitive System Data Types, P1003.1c/D10, p. 19. + */ + +#if defined(__XMK__) +typedef unsigned int pthread_t; /* identify a thread */ +#else +typedef __uint32_t pthread_t; /* identify a thread */ +#endif + +/* P1003.1c/D10, p. 118-119 */ +#define PTHREAD_SCOPE_PROCESS 0 +#define PTHREAD_SCOPE_SYSTEM 1 + +/* P1003.1c/D10, p. 111 */ +#define PTHREAD_INHERIT_SCHED 1 /* scheduling policy and associated */ + /* attributes are inherited from */ + /* the calling thread. */ +#define PTHREAD_EXPLICIT_SCHED 2 /* set from provided attribute object */ + +/* P1003.1c/D10, p. 141 */ +#define PTHREAD_CREATE_DETACHED 0 +#define PTHREAD_CREATE_JOINABLE 1 + +#if defined(__rtems__) + #include +#endif + +#if defined(__XMK__) +typedef struct pthread_attr_s { + int contentionscope; + struct sched_param schedparam; + int detachstate; + void *stackaddr; + size_t stacksize; +} pthread_attr_t; + +#define PTHREAD_STACK_MIN 200 + +#else /* !defined(__XMK__) */ +typedef struct { + int is_initialized; + void *stackaddr; + int stacksize; + int contentionscope; + int inheritsched; + int schedpolicy; + struct sched_param schedparam; +#if defined(__rtems__) + size_t guardsize; +#endif + + /* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute. */ +#if defined(_POSIX_THREAD_CPUTIME) + int cputime_clock_allowed; /* see time.h */ +#endif + int detachstate; +#if defined(__rtems__) + size_t affinitysetsize; + cpu_set_t *affinityset; + cpu_set_t affinitysetpreallocated; +#endif +} pthread_attr_t; + +#endif /* !defined(__XMK__) */ + +#if defined(_POSIX_THREAD_PROCESS_SHARED) +/* NOTE: P1003.1c/D10, p. 81 defines following values for process_shared. */ + +#define PTHREAD_PROCESS_PRIVATE 0 /* visible within only the creating process */ +#define PTHREAD_PROCESS_SHARED 1 /* visible too all processes with access to */ + /* the memory where the resource is */ + /* located */ +#endif + +#if defined(_POSIX_THREAD_PRIO_PROTECT) +/* Mutexes */ + +/* Values for blocking protocol. */ + +#define PTHREAD_PRIO_NONE 0 +#define PTHREAD_PRIO_INHERIT 1 +#define PTHREAD_PRIO_PROTECT 2 +#endif + +#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) + +/* Values for mutex type */ + +/* The following defines are part of the X/Open System Interface (XSI). */ + +/* + * This type of mutex does not detect deadlock. A thread attempting to + * relock this mutex without first unlocking it shall deadlock. Attempting + * to unlock a mutex locked by a different thread results in undefined + * behavior. Attempting to unlock an unlocked mutex results in undefined + * behavior. + */ +#define PTHREAD_MUTEX_NORMAL 0 + +/* + * A thread attempting to relock this mutex without first unlocking + * it shall succeed in locking the mutex. The relocking deadlock which + * can occur with mutexes of type PTHREAD_MUTEX_NORMAL cannot occur with + * this type of mutex. Multiple locks of this mutex shall require the + * same number of unlocks to release the mutex before another thread can + * acquire the mutex. A thread attempting to unlock a mutex which another + * thread has locked shall return with an error. A thread attempting to + * unlock an unlocked mutex shall return with an error. + */ +#define PTHREAD_MUTEX_RECURSIVE 1 + +/* + * This type of mutex provides error checking. A thread attempting + * to relock this mutex without first unlocking it shall return with an + * error. A thread attempting to unlock a mutex which another thread has + * locked shall return with an error. A thread attempting to unlock an + * unlocked mutex shall return with an error. + */ +#define PTHREAD_MUTEX_ERRORCHECK 2 + +/* + * Attempting to recursively lock a mutex of this type results + * in undefined behavior. Attempting to unlock a mutex of this type + * which was not locked by the calling thread results in undefined + * behavior. Attempting to unlock a mutex of this type which is not locked + * results in undefined behavior. An implementation may map this mutex to + * one of the other mutex types. + */ +#define PTHREAD_MUTEX_DEFAULT 3 + +#endif /* !defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) */ + +#if defined(__XMK__) +typedef unsigned int pthread_mutex_t; /* identify a mutex */ + +typedef struct { + int type; +} pthread_mutexattr_t; + +#else /* !defined(__XMK__) */ +typedef __uint32_t pthread_mutex_t; /* identify a mutex */ + +typedef struct { + int is_initialized; +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow mutex to be shared amongst processes */ +#endif +#if defined(_POSIX_THREAD_PRIO_PROTECT) + int prio_ceiling; + int protocol; +#endif +#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) + int type; +#endif + int recursive; +} pthread_mutexattr_t; +#endif /* !defined(__XMK__) */ + +/* Condition Variables */ + +typedef __uint32_t pthread_cond_t; /* identify a condition variable */ + +typedef struct { + int is_initialized; +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow this to be shared amongst processes */ +#endif +} pthread_condattr_t; /* a condition attribute object */ + +/* Keys */ + +typedef __uint32_t pthread_key_t; /* thread-specific data keys */ + +typedef struct { + int is_initialized; /* is this structure initialized? */ + int init_executed; /* has the initialization routine been run? */ +} pthread_once_t; /* dynamic package initialization */ +#else +#if defined (__CYGWIN__) +#include +#endif +#endif /* defined(_POSIX_THREADS) */ + +/* POSIX Barrier Types */ + +#if defined(_POSIX_BARRIERS) +typedef __uint32_t pthread_barrier_t; /* POSIX Barrier Object */ +typedef struct { + int is_initialized; /* is this structure initialized? */ +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow this to be shared amongst processes */ +#endif +} pthread_barrierattr_t; +#endif /* defined(_POSIX_BARRIERS) */ + +/* POSIX Spin Lock Types */ + +#if !defined (__CYGWIN__) +#if defined(_POSIX_SPIN_LOCKS) +typedef __uint32_t pthread_spinlock_t; /* POSIX Spin Lock Object */ +#endif /* defined(_POSIX_SPIN_LOCKS) */ + +/* POSIX Reader/Writer Lock Types */ + +#if defined(_POSIX_READER_WRITER_LOCKS) +typedef __uint32_t pthread_rwlock_t; /* POSIX RWLock Object */ +typedef struct { + int is_initialized; /* is this structure initialized? */ +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow this to be shared amongst processes */ +#endif +} pthread_rwlockattr_t; +#endif /* defined(_POSIX_READER_WRITER_LOCKS) */ +#endif /* __CYGWIN__ */ + +#endif /* !__need_inttypes */ + +#undef __need_inttypes + +#endif /* _SYS_TYPES_H */ From 7f67d55fc7f9877e1ff11b61f3acac4a3ad8a8a6 Mon Sep 17 00:00:00 2001 From: Sunguk Lee Date: Sat, 24 Sep 2016 12:58:17 +0900 Subject: [PATCH 45/65] Fix can race condition code Direct use DescriptorTranslation* array instead bitflags --- newlib/libc/sys/vita/select.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/newlib/libc/sys/vita/select.c b/newlib/libc/sys/vita/select.c index b5eea0fc2b..dfe3ab7011 100644 --- a/newlib/libc/sys/vita/select.c +++ b/newlib/libc/sys/vita/select.c @@ -47,15 +47,16 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, return 0; } - fd_set lock = {0}; - int i; - int res; + int eid = sceNetEpollCreate("", 0); if (eid < 0) { - res = (int)eid; - goto exit; + errno = eid & SCE_ERRNO_MASK; + return -1; } + + DescriptorTranslation *lock[MAX_OPEN_FILES] = {0}; + for (i = 0; i < nfds; i++) { SceNetEpollEvent ev = {0}; ev.data.fd = i; @@ -80,16 +81,19 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, __vita_fd_drop(fdmap); continue; } - FD_SET(i, &lock); + lock[i] = fdmap; sceNetEpollControl(eid, SCE_NET_EPOLL_CTL_ADD, fdmap->sce_uid, &ev); } + SceNetEpollEvent events[MAX_EVENTS] = {0}; int nev = sceNetEpollWait(eid, events, MAX_EVENTS, wait); + int res = 0; if (nev < 0) { - res = nev; - goto clean; + errno = nev & SCE_ERRNO_MASK; + res = -1; + goto exit; } if (readfds) { @@ -102,8 +106,6 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, FD_ZERO(exceptfds); } - res = 0; - for (i = 0; i < nev; i++) { if (events[i].events) { if (events[i].events & SCE_NET_EPOLLIN) { @@ -121,18 +123,14 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, } } -clean: - sceNetEpollDestroy(eid); exit: + sceNetEpollDestroy(eid); + for (i = 0; i < nfds; i++) { - if (FD_ISSET(i, &lock) && __vita_fdmap[i] != NULL) { - __vita_fd_drop(__vita_fdmap[i]); + if (lock[i] != NULL) { + __vita_fd_drop(lock[i]); } } - if (res < 0) { - errno = res & SCE_ERRNO_MASK; - return -1; - } return res; } From c1f62e1fd946cc3f17aeb087d6f3346d801e56d3 Mon Sep 17 00:00:00 2001 From: Sunguk Lee Date: Mon, 26 Sep 2016 21:16:35 +0900 Subject: [PATCH 46/65] `nfds` should be 0 to MAX_OPEN_FILES - 1 --- newlib/libc/sys/vita/select.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/newlib/libc/sys/vita/select.c b/newlib/libc/sys/vita/select.c index dfe3ab7011..a7f1f75423 100644 --- a/newlib/libc/sys/vita/select.c +++ b/newlib/libc/sys/vita/select.c @@ -40,6 +40,11 @@ DEALINGS IN THE SOFTWARE. int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { + if (nfds < 0 || nfds >= MAX_OPEN_FILES) { + errno = EINVAL; + return -1; + } + uint64_t wait = timeout->tv_sec * 1000000 + timeout->tv_usec; if (nfds == 0) { From cdbaed8a8ebaf8567fd3fc50c2373d8fd6cf8e0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Thu, 29 Sep 2016 18:42:34 +0200 Subject: [PATCH 47/65] Add arguments support --- newlib/libc/sys/vita/crt0.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index 8edf156c4d..d00582d3a4 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -1,3 +1,6 @@ +/* The maximum number of arguments that can be passed to main(). */ +#define ARGC_MAX 19 + int main(int argc, const char* argv[]); void _init_vita_newlib(void) { @@ -14,8 +17,27 @@ void _free_vita_newlib(void) { _free_vita_heap(); } -void _start() { +void _start(unsigned int args, void *argp) +{ + char *argv[ARG_MAX + 1]; + int argc = 0; + int loc = 0; + char *ptr = argp; + + /* Turn our thread arguments into main()'s argc and argv[]. */ + while(loc < args) + { + argv[argc] = &ptr[loc]; + loc += strlen(&ptr[loc]) + 1; + argc++; + if(argc == ARGC_MAX) + { + break; + } + } + + argv[argc] = NULL; _init_vita_newlib(); __libc_init_array(); - exit(main(1, (const char*[]){"", 0})); + exit(main(argc, argv)); } From a63af0a476b4aeb03ab8d3208d833cf3c46ba183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Fri, 30 Sep 2016 08:39:08 +0200 Subject: [PATCH 48/65] Fix errors --- newlib/libc/sys/vita/crt0.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index d00582d3a4..bc78376f67 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -19,7 +19,7 @@ void _free_vita_newlib(void) { void _start(unsigned int args, void *argp) { - char *argv[ARG_MAX + 1]; + char *argv[ARGC_MAX + 1]; int argc = 0; int loc = 0; char *ptr = argp; @@ -36,7 +36,7 @@ void _start(unsigned int args, void *argp) } } - argv[argc] = NULL; + argv[argc] = 0; _init_vita_newlib(); __libc_init_array(); exit(main(argc, argv)); From a53590e357edb152d7e623b6e0f734f4f386e8fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Sun, 2 Oct 2016 10:09:40 +0200 Subject: [PATCH 49/65] Update crt0.c --- newlib/libc/sys/vita/crt0.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index bc78376f67..71ee3ea025 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -17,6 +17,11 @@ void _free_vita_newlib(void) { _free_vita_heap(); } +/* + * Code below is based on the PSPSDK implementation + * Copyright (c) 2005 Marcus R. Brown + */ + void _start(unsigned int args, void *argp) { char *argv[ARGC_MAX + 1]; From f4dbac046808922b8490ec6c9b44c883387d0c5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Sun, 2 Oct 2016 12:12:43 +0200 Subject: [PATCH 50/65] Add argv[0] as program name --- newlib/libc/sys/vita/crt0.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index 71ee3ea025..384924abdd 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -24,8 +24,8 @@ void _free_vita_newlib(void) { void _start(unsigned int args, void *argp) { - char *argv[ARGC_MAX + 1]; - int argc = 0; + char *argv[ARGC_MAX + 1] = {""}; // Program name + int argc = 1; int loc = 0; char *ptr = argp; From c61dcf6351eae98674156ad60a02fd308d9c02dc Mon Sep 17 00:00:00 2001 From: Sunguk Lee Date: Tue, 8 Nov 2016 02:18:07 +0900 Subject: [PATCH 51/65] Change SO_NONBLOCK value to 0x1100 use SCE_NET_SO_NBIO value https://github.com/vitasdk/vita-headers/blob/2427262/include/psp2/net/net.h#L392 --- newlib/libc/sys/vita/sys/socket.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/sys/socket.h b/newlib/libc/sys/vita/sys/socket.h index 5c0898f558..1c31ad5e68 100644 --- a/newlib/libc/sys/vita/sys/socket.h +++ b/newlib/libc/sys/vita/sys/socket.h @@ -110,7 +110,7 @@ typedef uint32_t socklen_t; #define SO_ERROR 0x1007 /* get error status and clear */ #define SO_TYPE 0x1008 /* get socket type */ #define SO_OVERFLOWED 0x1009 /* datagrams: return packets dropped */ -#define SO_NONBLOCK 0x1009 /* non-blocking I/O */ +#define SO_NONBLOCK 0x1100 /* non-blocking I/O */ /* * Structure used for manipulating linger option. From d9bd33eb040a64bed5b4e9325dc8ca375e191fe3 Mon Sep 17 00:00:00 2001 From: Sunguk Lee Date: Wed, 9 Nov 2016 00:37:32 +0900 Subject: [PATCH 52/65] Fix SO_RCVTIMEO option set wrong timeout value. sceNetSetsockopt not allow timeval struct. this problem make recv or send raise error immediately. --- newlib/libc/sys/vita/socket.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/socket.c b/newlib/libc/sys/vita/socket.c index 3cf4871d2a..3b8d3e75dd 100644 --- a/newlib/libc/sys/vita/socket.c +++ b/newlib/libc/sys/vita/socket.c @@ -23,6 +23,7 @@ DEALINGS IN THE SOFTWARE. */ #include +#include #include #include @@ -386,7 +387,21 @@ int setsockopt(int s, int level, int optname, const void *optval, socklen_t optl return -1; } - int res = sceNetSetsockopt(fdmap->sce_uid, level, optname, optval, optlen); + int res; + if (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO) + { + if (optlen < sizeof(struct timeval)) + { + __vita_fd_drop(fdmap); + errno = EINVAL; + return -1; + } + struct timeval *timeout = optval; + int wait = timeout->tv_sec * 1000000 + timeout->tv_usec; + res = sceNetSetsockopt(fdmap->sce_uid, level, optname, &wait, sizeof(wait)); + } else { + res = sceNetSetsockopt(fdmap->sce_uid, level, optname, optval, optlen); + } __vita_fd_drop(fdmap); From c73abdaf222cbd2ac3cbe4549ef7ad95d3b1eddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Wed, 5 Apr 2017 19:23:42 +0200 Subject: [PATCH 53/65] Fix IO slow issues Fixes https://github.com/vitasdk/newlib/issues/18 --- newlib/libc/sys/vita/threading.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c index adeb70795d..2488358c2f 100755 --- a/newlib/libc/sys/vita/threading.c +++ b/newlib/libc/sys/vita/threading.c @@ -7,9 +7,6 @@ #include #include -// not in sdk -void sceClibPrintf(const char *fmt, ...); - #define MAX_THREADS 256 typedef struct reent_for_thread { @@ -80,7 +77,7 @@ int _exit_thread_common(int exit_status, int (*exit_func)(int)) { if (res) { - struct _reent **on_tls = TLS_REENT_THID_PTR(thid); + struct _reent **on_tls = TLS_REENT_PTR; struct reent_for_thread *for_thread = list_entry(*on_tls, struct reent_for_thread, reent); for_thread->thread_id = thid; @@ -133,21 +130,23 @@ static inline struct reent_for_thread *__vita_allocate_reent(void) } struct _reent *__getreent_for_thread(int thid) { - int i; struct reent_for_thread *free_reent = 0; struct _reent *returned_reent = 0; - if (thid == 0) - thid = sceKernelGetThreadId(); - - sceKernelLockMutex(_newlib_reent_mutex, 1, 0); - // A pointer to our reent should be on the TLS - struct _reent **on_tls = TLS_REENT_THID_PTR(thid); + struct _reent **on_tls = NULL; + + if (thid == 0) + on_tls = TLS_REENT_PTR; + else + on_tls = TLS_REENT_THID_PTR(thid); + if (*on_tls) { - sceKernelUnlockMutex(_newlib_reent_mutex, 1); return *on_tls; } + + sceKernelLockMutex(_newlib_reent_mutex, 1, 0); + // If it's not on the TLS this means the thread doesn't have a reent allocated yet // We allocate one and put a pointer to it on the TLS free_reent = __vita_allocate_reent(); @@ -186,7 +185,7 @@ struct _reent *__getreent_for_thread(int thid) { } struct _reent *__getreent(void) { - return __getreent_for_thread(sceKernelGetThreadId()); + return __getreent_for_thread(0); } void *vitasdk_get_tls_data(SceUID thid) From 648a0923708fec8a1d37d792aa36d20fd1b4097f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Wed, 5 Apr 2017 19:27:37 +0200 Subject: [PATCH 54/65] typo --- newlib/libc/sys/vita/threading.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c index 2488358c2f..29faf39064 100755 --- a/newlib/libc/sys/vita/threading.c +++ b/newlib/libc/sys/vita/threading.c @@ -7,6 +7,9 @@ #include #include +// not in sdk + -void sceClibPrintf(const char *fmt, ...); + #define MAX_THREADS 256 typedef struct reent_for_thread { From 5c56fbff76d7284ab9ded68e15e7d890a2f240f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Wed, 5 Apr 2017 19:27:59 +0200 Subject: [PATCH 55/65] More typos --- newlib/libc/sys/vita/threading.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c index 29faf39064..f3a8d5f26e 100755 --- a/newlib/libc/sys/vita/threading.c +++ b/newlib/libc/sys/vita/threading.c @@ -7,8 +7,8 @@ #include #include -// not in sdk - -void sceClibPrintf(const char *fmt, ...); +// not in sdk +void sceClibPrintf(const char *fmt, ...); #define MAX_THREADS 256 From 5e17c235d10bac8265f85b70796a4b9ede8480e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Thu, 6 Apr 2017 11:37:13 +0200 Subject: [PATCH 56/65] Small fixes --- newlib/libc/sys/vita/threading.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/newlib/libc/sys/vita/threading.c b/newlib/libc/sys/vita/threading.c index f3a8d5f26e..050909935b 100755 --- a/newlib/libc/sys/vita/threading.c +++ b/newlib/libc/sys/vita/threading.c @@ -36,7 +36,13 @@ int __vita_delete_thread_reent(int thid) // We only need to cleanup if reent is allocated, i.e. if it's on our TLS // We also don't need to clean up the global reent - struct _reent **on_tls = TLS_REENT_THID_PTR(thid); + struct _reent **on_tls = NULL; + + if (thid == 0) + on_tls = TLS_REENT_PTR; + else + on_tls = TLS_REENT_THID_PTR(thid); + if (!*on_tls || *on_tls == &_newlib_global_reent) return 0; @@ -74,7 +80,7 @@ int _exit_thread_common(int exit_status, int (*exit_func)(int)) { // Lock the list because we'll be modifying it sceKernelLockMutex(_newlib_reent_mutex, 1, NULL); - res = __vita_delete_thread_reent(thid); + res = __vita_delete_thread_reent(0); ret = exit_func(exit_status); @@ -148,7 +154,7 @@ struct _reent *__getreent_for_thread(int thid) { return *on_tls; } - sceKernelLockMutex(_newlib_reent_mutex, 1, 0); + sceKernelLockMutex(_newlib_reent_mutex, 1, 0); // If it's not on the TLS this means the thread doesn't have a reent allocated yet // We allocate one and put a pointer to it on the TLS @@ -175,6 +181,9 @@ struct _reent *__getreent_for_thread(int thid) { memset(free_reent, 0, sizeof(struct reent_for_thread)); // Set it up + if(thid==0){ + thid = sceKernelGetThreadId(); + } free_reent->thread_id = thid; _REENT_INIT_PTR(&free_reent->reent); returned_reent = &free_reent->reent; From 46f8b2d9dc929d7d7b56bf5ade1a9029f3bdf880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Sat, 30 Dec 2017 17:00:39 +0100 Subject: [PATCH 57/65] Fix dirent errors --- newlib/libc/sys/vita/dirent.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/dirent.c b/newlib/libc/sys/vita/dirent.c index 95aa8feb6f..77fdf5593f 100644 --- a/newlib/libc/sys/vita/dirent.c +++ b/newlib/libc/sys/vita/dirent.c @@ -82,7 +82,7 @@ DIR *opendir(const char *dirname) } dirp->uid = uid; - strncpy(dirp->dirname, dirname, sizeof(dirp->dirname) ); + strncpy(dirp->dirname, dirname, sizeof(dirp->dirname)-1 ); dirp->index = 0; errno = 0; @@ -112,6 +112,7 @@ struct dirent *readdir(DIR *dirp) } struct dirent *dir = &dirp->dir; + dirp->index++; return dir; } @@ -133,6 +134,9 @@ void rewinddir(DIR *dirp) sceIoDclose(dirp->uid); + dirp->uid = dirfd; + dirp->index = 0; + errno = 0; } void seekdir(DIR *dirp, long int index) From 21cc1dd6d2707c061af09d2ba3133fb62b555e08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20F?= Date: Sat, 13 Jan 2018 21:30:41 +0100 Subject: [PATCH 58/65] WIP: Add (f)truncate function with sceIoChstat* (#29) --- newlib/libc/sys/vita/syscalls.c | 54 +++++++++++++++++++++++++++++ newlib/libc/syscalls/Makefile.am | 2 ++ newlib/libc/syscalls/Makefile.in | 19 ++++++++-- newlib/libc/syscalls/sysftruncate.c | 13 +++++++ newlib/libc/syscalls/systruncate.c | 13 +++++++ 5 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 newlib/libc/syscalls/sysftruncate.c create mode 100644 newlib/libc/syscalls/systruncate.c diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 73246c9caa..5e9d2f02d7 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -382,3 +382,57 @@ _stat_r(struct _reent *reent, const char *path, struct stat *st) reent->_errno = 0; return 0; } + +int +_truncate_r(struct _reent *reent, char* path, off_t length) +{ + struct SceIoStat stat = {0}; + stat.st_size = length; + int ret; + + ret = sceIoChstat(path, &stat, SCE_CST_SIZE); + + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + + reent->_errno = 0; + return 0; +} + +int +_ftruncate_r(struct _reent *reent, int fd, off_t length) +{ + struct SceIoStat stat = {0}; + stat.st_size = length; + int ret; + + DescriptorTranslation *fdmap = __vita_fd_grab(fd); + + if (!fdmap) { + reent->_errno = EBADF; + return -1; + } + + switch (fdmap->type) + { + case VITA_DESCRIPTOR_FILE: + ret = sceIoChstatByFd(fdmap->sce_uid, &stat, SCE_CST_SIZE); + break; + case VITA_DESCRIPTOR_TTY: + case VITA_DESCRIPTOR_SOCKET: + ret = EBADF; + break; + } + + __vita_fd_drop(fdmap); + + if (ret < 0) { + reent->_errno = ret & SCE_ERRNO_MASK; + return -1; + } + + reent->_errno = 0; + return 0; +} diff --git a/newlib/libc/syscalls/Makefile.am b/newlib/libc/syscalls/Makefile.am index 7af4064827..fb5827df0f 100644 --- a/newlib/libc/syscalls/Makefile.am +++ b/newlib/libc/syscalls/Makefile.am @@ -7,6 +7,7 @@ INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) GENERAL_SOURCES = \ sysclose.c \ sysfcntl.c \ + sysftruncate.c \ sysfstat.c \ sysgetpid.c \ sysgettod.c \ @@ -19,6 +20,7 @@ GENERAL_SOURCES = \ syssbrk.c \ sysstat.c \ systimes.c \ + systruncate.c \ sysunlink.c \ syswrite.c diff --git a/newlib/libc/syscalls/Makefile.in b/newlib/libc/syscalls/Makefile.in index 1f7b81e20f..dff69484fe 100644 --- a/newlib/libc/syscalls/Makefile.in +++ b/newlib/libc/syscalls/Makefile.in @@ -79,7 +79,8 @@ am__objects_1 = lib_a-sysclose.$(OBJEXT) lib_a-sysfcntl.$(OBJEXT) \ lib_a-syslseek.$(OBJEXT) lib_a-sysopen.$(OBJEXT) \ lib_a-sysread.$(OBJEXT) lib_a-syssbrk.$(OBJEXT) \ lib_a-sysstat.$(OBJEXT) lib_a-systimes.$(OBJEXT) \ - lib_a-sysunlink.$(OBJEXT) lib_a-syswrite.$(OBJEXT) + lib_a-sysunlink.$(OBJEXT) lib_a-syswrite.$(OBJEXT) \ + lib_a-sysftruncate.$(OBJEXT) lib_a-systruncate.$(OBJEXT) @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@am__objects_2 = lib_a-sysexecve.$(OBJEXT) \ @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@ lib_a-sysfork.$(OBJEXT) \ @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@ lib_a-syswait.$(OBJEXT) @@ -91,7 +92,7 @@ libsyscalls_la_LIBADD = am__objects_3 = sysclose.lo sysfcntl.lo sysfstat.lo sysgetpid.lo \ sysgettod.lo sysisatty.lo syskill.lo syslink.lo syslseek.lo \ sysopen.lo sysread.lo syssbrk.lo sysstat.lo systimes.lo \ - sysunlink.lo syswrite.lo + sysunlink.lo syswrite.lo sysftruncate.lo systruncate.lo @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@am__objects_4 = sysexecve.lo \ @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@ sysfork.lo syswait.lo @USE_LIBTOOL_TRUE@am_libsyscalls_la_OBJECTS = $(am__objects_3) \ @@ -272,6 +273,7 @@ GENERAL_SOURCES = \ sysclose.c \ sysfcntl.c \ sysfstat.c \ + sysftruncate.c \ sysgetpid.c \ sysgettod.c \ sysisatty.c \ @@ -283,6 +285,7 @@ GENERAL_SOURCES = \ syssbrk.c \ sysstat.c \ systimes.c \ + systruncate.c \ sysunlink.c \ syswrite.c @@ -393,6 +396,18 @@ lib_a-sysfstat.o: sysfstat.c lib_a-sysfstat.obj: sysfstat.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sysfstat.obj `if test -f 'sysfstat.c'; then $(CYGPATH_W) 'sysfstat.c'; else $(CYGPATH_W) '$(srcdir)/sysfstat.c'; fi` +lib_a-sysftruncate.o: sysftruncate.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sysftruncate.o `test -f 'sysftruncate.c' || echo '$(srcdir)/'`sysftruncate.c + +lib_a-sysftruncate.obj: sysftruncate.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sysftruncate.obj `if test -f 'sysftruncate.c'; then $(CYGPATH_W) 'sysftruncate.c'; else $(CYGPATH_W) '$(srcdir)/sysftruncate.c'; fi` + +lib_a-systruncate.o: systruncate.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-systruncate.o `test -f 'systruncate.c' || echo '$(srcdir)/'`systruncate.c + +lib_a-systruncate.obj: systruncate.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-systruncate.obj `if test -f 'systruncate.c'; then $(CYGPATH_W) 'systruncate.c'; else $(CYGPATH_W) '$(srcdir)/systruncate.c'; fi` + lib_a-sysgetpid.o: sysgetpid.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sysgetpid.o `test -f 'sysgetpid.c' || echo '$(srcdir)/'`sysgetpid.c diff --git a/newlib/libc/syscalls/sysftruncate.c b/newlib/libc/syscalls/sysftruncate.c new file mode 100644 index 0000000000..b6798adbb3 --- /dev/null +++ b/newlib/libc/syscalls/sysftruncate.c @@ -0,0 +1,13 @@ +/* connector for ftruncate */ + +#include +#include +#include + +int +_DEFUN (ftruncate, (fd, pstat), + int fd _AND + off_t length) +{ + return _ftruncate_r (_REENT, fd, length); +} diff --git a/newlib/libc/syscalls/systruncate.c b/newlib/libc/syscalls/systruncate.c new file mode 100644 index 0000000000..4a7a602a95 --- /dev/null +++ b/newlib/libc/syscalls/systruncate.c @@ -0,0 +1,13 @@ +/* connector for truncate */ + +#include +#include +#include + +int +_DEFUN (truncate, (path, pstat), + const char * path _AND + off_t length) +{ + return _truncate_r (_REENT, path, length); +} From 7a07bc81422937771b2e53857c6d428c6c26080d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Tue, 16 Jan 2018 16:14:30 +0100 Subject: [PATCH 59/65] Create memory.h (#30) * Create memory.h * Change location --- newlib/libc/sys/vita/include/memory.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 newlib/libc/sys/vita/include/memory.h diff --git a/newlib/libc/sys/vita/include/memory.h b/newlib/libc/sys/vita/include/memory.h new file mode 100644 index 0000000000..5b7d08f473 --- /dev/null +++ b/newlib/libc/sys/vita/include/memory.h @@ -0,0 +1,12 @@ +/* + * memory.h + * + * Redirects to string.h. Mostly here to help with porting. + */ + +#ifndef _MEMORY_H_ +#define _MEMORY_H_ + +#include + +#endif /* _MEMORY_H_ */ From e87a363af66c3c628ba9bb62b06b4d9faecfd321 Mon Sep 17 00:00:00 2001 From: Sunguk Lee Date: Fri, 19 Jan 2018 21:09:41 +0900 Subject: [PATCH 60/65] Change placeholder to vitasdk --- newlib/libc/sys/vita/include/netdb.h | 2 +- newlib/libc/sys/vita/include/netinet/in.h | 2 +- newlib/libc/sys/vita/select.c | 2 +- newlib/libc/sys/vita/sys/select.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/newlib/libc/sys/vita/include/netdb.h b/newlib/libc/sys/vita/include/netdb.h index b7d1c8b212..c4f405bd4a 100644 --- a/newlib/libc/sys/vita/include/netdb.h +++ b/newlib/libc/sys/vita/include/netdb.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Sunguk Lee + * Copyright (c) 2016, 2017, 2018 vitasdk * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/newlib/libc/sys/vita/include/netinet/in.h b/newlib/libc/sys/vita/include/netinet/in.h index 0b7c329192..8828e8a532 100644 --- a/newlib/libc/sys/vita/include/netinet/in.h +++ b/newlib/libc/sys/vita/include/netinet/in.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Sunguk Lee + * Copyright (c) 2016, 2017, 2018 vitasdk * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/newlib/libc/sys/vita/select.c b/newlib/libc/sys/vita/select.c index a7f1f75423..6c5aa11319 100644 --- a/newlib/libc/sys/vita/select.c +++ b/newlib/libc/sys/vita/select.c @@ -1,6 +1,6 @@ /* -Copyright (C) 2016, Sunguk Lee +Copyright (c) 2016, 2017, 2018 vitasdk Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), diff --git a/newlib/libc/sys/vita/sys/select.h b/newlib/libc/sys/vita/sys/select.h index 1fbae93c99..4ff4a65c99 100644 --- a/newlib/libc/sys/vita/sys/select.h +++ b/newlib/libc/sys/vita/sys/select.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Sunguk Lee + * Copyright (c) 2016, 2017, 2018 vitasdk * All rights reserved. * * Redistribution and use in source and binary forms, with or without From b275e655e435241b93146c9967499f51af35234f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20F?= Date: Sat, 27 Jan 2018 21:11:56 +0100 Subject: [PATCH 61/65] Prevent strlen() from exceeding `args` (#32) --- newlib/libc/sys/vita/crt0.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/crt0.c b/newlib/libc/sys/vita/crt0.c index 384924abdd..6a700e3b17 100755 --- a/newlib/libc/sys/vita/crt0.c +++ b/newlib/libc/sys/vita/crt0.c @@ -33,7 +33,7 @@ void _start(unsigned int args, void *argp) while(loc < args) { argv[argc] = &ptr[loc]; - loc += strlen(&ptr[loc]) + 1; + loc += strnlen(&ptr[loc], args - loc) + 1; argc++; if(argc == ARGC_MAX) { From 50f181fa41c263b6933c2f4d477d3856ab86bae4 Mon Sep 17 00:00:00 2001 From: Sunguk Lee Date: Fri, 2 Mar 2018 16:09:11 +0900 Subject: [PATCH 62/65] Free allocated memory at calling closedir (#34) Resolve #33 --- newlib/libc/sys/vita/dirent.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/newlib/libc/sys/vita/dirent.c b/newlib/libc/sys/vita/dirent.c index 77fdf5593f..f20b65d318 100644 --- a/newlib/libc/sys/vita/dirent.c +++ b/newlib/libc/sys/vita/dirent.c @@ -44,20 +44,23 @@ struct DIR_ int closedir(DIR *dirp) { - if (!dirp) + if (!dirp || dirp->uid < 0) { errno = EBADF; return -1; } int res = sceIoDclose(dirp->uid); + dirp->uid = -1; + + free(dirp); if (res < 0) { errno = res & SCE_ERRNO_MASK; return -1; } - + errno = 0; return 0; } From 16da3c9ddd32a4b01bb9bcb17aadf0d0e0538751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20F?= Date: Mon, 9 Apr 2018 22:52:36 +0200 Subject: [PATCH 63/65] Add missing INADDR_* macro (#24) Useful when binding listening socket --- newlib/libc/sys/vita/include/netinet/in.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/newlib/libc/sys/vita/include/netinet/in.h b/newlib/libc/sys/vita/include/netinet/in.h index 8828e8a532..c1c64a81a4 100644 --- a/newlib/libc/sys/vita/include/netinet/in.h +++ b/newlib/libc/sys/vita/include/netinet/in.h @@ -55,6 +55,12 @@ struct sockaddr_in { char sin_zero[6]; } sockaddr_in; +/* Address to accept any incoming messages. */ +#define INADDR_ANY ((in_addr_t) 0x00000000) + +/* Address to send to all hosts. */ +#define INADDR_BROADCAST ((in_addr_t) 0xffffffff) + #define ntohs __builtin_bswap16 #define htons __builtin_bswap16 #define ntohl __builtin_bswap32 From 42505001697224a7bfd008438c85256cbcc21188 Mon Sep 17 00:00:00 2001 From: Davee Date: Sun, 22 Apr 2018 10:28:53 +0100 Subject: [PATCH 64/65] Add missing SCE_KERNEL_MUTEX_ATTR_RECURSIVE flag Previously it was possible to go down a path and try to hold the newlib file descriptor mutex several times. Without the recursive flag, subsequent attempts to hold the mutex would fail. --- newlib/libc/sys/vita/io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/io.c b/newlib/libc/sys/vita/io.c index 42d6fa902b..4ba2087033 100644 --- a/newlib/libc/sys/vita/io.c +++ b/newlib/libc/sys/vita/io.c @@ -18,7 +18,7 @@ SceKernelLwMutexWork _newlib_fd_mutex __attribute__ ((aligned (8))); void _init_vita_io(void) { int ret; - sceKernelCreateLwMutex(&_newlib_fd_mutex, "fd conversion table mutex", 0, 1, NULL); + sceKernelCreateLwMutex(&_newlib_fd_mutex, "fd conversion table mutex", SCE_KERNEL_MUTEX_ATTR_RECURSIVE, 1, NULL); memset(__vita_fdmap, 0, sizeof(__vita_fdmap)); memset(__vita_fdmap_pool, 0, sizeof(__vita_fdmap_pool)); From 6246df356bcb145684bf0b51122e4ccbb8bd33f4 Mon Sep 17 00:00:00 2001 From: rsn8887 Date: Thu, 13 Dec 2018 14:59:37 -0600 Subject: [PATCH 65/65] enable file sizes >2 GiB on Vita via fseeko() and ftello() --- newlib/libc/sys/vita/sys/types.h | 9 +++++++++ newlib/libc/sys/vita/syscalls.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/newlib/libc/sys/vita/sys/types.h b/newlib/libc/sys/vita/sys/types.h index bffff9e694..574d654aba 100644 --- a/newlib/libc/sys/vita/sys/types.h +++ b/newlib/libc/sys/vita/sys/types.h @@ -59,6 +59,15 @@ typedef quad_t * qaddr_t; #ifndef __need_inttypes #define _SYS_TYPES_H + +#ifdef __vita__ +// enable file sizes >2 GiB on Vita using fseeko() and ftello() +typedef __int64_t _off_t; +#define __off_t_defined 1 +typedef __int64_t _fpos_t; +#define __fpos_t_defined 1 +#endif + #include #include diff --git a/newlib/libc/sys/vita/syscalls.c b/newlib/libc/sys/vita/syscalls.c index 5e9d2f02d7..12cb171961 100755 --- a/newlib/libc/sys/vita/syscalls.c +++ b/newlib/libc/sys/vita/syscalls.c @@ -174,7 +174,7 @@ _lseek_r(struct _reent *reent, int fd, _off_t ptr, int dir) switch (fdmap->type) { case VITA_DESCRIPTOR_FILE: - ret = sceIoLseek32(fdmap->sce_uid, ptr, dir); + ret = sceIoLseek(fdmap->sce_uid, ptr, dir); break; case VITA_DESCRIPTOR_TTY: case VITA_DESCRIPTOR_SOCKET: