1997-06-29 23:43  Ulrich Drepper  <drepper@cygnus.com>

	* config.make.in: Define need-nopic-initfini.
	* configure.in: Write out nopic_initfini.
	* csu/Makefile: Generate no-PIC crt code if need-nopic-initfini
	is defined.

	* sysdeps/i386/fpu/fraiseexcpt.c: Correct FE_INEXACT case.

	* sysdeps/sparc/rem.S: Get trap definition properly.
	* sysdeps/sparc/sdiv.S: Likewise.
	* sysdeps/sparc/udiv.S: Likewise.
	* sysdeps/sparc/urem.S: Likewise.
	* sysdeps/sparc/setjmp.S: Include <sys/trap.h>.
	* sysdeps/sparc/sys/trap.h: New file.
	* sysdeps/unix/sysv/linux/sparc/sys/trap.h: New file.

1997-06-25 10:26  Thorsten Kukuk  <kukuk@uni-paderborn.de>

	* sysdeps/generic/rpc/auth.h: Add xdr_opaque_auth declaration.

1997-06-29 10:34  Fila Kolodny  <fila@ibi.com>

	* sysdeps/mach/hurd/select.c (__select): Change MACH_MSG_SIZE_INTEGER_T
	to MACH_MSG_TYPE_INTEGER_T.

1997-06-29  01:04  Richard Henderson  <richard@gnu.ai.mit.edu>

	Initial sparc64-linux support:
	* configure.in: Recognize sparc64 as being different from sparc.
	* io/ftwtest-sh: Only invoke ld.so if it exists.
	* math/Makefile (LDLIBS-*): Change from libm to math/libm to get
	static tests to link.  Honour $(omit-long-double-fcts) == yes.
	* math/libm-test.c (test_single_exception): The argument to
	fetestexcept is `int' not `fexcept_t'.
	* shlib-versions: Recognize sparc64.
	* signal/signal.h: Add typedef for stack_t.

	* stdio-common/_itoa.c: Defaulting UMUL_TIME==UDIV_TIME is broken.
	Attempt to fix up most of this by cleaning up assumptions below,
	but give up and change the defaults.

	* setjmp/longjmp.c: Moved to ...
	* sysdeps/generic/longjmp.c: ... here.
	* setjmp/sigjmp.c: Moved to ...
	* sysdeps/generic/sigjmp.c: ... here.

	* sysdeps/sparc/bsd-_setjmp.S [PIC]: There wasn't even valid asm here.
	Ought to fix up gas to catch these silly things properly.
	* sysdeps/sparc/bsd-setjmp.S: Likewise.

	* sysdeps/unix/sysv/linux/sparc/errno.c: Remove.
	* sysdeps/unix/sysv/linux/sparc/kernel_sigaction.h: Remove.
	* sysdeps/unix/sysv/linux/sparc/kernel_stat.h: Tell xstat about
	the unused fields.

	* sysdeps/sparc/sparc64/add_n.s: Moved to ...
	* sysdeps/sparc64/add_n.S: ... here.  Fix up %g4 and stack usage.
	* sysdeps/sparc/sparc64/addmul_1.s: Likewise.
	* sysdeps/sparc/sparc64/gmp-mparam.h: Likewise.
	* sysdeps/sparc/sparc64/lshift.s: Likewise.
	* sysdeps/sparc/sparc64/mul_1.s: Likewise.
	* sysdeps/sparc/sparc64/rshift.s: Likewise.
	* sysdeps/sparc/sparc64/sub_n.s: Likewise.
	* sysdeps/sparc/sparc64/submul_1.s: Likewise.

	* sysdeps/sparc64/Implies: New file.
	* sysdeps/sparc64/Makefile: Likewise.
	* sysdeps/sparc64/bits/endian.h: Likewise.
	* sysdeps/sparc64/bsd-_setjmp.S: Likewise.
	* sysdeps/sparc64/bsd-setjmp.S: Likewise.
	* sysdeps/sparc64/dl-machine.h: Likewise.
	* sysdeps/sparc64/elf/Makefile: Likewise.
	* sysdeps/sparc64/elf/crtbegin.S: Likewise.
	* sysdeps/sparc64/elf/crtbeginS.S: Likewise.
	* sysdeps/sparc64/elf/crtend.S: Likewise.
	* sysdeps/sparc64/elf/crtendS.S: Likewise.
	* sysdeps/sparc64/elf/start.S: Likewise.
	* sysdeps/sparc64/fpu_control.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/__longjmp.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/bits/setjmp.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/bits/types.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/brk.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/clone.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/fork.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/getcontext.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/init-first.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/kernel_stat.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/longjmp.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/pipe.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/profil-counter.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/setcontext.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/setjmp.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/sigjmp.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/syscalls.list: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/sysdep.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc64/ucontext.h: Likewise.

1997-06-28 16:28  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* configure.in: Add -nostartfiles -nostdlib when check for
	--version-script.

1997-06-28 12:03  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* sysdeps/powerpc/bits/endian.h: New file.

1997-06-28 20:52  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/syscalls.list: Add getresgid and
	setresgid.
This commit is contained in:
Ulrich Drepper 1997-06-29 22:05:27 +00:00
parent bca973bcd9
commit 5ae3e846b9
80 changed files with 2536 additions and 732 deletions

114
ChangeLog
View file

@ -1,3 +1,117 @@
1997-06-29 23:43 Ulrich Drepper <drepper@cygnus.com>
* config.make.in: Define need-nopic-initfini.
* configure.in: Write out nopic_initfini.
* csu/Makefile: Generate no-PIC crt code if need-nopic-initfini
is defined.
* sysdeps/i386/fpu/fraiseexcpt.c: Correct FE_INEXACT case.
* sysdeps/sparc/rem.S: Get trap definition properly.
* sysdeps/sparc/sdiv.S: Likewise.
* sysdeps/sparc/udiv.S: Likewise.
* sysdeps/sparc/urem.S: Likewise.
* sysdeps/sparc/setjmp.S: Include <sys/trap.h>.
* sysdeps/sparc/sys/trap.h: New file.
* sysdeps/unix/sysv/linux/sparc/sys/trap.h: New file.
1997-06-25 10:26 Thorsten Kukuk <kukuk@uni-paderborn.de>
* sysdeps/generic/rpc/auth.h: Add xdr_opaque_auth declaration.
1997-06-29 10:34 Fila Kolodny <fila@ibi.com>
* sysdeps/mach/hurd/select.c (__select): Change MACH_MSG_SIZE_INTEGER_T
to MACH_MSG_TYPE_INTEGER_T.
1997-06-29 01:04 Richard Henderson <richard@gnu.ai.mit.edu>
Initial sparc64-linux support:
* configure.in: Recognize sparc64 as being different from sparc.
* io/ftwtest-sh: Only invoke ld.so if it exists.
* math/Makefile (LDLIBS-*): Change from libm to math/libm to get
static tests to link. Honour $(omit-long-double-fcts) == yes.
* math/libm-test.c (test_single_exception): The argument to
fetestexcept is `int' not `fexcept_t'.
* shlib-versions: Recognize sparc64.
* signal/signal.h: Add typedef for stack_t.
* stdio-common/_itoa.c: Defaulting UMUL_TIME==UDIV_TIME is broken.
Attempt to fix up most of this by cleaning up assumptions below,
but give up and change the defaults.
* setjmp/longjmp.c: Moved to ...
* sysdeps/generic/longjmp.c: ... here.
* setjmp/sigjmp.c: Moved to ...
* sysdeps/generic/sigjmp.c: ... here.
* sysdeps/sparc/bsd-_setjmp.S [PIC]: There wasn't even valid asm here.
Ought to fix up gas to catch these silly things properly.
* sysdeps/sparc/bsd-setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc/errno.c: Remove.
* sysdeps/unix/sysv/linux/sparc/kernel_sigaction.h: Remove.
* sysdeps/unix/sysv/linux/sparc/kernel_stat.h: Tell xstat about
the unused fields.
* sysdeps/sparc/sparc64/add_n.s: Moved to ...
* sysdeps/sparc64/add_n.S: ... here. Fix up %g4 and stack usage.
* sysdeps/sparc/sparc64/addmul_1.s: Likewise.
* sysdeps/sparc/sparc64/gmp-mparam.h: Likewise.
* sysdeps/sparc/sparc64/lshift.s: Likewise.
* sysdeps/sparc/sparc64/mul_1.s: Likewise.
* sysdeps/sparc/sparc64/rshift.s: Likewise.
* sysdeps/sparc/sparc64/sub_n.s: Likewise.
* sysdeps/sparc/sparc64/submul_1.s: Likewise.
* sysdeps/sparc64/Implies: New file.
* sysdeps/sparc64/Makefile: Likewise.
* sysdeps/sparc64/bits/endian.h: Likewise.
* sysdeps/sparc64/bsd-_setjmp.S: Likewise.
* sysdeps/sparc64/bsd-setjmp.S: Likewise.
* sysdeps/sparc64/dl-machine.h: Likewise.
* sysdeps/sparc64/elf/Makefile: Likewise.
* sysdeps/sparc64/elf/crtbegin.S: Likewise.
* sysdeps/sparc64/elf/crtbeginS.S: Likewise.
* sysdeps/sparc64/elf/crtend.S: Likewise.
* sysdeps/sparc64/elf/crtendS.S: Likewise.
* sysdeps/sparc64/elf/start.S: Likewise.
* sysdeps/sparc64/fpu_control.h: Likewise.
* sysdeps/unix/sysv/linux/sparc64/Makefile: Likewise.
* sysdeps/unix/sysv/linux/sparc64/__longjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/bits/setjmp.h: Likewise.
* sysdeps/unix/sysv/linux/sparc64/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/sparc64/brk.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/clone.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/fork.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/getcontext.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/init-first.h: Likewise.
* sysdeps/unix/sysv/linux/sparc64/kernel_stat.h: Likewise.
* sysdeps/unix/sysv/linux/sparc64/longjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/pipe.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/profil-counter.h: Likewise.
* sysdeps/unix/sysv/linux/sparc64/setcontext.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/sigjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/sparc64/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/sparc64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/sparc64/ucontext.h: Likewise.
1997-06-28 16:28 H.J. Lu <hjl@gnu.ai.mit.edu>
* configure.in: Add -nostartfiles -nostdlib when check for
--version-script.
1997-06-28 12:03 H.J. Lu <hjl@gnu.ai.mit.edu>
* sysdeps/powerpc/bits/endian.h: New file.
1997-06-28 20:52 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/syscalls.list: Add getresgid and
setresgid.
1997-06-27 20:09 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/sys/quota.h: Add <asm/types.h>.

3
config.guess vendored
View file

@ -423,6 +423,9 @@ EOF
i*:CYGWIN*:*)
echo i386-pc-cygwin32
exit 0 ;;
i*:MINGW*:*)
echo i386-pc-mingw32
exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin32
exit 0 ;;

View file

@ -25,6 +25,7 @@ defines = @DEFINES@
elf = @elf@
have-initfini = @libc_cv_have_initfini@
need-nopic-initfini = @nopic_initfini@
versioning = @VERSIONING@

4
config.sub vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh
# Configuration validation subroutine script, version 1.1.
# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
# Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
@ -701,7 +701,7 @@ case $os in
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -linux-gnu* | -uxpv*)
| -mingw32* | -linux-gnu* | -uxpv*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-linux*)

114
configure vendored
View file

