mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-15 17:40:06 +00:00
Update.
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:
parent
bca973bcd9
commit
5ae3e846b9
114
ChangeLog
114
ChangeLog
@ -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
3
config.guess
vendored
@ -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 ;;
|
||||
|
@ -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
4
config.sub
vendored
@ -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
114
configure
vendored
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
38
csu/Makefile
38
csu/Makefile
@ -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 > $@
|
||||
|
@ -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
|
||||
|
@ -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{%
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
|
@ -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)}},
|
||||
|
@ -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 */
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -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 &&
|
||||
|
3
sysdeps/powerpc/bits/endian.h
Normal file
3
sysdeps/powerpc/bits/endian.h
Normal file
@ -0,0 +1,3 @@
|
||||
/* PowerPC is big-endian. */
|
||||
|
||||
#define __BYTE_ORDER __BIG_ENDIAN
|
@ -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. */
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -17,6 +17,7 @@
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <sys/trap.h>
|
||||
|
||||
#define _ASM 1
|
||||
#include <bits/setjmp.h>
|
||||
|
@ -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
|
@ -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
|
@ -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
|
@ -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
7
sysdeps/sparc/sys/trap.h
Normal 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 */
|
@ -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
|
||||
|
@ -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
3
sysdeps/sparc64/Implies
Normal file
@ -0,0 +1,3 @@
|
||||
wordsize-64
|
||||
# SPARC uses IEEE 754 floating point.
|
||||
ieee754
|
11
sysdeps/sparc64/Makefile
Normal file
11
sysdeps/sparc64/Makefile
Normal 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
58
sysdeps/sparc64/add_n.S
Normal 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)
|
@ -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)
|
8
sysdeps/sparc64/bits/endian.h
Normal file
8
sysdeps/sparc64/bits/endian.h
Normal 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
|
43
sysdeps/sparc64/bsd-_setjmp.S
Normal file
43
sysdeps/sparc64/bsd-_setjmp.S
Normal 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)
|
41
sysdeps/sparc64/bsd-setjmp.S
Normal file
41
sysdeps/sparc64/bsd-setjmp.S
Normal 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
3
sysdeps/sparc64/configure
vendored
Executable file
@ -0,0 +1,3 @@
|
||||
# Local configure fragment for sysdeps/sparc64
|
||||
|
||||
nopic_initfini=yes
|
7
sysdeps/sparc64/configure.in
Normal file
7
sysdeps/sparc64/configure.in
Normal 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
|
304
sysdeps/sparc64/dl-machine.h
Normal file
304
sysdeps/sparc64/dl-machine.h
Normal 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");
|
10
sysdeps/sparc64/elf/Makefile
Normal file
10
sysdeps/sparc64/elf/Makefile
Normal 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
|
49
sysdeps/sparc64/elf/crtbegin.S
Normal file
49
sysdeps/sparc64/elf/crtbegin.S
Normal 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
|
1
sysdeps/sparc64/elf/crtbeginS.S
Normal file
1
sysdeps/sparc64/elf/crtbeginS.S
Normal file
@ -0,0 +1 @@
|
||||
#include "crtbegin.S"
|
50
sysdeps/sparc64/elf/crtend.S
Normal file
50
sysdeps/sparc64/elf/crtend.S
Normal 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
|
1
sysdeps/sparc64/elf/crtendS.S
Normal file
1
sysdeps/sparc64/elf/crtendS.S
Normal file
@ -0,0 +1 @@
|
||||
#include "crtend.S"
|
93
sysdeps/sparc64/elf/start.S
Normal file
93
sysdeps/sparc64/elf/start.S
Normal 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
|
69
sysdeps/sparc64/fpu_control.h
Normal file
69
sysdeps/sparc64/fpu_control.h
Normal 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
96
sysdeps/sparc64/lshift.S
Normal 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)
|
@ -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
93
sysdeps/sparc64/rshift.S
Normal 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
55
sysdeps/sparc64/sub_n.S
Normal 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)
|
@ -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)
|
@ -1 +0,0 @@
|
||||
itn errno;
|
@ -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
|
@ -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
|
||||
|
7
sysdeps/unix/sysv/linux/sparc/sys/trap.h
Normal file
7
sysdeps/unix/sysv/linux/sparc/sys/trap.h
Normal 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 */
|
4
sysdeps/unix/sysv/linux/sparc64/Makefile
Normal file
4
sysdeps/unix/sysv/linux/sparc64/Makefile
Normal file
@ -0,0 +1,4 @@
|
||||
ifeq ($(subdir),misc)
|
||||
sysdep_headers += ucontext.h
|
||||
sysdep_routines += getcontext setcontext
|
||||
endif
|
1
sysdeps/unix/sysv/linux/sparc64/__longjmp.S
Normal file
1
sysdeps/unix/sysv/linux/sparc64/__longjmp.S
Normal file
@ -0,0 +1 @@
|
||||
/* There is no need for __longjmp what with setcontext. */
|
26
sysdeps/unix/sysv/linux/sparc64/bits/setjmp.h
Normal file
26
sysdeps/unix/sysv/linux/sparc64/bits/setjmp.h
Normal 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 */
|
95
sysdeps/unix/sysv/linux/sparc64/bits/types.h
Normal file
95
sysdeps/unix/sysv/linux/sparc64/bits/types.h
Normal 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 */
|
97
sysdeps/unix/sysv/linux/sparc64/brk.S
Normal file
97
sysdeps/unix/sysv/linux/sparc64/brk.S
Normal 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)
|
89
sysdeps/unix/sysv/linux/sparc64/clone.S
Normal file
89
sysdeps/unix/sysv/linux/sparc64/clone.S
Normal 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
|
33
sysdeps/unix/sysv/linux/sparc64/fork.S
Normal file
33
sysdeps/unix/sysv/linux/sparc64/fork.S
Normal 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)
|
30
sysdeps/unix/sysv/linux/sparc64/getcontext.S
Normal file
30
sysdeps/unix/sysv/linux/sparc64/getcontext.S
Normal 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)
|
92
sysdeps/unix/sysv/linux/sparc64/init-first.h
Normal file
92
sysdeps/unix/sysv/linux/sparc64/init-first.h
Normal 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
|
22
sysdeps/unix/sysv/linux/sparc64/kernel_stat.h
Normal file
22
sysdeps/unix/sysv/linux/sparc64/kernel_stat.h
Normal 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
|
44
sysdeps/unix/sysv/linux/sparc64/longjmp.S
Normal file
44
sysdeps/unix/sysv/linux/sparc64/longjmp.S
Normal 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)
|
37
sysdeps/unix/sysv/linux/sparc64/pipe.S
Normal file
37
sysdeps/unix/sysv/linux/sparc64/pipe.S
Normal 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)
|
26
sysdeps/unix/sysv/linux/sparc64/profil-counter.h
Normal file
26
sysdeps/unix/sysv/linux/sparc64/profil-counter.h
Normal 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);
|
||||
}
|
33
sysdeps/unix/sysv/linux/sparc64/setcontext.S
Normal file
33
sysdeps/unix/sysv/linux/sparc64/setcontext.S
Normal 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)
|
48
sysdeps/unix/sysv/linux/sparc64/setjmp.S
Normal file
48
sysdeps/unix/sysv/linux/sparc64/setjmp.S
Normal 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)
|
1
sysdeps/unix/sysv/linux/sparc64/sigjmp.S
Normal file
1
sysdeps/unix/sysv/linux/sparc64/sigjmp.S
Normal file
@ -0,0 +1 @@
|
||||
/* There is no need for __sigjmp_save what with getcontext. */
|
26
sysdeps/unix/sysv/linux/sparc64/syscalls.list
Normal file
26
sysdeps/unix/sysv/linux/sparc64/syscalls.list
Normal 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
|
31
sysdeps/unix/sysv/linux/sparc64/sysdep.S
Normal file
31
sysdeps/unix/sysv/linux/sparc64/sysdep.S
Normal 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
|
116
sysdeps/unix/sysv/linux/sparc64/sysdep.h
Normal file
116
sysdeps/unix/sysv/linux/sparc64/sysdep.h
Normal 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 */
|
67
sysdeps/unix/sysv/linux/sparc64/ucontext.h
Normal file
67
sysdeps/unix/sysv/linux/sparc64/ucontext.h
Normal 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 */
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user