@ -826,6 +826,7 @@ mips*) base_machine=mips machine=mips/$machine ;;
mips64*) base_machine=mips64 machine=mips/mips64/$machine ;;
sparc[6789]) base_machine=sparc machine=sparc/$machine ;;
supersparc) base_machine=sparc machine=sparc/sparc8 ;;
sparc64) base_machine=sparc64 machine=sparc64/$machine ;;
esac
@ -833,7 +834,7 @@ esac
# This can take a while to compute.
sysdep_dir=$srcdir/sysdeps
echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
echo "configure:837: checking sysdep dirs" >&5
echo "configure:838: checking sysdep dirs" >&5
# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
@ -1034,7 +1035,7 @@ echo "$ac_t""sysdeps/generic sysdeps/stub include" 1>&6
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:1038: checking for a BSD compatible install" >&5
echo "configure:1039: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@ -1088,7 +1089,7 @@ if test "$INSTALL" = "${srcdir}/install-sh -c"; then
INSTALL='$(..)./install-sh -c'
fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
echo "configure:1092: checking whether ln -s works" >&5
echo "configure:1093: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1113,7 +1114,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1117: checking for $ac_word" >&5
echo "configure:1118: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1146,7 +1147,7 @@ test -n "$MSGFMT" || MSGFMT=":"
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1150: checking for $ac_word" >&5
echo "configure:1151: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1175,7 +1176,7 @@ 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
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1179: checking for $ac_word" >&5
echo "configure:1180: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1223,7 +1224,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:1227: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
echo "configure:1228: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@ -1233,11 +1234,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
#line 1237 "configure"
#line 1238 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:1241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
if { (eval echo configure:1242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@ -1260,13 +1261,13 @@ else
cross_linkable=yes
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:1264: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "configure:1265: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:1270: checking whether we are using GNU C" >&5
echo "configure:1271: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1275,7 +1276,7 @@ else
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1279: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1280: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@ -1292,7 +1293,7 @@ if test $ac_cv_prog_gcc = yes; then
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1296: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1297: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
if test -z "$CFLAGS"; then
CFLAGS="-g -O2"
fi
@ -1304,7 +1305,7 @@ else
fi
echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:1308: checking build system type" >&5
echo "configure:1309: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@ -1327,7 +1328,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1331: checking for $ac_word" >&5
echo "configure:1332: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1358,7 +1359,7 @@ done
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:1362: checking how to run the C preprocessor" >&5
echo "configure:1363: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@ -1373,13 +1374,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
#line 1377 "configure"
#line 1378 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1383: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1384: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
@ -1390,13 +1391,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
#line 1394 "configure"
#line 1395 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1400: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1401: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
@ -1427,7 +1428,7 @@ fi
# 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
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1431: checking for $ac_word" >&5
echo "configure:1432: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1458,7 +1459,7 @@ fi
# 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
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1462: checking for $ac_word" >&5
echo "configure:1463: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1489,7 +1490,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1493: checking for $ac_word" >&5
echo "configure:1494: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1524,7 +1525,7 @@ fi
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1528: checking for $ac_word" >&5
echo "configure:1529: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1565,7 +1566,7 @@ if test "$BASH" = no; then
# Extract the first word of "ksh", so it can be a program name with args.
set dummy ksh; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1569: checking for $ac_word" >&5
echo "configure:1570: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1607,7 +1608,7 @@ fi
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
echo "configure:1611: checking for signed size_t type" >&5
echo "configure:1612: checking for signed size_t type" >&5
if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1631,12 +1632,12 @@ EOF
fi
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
echo "configure:1635: checking for libc-friendly stddef.h" >&5
echo "configure:1636: checking for libc-friendly stddef.h" >&5
if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1640 "configure"
#line 1641 "configure"
#include "confdefs.h"
#define __need_size_t
#define __need_wchar_t
@ -1651,7 +1652,7 @@ size_t size; wchar_t wchar;
if (&size == NULL || &wchar == NULL) abort ();
; return 0; }
EOF
if { (eval echo configure:1655: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1656: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_friendly_stddef=yes
else
@ -1670,7 +1671,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
fi
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
echo "configure:1674: checking whether we need to use -P to assemble .S files" >&5
echo "configure:1675: checking whether we need to use -P to assemble .S files" >&5
if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1693,7 +1694,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
echo "configure:1697: checking for assembler global-symbol directive" >&5
echo "configure:1698: checking for assembler global-symbol directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1723,7 +1724,7 @@ EOF
fi
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
echo "configure:1727: checking for .set assembler directive" >&5
echo "configure:1728: checking for .set assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1757,7 +1758,7 @@ EOF
fi
echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
echo "configure:1761: checking for .symver assembler directive" >&5
echo "configure:1762: checking for .symver assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1776,7 +1777,7 @@ fi
echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6
echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6
echo "configure:1780: checking for ld --version-script" >&5
echo "configure:1781: checking for ld --version-script" >&5
if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1792,9 +1793,10 @@ VERS {
};
EOF
if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&5 2>&5; then
if { ac_try='${CC-cc} $CFLAGS --shared -o conftest.so conftest.o
if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
-nostartfiles -nostdlib
-Wl,--version-script,conftest.map
1>&5'; { (eval echo configure:1798: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
1>&5'; { (eval echo configure:1800: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
then
libc_cv_ld_version_script_option=yes
else
@ -1824,7 +1826,7 @@ fi
if test $elf = yes; then
echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
echo "configure:1828: checking for .previous assembler directive" >&5
echo "configure:1830: checking for .previous assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1832,7 +1834,7 @@ else
.section foo_section
.previous
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_previous_directive=yes
else
libc_cv_asm_previous_directive=no
@ -1848,7 +1850,7 @@ EOF
else
echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
echo "configure:1852: checking for .popsection assembler directive" >&5
echo "configure:1854: checking for .popsection assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1856,7 +1858,7 @@ else
.pushsection foo_section
.popsection
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1860: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1862: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_popsection_directive=yes
else
libc_cv_asm_popsection_directive=no
@ -1876,12 +1878,12 @@ fi
if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
echo "configure:1880: checking for .init and .fini sections" >&5
echo "configure:1882: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1885 "configure"
#line 1887 "configure"
#include "confdefs.h"
int main() {
@ -1890,7 +1892,7 @@ asm (".section .init");
asm (".text");
; return 0; }
EOF
if { (eval echo configure:1894: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_have_initfini=yes
else
@ -1915,19 +1917,19 @@ if test $elf = yes; then
libc_cv_asm_underscores=no
else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:1919: checking for _ prefix on C symbol names" >&5
echo "configure:1921: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1924 "configure"
#line 1926 "configure"
#include "confdefs.h"
asm ("_glibc_foobar:");
int main() {
glibc_foobar ();
; return 0; }
EOF
if { (eval echo configure:1931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
if { (eval echo configure:1933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
libc_cv_asm_underscores=yes
else
@ -1954,7 +1956,7 @@ if test $elf = yes; then
libc_cv_asm_weakext_directive=no
else
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
echo "configure:1958: checking for assembler .weak directive" >&5
echo "configure:1960: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1977,7 +1979,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
echo "configure:1981: checking for assembler .weakext directive" >&5
echo "configure:1983: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2014,7 +2016,7 @@ EOF
fi
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
echo "configure:2018: checking for ld --no-whole-archive" >&5
echo "configure:2020: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2025,7 +2027,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c 1>&5'; { (eval echo configure:2029: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c 1>&5'; { (eval echo configure:2031: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
@ -2036,7 +2038,7 @@ fi
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
echo "configure:2040: checking for gcc -fno-exceptions" >&5
echo "configure:2042: checking for gcc -fno-exceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2047,7 +2049,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions
-o conftest conftest.c 1>&5'; { (eval echo configure:2051: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c 1>&5'; { (eval echo configure:2053: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_no_exceptions=yes
else
libc_cv_gcc_no_exceptions=no
@ -2099,7 +2101,7 @@ if test "$uname" = "sysdeps/generic"; then
fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
echo "configure:2103: checking OS release for uname" >&5
echo "configure:2105: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2121,7 +2123,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
echo "configure:2125: checking OS version for uname" >&5
echo "configure:2127: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2143,7 +2145,7 @@ else
fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
echo "configure:2147: checking stdio selection" >&5
echo "configure:2149: checking stdio selection" >&5
case $stdio in
libio) cat >> confdefs.h <<\EOF
@ -2197,6 +2199,7 @@ fi
if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
config_makefile=
else
@ -2385,6 +2388,7 @@ s%@profile@%$profile%g
s%@omitfp@%$omitfp%g
s%@bounded@%$bounded%g
s%@static_nss@%$static_nss%g
s%@nopic_initfini@%$nopic_initfini%g
s%@DEFINES@%$DEFINES%g
s%@VERSION@%$VERSION%g

View file

@ -159,6 +159,7 @@ mips*) base_machine=mips machine=mips/$machine ;;
mips64*) base_machine=mips64 machine=mips/mips64/$machine ;;
sparc[6789]) base_machine=sparc machine=sparc/$machine ;;
supersparc) base_machine=sparc machine=sparc/sparc8 ;;
sparc64) base_machine=sparc64 machine=sparc64/$machine ;;
esac
changequote([,])dnl
AC_SUBST(base_machine)
@ -527,7 +528,8 @@ VERS {
};
EOF
if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&AC_FD_CC 2>&AC_FD_CC; then
if AC_TRY_COMMAND([${CC-cc} $CFLAGS --shared -o conftest.so conftest.o
if AC_TRY_COMMAND([${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
-nostartfiles -nostdlib
-Wl,--version-script,conftest.map
1>&AC_FD_CC]);
then
@ -822,6 +824,7 @@ AC_SUBST(profile)
AC_SUBST(omitfp)
AC_SUBST(bounded)
AC_SUBST(static_nss)
AC_SUBST(nopic_initfini)
AC_SUBST(DEFINES)

View file

@ -52,19 +52,42 @@ CPPFLAGS += -DHAVE_INITFINI
# "functions" _init and _fini to run the .init and .fini sections.
crtstuff = crti crtn
# If we need separate startup code, require separate code.
ifeq ($(need-nopic-initfini),yes)
crtstuff += crtiS crtnS
endif
install-lib += $(crtstuff:=.o)
extra-objs += $(crtstuff:=.o)
generated += $(crtstuff:=.S) initfini.s align.h end.h
generated += $(crtstuff:=.S) initfini.s initfiniS.s align.h end.h
omit-deps += $(crtstuff)
# Special rules for the building of crti.o and crtn.o
$(objpfx)crt%.o: $(objpfx)crt%.S $(objpfx)defs.h
$(compile.S) -fPIC -g0 -o $@
$(compile.S) -g0 -o $@
$(objpfx)initfini.s: initfini.c
$(compile.c) -g0 -S -finhibit-size-directive \
$(no-exceptions) -o $@
$(objpfx)initfiniS.s: initfini.c
$(compile.c) -g0 -S -fPIC -finhibit-size-directive \
$(no-exceptions) -o $@
ifneq ($(need-nopic-initfini),yes)
# We only have one kind of startup code files. Static binaries and
# shared libraries are build using the PIC version.
$(objpfx)crti.S: $(objpfx)initfiniS.s
sed -n -e '1,/@HEADER_ENDS/p' \
-e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \
-e '/@TRAILER_BEGINS/,$$p' $< > $@
$(objpfx)crtn.S: $(objpfx)initfiniS.s
sed -n -e '1,/@HEADER_ENDS/p' \
-e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \
-e '/@TRAILER_BEGINS/,$$p' $< > $@
else
# We have to build two versions, one with one without PIC code.
$(objpfx)crti.S: $(objpfx)initfini.s
sed -n -e '1,/@HEADER_ENDS/p' \
-e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \
@ -75,6 +98,17 @@ $(objpfx)crtn.S: $(objpfx)initfini.s
-e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \
-e '/@TRAILER_BEGINS/,$$p' $< > $@
$(objpfx)crtiS.S: $(objpfx)initfiniS.s
sed -n -e '1,/@HEADER_ENDS/p' \
-e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \
-e '/@TRAILER_BEGINS/,$$p' $< > $@
$(objpfx)crtnS.S: $(objpfx)initfiniS.s
sed -n -e '1,/@HEADER_ENDS/p' \
-e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \
-e '/@TRAILER_BEGINS/,$$p' $< > $@
endif
$(objpfx)defs.h: $(objpfx)initfini.s
sed -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \
awk -f defs.awk > $@

View file

@ -16,6 +16,8 @@ testprogram=$2
tmp=${TMPDIR:-/tmp}
tmpdir=$tmp/ftwtest.d
[ -f ${objpfx}elf/ld.so ] && ldso=${objpfx}elf/ld.so
trap 'chmod -R a+x $tmpdir; rm -fr $tmpdir $testout' 1 2 3 15
if test -d $tmpdir; then
@ -40,7 +42,7 @@ chmod a-x,a+r $tmpdir/bar
testout=${TMPDIR:-/tmp}/ftwtest.out
LD_LIBRARY_PATH=$objpfx ${objpfx}elf/ld.so $testprogram $tmpdir |
LD_LIBRARY_PATH=$objpfx $ldso $testprogram $tmpdir |
sort > $testout
cat <<EOF | cmp $testout - || exit 1
@ -59,7 +61,7 @@ base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
EOF
rm $testout
LD_LIBRARY_PATH=$objpfx ${objpfx}elf/ld.so $testprogram --depth $tmpdir |
LD_LIBRARY_PATH=$objpfx $ldso $testprogram --depth $tmpdir |
sort > $testout
cat <<EOF | cmp $testout - || exit 1
@ -78,7 +80,7 @@ base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
EOF
rm $testout
LD_LIBRARY_PATH=$objpfx ${objpfx}elf/ld.so $testprogram --phys $tmpdir |
LD_LIBRARY_PATH=$objpfx $ldso $testprogram --phys $tmpdir |
sort > $testout
cat <<EOF | cmp $testout - || exit 1

View file

@ -1,5 +1,5 @@
%% TeX macros to handle Texinfo files.
%% \$Id: texinfo.tex,v 2.204 1997/06/19 18:21:08 drepper Exp $
%% $Id: texinfo.tex,v 2.205 1997/06/28 10:26:38 drepper Exp $
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
% 94, 95, 96, 97 Free Software Foundation, Inc.
@ -36,7 +36,7 @@
% This automatically updates the version number based on RCS.
\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
\deftexinfoversion\$Revision: 2.204 $
\deftexinfoversion$Revision: 2.205 $
\message{Loading texinfo package [Version \texinfoversion]:}
% If in a .fmt file, print the version number
@ -4559,9 +4559,51 @@ width0pt\relax} \fi
%
\def\finalout{\overfullrule=0pt}
% @image. We use the macros from epsf.tex to support this.
% If epsf.tex is not installed and @image is used, we complain.
%
% Check for and read epsf.tex up front. If we read it only at @image
% time, we might be inside a group, and then its definitions would get
% undone and the next image would fail.
\openin 1 = xepsf.tex
\ifeof 1 \else
\closein 1
\def\epsfannounce{\toks0 = }% do not bother showing banner
\input epsf.tex
\fi
%
\newif\ifwarnednoepsf
\newhelp\noepsfhelp{epsf.tex must be installed for images to
work. It is also included in the Texinfo distribution, or you can get
it from ftp://ftp.tug.org/tex/epsf.tex.}
%
% Only complain once about lack of epsf.tex.
\def\image#1{%
\ifx\epsfbox\undefined
\ifwarnednoepsf \else
\errhelp = \noepsfhelp
\errmessage{epsf.tex not found, images will be ignored}%
\global\warnednoepsftrue
\fi
\else
\imagexxx #1,,,\finish
\fi
}
%
% Arguments to @image:
% #1 is (mandatory) image filename; we tack on .eps extension.
% #2 is (optional) width, #3 is (optional) height.
% #4 is just the usual extra ignored arg for parsing this stuff.
\def\imagexxx#1,#2,#3,#4\finish{%
% \epsfbox itself resets \epsf?size at each figure.
\setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
\setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
\epsfbox{#1.eps}%
}
% End of control word definitions.
\message{and turning on texinfo input format.}
\def\openindices{%

View file

@ -87,13 +87,13 @@ tests = test-float test-double $(test-longdouble-$(long-double-fcts)) \
CFLAGS-test-float.c = -fno-inline
CFLAGS-test-double.c = -fno-inline
CFLAGS-test-ldouble.c = -fno-inline
LDLIBS-test-ifloat = libm
LDLIBS-test-idouble = libm
LDLIBS-test-ildoubl = libm
LDLIBS-test-float = libm
LDLIBS-test-double = libm
LDLIBS-test-ldouble = libm
LDLIBS-test-matherr = libm
LDLIBS-test-ifloat = math/libm
LDLIBS-test-idouble = math/libm
LDLIBS-test-ildoubl = math/libm
LDLIBS-test-float = math/libm
LDLIBS-test-double = math/libm
LDLIBS-test-ldouble = math/libm
LDLIBS-test-matherr = math/libm
distribute += libm-test.c
@ -116,6 +116,8 @@ CPPFLAGS-s_lib_version.c := -D_POSIX_MODE
# only the fdlibm code.
CPPFLAGS += -D__NO_MATH_INLINES
# Using omit-long-double-fcts is only a temporary hack.
ifneq ($(omit-long-double-fcts),yes)
ifneq ($(long-double-fcts),yes)
# The `double' and `long double' types are the same on this machine.
# We won't compile the `long double' code at all. Tell the `double' code
@ -124,6 +126,7 @@ ifneq ($(long-double-fcts),yes)
# `double' instead of `long double'.
CPPFLAGS += -DNO_LONG_DOUBLE -D_Mlong_double_=double
endif
endif
# The fdlibm code generates a lot of these warnings but is otherwise clean.
override CFLAGS += -Wno-uninitialized -Wno-write-strings

View file

@ -251,7 +251,7 @@ static void
test_single_exception (const char *test_name,
short int exception,
short int exc_flag,
fexcept_t fe_flag,
int fe_flag,
const char *flag_name)
{
#ifndef TEST_INLINE

View file

@ -12,6 +12,7 @@
i.86-.*-.* libm=6
m68k-.*-.* libm=6
sparc-.*-.* libm=6
sparc64-.*-.* libm=6
alpha-.*-linux.* libm=6.1
alpha-.*-.* libm=6
powerpc-.*-.* libm=6
@ -33,6 +34,7 @@ alpha-.*-linux.* libc=6.1
# The dynamic loader also requires different names.
i.86-.*-linux.* ld=ld-linux.so.2
sparc-.*-linux.* ld=ld-linux.so.2
sparc64-.*-linux.* ld=ld-linux.so.2
alpha-.*-linux.* ld=ld-linux.so.2
# We use the ELF ABI standard name for the default.
.*-.*-.* ld=ld.so.1

View file

@ -297,12 +297,12 @@ extern int sigstack __P ((__const struct sigstack *__ss,
struct sigstack *__oss));
/* Alternate interface. */
struct sigaltstack
typedef struct sigaltstack
{
__ptr_t ss_sp;
size_t ss_size;
int ss_flags;
};
} stack_t;
extern int sigaltstack __P ((__const struct sigaltstack *__ss,
struct sigaltstack *__oss));

View file

@ -33,7 +33,7 @@
# define UMUL_TIME 1
#endif
#ifndef UDIV_TIME
# define UDIV_TIME 1
# define UDIV_TIME 3
#endif
/* Control memory layout. */
@ -68,14 +68,12 @@ struct base_table_t
/* To reduce the memory needed we include some fields of the tables
only conditionally. */
#if BITS_PER_MP_LIMB == 32
# if UDIV_TIME > 2 * UMUL_TIME
# define SEL1(X) X,
# define SEL2(X) ,X
# else
# define SEL1(X)
# define SEL2(X)
# endif
#if UDIV_TIME > 2 * UMUL_TIME
# define SEL1(X) X,
# define SEL2(X) ,X
#else
# define SEL1(X)
# define SEL2(X)
#endif
@ -83,41 +81,41 @@ struct base_table_t
static const struct base_table_t base_table[] =
{
#if BITS_PER_MP_LIMB == 64
/* 2 */ {0ul, 1, 1},
/* 3 */ {0xaaaaaaaaaaaaaaabul, 0, 1},
/* 4 */ {0ul, 1, 2},
/* 5 */ {0xcccccccccccccccdul, 0, 2},
/* 6 */ {0xaaaaaaaaaaaaaaabul, 0, 2},
/* 7 */ {0x2492492492492493ul, 1, 3},
/* 8 */ {0ul, 1, 3},
/* 9 */ {0xe38e38e38e38e38ful, 0, 3},
/* 10 */ {0xcccccccccccccccdul, 0, 3},
/* 11 */ {0x2e8ba2e8ba2e8ba3ul, 0, 1},
/* 12 */ {0xaaaaaaaaaaaaaaabul, 0, 3},
/* 13 */ {0x4ec4ec4ec4ec4ec5ul, 0, 2},
/* 14 */ {0x2492492492492493ul, 1, 4},
/* 15 */ {0x8888888888888889ul, 0, 3},
/* 16 */ {0ul, 1, 4},
/* 17 */ {0xf0f0f0f0f0f0f0f1ul, 0, 4},
/* 18 */ {0xe38e38e38e38e38ful, 0, 4},
/* 19 */ {0xd79435e50d79435ful, 0, 4},
/* 20 */ {0xcccccccccccccccdul, 0, 4},
/* 21 */ {0x8618618618618619ul, 1, 5},
/* 22 */ {0x2e8ba2e8ba2e8ba3ul, 0, 2},
/* 23 */ {0x642c8590b21642c9ul, 1, 5},
/* 24 */ {0xaaaaaaaaaaaaaaabul, 0, 4},
/* 25 */ {0x47ae147ae147ae15ul, 1, 5},
/* 26 */ {0x4ec4ec4ec4ec4ec5ul, 0, 3},
/* 27 */ {0x97b425ed097b425ful, 0, 4},
/* 28 */ {0x2492492492492493ul, 1, 5},
/* 29 */ {0x1a7b9611a7b9611bul, 1, 5},
/* 30 */ {0x8888888888888889ul, 0, 4},
/* 31 */ {0x0842108421084211ul, 1, 5},
/* 32 */ {0ul, 1, 5},
/* 33 */ {0x0f83e0f83e0f83e1ul, 0, 1},
/* 34 */ {0xf0f0f0f0f0f0f0f1ul, 0, 5},
/* 35 */ {0xea0ea0ea0ea0ea0ful, 0, 5},
/* 36 */ {0xe38e38e38e38e38ful, 0, 5}
/* 2 */ {SEL1(0ul) 1, 1},
/* 3 */ {SEL1(0xaaaaaaaaaaaaaaabul) 0, 1},
/* 4 */ {SEL1(0ul) 1, 2},
/* 5 */ {SEL1(0xcccccccccccccccdul) 0, 2},
/* 6 */ {SEL1(0xaaaaaaaaaaaaaaabul) 0, 2},
/* 7 */ {SEL1(0x2492492492492493ul) 1, 3},
/* 8 */ {SEL1(0ul) 1, 3},
/* 9 */ {SEL1(0xe38e38e38e38e38ful) 0, 3},
/* 10 */ {SEL1(0xcccccccccccccccdul) 0, 3},
/* 11 */ {SEL1(0x2e8ba2e8ba2e8ba3ul) 0, 1},
/* 12 */ {SEL1(0xaaaaaaaaaaaaaaabul) 0, 3},
/* 13 */ {SEL1(0x4ec4ec4ec4ec4ec5ul) 0, 2},
/* 14 */ {SEL1(0x2492492492492493ul) 1, 4},
/* 15 */ {SEL1(0x8888888888888889ul) 0, 3},
/* 16 */ {SEL1(0ul) 1, 4},
/* 17 */ {SEL1(0xf0f0f0f0f0f0f0f1ul) 0, 4},
/* 18 */ {SEL1(0xe38e38e38e38e38ful) 0, 4},
/* 19 */ {SEL1(0xd79435e50d79435ful) 0, 4},
/* 20 */ {SEL1(0xcccccccccccccccdul) 0, 4},
/* 21 */ {SEL1(0x8618618618618619ul) 1, 5},
/* 22 */ {SEL1(0x2e8ba2e8ba2e8ba3ul) 0, 2},
/* 23 */ {SEL1(0x642c8590b21642c9ul) 1, 5},
/* 24 */ {SEL1(0xaaaaaaaaaaaaaaabul) 0, 4},
/* 25 */ {SEL1(0x47ae147ae147ae15ul) 1, 5},
/* 26 */ {SEL1(0x4ec4ec4ec4ec4ec5ul) 0, 3},
/* 27 */ {SEL1(0x97b425ed097b425ful) 0, 4},
/* 28 */ {SEL1(0x2492492492492493ul) 1, 5},
/* 29 */ {SEL1(0x1a7b9611a7b9611bul) 1, 5},
/* 30 */ {SEL1(0x8888888888888889ul) 0, 4},
/* 31 */ {SEL1(0x0842108421084211ul) 1, 5},
/* 32 */ {SEL1(0ul) 1, 5},
/* 33 */ {SEL1(0x0f83e0f83e0f83e1ul) 0, 1},
/* 34 */ {SEL1(0xf0f0f0f0f0f0f0f1ul) 0, 5},
/* 35 */ {SEL1(0xea0ea0ea0ea0ea0ful) 0, 5},
/* 36 */ {SEL1(0xe38e38e38e38e38ful) 0, 5}
#endif
#if BITS_PER_MP_LIMB == 32
/* 2 */ {SEL1(0ul) 1, 1, {0, 31, 0x80000000ul SEL2(0xfffffffful)}},

View file

@ -177,6 +177,11 @@ extern AUTH *authdes_create __P ((char *__servername, u_int __window,
#define AUTH_DES 3 /* des style (encrypted timestamps) */
#define AUTH_KERB 4 /* kerberos style */
/*
* XDR an opaque authentication struct.
*/
extern bool_t xdr_opaque_auth __P ((XDR *__xdrs, struct opaque_auth *__ap));
__END_DECLS
#endif /* rpc/auth.h */

View file

@ -25,7 +25,7 @@ void
feraiseexcept (int excepts)
{
/* Raise exceptions represented by EXPECTS. But we must raise only
one signal at a time. It is important the if the overflow/underflow
one signal at a time. It is important that if the overflow/underflow
exception and the inexact exception are given at the same time,
the overflow/underflow exception follows the inexact exception. */
@ -91,8 +91,21 @@ feraiseexcept (int excepts)
/* Last: inexact. */
if ((FE_INEXACT & excepts) != 0)
{
long double d;
__asm__ ("fmul %%st, %%st(0); fwait" : "=t" (d) : "0" (LDBL_MAX));
(void) &d;
/* There is no way to raise only the overflow flag. Do it the
hard way. */
fenv_t temp;
/* Bah, we have to clear selected exceptions. Since there is no
`fldsw' instruction we have to do it the hard way. */
__asm__ ("fnstenv %0" : "=m" (*&temp));
/* Set the relevant bits. */
temp.status_word |= FE_INEXACT;
/* Put the new data in effect. */
__asm__ ("fldenv %0" : : "m" (*&temp));
/* And raise the exception. */
__asm__ ("fwait");
}
}

View file

@ -223,7 +223,7 @@ __select (nfds, readfds, writefds, exceptfds, timeout)
/* We got a message. Decode it. */
#define IO_SELECT_REPLY_MSGID (21012 + 100) /* XXX */
const mach_msg_type_t inttype =
{ MACH_MSG_TYPE_INTEGER_T, sizeof (MACH_MSG_SIZE_INTEGER_T),
{ MACH_MSG_TYPE_INTEGER_T, sizeof (MACH_MSG_TYPE_INTEGER_T),
1, 1, 0, 0 };
if (msg.head.msgh_id == IO_SELECT_REPLY_MSGID &&
msg.head.msgh_size >= sizeof msg.error &&

View file

@ -0,0 +1,3 @@
/* PowerPC is big-endian. */
#define __BYTE_ORDER __BIG_ENDIAN

View file

@ -20,24 +20,21 @@
#include <sysdep.h>
ENTRY (_setjmp)
#ifdef PIC
1:
jmpl 2f,%o1
nop
2:
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)),%l7
or %l7,%lo(_GLOBAL_OFFSET_TABLE_-(1b-.)),%l7
add %l7,%o1,%l7
sethi %hi(C_SYMBOL_NAME (__sigsetjmp)),%g1
or %g1,%lo(C_SYMBOL_NAME (__sigsetjmp)),%g1
ld [%l7+%g1],%g1
ld [%g1],%g1
jmpl %g1,%g0
mov %g0,%o1 /* Pass second argument of zero */
#else
sethi %hi(C_SYMBOL_NAME (__sigsetjmp)), %g1
or %lo(C_SYMBOL_NAME (__sigsetjmp)), %g1, %g1
jmp %g1
mov %g0, %o1 /* Pass second argument of zero. */
#ifdef PIC
save %sp, -64, %sp
1: call 2f
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %g1
2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %g1
add %g1, %o7, %g1
sethi %hi(C_SYMBOL_NAME(__sigsetjmp)), %g2
restore
or %g2, %lo(C_SYMBOL_NAME(__sigsetjmp)), %g2
ld [%g1+%g2], %g1
#else
sethi %hi(C_SYMBOL_NAME(__sigsetjmp)), %g1
or %g1, %lo(C_SYMBOL_NAME(__sigsetjmp)), %g1
#endif
jmp %g1
mov %g0, %o1 /* Pass second argument of zero. */

View file

@ -20,23 +20,21 @@
#include <sysdep.h>
ENTRY (setjmp)
#ifdef PIC
1:
jmpl 2f,%o1
nop
2:
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)),%l7
or %l7,%lo(_GLOBAL_OFFSET_TABLE_-(1b-.)),%l7
add %l7,%o1,%l7
sethi %hi(C_SYMBOL_NAME (__sigsetjmp)),%g1
or %g1,%lo(C_SYMBOL_NAME (__sigsetjmp)),%g1
ld [%l7+%g1],%g1
ld [%g1],%g1
jmpl %g1,%g0
mov 1,%o1
save %sp, -64, %sp
1: call 2f
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %g1
2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %g1
add %g1, %o7, %g1
sethi %hi(C_SYMBOL_NAME(__sigsetjmp)), %g2
restore
or %g2, %lo(C_SYMBOL_NAME(__sigsetjmp)), %g2
ld [%g1+%g2], %g1
#else
sethi %hi(C_SYMBOL_NAME (__sigsetjmp)), %g1
or %lo(C_SYMBOL_NAME (__sigsetjmp)), %g1, %g1
jmp %g1
mov 1, %o1 /* Pass second argument of one. */
sethi %hi(C_SYMBOL_NAME(__sigsetjmp)), %g1
or %g1, %lo(C_SYMBOL_NAME(__sigsetjmp)), %g1
#endif
jmp %g1
mov 1, %o1 /* Pass second argument of one. */

View file

@ -38,15 +38,7 @@
#include "DEFS.h"
#ifdef __linux__
#include <asm/traps.h>
#else
#ifdef __svr4__
#include <sys/trap.h>
#else
#include <machine/trap.h>
#endif
#endif
FUNC(.rem)
! compute sign of result; if neither is negative, no problem
@ -189,14 +181,14 @@ Ldivloop:
subcc %o3,%o5,%o3
b 9f
add %o2, (7*2+1), %o2
L.4.23:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (7*2-1), %o2
L.3.19:
! remainder is negative
addcc %o3,%o5,%o3
@ -207,15 +199,15 @@ L.3.19:
subcc %o3,%o5,%o3
b 9f
add %o2, (5*2+1), %o2
L.4.21:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (5*2-1), %o2
L.2.17:
! remainder is negative
addcc %o3,%o5,%o3
@ -231,14 +223,14 @@ L.2.17:
subcc %o3,%o5,%o3
b 9f
add %o2, (3*2+1), %o2
L.4.19:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (3*2-1), %o2
L.3.17:
! remainder is negative
addcc %o3,%o5,%o3
@ -249,16 +241,16 @@ L.3.17:
subcc %o3,%o5,%o3
b 9f
add %o2, (1*2+1), %o2
L.4.17:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (1*2-1), %o2
L.1.16:
! remainder is negative
addcc %o3,%o5,%o3
@ -279,14 +271,14 @@ L.1.16:
subcc %o3,%o5,%o3
b 9f
add %o2, (-1*2+1), %o2
L.4.15:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-1*2-1), %o2
L.3.15:
! remainder is negative
addcc %o3,%o5,%o3
@ -297,15 +289,15 @@ L.3.15:
subcc %o3,%o5,%o3
b 9f
add %o2, (-3*2+1), %o2
L.4.13:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-3*2-1), %o2
L.2.15:
! remainder is negative
addcc %o3,%o5,%o3
@ -321,14 +313,14 @@ L.2.15:
subcc %o3,%o5,%o3
b 9f
add %o2, (-5*2+1), %o2
L.4.11:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-5*2-1), %o2
L.3.13:
! remainder is negative
addcc %o3,%o5,%o3
@ -339,16 +331,16 @@ L.3.13:
subcc %o3,%o5,%o3
b 9f
add %o2, (-7*2+1), %o2
L.4.9:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-7*2-1), %o2
9:
Lend_regular_divide:
subcc %o4, 1, %o4

View file

@ -38,15 +38,7 @@
#include "DEFS.h"
#ifdef __linux__
#include <asm/traps.h>
#else
#ifdef __svr4__
#include <sys/trap.h>
#else
#include <machine/trap.h>
#endif
#endif
FUNC(.div)
! compute sign of result; if neither is negative, no problem
@ -189,14 +181,14 @@ Ldivloop:
subcc %o3,%o5,%o3
b 9f
add %o2, (7*2+1), %o2
L.4.23:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (7*2-1), %o2
L.3.19:
! remainder is negative
addcc %o3,%o5,%o3
@ -207,15 +199,15 @@ L.3.19:
subcc %o3,%o5,%o3
b 9f
add %o2, (5*2+1), %o2
L.4.21:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (5*2-1), %o2
L.2.17:
! remainder is negative
addcc %o3,%o5,%o3
@ -231,14 +223,14 @@ L.2.17:
subcc %o3,%o5,%o3
b 9f
add %o2, (3*2+1), %o2
L.4.19:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (3*2-1), %o2
L.3.17:
! remainder is negative
addcc %o3,%o5,%o3
@ -249,16 +241,16 @@ L.3.17:
subcc %o3,%o5,%o3
b 9f
add %o2, (1*2+1), %o2
L.4.17:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (1*2-1), %o2
L.1.16:
! remainder is negative
addcc %o3,%o5,%o3
@ -279,14 +271,14 @@ L.1.16:
subcc %o3,%o5,%o3
b 9f
add %o2, (-1*2+1), %o2
L.4.15:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-1*2-1), %o2
L.3.15:
! remainder is negative
addcc %o3,%o5,%o3
@ -297,15 +289,15 @@ L.3.15:
subcc %o3,%o5,%o3
b 9f
add %o2, (-3*2+1), %o2
L.4.13:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-3*2-1), %o2
L.2.15:
! remainder is negative
addcc %o3,%o5,%o3
@ -321,14 +313,14 @@ L.2.15:
subcc %o3,%o5,%o3
b 9f
add %o2, (-5*2+1), %o2
L.4.11:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-5*2-1), %o2
L.3.13:
! remainder is negative
addcc %o3,%o5,%o3
@ -339,16 +331,16 @@ L.3.13:
subcc %o3,%o5,%o3
b 9f
add %o2, (-7*2+1), %o2
L.4.9:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-7*2-1), %o2
9:
Lend_regular_divide:
subcc %o4, 1, %o4

View file

@ -17,6 +17,7 @@
Boston, MA 02111-1307, USA. */
#include <sysdep.h>
#include <sys/trap.h>
#define _ASM 1
#include <bits/setjmp.h>

View file

@ -1,58 +0,0 @@
! SPARC v9 __mpn_add_n -- Add two limb vectors of the same length > 0 and store
! sum in a third limb vector.
! Copyright (C) 1995, 1996 Free Software Foundation, Inc.
! This file is part of the GNU MP Library.
! The GNU MP Library is free software; you can redistribute it and/or modify
! it under the terms of the GNU Library General Public License as published by
! the Free Software Foundation; either version 2 of the License, or (at your
! option) any later version.
! The GNU MP Library is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
! License for more details.
! You should have received a copy of the GNU Library General Public License
! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! MA 02111-1307, USA.
! INPUT PARAMETERS
! res_ptr %o0
! s1_ptr %o1
! s2_ptr %o2
! size %o3
.section ".text"
.align 4
.global __mpn_add_n
.type __mpn_add_n,#function
.proc 04
__mpn_add_n:
sub %g0,%o3,%g3
sllx %o3,3,%g1
add %o1,%g1,%o1 ! make s1_ptr point at end
add %o2,%g1,%o2 ! make s2_ptr point at end
add %o0,%g1,%o0 ! make res_ptr point at end
mov 0,%o4 ! clear carry variable
sllx %g3,3,%o5 ! compute initial address index
.Loop: ldx [%o2+%o5],%g1 ! load s2 limb
add %g3,1,%g3 ! increment loop count
ldx [%o1+%o5],%g2 ! load s1 limb
addcc %g1,%o4,%g1 ! add s2 limb and carry variable
movcc %xcc,0,%o4 ! if carry-out, o4 was 1; clear it
addcc %g1,%g2,%g1 ! add s1 limb to sum
stx %g1,[%o0+%o5] ! store result
add %o5,8,%o5 ! increment address index
brnz,pt %g3,.Loop
movcs %xcc,1,%o4 ! if s1 add gave carry, record it
retl
mov %o4,%o0
.LLfe1:
.size __mpn_add_n,.LLfe1-__mpn_add_n

View file

@ -1,96 +0,0 @@
! SPARC v9 __mpn_lshift --
! Copyright (C) 1996 Free Software Foundation, Inc.
! This file is part of the GNU MP Library.
! The GNU MP Library is free software; you can redistribute it and/or modify
! it under the terms of the GNU Library General Public License as published by
! the Free Software Foundation; either version 2 of the License, or (at your
! option) any later version.
! The GNU MP Library is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
! License for more details.
! You should have received a copy of the GNU Library General Public License
! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! MA 02111-1307, USA.
! INPUT PARAMETERS
! res_ptr %o0
! src_ptr %o1
! size %o2
! cnt %o3
.section ".text"
.align 4
.global __mpn_lshift
.type __mpn_lshift,#function
.proc 04
__mpn_lshift:
sllx %o2,3,%g1
add %o1,%g1,%o1 ! make %o1 point at end of src
ldx [%o1-8],%g2 ! load first limb
sub %g0,%o3,%o5 ! negate shift count
add %o0,%g1,%o0 ! make %o0 point at end of res
add %o2,-1,%o2
and %o2,4-1,%g4 ! number of limbs in first loop
srlx %g2,%o5,%g1 ! compute function result
brz,pn %g4,.L0 ! if multiple of 4 limbs, skip first loop
stx %g1,[%sp+80]
sub %o2,%g4,%o2 ! adjust count for main loop
.Loop0: ldx [%o1-16],%g3
add %o0,-8,%o0
add %o1,-8,%o1
add %g4,-1,%g4
sllx %g2,%o3,%o4
srlx %g3,%o5,%g1
mov %g3,%g2
or %o4,%g1,%o4
brnz,pt %g4,.Loop0
stx %o4,[%o0+0]
.L0: brz,pn %o2,.Lend
nop
.Loop: ldx [%o1-16],%g3
add %o0,-32,%o0
add %o2,-4,%o2
sllx %g2,%o3,%o4
srlx %g3,%o5,%g1
ldx [%o1-24],%g2
sllx %g3,%o3,%g4
or %o4,%g1,%o4
stx %o4,[%o0+24]
srlx %g2,%o5,%g1
ldx [%o1-32],%g3
sllx %g2,%o3,%o4
or %g4,%g1,%g4
stx %g4,[%o0+16]
srlx %g3,%o5,%g1
ldx [%o1-40],%g2
sllx %g3,%o3,%g4
or %o4,%g1,%o4
stx %o4,[%o0+8]
srlx %g2,%o5,%g1
add %o1,-32,%o1
or %g4,%g1,%g4
brnz,pt %o2,.Loop
stx %g4,[%o0+0]
.Lend: sllx %g2,%o3,%g2
stx %g2,[%o0-8]
retl
ldx [%sp+80],%o0
.LLfe1:
.size __mpn_lshift,.LLfe1-__mpn_lshift

View file

@ -1,93 +0,0 @@
! SPARC v9 __mpn_rshift --
! Copyright (C) 1996 Free Software Foundation, Inc.
! This file is part of the GNU MP Library.
! The GNU MP Library is free software; you can redistribute it and/or modify
! it under the terms of the GNU Library General Public License as published by
! the Free Software Foundation; either version 2 of the License, or (at your
! option) any later version.
! The GNU MP Library is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
! License for more details.
! You should have received a copy of the GNU Library General Public License
! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! MA 02111-1307, USA.
! INPUT PARAMETERS
! res_ptr %o0
! src_ptr %o1
! size %o2
! cnt %o3
.section ".text"
.align 4
.global __mpn_rshift
.type __mpn_rshift,#function
.proc 04
__mpn_rshift:
ldx [%o1],%g2 ! load first limb
sub %g0,%o3,%o5 ! negate shift count
add %o2,-1,%o2
and %o2,4-1,%g4 ! number of limbs in first loop
sllx %g2,%o5,%g1 ! compute function result
brz,pn %g4,.L0 ! if multiple of 4 limbs, skip first loop
stx %g1,[%sp+80]
sub %o2,%g4,%o2 ! adjust count for main loop
.Loop0: ldx [%o1+8],%g3
add %o0,8,%o0
add %o1,8,%o1
add %g4,-1,%g4
srlx %g2,%o3,%o4
sllx %g3,%o5,%g1
mov %g3,%g2
or %o4,%g1,%o4
brnz,pt %g4,.Loop0
stx %o4,[%o0-8]
.L0: brz,pn %o2,.Lend
nop
.Loop: ldx [%o1+8],%g3
add %o0,32,%o0
add %o2,-4,%o2
srlx %g2,%o3,%o4
sllx %g3,%o5,%g1
ldx [%o1+16],%g2
srlx %g3,%o3,%g4
or %o4,%g1,%o4
stx %o4,[%o0-32]
sllx %g2,%o5,%g1
ldx [%o1+24],%g3
srlx %g2,%o3,%o4
or %g4,%g1,%g4
stx %g4,[%o0-24]
sllx %g3,%o5,%g1
ldx [%o1+32],%g2
srlx %g3,%o3,%g4
or %o4,%g1,%o4
stx %o4,[%o0-16]
sllx %g2,%o5,%g1
add %o1,32,%o1
or %g4,%g1,%g4
brnz %o2,.Loop
stx %g4,[%o0-8]
.Lend: srlx %g2,%o3,%g2
stx %g2,[%o0-0]
retl
ldx [%sp+80],%o0
.LLfe1:
.size __mpn_rshift,.LLfe1-__mpn_rshift

View file

@ -1,58 +0,0 @@
! SPARC v9 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
! store difference in a third limb vector.
! Copyright (C) 1995, 1996 Free Software Foundation, Inc.
! This file is part of the GNU MP Library.
! The GNU MP Library is free software; you can redistribute it and/or modify
! it under the terms of the GNU Library General Public License as published by
! the Free Software Foundation; either version 2 of the License, or (at your
! option) any later version.
! The GNU MP Library is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
! License for more details.
! You should have received a copy of the GNU Library General Public License
! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! MA 02111-1307, USA.
! INPUT PARAMETERS
! res_ptr %o0
! s1_ptr %o1
! s2_ptr %o2
! size %o3
.section ".text"
.align 4
.global __mpn_sub_n
.type __mpn_sub_n,#function
.proc 04
__mpn_sub_n:
sub %g0,%o3,%g3
sllx %o3,3,%g1
add %o1,%g1,%o1 ! make s1_ptr point at end
add %o2,%g1,%o2 ! make s2_ptr point at end
add %o0,%g1,%o0 ! make res_ptr point at end
mov 0,%o4 ! clear carry variable
sllx %g3,3,%o5 ! compute initial address index
.Loop: ldx [%o2+%o5],%g1 ! load s2 limb
add %g3,1,%g3 ! increment loop count
ldx [%o1+%o5],%g2 ! load s1 limb
addcc %g1,%o4,%g1 ! add s2 limb and carry variable
movcc %xcc,0,%o4 ! if carry-out, o4 was 1; clear it
subcc %g1,%g2,%g1 ! subtract s1 limb from sum
stx %g1,[%o0+%o5] ! store result
add %o5,8,%o5 ! increment address index
brnz,pt %g3,.Loop
movcs %xcc,1,%o4 ! if s1 subtract gave carry, record it
retl
mov %o4,%o0
.LLfe1:
.size __mpn_sub_n,.LLfe1-__mpn_sub_n

7
sysdeps/sparc/sys/trap.h Normal file
View file

@ -0,0 +1,7 @@
/* Include trap definitions. */
#ifndef _SYS_TRAP_H
#define _SYS_TRAP_H 1
#include <machine/trap.h>
#endif /* sys/trap.h */

View file

@ -38,15 +38,7 @@
#include "DEFS.h"
#ifdef __linux__
#include <asm/traps.h>
#else
#ifdef __svr4__
#include <sys/trap.h>
#else
#include <machine/trap.h>
#endif
#endif
FUNC(.udiv)
@ -176,14 +168,14 @@ Ldivloop:
subcc %o3,%o5,%o3
b 9f
add %o2, (7*2+1), %o2
L.4.23:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (7*2-1), %o2
L.3.19:
! remainder is negative
addcc %o3,%o5,%o3
@ -194,15 +186,15 @@ L.3.19:
subcc %o3,%o5,%o3
b 9f
add %o2, (5*2+1), %o2
L.4.21:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (5*2-1), %o2
L.2.17:
! remainder is negative
addcc %o3,%o5,%o3
@ -218,14 +210,14 @@ L.2.17:
subcc %o3,%o5,%o3
b 9f
add %o2, (3*2+1), %o2
L.4.19:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (3*2-1), %o2
L.3.17:
! remainder is negative
addcc %o3,%o5,%o3
@ -236,16 +228,16 @@ L.3.17:
subcc %o3,%o5,%o3
b 9f
add %o2, (1*2+1), %o2
L.4.17:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (1*2-1), %o2
L.1.16:
! remainder is negative
addcc %o3,%o5,%o3
@ -266,14 +258,14 @@ L.1.16:
subcc %o3,%o5,%o3
b 9f
add %o2, (-1*2+1), %o2
L.4.15:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-1*2-1), %o2
L.3.15:
! remainder is negative
addcc %o3,%o5,%o3
@ -284,15 +276,15 @@ L.3.15:
subcc %o3,%o5,%o3
b 9f
add %o2, (-3*2+1), %o2
L.4.13:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-3*2-1), %o2
L.2.15:
! remainder is negative
addcc %o3,%o5,%o3
@ -308,14 +300,14 @@ L.2.15:
subcc %o3,%o5,%o3
b 9f
add %o2, (-5*2+1), %o2
L.4.11:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-5*2-1), %o2
L.3.13:
! remainder is negative
addcc %o3,%o5,%o3
@ -326,16 +318,16 @@ L.3.13:
subcc %o3,%o5,%o3
b 9f
add %o2, (-7*2+1), %o2
L.4.9:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-7*2-1), %o2
9:
Lend_regular_divide:
subcc %o4, 1, %o4

View file

@ -38,15 +38,7 @@
#include "DEFS.h"
#ifdef __linux__
#include <asm/traps.h>
#else
#ifdef __svr4__
#include <sys/trap.h>
#else
#include <machine/trap.h>
#endif
#endif
FUNC(.urem)
@ -176,14 +168,14 @@ Ldivloop:
subcc %o3,%o5,%o3
b 9f
add %o2, (7*2+1), %o2
L.4.23:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (7*2-1), %o2
L.3.19:
! remainder is negative
addcc %o3,%o5,%o3
@ -194,15 +186,15 @@ L.3.19:
subcc %o3,%o5,%o3
b 9f
add %o2, (5*2+1), %o2
L.4.21:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (5*2-1), %o2
L.2.17:
! remainder is negative
addcc %o3,%o5,%o3
@ -218,14 +210,14 @@ L.2.17:
subcc %o3,%o5,%o3
b 9f
add %o2, (3*2+1), %o2
L.4.19:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (3*2-1), %o2
L.3.17:
! remainder is negative
addcc %o3,%o5,%o3
@ -236,16 +228,16 @@ L.3.17:
subcc %o3,%o5,%o3
b 9f
add %o2, (1*2+1), %o2
L.4.17:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (1*2-1), %o2
L.1.16:
! remainder is negative
addcc %o3,%o5,%o3
@ -266,14 +258,14 @@ L.1.16:
subcc %o3,%o5,%o3
b 9f
add %o2, (-1*2+1), %o2
L.4.15:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-1*2-1), %o2
L.3.15:
! remainder is negative
addcc %o3,%o5,%o3
@ -284,15 +276,15 @@ L.3.15:
subcc %o3,%o5,%o3
b 9f
add %o2, (-3*2+1), %o2
L.4.13:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-3*2-1), %o2
L.2.15:
! remainder is negative
addcc %o3,%o5,%o3
@ -308,14 +300,14 @@ L.2.15:
subcc %o3,%o5,%o3
b 9f
add %o2, (-5*2+1), %o2
L.4.11:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-5*2-1), %o2
L.3.13:
! remainder is negative
addcc %o3,%o5,%o3
@ -326,16 +318,16 @@ L.3.13:
subcc %o3,%o5,%o3
b 9f
add %o2, (-7*2+1), %o2
L.4.9:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-7*2-1), %o2
9:
Lend_regular_divide:
subcc %o4, 1, %o4

3
sysdeps/sparc64/Implies Normal file
View file

@ -0,0 +1,3 @@
wordsize-64
# SPARC uses IEEE 754 floating point.
ieee754

11
sysdeps/sparc64/Makefile Normal file
View file

@ -0,0 +1,11 @@
# The Sparc`long double' is a distinct type we support.
#long-double-fcts = yes
# But the support for ieee quads is so bad we just skip the whole thing.
# XXX This is only a temporary hack.
omit-long-double-fcts = yes
# But we do need these few functions to even link stdio proggies
ifeq ($(subdir),math)
sysdep_routines += s_isinfl s_isnanl
endif

58
sysdeps/sparc64/add_n.S Normal file
View file

@ -0,0 +1,58 @@
/* SPARC v9 __mpn_add_n -- Add two limb vectors of the same length > 0 and
store sum in a third limb vector.
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
The GNU MP Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
The GNU MP Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
#include <sysdep.h>
/* INPUT PARAMETERS
res_ptr %o0
s1_ptr %o1
s2_ptr %o2
size %o3 */
ENTRY(__mpn_add_n)
sub %g0,%o3,%g3
sllx %o3,3,%g1
add %o1,%g1,%o1 ! make s1_ptr point at end
add %o2,%g1,%o2 ! make s2_ptr point at end
add %o0,%g1,%o0 ! make res_ptr point at end
mov 0,%o4 ! clear carry variable
sllx %g3,3,%o5 ! compute initial address index
1: ldx [%o2+%o5],%g1 ! load s2 limb
add %g3,1,%g3 ! increment loop count
ldx [%o1+%o5],%g2 ! load s1 limb
addcc %g1,%o4,%g1 ! add s2 limb and carry variable
movcc %xcc,0,%o4 ! if carry-out, o4 was 1; clear it
addcc %g1,%g2,%g1 ! add s1 limb to sum
stx %g1,[%o0+%o5] ! store result
add %o5,8,%o5 ! increment address index
brnz,pt %g3,1b
movcs %xcc,1,%o4 ! if s1 add gave carry, record it
retl
mov %o4,%o0
END(__mpn_add_n)

View file

@ -1,41 +1,40 @@
! SPARC v9 __mpn_addmul_1 -- Multiply a limb vector with a single limb and
! add the product to a second limb vector.
/* SPARC v9 __mpn_addmul_1 -- Multiply a limb vector with a single limb and
add the product to a second limb vector.
! Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996 Free Software Foundation, Inc.
! This file is part of the GNU MP Library.
This file is part of the GNU MP Library.
! The GNU MP Library is free software; you can redistribute it and/or modify
! it under the terms of the GNU Library General Public License as published by
! the Free Software Foundation; either version 2 of the License, or (at your
! option) any later version.
The GNU MP Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
! The GNU MP Library is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
! License for more details.
The GNU MP Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
! You should have received a copy of the GNU Library General Public License
! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! MA 02111-1307, USA.
You should have received a copy of the GNU Library General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
#include <sysdep.h>
! INPUT PARAMETERS
! res_ptr o0
! s1_ptr o1
! size o2
! s2_limb o3
/* INPUT PARAMETERS
res_ptr o0
s1_ptr o1
size o2
s2_limb o3 */
.section ".text"
.align 4
.global __mpn_addmul_1
.type __mpn_addmul_1,#function
.proc 016
__mpn_addmul_1:
ENTRY(__mpn_addmul_1)
!#PROLOGUE# 0
save %sp,-160,%sp
save %sp,-128,%sp
!#PROLOGUE# 1
sub %g0,%i2,%o7
sllx %o7,3,%g5
sub %i1,%g5,%o3
@ -51,7 +50,7 @@ __mpn_addmul_1:
! mid-1 !
! mid-2 !
! lo !
.Loop:
1:
sllx %o7,3,%g1
ldx [%o3+%g1],%g5
srl %g5,0,%i0 ! zero hi bits
@ -79,11 +78,11 @@ __mpn_addmul_1:
addcc %l1,%i0,%i0
movcs %xcc,1,%g5
stx %i0,[%o4+%g1]
brnz %o7,.Loop
add %i1,%g5,%o0 ! compute new cy_limb
brnz %o7,1b
add %i1,%g5,%o0 ! compute new cy_limb
mov %o0,%i0
ret
restore
.LLfe1:
.size __mpn_addmul_1,.LLfe1-__mpn_addmul_1
jmpl %i7+8, %g0
restore
END(__mpn_addmul_1)

View file

@ -0,0 +1,8 @@
/* Sparc is big-endian, but v9 supports endian conversion on loads/stores
and GCC supports such a mode. Be prepared. */
#ifdef __LITTLE_ENDIAN__
#define __BYTE_ORDER __LITTLE_ENDIAN
#else
#define __BYTE_ORDER __BIG_ENDIAN
#endif

View file

@ -0,0 +1,43 @@
/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. Sparc64 version.
Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <sysdep.h>
ENTRY(_setjmp)
#ifdef PIC
1: rd %pc,%g1
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)),%g2
or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(1b-.)),%g2
add %g1,%g2,%g1
sethi %hi(C_SYMBOL_NAME(__sigsetjmp)),%g2
or %g2,%lo(C_SYMBOL_NAME(__sigsetjmp)),%g2
ld [%g1+%g2], %g1
#else
sethi %hi(C_SYMBOL_NAME(__sigsetjmp)), %g1
or %lo(C_SYMBOL_NAME(__sigsetjmp)), %g1, %g1
add %g1, %g4, %g1
#endif
jmp %g1
mov %g0, %o1 /* Pass second argument of zero. */
END(_setjmp)
strong_alias(_setjmp, __setjmp)

View file

@ -0,0 +1,41 @@
/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. Sparc64 version.
Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <sysdep.h>
ENTRY(setjmp)
#ifdef PIC
1: rd %pc,%g1
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)),%g2
or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(1b-.)),%g2
add %g1,%g2,%g1
sethi %hi(C_SYMBOL_NAME(__sigsetjmp)),%g2
or %g2,%lo(C_SYMBOL_NAME(__sigsetjmp)),%g2
ld [%g1+%g2], %g1
#else
sethi %hi(C_SYMBOL_NAME(__sigsetjmp)), %g1
or %lo(C_SYMBOL_NAME(__sigsetjmp)), %g1, %g1
add %g1, %g4, %g1
#endif
jmp %g1
mov 1, %o1 /* Pass second argument of one. */
END(setjmp)

3
sysdeps/sparc64/configure vendored Executable file
View file

@ -0,0 +1,3 @@
# Local configure fragment for sysdeps/sparc64
nopic_initfini=yes

View file

@ -0,0 +1,7 @@
sinclude(./aclocal.m4)dnl Autoconf lossage
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/sparc64
dnl We need to have separate crt? files for static linking which does
dnl not use PIC.
nopic_initfini=yes

View file

@ -0,0 +1,304 @@
/* Machine-dependent ELF dynamic relocation inline functions. Sparc64 version.
Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define ELF_MACHINE_NAME "sparc64"
#include <assert.h>
#include <string.h>
#include <link.h>
#include <sys/param.h>
#include <sysdep.h>
/* Return nonzero iff E_MACHINE is compatible with the running host. */
static inline int
elf_machine_matches_host (Elf64_Half e_machine)
{
return e_machine == EM_SPARC64;
}
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
first element of the GOT. This must be inlined in a function which
uses global data. */
static inline Elf64_Addr
elf_machine_dynamic (void)
{
register Elf64_Addr *got asm ("%l7");
return *got;
}
/* Return the run-time load address of the shared object. */
static inline Elf64_Addr
elf_machine_load_address (void)
{
Elf64_Addr here;
__asm("rd %pc,%0\n\t"
"ba 1f\n\t"
" add %0,12,%0\n\t"
".weak __load_address_undefined\n\t"
"call __load_address_undefined\n"
"1:"
: "=r"(here));
return here + (*(int *)here << 2);
}
#ifdef RESOLVE
/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
MAP is the object containing the reloc. */
static inline void
elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
const Elf64_Sym *sym, const struct r_found_version *version)
{
Elf64_Addr *const reloc_addr = (void *) (map->l_addr + reloc->r_offset);
Elf64_Addr loadbase;
#ifndef RTLD_BOOTSTRAP
/* This is defined in rtld.c, but nowhere in the static libc.a; make the
reference weak so static programs can still link. This declaration
cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP)
because rtld.c contains the common defn for _dl_rtld_map, which is
incompatible with a weak decl in the same file. */
weak_extern (_dl_rtld_map);
#endif
if (ELF64_R_TYPE (reloc->r_info) == R_SPARC_RELATIVE)
{
#ifndef RTLD_BOOTSTRAP
if (map != &_dl_rtld_map) /* Already done in rtld itself. */
#endif
*reloc_addr += map->l_addr + reloc->r_addend;
}
else
{
const Elf64_Sym *const refsym = sym;
Elf64_Addr value;
if (sym->st_shndx != SHN_UNDEF &&
ELF64_ST_BIND (sym->st_info) == STB_LOCAL)
value = map->l_addr;
else
{
value = RESOLVE (&sym, version, ELF64_R_TYPE (reloc->r_info));
if (sym)
value += sym->st_value;
}
value += reloc->r_addend; /* Assume copy relocs have zero addend. */
switch (ELF64_R_TYPE (reloc->r_info))
{
case R_SPARC_COPY:
if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size))
{
const char *strtab;
strtab = ((void *) map->l_addr
+ map->l_info[DT_STRTAB]->d_un.d_ptr);
_dl_sysdep_error ("Symbol `", strtab + refsym->st_name,
"' has different size in shared object, "
"consider re-linking\n", NULL);
}
memcpy (reloc_addr, (void *) value, MIN (sym->st_size,
refsym->st_size));
break;
case R_SPARC_GLOB_DAT:
/* case R_SPARC_64: */
case R_SPARC_JMP_SLOT:
*reloc_addr = value;
break;
case R_SPARC_8:
*(char *) reloc_addr = value;
break;
case R_SPARC_16:
*(short *) reloc_addr = value;
break;
case R_SPARC_DISP8:
*(char *) reloc_addr = (value - (Elf64_Addr) reloc_addr);
break;
case R_SPARC_DISP16:
*(short *) reloc_addr = (value - (Elf64_Addr) reloc_addr);
break;
case R_SPARC_DISP32:
*(unsigned int *)reloc_addr = (value - (Elf64_Addr) reloc_addr);
break;
case R_SPARC_LO10:
*(unsigned *)reloc_addr = (*(unsigned *)reloc_addr & ~0x3ff)
| (value & 0x3ff);
break;
case R_SPARC_WDISP30:
*(unsigned *)reloc_addr = ((*(unsigned *)reloc_addr & 0xc0000000)
| ((value - (Elf64_Addr) reloc_addr) >> 2));
break;
case R_SPARC_HI22:
*(unsigned *)reloc_addr = (*(unsigned *)reloc_addr & 0xffc00000)
| (value >> 10);
break;
case R_SPARC_NONE: /* Alright, Wilbur. */
break;
default:
assert (! "unexpected dynamic reloc type");
break;
}
}
}
static inline void
elf_machine_lazy_rel (struct link_map *map, const Elf64_Rela *reloc)
{
switch (ELF64_R_TYPE (reloc->r_info))
{
case R_SPARC_NONE:
break;
case R_SPARC_JMP_SLOT:
break;
default:
assert (! "unexpected PLT reloc type");
break;
}
}
#endif /* RESOLVE */
/* Nonzero iff TYPE should not be allowed to resolve to one of
the main executable's symbols, as for a COPY reloc. */
#define elf_machine_lookup_noexec_p(type) ((type) == R_SPARC_COPY)
/* Nonzero iff TYPE describes relocation of a PLT entry, so
PLT entries should not be allowed to define the value. */
#define elf_machine_lookup_noplt_p(type) ((type) == R_SPARC_JMP_SLOT)
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
#define ELF_MACHINE_RELOC_NOPLT R_SPARC_JMP_SLOT
/* The SPARC never uses Elf64_Rel relocations. */
#define ELF_MACHINE_NO_REL 1
/* Set up the loaded object described by L so its unrelocated PLT
entries will jump to the on-demand fixup code in dl-runtime.c. */
static inline int
elf_machine_runtime_setup (struct link_map *l, int lazy)
{
Elf64_Addr *got;
extern void _dl_runtime_resolve (Elf64_Word);
if (l->l_info[DT_JMPREL] && lazy)
{
got = (Elf64_Addr *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr);
got[1] = (Elf64_Addr) l; /* Identify this shared object. */
/* This function will get called to fix up the GOT entry indicated by
the offset on the stack, and then jump to the resolved address. */
got[2] = (Elf64_Addr) &_dl_runtime_resolve;
}
return lazy;
}
/* This code is used in dl-runtime.c to call the `fixup' function
and then redirect to the address it returns. */
#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
.globl _dl_runtime_resolve
.type _dl_runtime_resolve, @function
_dl_runtime_resolve:
save %sp, -160, %sp
mov %g1, %o1
call fixup
mov %g2, %o0
jmp %o0
restore
.size _dl_runtime_resolve, .-_dl_runtime_resolve
");
/* The PLT uses Elf64_Rela relocs. */
#define elf_machine_relplt elf_machine_rela
/* Mask identifying addresses reserved for the user program,
where the dynamic linker should not map anything. */
#define ELF_MACHINE_USER_ADDRESS_MASK ???
/* Initial entry point code for the dynamic linker.
The C function `_dl_start' is the real entry point;
its return value is the user program's entry point. */
#define __S1(x) #x
#define __S(x) __S1(x)
#define RTLD_START __asm__ ( "\
.global _start
.type _start, @function
_start:
/* Make room for functions to drop their arguments on the stack. */
sub %sp, 6*8, %sp
/* Pass pointer to argument block to _dl_start. */
call _dl_start
add %sp," __S(STACK_BIAS) "+22*8,%o0
/* FALLTHRU */
.global _dl_start_user
.type _dl_start_user, @function
_dl_start_user:
/* Load the GOT register. */
1: rd %pc,%g1
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)),%l7
or %l2,%lo(_GLOBAL_OFFSET_TABLE_-(1b-.)),%l7
add %l7,%g1,%l7
/* Save the user entry point address in %l0. */
mov %o0,%l0
/* See if we were run as a command with the executable file name as an
extra leading argument. If so, adjust the stack pointer. */
sethi %hi(_dl_skip_args), %g2
or %g2, %lo(_dl_skip_args), %g2
ld [%l7+%g2], %i0
brz,pt %i0, 2f
ldx [%sp+" __S(STACK_BIAS) "+22*8], %i1
sub %i1, %i0, %i1
sllx %i0, 3, %i2
add %sp, %i2, %sp
stx %i1, [%sp+" __S(STACK_BIAS) "+22*8]
/* Load _dl_default_scope[2] to pass to _dl_init_next. */
2: sethi %hi(_dl_default_scope), %g2
or %g2, %lo(_dl_defalt_scope), %g2
add %g2, 2*8, %g2
ldx [%l7+%g2], %l1
/* Call _dl_init_next to return the address of an initializer to run. */
3: call _dl_init_next
mov %l1, %o0
brz,pn %o0, 4f
nop
jmpl %o0, %o7
nop
ba,a 3b
/* Clear the startup flag. */
4: sethi %hi(_dl_starting_up), %g2
or %g2, %lo(_dl_starting_up), %g2
st %g0, [%l7+%g2]
/* Pass our finalizer function to the user in %g1
sethi %hi(_dl_fini), %g1
or %g1, %lo(_dl_fini), %g1
ldx [%l7+%g1], %g1
/* Jump to the user's entry point & undo the allocation of the xtra regs. */
jmp %l0
add %sp, 6*8, %sp
.size _dl_start_user, .-_dl_start_user");

View file

@ -0,0 +1,10 @@
# The assembler on SPARC needs the -fPIC flag even when it's assembler code.
ASFLAGS-.so = -fPIC
ifeq ($(subdir), csu)
extra-objs += crtbegin.o crtend.o crtbeginS.o crtendS.o
install-lib += crtbegin.o crtend.o crtbeginS.o crtendS.o
CPPFLAGS-crtbeginS.S = -fPIC -DPIC
CPPFLAGS-crtendS.S = -fPIC -DPIC
endif

View file

@ -0,0 +1,49 @@
.section ".ctors",#alloc,#write
.align 8
__CTOR_LIST__:
.xword -1
.section ".dtors",#alloc,#write
.align 8
__DTOR_LIST__:
.xword -1
.section ".fini",#alloc,#execinstr
call __do_global_dtors_aux
nop
.text
.align 4
.type __do_global_dtors_aux,#function
__do_global_dtors_aux:
save %sp,-160,%sp
#ifdef PIC
1: rd %pc, %g1
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
add %l7, %g1, %l7
sethi %hi(__DTOR_LIST__), %l0
or %l0, %lo(__DTOR_LIST__), %l0
ldx [%l7+%l0], %l0
#else
sethi %hi(__DTOR_LIST__), %l0
or %l0, %lo(__DTOR_LIST__), %l0
add %l0, %g4, %l0
#endif
ba 3f
ldx [%l0+8], %l1
2: jmpl %l1, %o7
ldx [%l0+8], %l1
3: brnz,pt %l1, 2b
add %l0, 8, %l0
ret
restore
.size __do_global_dtors_aux,.-__do_global_dtors_aux

View file

@ -0,0 +1 @@
#include "crtbegin.S"

View file

@ -0,0 +1,50 @@
.section ".ctors",#alloc,#write
.align 8
__CTOR_END__:
.xword 0
.section ".dtors",#alloc,#write
.align 8
__DTOR_END__:
.xword 0
.section ".init",#alloc,#execinstr
call __do_global_ctors_aux
nop
.text
.align 4
.type __do_global_ctors_aux,#function
__do_global_ctors_aux:
save %sp,-160,%sp
#ifdef PIC
1: rd %pc, %g1
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
add %l7, %g1, %l7
sethi %hi(__CTOR_END__), %l0
or %l0, %lo(__CTOR_END__), %l0
ldx [%l7+%l0], %l0
#else
sethi %hi(__CTOR_END__), %l0
or %l0, %lo(__CTOR_END__), %l0
add %l0, %g4, %l0
#endif
ba 3f
ldx [%l0+8], %l1
2: jmpl %l1, %o7
ldx [%l0+8], %l1
3: addcc %l1, 1, %g0
bnz,pt %xcc, 2b
add %l0, 8, %l0
ret
restore
.size __do_global_ctors_aux,.-__do_global_ctors_aux

View file

@ -0,0 +1 @@
#include "crtend.S"

View file

@ -0,0 +1,93 @@
/* Startup code for elf64-sparc
Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <sysdep.h>
.section ".text"
.align 4
.global _start
.type _start,#function
_start:
/* First order of business is to load %g4 with our base address. */
sethi %uhi(_start), %g4
or %g4, %ulo(_start), %g4
sllx %g4, 32, %g4
/* Terminate the stack frame, and reserve space for functions to
drop their arguments. */
mov %g0, %fp
sub %sp, 6*8, %sp
/* Save %g1. When starting a binary via the dynamic linker, %g1
contains the address of the shared library termination function,
which we will register below with atexit() to be called by exit().
If we are statically linked, this will be NULL. */
/* Do essential libc initialization (sp points to argc, argv, and envp) */
call __libc_init_first
mov %g1, %l0
/* Now that we have the proper stack frame, register library termination
function, if there is any: */
brz,pn %l0, 1f
nop
call atexit
mov %l0, %o0
1:
/* Extract the arguments and environment as encoded on the stack. The
argument info starts after one register window (16 words) past the SP,
plus the bias we added, plus the magic v9 STACK_BIAS. */
ldx [%sp+STACK_BIAS+22*8], %o0
add %sp, STACK_BIAS+23*8, %o1
sllx %o0, 3, %o2
add %o2, %o1, %o2
sethi %hi(__environ), %g2
add %o2, 8, %o2
add %g2, %g4, %g2
stx %o2, [%g2+%lo(__environ)]
mov %o0, %l0 /* tuck them away */
mov %o1, %l1
/* Call _init, the entry point to our own .init section. */
call _init
mov %o2, %l2
/* Register our .fini section with atexit. */
sethi %hi(_fini), %o0
add %o0, %g4, %o0
call atexit
add %o0, %lo(_fini), %o0
/* Call the user's main and exit with its return value. */
mov %l0, %o0
mov %l1, %o1
call main
mov %l2, %o2
call exit
nop
/* Die very horribly if exit returns. */
illtrap 0
.size _start,.-_start

View file

@ -0,0 +1,69 @@
/* FPU control word bits. SPARC v9 version.
Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Miguel de Icaza
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _FPU_CONTROL_H
#define _FPU_CONTROL_H 1
#include <features.h>
/* precision control */
#define _FPU_EXTENDED 0x00000000 /* RECOMMENDED */
#define _FPU_DOUBLE 0x20000000
#define _FPU_80BIT 0x30000000
#define _FPU_SINGLE 0x10000000 /* DO NOT USE */
/* rounding control / Sparc */
#define _FPU_RC_DOWN 0xc0000000
#define _FPU_RC_UP 0x80000000
#define _FPU_RC_ZERO 0x40000000
#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */
#define _FPU_RESERVED 0x30300000 /* Reserved bits in cw */
/* Now two recommended cw */
/* Linux default:
- extended precision
- rounding to nearest
- no exceptions */
#define _FPU_DEFAULT 0x0
/* IEEE: same as above */
#define _FPU_IEEE 0x0
/* Type of the control word. */
typedef unsigned long fpu_control_t;
#define _FPU_GETCW(cw) __asm__ ("stx %%fsr,%0" : "=m" (*&cw))
#define _FPU_SETCW(cw) __asm__ ("ldx %0,%%fsr" : : "m" (*&cw))
/* Default control word set at startup. */
extern fpu_control_t __fpu_control;
__BEGIN_DECLS
/* Called at startup. It can be used to manipulate fpu control register. */
extern void __setfpucw __P ((fpu_control_t));
__END_DECLS
#endif /* fpu_control.h */

96
sysdeps/sparc64/lshift.S Normal file
View file

@ -0,0 +1,96 @@
/* SPARC v9 __mpn_lshift --
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
The GNU MP Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
The GNU MP Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
#include <sysdep.h>
/* INPUT PARAMETERS
res_ptr %i0
src_ptr %i1
size %i2
cnt %i3 */
ENTRY(__mpn_lshift)
save %sp, -128, %sp
sllx %i2,3,%g1
add %i1,%g1,%i1 ! make %i1 point at end of src
ldx [%i1-8],%g2 ! load first limb
sub %g0,%i3,%i5 ! negate shift count
add %i0,%g1,%i0 ! make %i0 point at end of res
add %i2,-1,%i2
and %i2,4-1,%l4 ! number of limbs in first loop
srlx %g2,%i5,%g1 ! compute function result
brz,pn %l4,.L0 ! if multiple of 4 limbs, skip first loop
mov %g1,%l1
sub %i2,%l4,%i2 ! adjust count for main loop
.Loop0: ldx [%i1-16],%g3
add %i0,-8,%i0
add %i1,-8,%i1
add %l4,-1,%l4
sllx %g2,%i3,%i4
srlx %g3,%i5,%g1
mov %g3,%g2
or %i4,%g1,%i4
brnz,pt %l4,.Loop0
stx %i4,[%i0+0]
.L0: brz,pn %i2,.Lend
nop
.Loop: ldx [%i1-16],%g3
add %i0,-32,%i0
add %i2,-4,%i2
sllx %g2,%i3,%i4
srlx %g3,%i5,%g1
ldx [%i1-24],%g2
sllx %g3,%i3,%l4
or %i4,%g1,%i4
stx %i4,[%i0+24]
srlx %g2,%i5,%g1
ldx [%i1-32],%g3
sllx %g2,%i3,%i4
or %l4,%g1,%l4
stx %l4,[%i0+16]
srlx %g3,%i5,%g1
ldx [%i1-40],%g2
sllx %g3,%i3,%l4
or %i4,%g1,%i4
stx %i4,[%i0+8]
srlx %g2,%i5,%g1
add %i1,-32,%i1
or %l4,%g1,%l4
brnz,pt %i2,.Loop
stx %l4,[%i0+0]
.Lend: sllx %g2,%i3,%g2
stx %g2,[%i0-8]
mov %l1,%i0
jmpl %i7+8, %g0
restore
END(__mpn_lshift)

View file

@ -1,41 +1,39 @@
! SPARC v9 __mpn_mul_1 -- Multiply a limb vector with a single limb and
! store the product in a second limb vector.
/* SPARC v9 __mpn_mul_1 -- Multiply a limb vector with a single limb and
store the product in a second limb vector.
! Copyright (C) 1995, 1996 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
! This file is part of the GNU MP Library.
This file is part of the GNU MP Library.
! The GNU MP Library is free software; you can redistribute it and/or modify
! it under the terms of the GNU Library General Public License as published by
! the Free Software Foundation; either version 2 of the License, or (at your
! option) any later version.
The GNU MP Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
! The GNU MP Library is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
! License for more details.
The GNU MP Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
! You should have received a copy of the GNU Library General Public License
! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! MA 02111-1307, USA.
You should have received a copy of the GNU Library General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
#include <sysdep.h>
! INPUT PARAMETERS
! res_ptr o0
! s1_ptr o1
! size o2
! s2_limb o3
/* INPUT PARAMETERS
res_ptr o0
s1_ptr o1
size o2
s2_limb o3 */
.section ".text"
.align 4
.global __mpn_mul_1
.type __mpn_mul_1,#function
.proc 016
__mpn_mul_1:
ENTRY(__mpn_mul_1)
!#PROLOGUE# 0
save %sp,-160,%sp
save %sp,-128,%sp
!#PROLOGUE# 1
sub %g0,%i2,%o7
sllx %o7,3,%g5
sub %i1,%g5,%o3
@ -77,10 +75,10 @@ __mpn_mul_1:
add %o7,1,%o7
stx %i0,[%o4+%g1]
brnz %o7,.Loop
add %i1,%g5,%o0 ! compute new cy_limb
add %i1,%g5,%o0 ! compute new cy_limb
mov %o0,%i0
ret
restore
.LLfe1:
.size __mpn_mul_1,.LLfe1-__mpn_mul_1
jmpl %i7+8,%g0
restore
END(__mpn_mul_1)

93
sysdeps/sparc64/rshift.S Normal file
View file

@ -0,0 +1,93 @@
/* SPARC v9 __mpn_rshift --
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
The GNU MP Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
The GNU MP Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
#include <sysdep.h>
/* INPUT PARAMETERS
res_ptr %i0
src_ptr %i1
size %i2
cnt %i3 */
ENTRY(__mpn_rshift)
save %sp, -128, %sp
ldx [%i1],%g2 ! load first limb
sub %g0,%i3,%i5 ! negate shift count
add %i2,-1,%i2
and %i2,4-1,%l4 ! number of limbs in first loop
sllx %g2,%i5,%g1 ! compute function result
brz,pn %l4,.L0 ! if multiple of 4 limbs, skip first loop
mov %g1,%l1
sub %i2,%l4,%i2 ! adjust count for main loop
.Loop0: ldx [%i1+8],%g3
add %i0,8,%i0
add %i1,8,%i1
add %l4,-1,%l4
srlx %g2,%i3,%i4
sllx %g3,%i5,%g1
mov %g3,%g2
or %i4,%g1,%i4
brnz,pt %l4,.Loop0
stx %i4,[%i0-8]
.L0: brz,pn %i2,.Lend
nop
.Loop: ldx [%i1+8],%g3
add %i0,32,%i0
add %i2,-4,%i2
srlx %g2,%i3,%i4
sllx %g3,%i5,%g1
ldx [%i1+16],%g2
srlx %g3,%i3,%l4
or %i4,%g1,%i4
stx %i4,[%i0-32]
sllx %g2,%i5,%g1
ldx [%i1+24],%g3
srlx %g2,%i3,%i4
or %l4,%g1,%l4
stx %l4,[%i0-24]
sllx %g3,%i5,%g1
ldx [%i1+32],%g2
srlx %g3,%i3,%l4
or %i4,%g1,%i4
stx %i4,[%i0-16]
sllx %g2,%i5,%g1
add %i1,32,%i1
or %l4,%g1,%l4
brnz %i2,.Loop
stx %l4,[%i0-8]
.Lend: srlx %g2,%i3,%g2
stx %g2,[%i0-0]
mov %l1,%i0
jmpl %i7+8,%g0
restore
END(__mpn_rshift)

55
sysdeps/sparc64/sub_n.S Normal file
View file

@ -0,0 +1,55 @@
/* SPARC v9 __mpn_sub_n -- Subtract two limb vectors of the same length > 0
and store difference in a third limb vector.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
The GNU MP Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
The GNU MP Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
#include <sysdep.h>
/* INPUT PARAMETERS
res_ptr %o0
s1_ptr %o1
s2_ptr %o2
size %o3 */
ENTRY(__mpn_sub_n)
sub %g0,%o3,%g3
sllx %o3,3,%g1
add %o1,%g1,%o1 ! make s1_ptr point at end
add %o2,%g1,%o2 ! make s2_ptr point at end
add %o0,%g1,%o0 ! make res_ptr point at end
mov 0,%o4 ! clear carry variable
sllx %g3,3,%o5 ! compute initial address index
1: ldx [%o2+%o5],%g1 ! load s2 limb
add %g3,1,%g3 ! increment loop count
ldx [%o1+%o5],%g2 ! load s1 limb
addcc %g1,%o4,%g1 ! add s2 limb and carry variable
movcc %xcc,0,%o4 ! if carry-out, o4 was 1; clear it
subcc %g1,%g2,%g1 ! subtract s1 limb from sum
stx %g1,[%o0+%o5] ! store result
add %o5,8,%o5 ! increment address index
brnz,pt %g3,1b
movcs %xcc,1,%o4 ! if s1 subtract gave carry, record it
retl
mov %o4,%o0
END(__mpn_sub_n)

View file

@ -1,41 +1,39 @@
! SPARC v9 __mpn_submul_1 -- Multiply a limb vector with a single limb and
! subtract the product from a second limb vector.
/* SPARC v9 __mpn_submul_1 -- Multiply a limb vector with a single limb and
subtract the product from a second limb vector.
! Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996 Free Software Foundation, Inc.
! This file is part of the GNU MP Library.
This file is part of the GNU MP Library.
! The GNU MP Library is free software; you can redistribute it and/or modify
! it under the terms of the GNU Library General Public License as published by
! the Free Software Foundation; either version 2 of the License, or (at your
! option) any later version.
The GNU MP Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
! The GNU MP Library is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
! License for more details.
The GNU MP Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
! You should have received a copy of the GNU Library General Public License
! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! MA 02111-1307, USA.
You should have received a copy of the GNU Library General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
#include <sysdep.h>
! INPUT PARAMETERS
! res_ptr o0
! s1_ptr o1
! size o2
! s2_limb o3
/* INPUT PARAMETERS
res_ptr o0
s1_ptr o1
size o2
s2_limb o3 */
.section ".text"
.align 4
.global __mpn_submul_1
.type __mpn_submul_1,#function
.proc 016
__mpn_submul_1:
ENTRY(__mpn_submul_1)
!#PROLOGUE# 0
save %sp,-160,%sp
save %sp,-128,%sp
!#PROLOGUE# 1
sub %g0,%i2,%o7
sllx %o7,3,%g5
sub %i1,%g5,%o3
@ -80,10 +78,10 @@ __mpn_submul_1:
movcs %xcc,1,%g5
stx %i0,[%o4+%g1]
brnz %o7,.Loop
add %i1,%g5,%o0 ! compute new cy_limb
add %i1,%g5,%o0 ! compute new cy_limb
mov %o0,%i0
ret
restore
.LLfe1:
.size __mpn_submul_1,.LLfe1-__mpn_submul_1
jmpl %i7+8,%g0
restore
END(__mpn_submul_1)

View file

@ -1 +0,0 @@
itn errno;

View file

@ -1,12 +0,0 @@
/* Linux/SPARC version. This is the sigaction struction from the Linux
2.1.20 kernel. */
struct sigaction
{
__sighandler_t sa_handler;
sigset_t sa_mask;
unsigned long int sa_flags;
void (*sa_restorer) (void); /* not used by Linux/SPARC yet */
};
#define HAVE_SA_RESTORER

View file

@ -17,5 +17,12 @@ struct kernel_stat
unsigned long int __unused3;
long int st_blksize;
long int st_blocks;
unsigned long int __unused4[2];
unsigned long int __unused4;
unsigned long int __unused5;
};
#define _HAVE___UNUSED1
#define _HAVE___UNUSED2
#define _HAVE___UNUSED3
#define _HAVE___UNUSED4
#define _HAVE___UNUSED5

View file

@ -0,0 +1,7 @@
/* Include Linux/SPARC specific trap definitions. */
#ifndef _SYS_TRAP_H
#define _SYS_TRAP_H 1
#include <asm/traps.h>
#endif /* sys/trap.h */

View file

@ -0,0 +1,4 @@
ifeq ($(subdir),misc)
sysdep_headers += ucontext.h
sysdep_routines += getcontext setcontext
endif

View file

@ -0,0 +1 @@
/* There is no need for __longjmp what with setcontext. */

View file

@ -0,0 +1,26 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _JMP_BUF_H
#define _JMP_BUF_H 1
#include <ucontext.h>
typedef ucontext_t __jmp_buf[1];
#endif /* jmp_buf.h */

View file

@ -0,0 +1,95 @@
/* Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/*
* Never include this file directly; use <sys/types.h> instead.
*/
#ifndef _BITS_TYPES_H
#define _BITS_TYPES_H 1
#include <features.h>
/* Convenience types. */
typedef unsigned char __u_char;
typedef unsigned short __u_short;
typedef unsigned int __u_int;
typedef unsigned long __u_long;
typedef unsigned long int __u_quad_t;
typedef long int __quad_t;
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;
typedef __quad_t *__qaddr_t;
typedef __u_int __dev_t; /* Type of device numbers. */
typedef __u_int __uid_t; /* Type of user identifications. */
typedef __u_int __gid_t; /* Type of group identifications. */
typedef __u_int __ino_t; /* Type of file serial numbers. */
typedef __u_int __mode_t; /* Type of file attribute bitmasks. */
typedef __u_int __nlink_t; /* Type of file link counts. */
typedef long int __off_t; /* Type of file sizes and offsets. */
typedef __quad_t __loff_t; /* Type of file sizes and offsets. */
typedef int __pid_t; /* Type of process identifications. */
typedef long int __ssize_t; /* Type of a byte count, or error. */
typedef struct
{
int __val[2];
} __fsid_t; /* Type of file system IDs. */
/* Everythin' else. */
typedef int __daddr_t; /* The type of a disk address. */
typedef char *__caddr_t;
typedef long int __time_t;
typedef long int __swblk_t; /* Type of a swap block maybe? */
typedef long int __clock_t;
/* One element in the file descriptor mask array. */
typedef unsigned long int __fd_mask;
/* Due to incaution, we may have gotten these from a kernel header file. */
#undef __FD_SETSIZE
#undef __NFDBITS
#undef __FDMASK
/* Number of descriptors that can fit in an `fd_set'. */
#define __FD_SETSIZE 1024
/* It's easier to assume 8-bit bytes than to get CHAR_BIT. */
#define __NFDBITS (8 * sizeof (__fd_mask))
#define __FDELT(d) ((d) / __NFDBITS)
#define __FDMASK(d) (1 << ((d) % __NFDBITS))
/* fd_set for select and pselect. */
typedef struct
{
/* XPG4.2 requires this member name. */
__fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
} __fd_set;
typedef int __key_t;
#endif /* bits/types.h */

View file

@ -0,0 +1,97 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* __brk is a special syscall under Linux since it never returns an
error. Instead, the error condition is indicated by returning the old
break value (instead of the new, requested one). */
#include <sysdep.h>
#define _ERRNO_H
#include <bits/errno.h>
#ifdef PIC
.section .bss
.align 8
.globl __curbrk
__curbrk: .skip 8
.type __curbrk,@object
.size __curbrk,8
#else
.common __curbrk, 8, 8
#endif
.text
ENTRY(__brk)
save %sp, -160, %sp
#ifdef PIC
1: rd %pc, %g1
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
add %l7, %g1, %l7
#endif
LOADSYSCALL(brk)
mov %i0, %o0
ta 0x11
/* All the ways we can fail... */
bcs,pn %xcc, .Lerr1
nop
brz %i0, .Lok
subcc %i0, %o0, %g0
bne,pn %xcc, .Lerr0
/* Update __curbrk and return cleanly. */
.Lok: sethi %hi(__curbrk), %g1
or %g1, %lo(__curbrk), %g1
#ifdef PIC
ldx [%l7+%g1], %g1
stx %o0, [%g1]
#else
stx %o0, [%g4+%g1]
#endif
mov %g0, %i0
/* Don't use "ret" cause the preprocessor will eat it. */
jmpl %i7+8, %g0
restore
/* What a horrible way to die. */
.Lerr0: set ENOMEM, %o0
.Lerr1: sethi %hi(errno), %g1
or %g1, %lo(errno), %g1
#ifdef PIC
ldx [%l7+%g1], %g1
st %o0, [%g1]
#else
st %o0, [%g4+%g1]
#endif
#ifdef _LIBC_REENTRANT
call __errno_location
mov %o0,%l1
st %l1, [%o0]
#endif
sub %g0, 1, %i0
jmpl %i7+8, %g0
restore
.size __brk, .-__brk
weak_alias (__brk, brk)

View file

@ -0,0 +1,89 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu).
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* clone() is even more special than fork() as it mucks with stacks
and invokes a function in the right context after its all over. */
#include <asm/errno.h>
#include <asm/unistd.h>
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
.text
.align 4
.globl __libc_clone
.type __libc_clone,@function
.weak clone
__clone = __libc_clone
clone = __libc_clone
__libc_clone:
save %sp,-160,%sp
/* sanity check arguments */
brz,pn %i0, 99f
mov %i0, %l0 /* save fn */
brz,pn %i1, 99f
mov %i3, %l3 /* save arg */
/* Do the system call */
mov %i1, %o1
mov %i2, %o0
set __NR_clone, %g1
ta 0x11
bcs,pn %xcc, 99f
nop
brnz %o0, __thread_start
mov %o0, %i0
ret
restore
99:
#ifdef PIC
rd %pc, %g1
sethi %hi(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7
or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7
add %l7, %g1, %l7
set EINVAL, %i0
sethi %hi(errno), %g2
or %g2, %lo(errno), %g2
st %i0, [%l7+%g2]
#else
sethi %hi(errno), %g2
add %g2, %g4, %g2
set EINVAL, %i0
st %i0, [%g2+%lo(errno)]
#endif
#ifdef _LIBC_REENTRANT
call __errno_location
nop
st %i0, [%o0]
#endif
mov -1,%i0
ret
restore
.size __libc_clone,.-__libc_clone
.type __thread_start,@function
__thread_start:
mov %g0, %fp /* terminate backtrace */
sub %sp, 6*8, %sp /* provide arg storage */
call %l0
mov %l3,%o0
call _exit,0
nop
.size __thread_start,.-__thread_start

View file

@ -0,0 +1,33 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <sysdep.h>
PSEUDO (__libc_fork, fork, 0)
tst %o1
be %xcc, 1f
nop
/* child: return 0 */
clr %o0
1: ret
PSEUDO_END (__libc_fork)
weak_alias (__libc_fork, __fork)
weak_alias (__libc_fork, fork)

View file

@ -0,0 +1,30 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu).
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <sysdep.h>
/* void getcontext(ucontext_t *); */
ENTRY(__getcontext)
ta 0x6e
ret
END(__getcontext)
weak_alias(__getcontext, getcontext)

View file

@ -0,0 +1,92 @@
/* Prepare arguments for library initialization function.
Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* The job of this fragment it to find argc and friends for INIT.
This is done in one of two ways: either in the stack context
of program start, or having dlopen pass them in. */
#include <sysdep.h>
#define __S1(x) #x
#define __S(x) __S1(x)
#ifdef PIC
#define SYSDEP_CALL_INIT(NAME, INIT) asm("\
.weak _dl_starting_up
.global " #NAME "
.type " #NAME ",@function
" #NAME ":
save %sp, -64, %sp
1: rd %pc, %g1
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
add %l7, %o7, %l7
/* Are we a dynamic libc being loaded into a static program? */
sethi %hi(_dl_starting_up), %g2
or %g2, %lo(_dl_starting_up), %g2
ld [%l7+%g2], %g2
brz,pn %g2, 3f
sethi %hi(__libc_multiple_libcs), %g3
ld [%g2], %g2
subcc %g0, %g2, %g0
subc %g0, -1, %g2
3: or %g3, %lo(__libc_multiple_libcs), %g3
ld [%l7+%g3], %g3
st %g2, [%g3]
/* If so, argc et al are in %o0-%o2 already. Otherwise, load them. */
brnz,pn %g2, " #INIT "
restore
ld [%sp+" __S(STACK_BIAS) "+22*8], %o0
add %sp, " __S(STACK_BIAS) "+23*8, %o1
sll %o0, 3, %o2
add %o2, %o1, %o2
add %o2, 8, %o2
ba,a " #INIT "
.size "#NAME " .-" #NAME);
#else
#define SYSDEP_CALL_INIT(NAME, INIT) asm("\
.weak _dl_starting_up
.global " #NAME "
.type " #NAME ",@function
" #NAME ":
/* Are we a dynamic libc being loaded into a static program? */
sethi %hi(_dl_starting_up), %g2
or %g2, %lo(_dl_starting_up), %g2
brz,pt %g2, 3f
sethi %hi(__libc_multiple_libcs), %g3
ld [%g4+%g2], %g2
subcc %g0, %g2, %g0
subc %g0, -1, %g2
3: add %g3, %g4, %g3
st %g2, [%g3+%lo(__libc_multiple_libcs)]
/* If so, argc et al are in %o0-%o2 already. Otherwise, load them. */
brnz,pn %g2, " #INIT "
nop
ld [%sp+" __S(STACK_BIAS) "+22*8], %o0
add %sp, " __S(STACK_BIAS) "+23*8, %o1
sll %o0, 3, %o2
add %o2, %o1, %o2
add %o2, 8, %o2
ba,a " #INIT "
.size "#NAME ", .-" #NAME);
#endif

View file

@ -0,0 +1,22 @@
/* Definition of `struct stat' used in the kernel */
struct kernel_stat
{
unsigned int st_dev;
unsigned int st_ino;
unsigned int st_mode;
short int st_nlink;
unsigned int st_uid;
unsigned int st_gid;
unsigned int st_rdev;
long int st_size;
long int st_atime;
long int st_mtime;
long int st_ctime;
long int st_blksize;
long int st_blocks;
unsigned long int __unused1;
unsigned long int __unused2;
};
#define _HAVE___UNUSED1
#define _HAVE___UNUSED2

View file

@ -0,0 +1,44 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu).
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* longjmp is implemented in terms of the setcontext trap on Linux/Sparc64. */
#include <sysdep.h>
/* Offsets into the jmp_buf structure. */
#define O_mask_was_saved 512
#define O_gregs 32
#define O_g1 (O_gregs + 4*8)
/* void longjmp (sigjmp_buf env, int val) */
ENTRY(longjmp)
/* Modify the context with the value we want to return. */
movre %o1, 1, %o1
stx %o1, [%o0 + O_g1]
/* Let setcontext know if we want to modify the current sigmask. */
ld [%o0 + O_mask_was_saved], %o1
/* And bamf back to where we belong! */
ta 0x6f
END(longjmp)

View file

@ -0,0 +1,37 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <sysdep.h>
ENTRY (__libc_pipe)
mov %o0, %o2 /* Save PIPEDES. */
LOADSYSCALL(pipe)
ta 0x11
bcc,pn %xcc, 2f
nop
SYSCALL_ERROR_HANDLER
2: st %o0, [%o2] /* PIPEDES[0] = %o0; */
st %o1, [%o2 + 4] /* PIPEDES[1] = %o1; */
retl
clr %o0
PSEUDO_END (__libc_pipe)
weak_alias (__libc_pipe, __pipe)
weak_alias (__libc_pipe, pipe)

View file

@ -0,0 +1,26 @@
/* Low-level statistical profiling support function. Linux/Sparc64 version.
Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <signal.h>
void
profil_counter (int signo, __siginfo_t *si)
{
profil_count ((void *) si->si_regs.tpc);
}

View file

@ -0,0 +1,33 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu).
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <sysdep.h>
/* void setcontext(ucontext_t *ctx); */
.weak setcontext
ENTRY(setcontext)
mov 1, %o1
/* void __setcontext(ucontext_t *ctx, int restoremask); */
ENTRY(__setcontext)
ta 0x6f
END(__setcontext)

View file

@ -0,0 +1,48 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu).
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* __sigsetjmp is implemented in terms of the getcontext trap on
Linux/Sparc64. */
#include <sysdep.h>
/* Offsets into the jmp_buf structure. */
#define O_mask_was_saved 512
#define O_gregs 32
#define O_g1 (O_gregs + 4*8)
/* int __sigsetjmp(jmp_buf, savemask) */
ENTRY(__sigsetjmp)
/* Record whether the user is intending to save the sigmask. */
st %o1, [%o0 + O_mask_was_saved]
/* Load up our return value, as longjmp is going to override
the jmp_buf on its way back. */
mov %g0, %g1
/* And call getcontext! */
ta 0x6e
retl
mov %g1, %o0
END(__sigsetjmp)

View file

@ -0,0 +1 @@
/* There is no need for __sigjmp_save what with getcontext. */

View file

@ -0,0 +1,26 @@
# File name Caller Syscall name # args Strong name Weak names
# Whee! 64-bit systems naturally implement llseek.
llseek EXTRA lseek 3 llseek
# Override select.S in parent directory:
select - select 5 __select select
accept - accept 3 __accept accept
bind - bind 3 __bind bind
connect - connect 3 __connect connect
getpeername - getpeername 3 __getpeername getpeername
getsockname - getsockname 3 __getsockname getsockname
getsockopt - getsockopt 5 __getsockopt getsockopt
listen - listen 2 __listen listen
recv - recv 4 __recv recv
recvfrom - recvfrom 6 __recvfrom recvfrom
recvmsg - recvmsg 3 __recvmsg recvmsg
send - send 4 __send send
sendmsg - sendmsg 3 __sendmsg sendmsg
sendto - sendto 6 __sendto sendto
setsockopt - setsockopt 5 __setsockopt setsockopt
shutdown - shutdown 2 __shutdown shutdown
socketpair - socketpair 4 __socketpair socketpair
# Another broken Linux/i386 idea layed to rest
ptrace - ptrace 4 __ptrace ptrace

View file

@ -0,0 +1,31 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Define errno */
.section .bss
.globl errno
.align 2
errno: .space 4
.type errno, @object
.size errno, 4
.globl __errno
__errno = errno

View file

@ -0,0 +1,116 @@
/* Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _LINUX_SPARC64_SYSDEP_H
#define _LINUX_SPARC64_SYSDEP_H 1
#include <sysdeps/unix/sysdep.h>
#undef SYS_ify
#define SYS_ify(syscall_name) __NR_##syscall_name
#ifdef ASSEMBLER
#ifdef DONT_LOAD_G1
# define LOADSYSCALL(x)
#else
# define LOADSYSCALL(x) mov __NR_##x, %g1
#endif
/* Linux/SPARC uses a different trap number */
#undef PSEUDO
#undef ENTRY
#define ENTRY(name) \
.global C_SYMBOL_NAME(name); \
.align 2; \
C_LABEL(name); \
.type name,@function;
#ifdef PIC
#define SYSCALL_ERROR_HANDLER1(R) \
.global C_SYMBOL_NAME(errno); \
.type C_SYMBOL_NAME(errno),@object; \
0: rd %pc,%g1; \
sethi %hi(_GLOBAL_OFFSET_TABLE_-(0b-.)),%g2; \
add %g2,%lo(_GLOBAL_OFFSET_TABLE_-(0b-.)),%g2; \
add %g2,%g1,%g1; \
sethi %hi(errno),%g2; \
add %g2,%lo(errno),%g2; \
ldx [%g1+%g2],%g2; \
st R,[%g2]
#else
#define SYSCALL_ERROR_HANDLER1(R) \
.global C_SYMBOL_NAME(errno); \
.type C_SYMBOL_NAME(errno),@object; \
sethi %hi(errno),%g1; \
add %g1,%g4,%g1; \
st R,[%g1+%lo(errno)]
#endif
#ifdef _LIBC_REENTRANT
#define SYSCALL_ERROR_HANDLER \
.global C_SYMBOL_NAME(__errno_location); \
.type C_SYMBOL_NAME(__errno_location),@function; \
save %sp,-128,%sp; \
SYSCALL_ERROR_HANDLER1(%i0); \
call __errno_location; \
nop; \
st %i0,[%o0]; \
sub %g0,1,%i0; \
jmpl %i7+8, %g0; \
restore
#else
#define SYSCALL_ERROR_HANDLER \
SYSCALL_ERROR_HANDLER1(%o0); \
retl; \
sub %g0,1,%i0
#endif
#define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY(name); \
LOADSYSCALL(syscall_name); \
ta 0x11; \
bcc,pt %xcc,1f; \
nop; \
SYSCALL_ERROR_HANDLER; \
1:
#undef PSEUDO_END
#define PSEUDO_END(name) \
.size name,.-name
#undef END
#define END(name) \
.size name,.-name
/* Careful here! This "ret" define can interfere; use jmpl if unsure. */
#define ret retl; nop
#define r0 %o0
#define r1 %o1
#define MOVE(x,y) mov x, y
#endif /* ASSEMBLER */
/* This is the offset from the %sp to the backing store above the
register windows. So if you poke stack memory directly you add this. */
#define STACK_BIAS 2047
#endif /* linux/sparc64/sysdep.h */

View file

@ -0,0 +1,67 @@
#ifndef _UCONTEXT_H
#define _UCONTEXT_H
#include <signal.h>
#define MC_TSTATE 0
#define MC_PC 1
#define MC_NPC 2
#define MC_Y 3
#define MC_G1 4
#define MC_G2 5
#define MC_G3 6
#define MC_G4 7
#define MC_G5 8
#define MC_G6 9
#define MC_G7 10
#define MC_O0 11
#define MC_O1 12
#define MC_O2 13
#define MC_O3 14
#define MC_O4 15
#define MC_O5 16
#define MC_O6 17
#define MC_O7 18
#define MC_NGREG 19
typedef unsigned long mc_greg_t;
typedef mc_greg_t mc_gregset_t[MC_NGREG];
#define MC_MAXFPQ 16
struct mc_fq {
unsigned long *mcfq_addr;
unsigned int mcfq_insn;
};
struct mc_fpu {
union {
unsigned int sregs[32];
unsigned long dregs[32];
long double qregs[16];
} mcfpu_fregs;
unsigned long mcfpu_fsr;
unsigned long mcfpu_fprs;
unsigned long mcfpu_gsr;
struct mc_fq *mcfpu_fq;
unsigned char mcfpu_qcnt;
unsigned char mcfpu_qentsz;
unsigned char mcfpu_enab;
};
typedef struct mc_fpu mc_fpu_t;
typedef struct {
mc_gregset_t mc_gregs;
mc_greg_t mc_fp;
mc_greg_t mc_i7;
mc_fpu_t mc_fpregs;
} mcontext_t;
struct ucontext {
struct ucontext *uc_link;
unsigned long uc_flags;
unsigned long uc_sigmask;
mcontext_t uc_mcontext;
};
typedef struct ucontext ucontext_t;
#endif /* ucontext.h */

View file

@ -13,6 +13,7 @@ geteuid - geteuid 0 __geteuid geteuid
getpgid - getpgid 1 __getpgid getpgid
getpgrp - getpgrp 0 getpgrp
getppid - getppid 0 __getppid getppid
getresgid EXTRA getresgid 3 getresgid
getresuid EXTRA getresuid 3 getresuid
getsid - getsid 1 getsid
init_module EXTRA init_module 5 init_module
@ -54,6 +55,7 @@ select - _newselect 5 __select select
setfsgid EXTRA setfsgid 1 setfsgid
setfsuid EXTRA setfsuid 1 setfsuid
setpgid - setpgid 2 __setpgid setpgid
setresgid EXTRA setresgid 3 setresgid
setresuid EXTRA setresuid 3 setresuid
sigpending - sigpending 1 sigpending
sigprocmask - sigprocmask 3 __sigprocmask sigprocmask