mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-31 14:01:18 +08:00
Update.
2000-10-14 Ulrich Drepper <drepper@redhat.com> * math/libm-test.inc (frexp_test): Add L suffix also to parameters. (hypot_test): Likewise. * sysdeps/generic/printf_fphex.c: Compute width of decimal point string correctly. Handle padding correctly. * sysdeps/ia64/fpu/printf_fphex.c: Use sizeof in _itowa parameters correctly. * sysdeps/ieee754/ldbl-128/printf_fphex.c: Likewise. * sysdeps/ieee754/ldbl-96/printf_fphex.c: Likewise. 2000-10-12 Alan Modra <alan@linuxcare.com.au> * FAQ.in: Add --start-group and --end-group. 2000-10-12 Alan Modra <alan@linuxcare.com.au> * malloc/memusage.c: Conditionalize stack usage calculation on stack direction. 2000-10-12 Alan Modra <alan@linuxcare.com.au> * config.h.in: Add ASM_LINE_SEP. * configure.in: Add test for comment and line separators. * include/libc-symbols.h: Define and use ASM_LINE_SEP, and add tabs to placate some hppa assemblers. * sysdeps/hppa/sysdep.h: Likewise. * sysdeps/gnu/siglist.c: Insert \n and \t into inline asm. * sysdeps/unix/sysv/linux/errlist.c: Likewise. 2000-10-12 David Huggins-Daines <dhd@linuxcare.com> * sysdeps/unix/sysv/linux/Makefile: Include <bits/initspin> in $(sysdep_headers). * sysdeps/unix/sysv/linux/bits/initspin.h: Dummy version for non-threaded platforms. 2000-10-12 David Huggins-Daines <dhd@linuxcare.com> * configure.in: Add definitions for hppa. * elf/elf.h: Add PLABEL32 relocation for hppa ELF32, comments for IPLT and EPLT relocations. * shlib-versions: Version symbol definitions for hppa-linux. * sysdeps/unix/sysv/linux/configure.in: Define $arch_minimum_kernel for hppa. 2000-10-12 David Huggins-Daines <dhd@linuxcare.com> * sysdeps/hppa/Makefile: New file. * sysdeps/hppa/Versions: New file. * sysdeps/hppa/setjmp.S: New file. * sysdeps/hppa/__longjmp.S: New file. * sysdeps/hppa/bits/setjmp.h: New file. * sysdeps/hppa/frame.h: New file. * sysdeps/hppa/add_n.s: Don't use %r19 (linkage table pointer). * sysdeps/hppa/sub_n.s: Likewise. * sysdeps/hppa/lshift.s: Likewise. * sysdeps/hppa/rshift.s: Likewise. * sysdeps/hppa/udiv_qrnnd.s: Likewise. * sysdeps/hppa/hppa1.1/addmul_1.s: Likewise. * sysdeps/hppa/hppa1.1/submul_1.s: Likewise. * sysdeps/hppa/hppa1.1/mul_1.s: Likewise. * sysdeps/hppa/hppa1.1/udiv_qrnnd.s: Likewise. * sysdeps/hppa/dl-machine.h: New file. * sysdeps/hppa/dl-fptr.c: New file (note that this is almost identical to the IA-64 one). * sysdeps/hppa/dl-lookupcfg.h: Likewise. * sysdeps/hppa/dl-symaddr.c: Likewise. * sysdeps/hppa/elf/initfini.c: New file. * sysdeps/hppa/elf/start.S: New file. * sysdeps/hppa/fpu/bits/fenv.h: New file. * sysdeps/hppa/fpu/fclrexcpt.c: New file. * sysdeps/hppa/fpu/fedisblxcpt.c: New file. * sysdeps/hppa/fpu/feenablxcpt.c: New file. * sysdeps/hppa/fpu/fegetenv.c: New file. * sysdeps/hppa/fpu/fegetexcept.c: New file. * sysdeps/hppa/fpu/fegetround.c: New file. * sysdeps/hppa/fpu/feholdexcpt.c: New file. * sysdeps/hppa/fpu/fesetenv.c: New file. * sysdeps/hppa/fpu/fesetround.c: New file. * sysdeps/hppa/fpu/feupdateenv.c: New file. * sysdeps/hppa/fpu/fegetexcptflg.c: New file. * sysdeps/hppa/fpu/fraiseexcpt.c: New file. * sysdeps/hppa/fpu/fsetexcptflg.c: New file. * sysdeps/hppa/fpu/ftestexcept.c: New file. * sysdeps/unix/sysv/linux/hppa/Makefile: New file. * sysdeps/unix/sysv/linux/hppa/Versions: New file. * sysdeps/unix/sysv/linux/hppa/syscalls.list: New file. * sysdeps/unix/sysv/linux/hppa/sysdep.c: New file. * sysdeps/unix/sysv/linux/hppa/sysdep.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/ioctls.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/mman.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/sigaction.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/signum.h: New file. * sysdeps/unix/sysv/linux/hppa/brk.c: New file. * sysdeps/unix/sysv/linux/hppa/clone.S: New file. * sysdeps/unix/sysv/linux/hppa/socket.S: New file. * sysdeps/unix/sysv/linux/hppa/syscall.S: New file. * sysdeps/unix/sysv/linux/hppa/setrlimit.c: New file. * sysdeps/unix/sysv/linux/hppa/getrlimit.c: New file. * sysdeps/unix/sysv/linux/hppa/getrlimit64.c: New file. * sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h: New file. * sysdeps/unix/sysv/linux/hppa/kernel_stat.h: New file. * sysdeps/unix/sysv/linux/hppa/mmap.c: New file. * sysdeps/unix/sysv/linux/hppa/profil-counter.h: New file. * sysdeps/unix/sysv/linux/hppa/procfs.h: New file. * sysdeps/unix/sysv/linux/hppa/ucontext.h: New file. * sysdeps/unix/sysv/linux/hppa/umount.c: New file. 2000-10-12 Alan Modra <alan@linuxcare.com.au> * sysdeps/hppa/hppa1.1/Implies: New file. * sysdeps/hppa/memusage.h: New file.
This commit is contained in:
parent
42be70d431
commit
b15cb49505
124
ChangeLog
124
ChangeLog
@ -1,3 +1,127 @@
|
||||
2000-10-14 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* math/libm-test.inc (frexp_test): Add L suffix also to parameters.
|
||||
(hypot_test): Likewise.
|
||||
|
||||
* sysdeps/generic/printf_fphex.c: Compute width of decimal point
|
||||
string correctly. Handle padding correctly.
|
||||
|
||||
* sysdeps/ia64/fpu/printf_fphex.c: Use sizeof in _itowa parameters
|
||||
correctly.
|
||||
* sysdeps/ieee754/ldbl-128/printf_fphex.c: Likewise.
|
||||
* sysdeps/ieee754/ldbl-96/printf_fphex.c: Likewise.
|
||||
|
||||
2000-10-12 Alan Modra <alan@linuxcare.com.au>
|
||||
|
||||
* FAQ.in: Add --start-group and --end-group.
|
||||
|
||||
2000-10-12 Alan Modra <alan@linuxcare.com.au>
|
||||
|
||||
* malloc/memusage.c: Conditionalize stack usage calculation on
|
||||
stack direction.
|
||||
|
||||
2000-10-12 Alan Modra <alan@linuxcare.com.au>
|
||||
|
||||
* config.h.in: Add ASM_LINE_SEP.
|
||||
* configure.in: Add test for comment and line separators.
|
||||
* include/libc-symbols.h: Define and use ASM_LINE_SEP, and add tabs to
|
||||
placate some hppa assemblers.
|
||||
* sysdeps/hppa/sysdep.h: Likewise.
|
||||
* sysdeps/gnu/siglist.c: Insert \n and \t into inline asm.
|
||||
* sysdeps/unix/sysv/linux/errlist.c: Likewise.
|
||||
|
||||
2000-10-12 David Huggins-Daines <dhd@linuxcare.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/Makefile: Include <bits/initspin> in
|
||||
$(sysdep_headers).
|
||||
* sysdeps/unix/sysv/linux/bits/initspin.h: Dummy version for
|
||||
non-threaded platforms.
|
||||
|
||||
2000-10-12 David Huggins-Daines <dhd@linuxcare.com>
|
||||
|
||||
* configure.in: Add definitions for hppa.
|
||||
* elf/elf.h: Add PLABEL32 relocation for hppa ELF32, comments
|
||||
for IPLT and EPLT relocations.
|
||||
* shlib-versions: Version symbol definitions for hppa-linux.
|
||||
* sysdeps/unix/sysv/linux/configure.in: Define $arch_minimum_kernel
|
||||
for hppa.
|
||||
|
||||
2000-10-12 David Huggins-Daines <dhd@linuxcare.com>
|
||||
|
||||
* sysdeps/hppa/Makefile: New file.
|
||||
* sysdeps/hppa/Versions: New file.
|
||||
|
||||
* sysdeps/hppa/setjmp.S: New file.
|
||||
* sysdeps/hppa/__longjmp.S: New file.
|
||||
* sysdeps/hppa/bits/setjmp.h: New file.
|
||||
* sysdeps/hppa/frame.h: New file.
|
||||
|
||||
* sysdeps/hppa/add_n.s: Don't use %r19 (linkage table pointer).
|
||||
* sysdeps/hppa/sub_n.s: Likewise.
|
||||
* sysdeps/hppa/lshift.s: Likewise.
|
||||
* sysdeps/hppa/rshift.s: Likewise.
|
||||
* sysdeps/hppa/udiv_qrnnd.s: Likewise.
|
||||
* sysdeps/hppa/hppa1.1/addmul_1.s: Likewise.
|
||||
* sysdeps/hppa/hppa1.1/submul_1.s: Likewise.
|
||||
* sysdeps/hppa/hppa1.1/mul_1.s: Likewise.
|
||||
* sysdeps/hppa/hppa1.1/udiv_qrnnd.s: Likewise.
|
||||
|
||||
* sysdeps/hppa/dl-machine.h: New file.
|
||||
* sysdeps/hppa/dl-fptr.c: New file (note that this is almost
|
||||
identical to the IA-64 one).
|
||||
* sysdeps/hppa/dl-lookupcfg.h: Likewise.
|
||||
* sysdeps/hppa/dl-symaddr.c: Likewise.
|
||||
|
||||
* sysdeps/hppa/elf/initfini.c: New file.
|
||||
* sysdeps/hppa/elf/start.S: New file.
|
||||
|
||||
* sysdeps/hppa/fpu/bits/fenv.h: New file.
|
||||
* sysdeps/hppa/fpu/fclrexcpt.c: New file.
|
||||
* sysdeps/hppa/fpu/fedisblxcpt.c: New file.
|
||||
* sysdeps/hppa/fpu/feenablxcpt.c: New file.
|
||||
* sysdeps/hppa/fpu/fegetenv.c: New file.
|
||||
* sysdeps/hppa/fpu/fegetexcept.c: New file.
|
||||
* sysdeps/hppa/fpu/fegetround.c: New file.
|
||||
* sysdeps/hppa/fpu/feholdexcpt.c: New file.
|
||||
* sysdeps/hppa/fpu/fesetenv.c: New file.
|
||||
* sysdeps/hppa/fpu/fesetround.c: New file.
|
||||
* sysdeps/hppa/fpu/feupdateenv.c: New file.
|
||||
* sysdeps/hppa/fpu/fegetexcptflg.c: New file.
|
||||
* sysdeps/hppa/fpu/fraiseexcpt.c: New file.
|
||||
* sysdeps/hppa/fpu/fsetexcptflg.c: New file.
|
||||
* sysdeps/hppa/fpu/ftestexcept.c: New file.
|
||||
|
||||
* sysdeps/unix/sysv/linux/hppa/Makefile: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/Versions: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/syscalls.list: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/sysdep.c: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/sysdep.h: New file.
|
||||
|
||||
* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/bits/ioctls.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/bits/mman.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/bits/sigaction.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/bits/signum.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/brk.c: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/clone.S: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/socket.S: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/syscall.S: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/setrlimit.c: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/getrlimit.c: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/getrlimit64.c: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/kernel_stat.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/mmap.c: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/profil-counter.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/procfs.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/ucontext.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/umount.c: New file.
|
||||
|
||||
2000-10-12 Alan Modra <alan@linuxcare.com.au>
|
||||
|
||||
* sysdeps/hppa/hppa1.1/Implies: New file.
|
||||
* sysdeps/hppa/memusage.h: New file.
|
||||
|
||||
2000-10-28 Jes Sorensen <jes@linuxcare.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/ia64/Versions: Export ioperm, iopl, inb,
|
||||
|
4
FAQ.in
4
FAQ.in
@ -811,8 +811,8 @@ can create a static binary that will use only the services dns and files
|
||||
(change /etc/nsswitch.conf for this). You need to link explicitly against
|
||||
all these services. For example:
|
||||
|
||||
gcc -static test-netdb.c -o test-netdb.c \
|
||||
-lc -lnss_files -lnss_dns -lresolv
|
||||
gcc -static test-netdb.c -o test-netdb \
|
||||
-Wl,--start-group -lc -lnss_files -lnss_dns -lresolv -Wl,--end-group
|
||||
|
||||
The problem with this approach is that you've got to link every static
|
||||
program that uses NSS routines with all those libraries.
|
||||
|
@ -18,6 +18,10 @@
|
||||
/* Define if weak symbols are available via the `.weakext' directive. */
|
||||
#undef HAVE_ASM_WEAKEXT_DIRECTIVE
|
||||
|
||||
/* Define to the assembler line separator character for multiple
|
||||
assembler instructions per line. Default is `;' */
|
||||
#undef ASM_LINE_SEP
|
||||
|
||||
/* Define if not using ELF, but `.init' and `.fini' sections are available. */
|
||||
#undef HAVE_INITFINI
|
||||
|
||||
|
246
configure
vendored
246
configure
vendored
@ -949,7 +949,8 @@ alpha*) base_machine=alpha machine=alpha/$machine ;;
|
||||
arm*) base_machine=arm machine=arm/$machine ;;
|
||||
c3[012]) base_machine=cx0 machine=cx0/c30 ;;
|
||||
c4[04]) base_machine=cx0 machine=cx0/c40 ;;
|
||||
hppa*) base_machine=hppa machine=hppa/$machine ;;
|
||||
hppa*64*) base_machine=hppa machine=hppa/hppa64 ;;
|
||||
hppa*) base_machine=hppa machine=hppa/hppa1.1 ;;
|
||||
i[3456]86) base_machine=i386 machine=i386/$machine ;;
|
||||
ia64) base_machine=ia64 machine=ia64 ;;
|
||||
m680?0) base_machine=m68k machine=m68k/$machine ;;
|
||||
@ -986,7 +987,7 @@ fi
|
||||
# This can take a while to compute.
|
||||
sysdep_dir=$srcdir/sysdeps
|
||||
echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
|
||||
echo "configure:990: checking sysdep dirs" >&5
|
||||
echo "configure:991: 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'`"
|
||||
|
||||
@ -1192,7 +1193,7 @@ echo "$ac_t""$default_sysnames" 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:1196: checking for a BSD compatible install" >&5
|
||||
echo "configure:1197: 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
|
||||
@ -1249,7 +1250,7 @@ if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
|
||||
INSTALL='\$(..)./scripts/install-sh -c'
|
||||
fi
|
||||
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
|
||||
echo "configure:1253: checking whether ln -s works" >&5
|
||||
echo "configure:1254: 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
|
||||
@ -1278,7 +1279,7 @@ fi
|
||||
# Extract the first word of "pwd", so it can be a program name with args.
|
||||
set dummy pwd; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1282: checking for $ac_word" >&5
|
||||
echo "configure:1283: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_path_PWD_P'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -1317,7 +1318,7 @@ fi
|
||||
|
||||
# These programs are version sensitive.
|
||||
echo $ac_n "checking build system type""... $ac_c" 1>&6
|
||||
echo "configure:1321: checking build system type" >&5
|
||||
echo "configure:1322: checking build system type" >&5
|
||||
|
||||
build_alias=$build
|
||||
case "$build_alias" in
|
||||
@ -1345,7 +1346,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:1349: checking for $ac_word" >&5
|
||||
echo "configure:1350: 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
|
||||
@ -1379,7 +1380,7 @@ if test -z "$CC"; then
|
||||
else
|
||||
# Found it, now check the version.
|
||||
echo $ac_n "checking version of $CC""... $ac_c" 1>&6
|
||||
echo "configure:1383: checking version of $CC" >&5
|
||||
echo "configure:1384: checking version of $CC" >&5
|
||||
ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
|
||||
case $ac_prog_version in
|
||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
@ -1399,7 +1400,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:1403: checking for $ac_word" >&5
|
||||
echo "configure:1404: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -1433,7 +1434,7 @@ if test -z "$MAKE"; then
|
||||
else
|
||||
# Found it, now check the version.
|
||||
echo $ac_n "checking version of $MAKE""... $ac_c" 1>&6
|
||||
echo "configure:1437: checking version of $MAKE" >&5
|
||||
echo "configure:1438: checking version of $MAKE" >&5
|
||||
ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
|
||||
case $ac_prog_version in
|
||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
@ -1454,7 +1455,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:1458: checking for $ac_word" >&5
|
||||
echo "configure:1459: 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
|
||||
@ -1488,7 +1489,7 @@ if test -z "$MSGFMT"; then
|
||||
else
|
||||
# Found it, now check the version.
|
||||
echo $ac_n "checking version of $MSGFMT""... $ac_c" 1>&6
|
||||
echo "configure:1492: checking version of $MSGFMT" >&5
|
||||
echo "configure:1493: checking version of $MSGFMT" >&5
|
||||
ac_prog_version=`$MSGFMT --version 2>&1 | sed -n 's/^.*GNU gettext.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
|
||||
case $ac_prog_version in
|
||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
@ -1508,7 +1509,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:1512: checking for $ac_word" >&5
|
||||
echo "configure:1513: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -1542,7 +1543,7 @@ if test -z "$MAKEINFO"; then
|
||||
else
|
||||
# Found it, now check the version.
|
||||
echo $ac_n "checking version of $MAKEINFO""... $ac_c" 1>&6
|
||||
echo "configure:1546: checking version of $MAKEINFO" >&5
|
||||
echo "configure:1547: checking version of $MAKEINFO" >&5
|
||||
ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
|
||||
case $ac_prog_version in
|
||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
@ -1562,7 +1563,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:1566: checking for $ac_word" >&5
|
||||
echo "configure:1567: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_SED'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -1596,7 +1597,7 @@ if test -z "$SED"; then
|
||||
else
|
||||
# Found it, now check the version.
|
||||
echo $ac_n "checking version of $SED""... $ac_c" 1>&6
|
||||
echo "configure:1600: checking version of $SED" >&5
|
||||
echo "configure:1601: checking version of $SED" >&5
|
||||
ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
|
||||
case $ac_prog_version in
|
||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
@ -1629,7 +1630,7 @@ CCVERSION=`$CC -v 2>&1 | sed -n 's/gcc version //p'`
|
||||
|
||||
|
||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
|
||||
echo "configure:1633: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
||||
echo "configure:1634: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_cc_works'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -1643,12 +1644,12 @@ cross_compiling=$ac_cv_prog_cc_cross
|
||||
|
||||
cat > conftest.$ac_ext << EOF
|
||||
|
||||
#line 1647 "configure"
|
||||
#line 1648 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
main(){return(0);}
|
||||
EOF
|
||||
if { (eval echo configure:1652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:1653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; 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
|
||||
@ -1679,7 +1680,7 @@ 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:1683: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||||
echo "configure:1684: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_cc_cross'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -1691,7 +1692,7 @@ 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:1695: checking whether we are using GNU C" >&5
|
||||
echo "configure:1696: 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
|
||||
@ -1700,7 +1701,7 @@ else
|
||||
yes;
|
||||
#endif
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1704: \"$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:1705: \"$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
|
||||
@ -1713,7 +1714,7 @@ if test $ac_cv_prog_gcc != yes; then
|
||||
fi
|
||||
|
||||
echo $ac_n "checking build system type""... $ac_c" 1>&6
|
||||
echo "configure:1717: checking build system type" >&5
|
||||
echo "configure:1718: checking build system type" >&5
|
||||
|
||||
build_alias=$build
|
||||
case "$build_alias" in
|
||||
@ -1736,7 +1737,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:1740: checking for $ac_word" >&5
|
||||
echo "configure:1741: 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
|
||||
@ -1768,7 +1769,7 @@ done
|
||||
fi
|
||||
|
||||
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
||||
echo "configure:1772: checking how to run the C preprocessor" >&5
|
||||
echo "configure:1773: checking how to run the C preprocessor" >&5
|
||||
# On Suns, sometimes $CPP names a directory.
|
||||
if test -n "$CPP" && test -d "$CPP"; then
|
||||
CPP=
|
||||
@ -1783,13 +1784,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 1787 "configure"
|
||||
#line 1788 "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:1793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:1794: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
:
|
||||
@ -1800,13 +1801,13 @@ else
|
||||
rm -rf conftest*
|
||||
CPP="${CC-cc} -E -traditional-cpp"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1804 "configure"
|
||||
#line 1805 "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:1810: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:1811: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
:
|
||||
@ -1817,13 +1818,13 @@ else
|
||||
rm -rf conftest*
|
||||
CPP="${CC-cc} -nologo -E"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1821 "configure"
|
||||
#line 1822 "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:1827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:1828: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
:
|
||||
@ -1866,7 +1867,7 @@ if test $RANLIB = ranlib; then
|
||||
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
|
||||
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1870: checking for $ac_word" >&5
|
||||
echo "configure:1871: 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
|
||||
@ -1898,7 +1899,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:1902: checking for $ac_word" >&5
|
||||
echo "configure:1903: 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
|
||||
@ -1935,7 +1936,7 @@ fi
|
||||
|
||||
# Determine whether we are using GNU binutils.
|
||||
echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6
|
||||
echo "configure:1939: checking whether $AS is GNU as" >&5
|
||||
echo "configure:1940: checking whether $AS is GNU as" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_prog_as_gnu'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -1954,7 +1955,7 @@ rm -f a.out
|
||||
gnu_as=$libc_cv_prog_as_gnu
|
||||
|
||||
echo $ac_n "checking whether $LD is GNU ld""... $ac_c" 1>&6
|
||||
echo "configure:1958: checking whether $LD is GNU ld" >&5
|
||||
echo "configure:1959: checking whether $LD is GNU ld" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_prog_ld_gnu'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -1974,7 +1975,7 @@ gnu_ld=$libc_cv_prog_ld_gnu
|
||||
# Extract the first word of "${ac_tool_prefix}mig", so it can be a program name with args.
|
||||
set dummy ${ac_tool_prefix}mig; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1978: checking for $ac_word" >&5
|
||||
echo "configure:1979: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_MIG'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2015,7 +2016,7 @@ fi
|
||||
|
||||
# check if ranlib is necessary
|
||||
echo $ac_n "checking whether ranlib is necessary""... $ac_c" 1>&6
|
||||
echo "configure:2019: checking whether ranlib is necessary" >&5
|
||||
echo "configure:2020: checking whether ranlib is necessary" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_ranlib_necessary'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2049,7 +2050,7 @@ fi
|
||||
# - two terminals occur directly after each other
|
||||
# - the path contains an element with a dot in it
|
||||
echo $ac_n "checking LD_LIBRARY_PATH variable""... $ac_c" 1>&6
|
||||
echo "configure:2053: checking LD_LIBRARY_PATH variable" >&5
|
||||
echo "configure:2054: checking LD_LIBRARY_PATH variable" >&5
|
||||
case ${LD_LIBRARY_PATH} in
|
||||
[:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
|
||||
ld_library_path_setting="contains current directory"
|
||||
@ -2069,7 +2070,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:2073: checking for $ac_word" >&5
|
||||
echo "configure:2074: 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
|
||||
@ -2115,7 +2116,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:2119: checking for $ac_word" >&5
|
||||
echo "configure:2120: 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
|
||||
@ -2165,7 +2166,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:2169: checking for $ac_word" >&5
|
||||
echo "configure:2170: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2197,7 +2198,7 @@ done
|
||||
# Extract the first word of "perl", so it can be a program name with args.
|
||||
set dummy perl; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:2201: checking for $ac_word" >&5
|
||||
echo "configure:2202: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2237,7 +2238,7 @@ fi
|
||||
# Extract the first word of "install-info", so it can be a program name with args.
|
||||
set dummy install-info; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:2241: checking for $ac_word" >&5
|
||||
echo "configure:2242: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_path_INSTALL_INFO'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2272,7 +2273,7 @@ fi
|
||||
|
||||
if test "$INSTALL_INFO" != "no"; then
|
||||
echo $ac_n "checking for old Debian install-info""... $ac_c" 1>&6
|
||||
echo "configure:2276: checking for old Debian install-info" >&5
|
||||
echo "configure:2277: checking for old Debian install-info" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_old_debian_install_info'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2305,7 +2306,7 @@ fi
|
||||
|
||||
|
||||
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
|
||||
echo "configure:2309: checking for signed size_t type" >&5
|
||||
echo "configure:2310: 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
|
||||
@ -2329,12 +2330,12 @@ EOF
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
|
||||
echo "configure:2333: checking for libc-friendly stddef.h" >&5
|
||||
echo "configure:2334: 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 2338 "configure"
|
||||
#line 2339 "configure"
|
||||
#include "confdefs.h"
|
||||
#define __need_size_t
|
||||
#define __need_wchar_t
|
||||
@ -2349,7 +2350,7 @@ size_t size; wchar_t wchar;
|
||||
if (&size == NULL || &wchar == NULL) abort ();
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2353: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:2354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
libc_cv_friendly_stddef=yes
|
||||
else
|
||||
@ -2368,7 +2369,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:2372: checking whether we need to use -P to assemble .S files" >&5
|
||||
echo "configure:2373: 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
|
||||
@ -2391,7 +2392,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
|
||||
fi
|
||||
|
||||
echo $ac_n "checking whether .text pseudo-op must be used""... $ac_c" 1>&6
|
||||
echo "configure:2395: checking whether .text pseudo-op must be used" >&5
|
||||
echo "configure:2396: checking whether .text pseudo-op must be used" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_dot_text'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2412,7 +2413,7 @@ else
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
|
||||
echo "configure:2416: checking for assembler global-symbol directive" >&5
|
||||
echo "configure:2417: 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
|
||||
@ -2442,7 +2443,7 @@ EOF
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
|
||||
echo "configure:2446: checking for .set assembler directive" >&5
|
||||
echo "configure:2447: 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
|
||||
@ -2476,7 +2477,7 @@ EOF
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
|
||||
echo "configure:2480: checking for .symver assembler directive" >&5
|
||||
echo "configure:2481: 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
|
||||
@ -2495,7 +2496,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:2499: checking for ld --version-script" >&5
|
||||
echo "configure:2500: 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
|
||||
@ -2518,7 +2519,7 @@ EOF
|
||||
if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
|
||||
-nostartfiles -nostdlib
|
||||
-Wl,--version-script,conftest.map
|
||||
1>&5'; { (eval echo configure:2522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
||||
1>&5'; { (eval echo configure:2523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
||||
then
|
||||
libc_cv_ld_version_script_option=yes
|
||||
else
|
||||
@ -2557,7 +2558,7 @@ if test $shared != no && test $VERSIONING = no; then
|
||||
fi
|
||||
if test $elf = yes; then
|
||||
echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
|
||||
echo "configure:2561: checking for .previous assembler directive" >&5
|
||||
echo "configure:2562: 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
|
||||
@ -2565,7 +2566,7 @@ else
|
||||
.section foo_section
|
||||
.previous
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2569: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2570: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_asm_previous_directive=yes
|
||||
else
|
||||
libc_cv_asm_previous_directive=no
|
||||
@ -2581,7 +2582,7 @@ EOF
|
||||
|
||||
else
|
||||
echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
|
||||
echo "configure:2585: checking for .popsection assembler directive" >&5
|
||||
echo "configure:2586: 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
|
||||
@ -2589,7 +2590,7 @@ else
|
||||
.pushsection foo_section
|
||||
.popsection
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2593: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2594: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_asm_popsection_directive=yes
|
||||
else
|
||||
libc_cv_asm_popsection_directive=no
|
||||
@ -2606,7 +2607,7 @@ EOF
|
||||
fi
|
||||
fi
|
||||
echo $ac_n "checking for .protected and .hidden assembler directive""... $ac_c" 1>&6
|
||||
echo "configure:2610: checking for .protected and .hidden assembler directive" >&5
|
||||
echo "configure:2611: checking for .protected and .hidden assembler directive" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_asm_protected_directive'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2616,7 +2617,7 @@ foo:
|
||||
.hidden bar
|
||||
bar:
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2620: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2621: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_asm_protected_directive=yes
|
||||
else
|
||||
libc_cv_asm_protected_directive=no
|
||||
@ -2628,14 +2629,14 @@ echo "$ac_t""$libc_cv_asm_protected_directive" 1>&6
|
||||
|
||||
|
||||
echo $ac_n "checking for -z nodelete option""... $ac_c" 1>&6
|
||||
echo "configure:2632: checking for -z nodelete option" >&5
|
||||
echo "configure:2633: checking for -z nodelete option" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_z_nodelete'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
int _start (void) { return 42; }
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2639: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
|
||||
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2640: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
|
||||
then
|
||||
libc_cv_z_nodelete=yes
|
||||
else
|
||||
@ -2648,14 +2649,14 @@ echo "$ac_t""$libc_cv_z_nodelete" 1>&6
|
||||
|
||||
|
||||
echo $ac_n "checking for -z nodlopen option""... $ac_c" 1>&6
|
||||
echo "configure:2652: checking for -z nodlopen option" >&5
|
||||
echo "configure:2653: checking for -z nodlopen option" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_z_nodlopen'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
int _start (void) { return 42; }
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2659: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
|
||||
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2660: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
|
||||
then
|
||||
libc_cv_z_nodlopen=yes
|
||||
else
|
||||
@ -2670,12 +2671,12 @@ fi
|
||||
|
||||
if test $elf != yes; then
|
||||
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
|
||||
echo "configure:2674: checking for .init and .fini sections" >&5
|
||||
echo "configure:2675: 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 2679 "configure"
|
||||
#line 2680 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() {
|
||||
@ -2684,7 +2685,7 @@ asm (".section .init");
|
||||
asm ("${libc_cv_dot_text}");
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:2689: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
libc_cv_have_initfini=yes
|
||||
else
|
||||
@ -2707,7 +2708,7 @@ fi
|
||||
|
||||
if test $elf = yes -a $gnu_ld = yes; then
|
||||
echo $ac_n "checking whether cc puts quotes around section names""... $ac_c" 1>&6
|
||||
echo "configure:2711: checking whether cc puts quotes around section names" >&5
|
||||
echo "configure:2712: checking whether cc puts quotes around section names" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2744,19 +2745,19 @@ if test $elf = yes; then
|
||||
else
|
||||
if test $ac_cv_prog_cc_works = yes; then
|
||||
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
|
||||
echo "configure:2748: checking for _ prefix on C symbol names" >&5
|
||||
echo "configure:2749: 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 2753 "configure"
|
||||
#line 2754 "configure"
|
||||
#include "confdefs.h"
|
||||
asm ("_glibc_foobar:");
|
||||
int main() {
|
||||
glibc_foobar ();
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:2761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
libc_cv_asm_underscores=yes
|
||||
else
|
||||
@ -2771,17 +2772,17 @@ fi
|
||||
echo "$ac_t""$libc_cv_asm_underscores" 1>&6
|
||||
else
|
||||
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
|
||||
echo "configure:2775: checking for _ prefix on C symbol names" >&5
|
||||
echo "configure:2776: 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 2780 "configure"
|
||||
#line 2781 "configure"
|
||||
#include "confdefs.h"
|
||||
void underscore_test(void) {
|
||||
return; }
|
||||
EOF
|
||||
if { (eval echo configure:2785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:2786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if grep _underscore_test conftest* >/dev/null; then
|
||||
rm -f conftest*
|
||||
libc_cv_asm_underscores=yes
|
||||
@ -2813,7 +2814,7 @@ if test $elf = yes; then
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
|
||||
echo "configure:2817: checking for assembler .weak directive" >&5
|
||||
echo "configure:2818: 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
|
||||
@ -2836,7 +2837,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:2840: checking for assembler .weakext directive" >&5
|
||||
echo "configure:2841: 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
|
||||
@ -2873,8 +2874,39 @@ EOF
|
||||
|
||||
fi
|
||||
|
||||
case "${host_cpu}-${host_os}" in
|
||||
hppa*linux*)
|
||||
echo $ac_n "checking for assembler line separator""... $ac_c" 1>&6
|
||||
echo "configure:2881: checking for assembler line separator" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_asm_line_sep'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.s <<EOF
|
||||
nop ; is_old_puffin
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_asm_line_sep='!'
|
||||
else
|
||||
if test -z "$enable_hacker_mode"; then
|
||||
echo "*** You need a newer assembler to compile glibc"
|
||||
rm -f conftest*
|
||||
exit 1
|
||||
fi
|
||||
libc_cv_asm_line_sep=';'
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
|
||||
echo "$ac_t""$libc_cv_asm_line_sep" 1>&6
|
||||
cat >> confdefs.h <<EOF
|
||||
#define ASM_LINE_SEP $libc_cv_asm_line_sep
|
||||
EOF
|
||||
|
||||
;;
|
||||
esac
|
||||
|
||||
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
|
||||
echo "configure:2878: checking for ld --no-whole-archive" >&5
|
||||
echo "configure:2910: 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
|
||||
@ -2885,7 +2917,7 @@ __throw () {}
|
||||
EOF
|
||||
if { ac_try='${CC-cc} $CFLAGS
|
||||
-nostdlib -nostartfiles -Wl,--no-whole-archive
|
||||
-o conftest conftest.c 1>&5'; { (eval echo configure:2889: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
-o conftest conftest.c 1>&5'; { (eval echo configure:2921: \"$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
|
||||
@ -2899,7 +2931,7 @@ if test $libc_cv_ld_no_whole_archive = yes; then
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6
|
||||
echo "configure:2903: checking for gcc -fexceptions" >&5
|
||||
echo "configure:2935: checking for gcc -fexceptions" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -2910,7 +2942,7 @@ __throw () {}
|
||||
EOF
|
||||
if { ac_try='${CC-cc} $CFLAGS
|
||||
-nostdlib -nostartfiles -fexceptions
|
||||
-o conftest conftest.c 1>&5'; { (eval echo configure:2914: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
-o conftest conftest.c 1>&5'; { (eval echo configure:2946: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_gcc_exceptions=yes
|
||||
else
|
||||
libc_cv_gcc_exceptions=no
|
||||
@ -2925,14 +2957,14 @@ fi
|
||||
|
||||
if test "$base_machine" = alpha ; then
|
||||
echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6
|
||||
echo "configure:2929: checking for function ..ng prefix" >&5
|
||||
echo "configure:2961: checking for function ..ng prefix" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.c <<\EOF
|
||||
foo () { }
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2936: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
||||
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2968: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
||||
then
|
||||
libc_cv_gcc_alpha_ng_prefix=yes
|
||||
else
|
||||
@ -2959,19 +2991,19 @@ if test "$host_cpu" = powerpc ; then
|
||||
# Check for a bug present in at least versions 2.8.x of GCC
|
||||
# and versions 1.0.x of EGCS.
|
||||
echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6
|
||||
echo "configure:2963: checking whether clobbering cr0 causes problems" >&5
|
||||
echo "configure:2995: checking whether clobbering cr0 causes problems" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2968 "configure"
|
||||
#line 3000 "configure"
|
||||
#include "confdefs.h"
|
||||
int tester(int x) { asm ("" : : : "cc"); return x & 123; }
|
||||
int main() {
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:3007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
libc_cv_c_asmcr0_bug='no'
|
||||
else
|
||||
@ -2993,12 +3025,12 @@ fi
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
|
||||
echo "configure:2997: checking for DWARF2 unwind info support" >&5
|
||||
echo "configure:3029: checking for DWARF2 unwind info support" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
#line 3002 "configure"
|
||||
#line 3034 "configure"
|
||||
static char __EH_FRAME_BEGIN__;
|
||||
_start ()
|
||||
{
|
||||
@ -3025,7 +3057,7 @@ __bzero () {}
|
||||
EOF
|
||||
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info
|
||||
-nostdlib -nostartfiles
|
||||
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3029: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3061: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_gcc_dwarf2_unwind_info=static
|
||||
else
|
||||
libc_cv_gcc_dwarf2_unwind_info=no
|
||||
@ -3033,7 +3065,7 @@ fi
|
||||
if test $libc_cv_gcc_dwarf2_unwind_info = no; then
|
||||
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame
|
||||
-nostdlib -nostartfiles
|
||||
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3037: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3069: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_gcc_dwarf2_unwind_info=yes
|
||||
else
|
||||
libc_cv_gcc_dwarf2_unwind_info=no
|
||||
@ -3063,12 +3095,12 @@ EOF
|
||||
esac
|
||||
|
||||
echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6
|
||||
echo "configure:3067: checking for __builtin_expect" >&5
|
||||
echo "configure:3099: checking for __builtin_expect" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
#line 3072 "configure"
|
||||
#line 3104 "configure"
|
||||
int foo (int a)
|
||||
{
|
||||
a = __builtin_expect (a, 10);
|
||||
@ -3076,7 +3108,7 @@ int foo (int a)
|
||||
}
|
||||
EOF
|
||||
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
|
||||
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3080: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3112: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_gcc_builtin_expect=yes
|
||||
else
|
||||
libc_cv_gcc_builtin_expect=no
|
||||
@ -3093,12 +3125,12 @@ EOF
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for local label subtraction""... $ac_c" 1>&6
|
||||
echo "configure:3097: checking for local label subtraction" >&5
|
||||
echo "configure:3129: checking for local label subtraction" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_gcc_subtract_local_labels'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
#line 3102 "configure"
|
||||
#line 3134 "configure"
|
||||
int foo (int a)
|
||||
{
|
||||
static const int ar[] = { &&l1 - &&l1, &&l2 - &&l1 };
|
||||
@ -3111,7 +3143,7 @@ int foo (int a)
|
||||
}
|
||||
EOF
|
||||
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
|
||||
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3115: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3147: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_gcc_subtract_local_labels=yes
|
||||
else
|
||||
libc_cv_gcc_subtract_local_labels=no
|
||||
@ -3128,7 +3160,7 @@ EOF
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for libgd""... $ac_c" 1>&6
|
||||
echo "configure:3132: checking for libgd" >&5
|
||||
echo "configure:3164: checking for libgd" >&5
|
||||
old_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $libgd_include"
|
||||
old_LDFLAGS="$LDFLAGS"
|
||||
@ -3136,14 +3168,14 @@ LDFLAGS="$LDFLAGS $libgd_ldflags"
|
||||
old_LIBS="$LIBS"
|
||||
LIBS="$LIBS -lgd -lpng -lz -lm"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 3140 "configure"
|
||||
#line 3172 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <gd.h>
|
||||
int main() {
|
||||
gdImagePng (0, 0)
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:3147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:3179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
LIBGD=yes
|
||||
else
|
||||
@ -3160,7 +3192,7 @@ echo "$ac_t""$LIBGD" 1>&6
|
||||
|
||||
|
||||
echo $ac_n "checking size of long double""... $ac_c" 1>&6
|
||||
echo "configure:3164: checking size of long double" >&5
|
||||
echo "configure:3196: checking size of long double" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@ -3168,7 +3200,7 @@ else
|
||||
ac_cv_sizeof_long_double=0
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 3172 "configure"
|
||||
#line 3204 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdio.h>
|
||||
main()
|
||||
@ -3179,7 +3211,7 @@ main()
|
||||
exit(0);
|
||||
}
|
||||
EOF
|
||||
if { (eval echo configure:3183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:3215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
ac_cv_sizeof_long_double=`cat conftestval`
|
||||
else
|
||||
@ -3247,7 +3279,7 @@ if test "$uname" = "sysdeps/generic"; then
|
||||
fi
|
||||
|
||||
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
|
||||
echo "configure:3251: checking OS release for uname" >&5
|
||||
echo "configure:3283: 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
|
||||
@ -3269,7 +3301,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:3273: checking OS version for uname" >&5
|
||||
echo "configure:3305: 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
|
||||
@ -3291,7 +3323,7 @@ else
|
||||
fi
|
||||
|
||||
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
|
||||
echo "configure:3295: checking stdio selection" >&5
|
||||
echo "configure:3327: checking stdio selection" >&5
|
||||
|
||||
case $stdio in
|
||||
libio) cat >> confdefs.h <<\EOF
|
||||
@ -3305,7 +3337,7 @@ echo "$ac_t""$stdio" 1>&6
|
||||
# Test for old glibc 2.0.x headers so that they can be removed properly
|
||||
# Search only in includedir.
|
||||
echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6
|
||||
echo "configure:3309: checking for old glibc 2.0.x headers" >&5
|
||||
echo "configure:3341: checking for old glibc 2.0.x headers" >&5
|
||||
if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h"
|
||||
then
|
||||
old_glibc_headers=yes
|
||||
@ -3360,7 +3392,7 @@ if test $shared = default; then
|
||||
fi
|
||||
|
||||
echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6
|
||||
echo "configure:3364: checking whether -fPIC is default" >&5
|
||||
echo "configure:3396: checking whether -fPIC is default" >&5
|
||||
if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
27
configure.in
27
configure.in
@ -255,7 +255,8 @@ alpha*) base_machine=alpha machine=alpha/$machine ;;
|
||||
arm*) base_machine=arm machine=arm/$machine ;;
|
||||
c3[012]) base_machine=cx0 machine=cx0/c30 ;;
|
||||
c4[04]) base_machine=cx0 machine=cx0/c40 ;;
|
||||
hppa*) base_machine=hppa machine=hppa/$machine ;;
|
||||
hppa*64*) base_machine=hppa machine=hppa/hppa64 ;;
|
||||
hppa*) base_machine=hppa machine=hppa/hppa1.1 ;;
|
||||
i[3456]86) base_machine=i386 machine=i386/$machine ;;
|
||||
ia64) base_machine=ia64 machine=ia64 ;;
|
||||
m680?0) base_machine=m68k machine=m68k/$machine ;;
|
||||
@ -1049,6 +1050,30 @@ elif test $libc_cv_asm_weakext_directive = yes; then
|
||||
AC_DEFINE(HAVE_ASM_WEAKEXT_DIRECTIVE)
|
||||
fi
|
||||
|
||||
dnl The standard hppa assembler uses `;' to start comments and `!'
|
||||
dnl as a line separator.
|
||||
case "${host_cpu}-${host_os}" in
|
||||
hppa*linux*)
|
||||
AC_CACHE_CHECK(for assembler line separator,
|
||||
libc_cv_asm_line_sep, [dnl
|
||||
cat > conftest.s <<EOF
|
||||
nop ; is_old_puffin
|
||||
EOF
|
||||
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AC_FD_CC); then
|
||||
libc_cv_asm_line_sep='!'
|
||||
else
|
||||
if test -z "$enable_hacker_mode"; then
|
||||
echo "*** You need a newer assembler to compile glibc"
|
||||
rm -f conftest*
|
||||
exit 1
|
||||
fi
|
||||
libc_cv_asm_line_sep=';'
|
||||
fi
|
||||
rm -f conftest*])
|
||||
AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep)
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_CACHE_CHECK(for ld --no-whole-archive, libc_cv_ld_no_whole_archive, [dnl
|
||||
cat > conftest.c <<\EOF
|
||||
_start () {}
|
||||
|
@ -1520,6 +1520,7 @@ typedef Elf32_Addr Elf32_Conflict;
|
||||
#define R_PARISC_LTOFF_FPTR21L 58 /* LT-rel. fct ptr, left 21 bits. */
|
||||
#define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */
|
||||
#define R_PARISC_FPTR64 64 /* 64 bits function address. */
|
||||
#define R_PARISC_PLABEL32 65 /* 32 bits function address. */
|
||||
#define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */
|
||||
#define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */
|
||||
#define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */
|
||||
@ -1560,8 +1561,8 @@ typedef Elf32_Addr Elf32_Conflict;
|
||||
#define R_PARISC_LTOFF_FPTR16DF 127 /* 16 bits LT-rel. function ptr. */
|
||||
#define R_PARISC_LORESERVE 128
|
||||
#define R_PARISC_COPY 128 /* Copy relocation. */
|
||||
#define R_PARISC_IPLT 129
|
||||
#define R_PARISC_EPLT 130
|
||||
#define R_PARISC_IPLT 129 /* Dynamic reloc, imported PLT */
|
||||
#define R_PARISC_EPLT 130 /* Dynamic reloc, exported PLT */
|
||||
#define R_PARISC_TPREL32 153 /* 32 bits TP-rel. address. */
|
||||
#define R_PARISC_TPREL21L 154 /* TP-rel. address, left 21 bits. */
|
||||
#define R_PARISC_TPREL14R 158 /* TP-rel. address, right 14 bits. */
|
||||
|
@ -76,6 +76,10 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef ASM_LINE_SEP
|
||||
# define ASM_LINE_SEP ;
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
/* GCC understands weak symbols and aliases; use its interface where
|
||||
possible, instead of embedded assembly language. */
|
||||
@ -117,11 +121,11 @@
|
||||
|
||||
# ifdef HAVE_ASM_SET_DIRECTIVE
|
||||
# define strong_alias(original, alias) \
|
||||
ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias); \
|
||||
ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP \
|
||||
.set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
|
||||
# else
|
||||
# define strong_alias(original, alias) \
|
||||
ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias); \
|
||||
ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP \
|
||||
C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
|
||||
# endif
|
||||
|
||||
@ -135,7 +139,7 @@
|
||||
# else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
|
||||
|
||||
# define weak_alias(original, alias) \
|
||||
.weak C_SYMBOL_NAME (alias); \
|
||||
.weak C_SYMBOL_NAME (alias) ASM_LINE_SEP \
|
||||
C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
|
||||
|
||||
# define weak_extern(symbol) \
|
||||
@ -175,14 +179,16 @@
|
||||
/* We want the .gnu.warning.SYMBOL section to be unallocated. */
|
||||
# ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
|
||||
# define __make_section_unallocated(section_string) \
|
||||
asm(".section " section_string "; .previous");
|
||||
asm (".section " section_string "\n\t.previous");
|
||||
# elif defined HAVE_ASM_POPSECTION_DIRECTIVE
|
||||
# define __make_section_unallocated(section_string) \
|
||||
asm(".pushsection " section_string "; .popsection");
|
||||
asm (".pushsection " section_string "\n\t.popsection");
|
||||
# else
|
||||
# define __make_section_unallocated(section_string)
|
||||
# endif
|
||||
|
||||
/* Tacking on "\n\t#" to the section name makes gcc put it's bogus
|
||||
section attributes on what looks like a comment to the assembler. */
|
||||
# ifdef HAVE_SECTION_QUOTES
|
||||
# define link_warning(symbol, msg) \
|
||||
__make_section_unallocated (".gnu.warning." #symbol) \
|
||||
@ -196,8 +202,8 @@
|
||||
# endif
|
||||
# else
|
||||
# define link_warning(symbol, msg) \
|
||||
asm(".stabs \"" msg "\",30,0,0,0\n" \
|
||||
".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
|
||||
asm (".stabs \"" msg "\",30,0,0,0\n\t" \
|
||||
".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
|
||||
# endif
|
||||
#else
|
||||
/* We will never be heard; they will all die horribly. */
|
||||
@ -260,9 +266,9 @@
|
||||
# else /* Not ELF: a.out. */
|
||||
|
||||
# define text_set_element(set, symbol) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
|
||||
asm (".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
|
||||
# define data_set_element(set, symbol) \
|
||||
asm(".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
|
||||
asm (".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
|
||||
# define bss_set_element(set, symbol) ?error Must use initialized data.
|
||||
# define symbol_set_define(set) void *const (set)[1];
|
||||
# define symbol_set_declare(set) extern void *const (set)[1];
|
||||
|
@ -1,3 +1,34 @@
|
||||
2000-10-12 Alan Modra <alan@linuxcare.com.au>
|
||||
|
||||
* sysdeps/pthread/bits/initspin.h: New file.
|
||||
* spinlock.h: Move LOCK_INITIALIZER definition to <bits/initspin.h>.
|
||||
(__pthread_init_lock): Initialize lock with LT_SPINLOCK_INIT.
|
||||
(__pthread_alt_init_lock): Likewise.
|
||||
(__pthread_alt_trylock): Release lock with LT_SPINLOCK_INIT.
|
||||
|
||||
2000-10-12 David Huggins-Daines <dhd@linuxcare.com>
|
||||
|
||||
* oldsemaphore.c (__old_sem_init): Release lock with
|
||||
LT_SPINLOCK_INIT, not zero.
|
||||
* spinlock.c (__pthread_unlock): Likewise.
|
||||
(__pthread_alt_lock): Likewise.
|
||||
(__pthread_alt_timedlock): Likewise.
|
||||
(__pthread_alt_unlock): Likewise.
|
||||
* sysdeps/pthread/bits/libc-lock.h: Initialize locks with
|
||||
LT_SPINLOCK_INIT if it is non-zero. Likewise for init-once flags.
|
||||
* sysdeps/pthread/pthread.h: Include bits/initspin.h. Use
|
||||
LT_SPINLOCK_INIT do initialize spinlocks not 0.
|
||||
|
||||
2000-10-12 David Huggins-Daines <dhd@linuxcare.com>
|
||||
|
||||
* shlib-versions: Add version definitions for hppa-linux.
|
||||
|
||||
2000-10-12 Alan Modra <alan@linuxcare.com.au>
|
||||
|
||||
* sysdeps/hppa/pspinlock.c: New file.
|
||||
* sysdeps/hppa/pt-machine.h: New file.
|
||||
* sysdeps/unix/sysv/linux/hppa/bits/initspin.h: New file.
|
||||
|
||||
2000-10-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* mutex.c (__pthread_mutex_destroy): Correct test of
|
||||
|
@ -65,7 +65,7 @@ int __old_sem_init(old_sem_t *sem, int pshared, unsigned int value)
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
sem->sem_spinlock = 0;
|
||||
sem->sem_spinlock = LT_SPINLOCK_INIT;
|
||||
sem->sem_status = ((long)value << 1) + 1;
|
||||
return 0;
|
||||
}
|
||||
|
@ -3,4 +3,5 @@ mips.*-.*-linux.* libpthread=0 GLIBC_2.0 GLIBC_2.2
|
||||
sparc64-.*-linux.* libpthread=0 GLIBC_2.2
|
||||
sh.*-.*-linux.* libpthread=0 GLIBC_2.2
|
||||
ia64.*-.*-linux.* libpthread=0 GLIBC_2.2
|
||||
hppa.*-.*-linux.* libpthread=0 GLIBC_2.2
|
||||
.*-.*-linux.* libpthread=0
|
||||
|
@ -155,7 +155,7 @@ int __pthread_unlock(struct _pthread_fastlock * lock)
|
||||
#if !defined HAS_COMPARE_AND_SWAP || defined TEST_FOR_COMPARE_AND_SWAP
|
||||
{
|
||||
WRITE_MEMORY_BARRIER();
|
||||
lock->__spinlock = 0;
|
||||
lock->__spinlock = LT_SPINLOCK_INIT;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@ -394,7 +394,7 @@ void __pthread_alt_lock(struct _pthread_fastlock * lock,
|
||||
}
|
||||
|
||||
WRITE_MEMORY_BARRIER();
|
||||
lock->__spinlock = 0;
|
||||
lock->__spinlock = LT_SPINLOCK_INIT;
|
||||
|
||||
if (suspend_needed)
|
||||
suspend (self);
|
||||
@ -468,7 +468,7 @@ int __pthread_alt_timedlock(struct _pthread_fastlock * lock,
|
||||
}
|
||||
|
||||
WRITE_MEMORY_BARRIER();
|
||||
lock->__spinlock = 0;
|
||||
lock->__spinlock = LT_SPINLOCK_INIT;
|
||||
goto suspend;
|
||||
}
|
||||
#endif
|
||||
@ -649,7 +649,7 @@ void __pthread_alt_unlock(struct _pthread_fastlock *lock)
|
||||
#if !defined HAS_COMPARE_AND_SWAP || defined TEST_FOR_COMPARE_AND_SWAP
|
||||
{
|
||||
WRITE_MEMORY_BARRIER();
|
||||
lock->__spinlock = 0;
|
||||
lock->__spinlock = LT_SPINLOCK_INIT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -12,6 +12,8 @@
|
||||
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||
/* GNU Library General Public License for more details. */
|
||||
|
||||
#include <bits/initspin.h>
|
||||
|
||||
|
||||
/* There are 2 compare and swap synchronization primitives with
|
||||
different semantics:
|
||||
@ -97,7 +99,7 @@ extern int __pthread_unlock(struct _pthread_fastlock *lock);
|
||||
static inline void __pthread_init_lock(struct _pthread_fastlock * lock)
|
||||
{
|
||||
lock->__status = 0;
|
||||
lock->__spinlock = 0;
|
||||
lock->__spinlock = LT_SPINLOCK_INIT;
|
||||
}
|
||||
|
||||
static inline int __pthread_trylock (struct _pthread_fastlock * lock)
|
||||
@ -139,7 +141,7 @@ extern void __pthread_alt_unlock(struct _pthread_fastlock *lock);
|
||||
static inline void __pthread_alt_init_lock(struct _pthread_fastlock * lock)
|
||||
{
|
||||
lock->__status = 0;
|
||||
lock->__spinlock = 0;
|
||||
lock->__spinlock = LT_SPINLOCK_INIT;
|
||||
}
|
||||
|
||||
static inline int __pthread_alt_trylock (struct _pthread_fastlock * lock)
|
||||
@ -163,7 +165,7 @@ static inline int __pthread_alt_trylock (struct _pthread_fastlock * lock)
|
||||
WRITE_MEMORY_BARRIER();
|
||||
res = 0;
|
||||
}
|
||||
lock->__spinlock = 0;
|
||||
lock->__spinlock = LT_SPINLOCK_INIT;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@ -178,11 +180,6 @@ static inline int __pthread_alt_trylock (struct _pthread_fastlock * lock)
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Initializers for both lock variants */
|
||||
|
||||
#define LOCK_INITIALIZER {0, 0}
|
||||
#define ALT_LOCK_INITIALIZER {0, 0}
|
||||
|
||||
/* Operations on pthread_atomic, which is defined in internals.h */
|
||||
|
||||
static inline long atomic_increment(struct pthread_atomic *pa)
|
||||
@ -208,8 +205,6 @@ static inline long atomic_decrement(struct pthread_atomic *pa)
|
||||
return oldval;
|
||||
}
|
||||
|
||||
#define ATOMIC_INITIALIZER { 0, 0 }
|
||||
|
||||
|
||||
static inline void
|
||||
__pthread_set_own_extricate_if (pthread_descr self, pthread_extricate_if *peif)
|
||||
|
81
linuxthreads/sysdeps/hppa/pspinlock.c
Normal file
81
linuxthreads/sysdeps/hppa/pspinlock.c
Normal file
@ -0,0 +1,81 @@
|
||||
/* POSIX spinlock implementation. hppa version.
|
||||
Copyright (C) 2000 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 <errno.h>
|
||||
#include <pthread.h>
|
||||
|
||||
|
||||
int
|
||||
__pthread_spin_lock (pthread_spinlock_t *lock)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
do
|
||||
asm volatile ("ldcw %1,%0"
|
||||
: "=r" (val), "=m" (*lock)
|
||||
: "m" (*lock));
|
||||
while (!val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
weak_alias (__pthread_spin_lock, pthread_spin_lock)
|
||||
|
||||
|
||||
int
|
||||
__pthread_spin_trylock (pthread_spinlock_t *lock)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
asm volatile ("ldcw %1,%0"
|
||||
: "=r" (val), "=m" (*lock)
|
||||
: "m" (*lock));
|
||||
|
||||
return val ? 0 : EBUSY;
|
||||
}
|
||||
weak_alias (__pthread_spin_trylock, pthread_spin_trylock)
|
||||
|
||||
|
||||
int
|
||||
__pthread_spin_unlock (pthread_spinlock_t *lock)
|
||||
{
|
||||
*lock = 1;
|
||||
return 0;
|
||||
}
|
||||
weak_alias (__pthread_spin_unlock, pthread_spin_unlock)
|
||||
|
||||
|
||||
int
|
||||
__pthread_spin_init (pthread_spinlock_t *lock, int pshared)
|
||||
{
|
||||
/* We can ignore the `pshared' parameter. Since we are busy-waiting
|
||||
all processes which can access the memory location `lock' points
|
||||
to can use the spinlock. */
|
||||
*lock = 1;
|
||||
return 0;
|
||||
}
|
||||
weak_alias (__pthread_spin_init, pthread_spin_init)
|
||||
|
||||
|
||||
int
|
||||
__pthread_spin_destroy (pthread_spinlock_t *lock)
|
||||
{
|
||||
/* Nothing to do. */
|
||||
return 0;
|
||||
}
|
||||
weak_alias (__pthread_spin_destroy, pthread_spin_destroy)
|
54
linuxthreads/sysdeps/hppa/pt-machine.h
Normal file
54
linuxthreads/sysdeps/hppa/pt-machine.h
Normal file
@ -0,0 +1,54 @@
|
||||
/* Machine-dependent pthreads configuration and inline functions.
|
||||
hppa version.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
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 <bits/initspin.h>
|
||||
|
||||
#ifndef PT_EI
|
||||
# define PT_EI extern inline
|
||||
#endif
|
||||
|
||||
/* Get some notion of the current stack. Need not be exactly the top
|
||||
of the stack, just something somewhere in the current frame. */
|
||||
#define CURRENT_STACK_FRAME stack_pointer
|
||||
register char * stack_pointer __asm__ ("%r30");
|
||||
|
||||
|
||||
/* The hppa only has one atomic read and modify memory operation,
|
||||
load and clear, so hppa spinlocks must use zero to signify that
|
||||
someone is holding the lock. */
|
||||
|
||||
#define xstr(s) str(s)
|
||||
#define str(s) #s
|
||||
/* Spinlock implementation; required. */
|
||||
PT_EI int
|
||||
testandset (int *spinlock)
|
||||
{
|
||||
int ret;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"ldcw 0(%2),%0"
|
||||
: "=r"(ret), "=m"(*spinlock)
|
||||
: "r"(spinlock));
|
||||
|
||||
return ret == 0;
|
||||
}
|
||||
#undef str
|
||||
#undef xstr
|
28
linuxthreads/sysdeps/pthread/bits/initspin.h
Normal file
28
linuxthreads/sysdeps/pthread/bits/initspin.h
Normal file
@ -0,0 +1,28 @@
|
||||
/* Generic definitions for spinlock initializers.
|
||||
Copyright (C) 2000 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. */
|
||||
|
||||
/* Initial value of a spinlock. Most platforms should use zero,
|
||||
unless they only implement a "test and clear" operation instead of
|
||||
the usual "test and set". */
|
||||
#define LT_SPINLOCK_INIT 0
|
||||
|
||||
/* Macros for lock initializers, using the above definition. */
|
||||
#define LOCK_INITIALIZER { 0, LT_SPINLOCK_INIT }
|
||||
#define ALT_LOCK_INITIALIZER { 0, LT_SPINLOCK_INIT }
|
||||
#define ATOMIC_INITIALIZER { 0, LT_SPINLOCK_INIT }
|
@ -48,12 +48,21 @@ typedef pthread_key_t __libc_key_t;
|
||||
|
||||
/* Define an initialized lock variable NAME with storage class CLASS.
|
||||
|
||||
For the C library we take a deeper look at the initializer. For this
|
||||
implementation all fields are initialized to zero. Therefore we
|
||||
don't initialize the variable which allows putting it into the BSS
|
||||
section. */
|
||||
#define __libc_lock_define_initialized(CLASS,NAME) \
|
||||
For the C library we take a deeper look at the initializer. For
|
||||
this implementation all fields are initialized to zero. Therefore
|
||||
we don't initialize the variable which allows putting it into the
|
||||
BSS section. (Except on PA-RISC and other odd architectures, where
|
||||
initialized locks must be set to one due to the lack of normal
|
||||
atomic operations.) */
|
||||
|
||||
#if LT_SPINLOCK_INIT == 0
|
||||
# define __libc_lock_define_initialized(CLASS,NAME) \
|
||||
CLASS __libc_lock_t NAME;
|
||||
#else
|
||||
# define __libc_lock_define_initialized(CLASS,NAME) \
|
||||
CLASS __libc_lock_t NAME = PTHREAD_MUTEX_INITIALIZER;
|
||||
#endif
|
||||
|
||||
#define __libc_rwlock_define_initialized(CLASS,NAME) \
|
||||
CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;
|
||||
|
||||
@ -143,9 +152,9 @@ typedef pthread_key_t __libc_key_t;
|
||||
do { \
|
||||
if (__pthread_once != NULL) \
|
||||
__pthread_once (&(ONCE_CONTROL), (INIT_FUNCTION)); \
|
||||
else if ((ONCE_CONTROL) == 0) { \
|
||||
else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) { \
|
||||
INIT_FUNCTION (); \
|
||||
(ONCE_CONTROL) = 1; \
|
||||
(ONCE_CONTROL) = !PTHREAD_ONCE_INIT; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
#define __need_sigset_t
|
||||
#include <signal.h>
|
||||
#include <bits/pthreadtypes.h>
|
||||
#include <bits/initspin.h>
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
@ -30,26 +31,26 @@ __BEGIN_DECLS
|
||||
/* Initializers. */
|
||||
|
||||
#define PTHREAD_MUTEX_INITIALIZER \
|
||||
{0, 0, 0, PTHREAD_MUTEX_TIMED_NP, {0, 0}}
|
||||
{0, 0, 0, PTHREAD_MUTEX_TIMED_NP, LOCK_INITIALIZER}
|
||||
#ifdef __USE_GNU
|
||||
# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
|
||||
{0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, {0, 0}}
|
||||
{0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, LOCK_INITIALIZER}
|
||||
# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
|
||||
{0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, {0, 0}}
|
||||
{0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, LOCK_INITIALIZER}
|
||||
# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
|
||||
{0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, {0, 0}}
|
||||
{0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, LOCK_INITIALIZER}
|
||||
#endif
|
||||
|
||||
#define PTHREAD_COND_INITIALIZER {{0, 0}, 0}
|
||||
#define PTHREAD_COND_INITIALIZER {LOCK_INITIALIZER, 0}
|
||||
|
||||
#ifdef __USE_UNIX98
|
||||
# define PTHREAD_RWLOCK_INITIALIZER \
|
||||
{ {0, 0}, 0, NULL, NULL, NULL, \
|
||||
{ LOCK_INITIALIZER, 0, NULL, NULL, NULL, \
|
||||
PTHREAD_RWLOCK_DEFAULT_NP, PTHREAD_PROCESS_PRIVATE }
|
||||
#endif
|
||||
#ifdef __USE_GNU
|
||||
# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
|
||||
{ {0, 0}, 0, NULL, NULL, NULL, \
|
||||
{ LOCK_INITIALIZER, 0, NULL, NULL, NULL, \
|
||||
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, PTHREAD_PROCESS_PRIVATE }
|
||||
#endif
|
||||
|
||||
|
27
linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h
Normal file
27
linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h
Normal file
@ -0,0 +1,27 @@
|
||||
/* PA-RISC specific definitions for spinlock initializers.
|
||||
Copyright (C) 2000 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. */
|
||||
|
||||
/* Initial value of a spinlock. PA-RISC only implements atomic load
|
||||
and clear so this must be non-zero. */
|
||||
#define LT_SPINLOCK_INIT 1
|
||||
|
||||
/* Macros for lock initializers, using the above definition. */
|
||||
#define LOCK_INITIALIZER { 0, LT_SPINLOCK_INIT }
|
||||
#define ALT_LOCK_INITIALIZER { 0, LT_SPINLOCK_INIT }
|
||||
#define ATOMIC_INITIALIZER { 0, LT_SPINLOCK_INIT }
|
@ -117,7 +117,11 @@ update_data (struct header *result, size_t len, size_t old_len)
|
||||
peak_heap = current_heap;
|
||||
|
||||
/* Compute current stack usage and compare it with the maximum value. */
|
||||
#ifdef STACK_GROWS_UPWARD
|
||||
current_stack = GETSP () - start_sp;
|
||||
#else
|
||||
current_stack = start_sp - GETSP ();
|
||||
#endif
|
||||
if (current_stack > peak_stack)
|
||||
peak_stack = current_stack;
|
||||
|
||||
|
@ -2693,8 +2693,8 @@ frexp_test (void)
|
||||
TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
|
||||
TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
|
||||
|
||||
TEST_fI_f1 (frexp, 12.8, 0.8L, 4);
|
||||
TEST_fI_f1 (frexp, -27.34, -0.854375L, 5);
|
||||
TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
|
||||
TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
|
||||
|
||||
END (frexp);
|
||||
}
|
||||
@ -2762,11 +2762,11 @@ hypot_test (void)
|
||||
TEST_ff_f (hypot, -12.4, -0.7, 12.41974234837422060118L);
|
||||
|
||||
/* hypot (x,0) == fabs (x) */
|
||||
TEST_ff_f (hypot, 0.7, 0, 0.7L);
|
||||
TEST_ff_f (hypot, -0.7, 0, 0.7L);
|
||||
TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
|
||||
TEST_ff_f (hypot, 0.7L, 0, 0.7L);
|
||||
TEST_ff_f (hypot, -0.7L, 0, 0.7L);
|
||||
TEST_ff_f (hypot, -5.7e7L, 0, 5.7e7L);
|
||||
|
||||
TEST_ff_f (hypot, 0.7, 1.2, 1.3892443989449804508L);
|
||||
TEST_ff_f (hypot, 0.7L, 1.2L, 1.3892443989449804508L);
|
||||
|
||||
END (hypot);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ alpha.*-.*-linux.* libm=6.1
|
||||
mips.*-.*-linux.* libm=6 GLIBC_2.0 GLIBC_2.2
|
||||
ia64-.*-linux.* libm=6.1 GLIBC_2.2
|
||||
sh.*-.*-linux.* libm=6 GLIBC_2.2
|
||||
hppa.*-.*-.* libm=6 GLIBC_2.2
|
||||
.*-.*-linux.* libm=6
|
||||
.*-.*-gnu-gnu.* libm=6
|
||||
|
||||
@ -32,6 +33,7 @@ mips.*-.*-linux.* libc=6 GLIBC_2.0 GLIBC_2.2
|
||||
ia64-.*-linux.* libc=6.1 GLIBC_2.2
|
||||
sh.*-.*-linux.* libc=6 GLIBC_2.2
|
||||
sparc64-.*-linux.* libc=6 GLIBC_2.2
|
||||
hppa.*-.*-.* libc=6 GLIBC_2.2
|
||||
.*-.*-linux.* libc=6
|
||||
|
||||
# libmachuser.so.1 corresponds to mach/*.defs as of Utah's UK22 release.
|
||||
@ -56,6 +58,7 @@ arm.*-.*-linux.* ld=ld-linux.so.2
|
||||
sh.*-.*-linux.* ld=ld-linux.so.2 GLIBC_2.2
|
||||
ia64-.*-linux.* ld=ld-linux-ia64.so.2 GLIBC_2.2
|
||||
mips.*-.*-linux.* ld=ld.so.1 GLIBC_2.0 GLIBC_2.2
|
||||
hppa.*-.*-.* ld=ld.so.1 GLIBC_2.2
|
||||
# We use the ELF ABI standard name for the default.
|
||||
.*-.*-.* ld=ld.so.1
|
||||
|
||||
@ -107,6 +110,7 @@ alpha.*-.*-linux.* libBrokenLocale=1.1
|
||||
ia64-.*-.* libBrokenLocale=1 GLIBC_2.2
|
||||
sh.*-.*-.* libBrokenLocale=1 GLIBC_2.2
|
||||
sparc64-.*-.* libBrokenLocale=1 GLIBC_2.2
|
||||
hppa-.*-.* libBrokenLocale=1 GLIBC_2.2
|
||||
.*-.*-.* libBrokenLocale=1
|
||||
|
||||
# The real-time library from POSIX.1b.
|
||||
|
@ -427,11 +427,15 @@ __printf_fphex (FILE *fp,
|
||||
/* Now we have all information to compute the size. */
|
||||
width -= ((negative || info->showsign || info->space)
|
||||
/* Sign. */
|
||||
+ 2 + 1 + 1 + precision + 1 + 1
|
||||
+ 2 + 1 + 0 + precision + 1 + 1
|
||||
/* 0x h . hhh P ExpoSign. */
|
||||
+ ((expbuf + sizeof expbuf) - expstr));
|
||||
/* Exponent. */
|
||||
|
||||
/* Count the decimal point. */
|
||||
if (precision > 0 || info->alt)
|
||||
width -= wide ? 1 : strlen (decimal);
|
||||
|
||||
/* A special case when the mantissa or the precision is zero and the `#'
|
||||
is not given. In this case we must not print the decimal point. */
|
||||
if (precision == 0 && !info->alt)
|
||||
@ -463,9 +467,10 @@ __printf_fphex (FILE *fp,
|
||||
|
||||
if (precision > 0)
|
||||
{
|
||||
ssize_t tofill = precision - (numend - numstr);
|
||||
PRINT (numstr, wnumstr, MIN (numend - numstr, precision));
|
||||
if (precision > numend - numstr)
|
||||
PADN ('0', precision - (numend - numstr));
|
||||
if (tofill > 0)
|
||||
PADN ('0', tofill);
|
||||
}
|
||||
|
||||
if (info->left && info->pad == '0' && width > 0)
|
||||
|
@ -33,7 +33,7 @@
|
||||
|
||||
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||
asm (".data; .globl __old_sys_siglist; __old_sys_siglist:");
|
||||
asm (".data\n\t.globl __old_sys_siglist\n__old_sys_siglist:");
|
||||
#endif
|
||||
|
||||
const char *const __new_sys_siglist[NSIG] =
|
||||
@ -44,10 +44,10 @@ const char *const __new_sys_siglist[NSIG] =
|
||||
};
|
||||
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||
asm (".type __old_sys_siglist,@object;.size __old_sys_siglist,"
|
||||
asm (".type __old_sys_siglist,@object\n\t.size __old_sys_siglist,"
|
||||
OLD_SIGLIST_SIZE_STR "*" PTR_SIZE_STR);
|
||||
|
||||
asm (".data; .globl __old_sys_sigabbrev; __old_sys_sigabbrev:");
|
||||
asm (".data\n\t.globl __old_sys_sigabbrev\n__old_sys_sigabbrev:");
|
||||
#endif
|
||||
|
||||
const char *const __new_sys_sigabbrev[NSIG] =
|
||||
@ -58,7 +58,7 @@ const char *const __new_sys_sigabbrev[NSIG] =
|
||||
};
|
||||
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||
asm (".type __old_sys_sigabbrev,@object;.size __old_sys_sigabbrev,"
|
||||
asm (".type __old_sys_sigabbrev,@object\n\t.size __old_sys_sigabbrev,"
|
||||
OLD_SIGLIST_SIZE_STR "*" PTR_SIZE_STR);
|
||||
|
||||
extern const char *const *__old_sys_siglist;
|
||||
|
26
sysdeps/hppa/Makefile
Normal file
26
sysdeps/hppa/Makefile
Normal file
@ -0,0 +1,26 @@
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
# This file is part of the GNU C Library.
|
||||
# Contributed by David Huggins-Daines (dhd@debian.org)
|
||||
|
||||
# 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.
|
||||
|
||||
# We need this for all shared objects since the build process uses ld -r
|
||||
CFLAGS-.os += -ffunction-sections
|
||||
|
||||
ifeq ($(subdir),elf)
|
||||
dl-routines += dl-symaddr dl-fptr
|
||||
rtld-routines += dl-symaddr dl-fptr
|
||||
endif
|
6
sysdeps/hppa/Versions
Normal file
6
sysdeps/hppa/Versions
Normal file
@ -0,0 +1,6 @@
|
||||
ld {
|
||||
GLIBC_2.2 {
|
||||
# hppa specific functions in the dynamic linker, but used by libc.so.
|
||||
_dl_symbol_address; _dl_unmap; _dl_lookup_address;
|
||||
}
|
||||
}
|
72
sysdeps/hppa/__longjmp.S
Normal file
72
sysdeps/hppa/__longjmp.S
Normal file
@ -0,0 +1,72 @@
|
||||
/* longjmp for PA-RISC.
|
||||
Copyright (C) 1997, 1998 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>
|
||||
#define _SETJMP_H
|
||||
#define _ASM
|
||||
#include <bits/setjmp.h>
|
||||
|
||||
/* __longjmp(jmpbuf, val) */
|
||||
|
||||
.text
|
||||
.align 4
|
||||
.globl __longjmp
|
||||
.export __longjmp, code
|
||||
.proc
|
||||
.callinfo
|
||||
__longjmp:
|
||||
/* set return value */
|
||||
copy %r25, %r28
|
||||
|
||||
ldw 0(%r26), %r3
|
||||
ldw 8(%r26), %r4
|
||||
ldw 12(%r26), %r5
|
||||
ldw 16(%r26), %r6
|
||||
ldw 20(%r26), %r7
|
||||
ldw 24(%r26), %r8
|
||||
ldw 28(%r26), %r9
|
||||
ldw 32(%r26), %r10
|
||||
ldw 36(%r26), %r11
|
||||
ldw 40(%r26), %r12
|
||||
ldw 44(%r26), %r13
|
||||
ldw 48(%r26), %r14
|
||||
ldw 52(%r26), %r15
|
||||
ldw 56(%r26), %r16
|
||||
ldw 60(%r26), %r17
|
||||
ldw 64(%r26), %r18
|
||||
ldw 68(%r26), %r19
|
||||
ldw 72(%r26), %r27
|
||||
ldw 76(%r26), %r30
|
||||
|
||||
ldw 80(%r26), %rp
|
||||
|
||||
ldo 88(%r26),%r20
|
||||
fldds,ma 8(%r20), %fr12
|
||||
fldds,ma 8(%r20), %fr13
|
||||
fldds,ma 8(%r20), %fr14
|
||||
fldds,ma 8(%r20), %fr15
|
||||
fldds,ma 8(%r20), %fr16
|
||||
fldds,ma 8(%r20), %fr17
|
||||
fldds,ma 8(%r20), %fr18
|
||||
fldds,ma 8(%r20), %fr19
|
||||
fldds,ma 8(%r20), %fr20
|
||||
fldds 0(%r20), %fr21
|
||||
|
||||
bv,n %r0(%r2)
|
||||
.procend
|
@ -1,56 +1,56 @@
|
||||
; HP-PA __mpn_add_n -- Add two limb vectors of the same length > 0 and store
|
||||
; sum in a third limb vector.
|
||||
;! HP-PA __mpn_add_n -- Add two limb vectors of the same length > 0 and store
|
||||
;! sum in a third limb vector.
|
||||
|
||||
; Copyright (C) 1992, 1994 Free Software Foundation, Inc.
|
||||
;! Copyright (C) 1992, 1994 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.
|
||||
|
||||
|
||||
; INPUT PARAMETERS
|
||||
; res_ptr gr26
|
||||
; s1_ptr gr25
|
||||
; s2_ptr gr24
|
||||
; size gr23
|
||||
;! INPUT PARAMETERS
|
||||
;! res_ptr gr26
|
||||
;! s1_ptr gr25
|
||||
;! s2_ptr gr24
|
||||
;! size gr23
|
||||
|
||||
; One might want to unroll this as for other processors, but it turns
|
||||
; out that the data cache contention after a store makes such
|
||||
; unrolling useless. We can't come under 5 cycles/limb anyway.
|
||||
;! One might want to unroll this as for other processors, but it turns
|
||||
;! out that the data cache contention after a store makes such
|
||||
;! unrolling useless. We can't come under 5 cycles/limb anyway.
|
||||
|
||||
.code
|
||||
.text
|
||||
.export __mpn_add_n
|
||||
__mpn_add_n
|
||||
__mpn_add_n:
|
||||
.proc
|
||||
.callinfo frame=0,no_calls
|
||||
.entry
|
||||
|
||||
ldws,ma 4(0,%r25),%r20
|
||||
ldws,ma 4(0,%r24),%r19
|
||||
ldws,ma 4(0,%r25),%r21
|
||||
ldws,ma 4(0,%r24),%r20
|
||||
|
||||
addib,= -1,%r23,L$end ; check for (SIZE == 1)
|
||||
add %r20,%r19,%r28 ; add first limbs ignoring cy
|
||||
addib,= -1,%r23,L$end ;! check for (SIZE == 1)
|
||||
add %r21,%r20,%r28 ;! add first limbs ignoring cy
|
||||
|
||||
L$loop ldws,ma 4(0,%r25),%r20
|
||||
ldws,ma 4(0,%r24),%r19
|
||||
L$loop: ldws,ma 4(0,%r25),%r21
|
||||
ldws,ma 4(0,%r24),%r20
|
||||
stws,ma %r28,4(0,%r26)
|
||||
addib,<> -1,%r23,L$loop
|
||||
addc %r20,%r19,%r28
|
||||
addc %r21,%r20,%r28
|
||||
|
||||
L$end stws %r28,0(0,%r26)
|
||||
L$end: stws %r28,0(0,%r26)
|
||||
bv 0(%r2)
|
||||
addc %r0,%r0,%r28
|
||||
|
||||
|
41
sysdeps/hppa/bits/setjmp.h
Normal file
41
sysdeps/hppa/bits/setjmp.h
Normal file
@ -0,0 +1,41 @@
|
||||
/* Copyright (C) 2000 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 the machine-dependent type `jmp_buf'. HPPA version. */
|
||||
|
||||
#ifndef _SETJMP_H
|
||||
# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
|
||||
#endif
|
||||
|
||||
/* The previous bits/setjmp.h had __jmp_buf defined as a structure.
|
||||
We use an array of 'double' instead, to make writing the assembler
|
||||
easier, and to ensure proper alignment. Naturally, user code should
|
||||
not depend on either representation. */
|
||||
|
||||
#if defined __USE_MISC || defined _ASM
|
||||
#define JB_SP (76/4)
|
||||
#endif
|
||||
|
||||
#ifndef _ASM
|
||||
typedef double __jmp_buf[21];
|
||||
#endif
|
||||
|
||||
/* Test if longjmp to JMPBUF would unwind the frame containing a local
|
||||
variable at ADDRESS. */
|
||||
#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
|
||||
((void *)(_address) > (void *)(((unsigned long *) _jmpbuf)[JB_SP]))
|
212
sysdeps/hppa/dl-fptr.c
Normal file
212
sysdeps/hppa/dl-fptr.c
Normal file
@ -0,0 +1,212 @@
|
||||
/* Make dynamic PLABELs for function pointers. HPPA version.
|
||||
Copyright (C) 1999, 2000 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 <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/mman.h>
|
||||
#include <link.h>
|
||||
#include <errno.h>
|
||||
#include <ldsodefs.h>
|
||||
#include <elf/dynamic-link.h>
|
||||
#include <dl-machine.h>
|
||||
#ifdef _LIBC_REENTRANT
|
||||
# include <pt-machine.h>
|
||||
|
||||
/* Remember, we use 0 to mean that a lock is taken on PA-RISC. */
|
||||
static int __hppa_fptr_lock = 1;
|
||||
#endif
|
||||
|
||||
/* Because ld.so is now versioned, these functions can be in their own
|
||||
file; no relocations need to be done to call them. Of course, if
|
||||
ld.so is not versioned... */
|
||||
#if 0
|
||||
#ifndef DO_VERSIONING
|
||||
# error "This will not work with versioning turned off, sorry."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MAP_ANON
|
||||
/* The fd is not examined when using MAP_ANON. */
|
||||
#define ANONFD -1
|
||||
#else
|
||||
extern int _dl_zerofd;
|
||||
#define ANONFD _dl_zerofd
|
||||
#endif
|
||||
|
||||
struct hppa_fptr __boot_ldso_fptr[HPPA_BOOT_FPTR_SIZE];
|
||||
struct hppa_fptr *__fptr_root = NULL;
|
||||
struct hppa_fptr *__fptr_next = __boot_ldso_fptr;
|
||||
static struct hppa_fptr *__fptr_free = NULL;
|
||||
int __fptr_count = HPPA_BOOT_FPTR_SIZE;
|
||||
|
||||
Elf32_Addr
|
||||
__hppa_make_fptr (const struct link_map *sym_map, Elf32_Addr value,
|
||||
struct hppa_fptr **root, struct hppa_fptr *mem)
|
||||
{
|
||||
struct hppa_fptr **loc;
|
||||
struct hppa_fptr *f;
|
||||
|
||||
#ifdef _LIBC_REENTRANT
|
||||
/* Make sure we are alone. We don't need a lock during bootstrap. */
|
||||
if (mem == NULL)
|
||||
while (testandset (&__hppa_fptr_lock));
|
||||
#endif
|
||||
|
||||
/* Search the sorted linked list for an existing entry for this
|
||||
symbol. */
|
||||
loc = root;
|
||||
f = *loc;
|
||||
while (f != NULL && f->func <= value)
|
||||
{
|
||||
if (f->func == value)
|
||||
goto found;
|
||||
loc = &f->next;
|
||||
f = *loc;
|
||||
}
|
||||
|
||||
/* Not found. Create a new one. */
|
||||
if (mem != NULL)
|
||||
f = mem;
|
||||
else if (__fptr_free != NULL)
|
||||
{
|
||||
f = __fptr_free;
|
||||
__fptr_free = f->next;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (__fptr_count == 0)
|
||||
{
|
||||
#ifndef MAP_ANON
|
||||
# define MAP_ANON 0
|
||||
if (_dl_zerofd == -1)
|
||||
{
|
||||
_dl_zerofd = _dl_sysdep_open_zero_fill ();
|
||||
if (_dl_zerofd == -1)
|
||||
{
|
||||
__close (fd);
|
||||
_dl_signal_error (errno, NULL,
|
||||
"cannot open zero fill device");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
__fptr_next = __mmap (0, _dl_pagesize, PROT_READ | PROT_WRITE,
|
||||
MAP_ANON | MAP_PRIVATE, ANONFD, 0);
|
||||
if (__fptr_next == MAP_FAILED)
|
||||
_dl_signal_error(errno, NULL, "cannot map page for fptr");
|
||||
__fptr_count = _dl_pagesize / sizeof (struct hppa_fptr);
|
||||
}
|
||||
f = __fptr_next++;
|
||||
__fptr_count--;
|
||||
}
|
||||
|
||||
f->func = value;
|
||||
/* GOT has already been relocated in elf_get_dynamic_info - don't
|
||||
try to relocate it again. */
|
||||
f->gp = sym_map->l_info[DT_PLTGOT]->d_un.d_ptr;
|
||||
f->next = *loc;
|
||||
*loc = f;
|
||||
|
||||
found:
|
||||
#ifdef _LIBC_REENTRANT
|
||||
/* Release the lock. Again, remember, zero means the lock is taken! */
|
||||
if (mem == NULL)
|
||||
__hppa_fptr_lock = 1;
|
||||
#endif
|
||||
|
||||
/* Set bit 30 to indicate to $$dyncall that this is a PLABEL. */
|
||||
return (Elf32_Addr) f | 2;
|
||||
}
|
||||
|
||||
void
|
||||
_dl_unmap (struct link_map *map)
|
||||
{
|
||||
struct hppa_fptr **floc;
|
||||
struct hppa_fptr *f;
|
||||
struct hppa_fptr **lloc;
|
||||
struct hppa_fptr *l;
|
||||
|
||||
__munmap ((void *) map->l_map_start, map->l_map_end - map->l_map_start);
|
||||
|
||||
#ifdef _LIBC_REENTRANT
|
||||
/* Make sure we are alone. */
|
||||
while (testandset (&__hppa_fptr_lock));
|
||||
#endif
|
||||
|
||||
/* Search the sorted linked list for the first entry for this object. */
|
||||
floc = &__fptr_root;
|
||||
f = *floc;
|
||||
while (f != NULL && f->func < map->l_map_start)
|
||||
{
|
||||
floc = &f->next;
|
||||
f = *floc;
|
||||
}
|
||||
|
||||
/* We found one. */
|
||||
if (f != NULL && f->func < map->l_map_end)
|
||||
{
|
||||
/* Get the last entry. */
|
||||
lloc = floc;
|
||||
l = f;
|
||||
while (l && l->func < map->l_map_end)
|
||||
{
|
||||
lloc = &l->next;
|
||||
l = *lloc;
|
||||
}
|
||||
|
||||
/* Updated FPTR. */
|
||||
*floc = l;
|
||||
|
||||
/* Prepend them to the free list. */
|
||||
*lloc = __fptr_free;
|
||||
__fptr_free = f;
|
||||
}
|
||||
|
||||
#ifdef _LIBC_REENTRANT
|
||||
/* Release the lock. */
|
||||
__hppa_fptr_lock = 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
Elf32_Addr
|
||||
_dl_lookup_address (const void *address)
|
||||
{
|
||||
Elf32_Addr addr = (Elf32_Addr) address;
|
||||
struct hppa_fptr *f;
|
||||
|
||||
#ifdef _LIBC_REENTRANT
|
||||
/* Make sure we are alone. */
|
||||
while (testandset (&__hppa_fptr_lock));
|
||||
#endif
|
||||
|
||||
for (f = __fptr_root; f != NULL; f = f->next)
|
||||
if (f == address)
|
||||
{
|
||||
addr = f->func;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef _LIBC_REENTRANT
|
||||
/* Release the lock. */
|
||||
__hppa_fptr_lock = 1;
|
||||
#endif
|
||||
|
||||
return addr;
|
||||
}
|
36
sysdeps/hppa/dl-lookupcfg.h
Normal file
36
sysdeps/hppa/dl-lookupcfg.h
Normal file
@ -0,0 +1,36 @@
|
||||
/* Configuration of lookup functions.
|
||||
Copyright (C) 2000 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. */
|
||||
|
||||
/* Like IA-64, PA-RISC needs more information from the symbol lookup
|
||||
function than just the address. */
|
||||
#define DL_LOOKUP_RETURNS_MAP
|
||||
#define ELF_FUNCTION_PTR_IS_SPECIAL
|
||||
#define DL_UNMAP_IS_SPECIAL
|
||||
|
||||
void *_dl_symbol_address (const struct link_map *map, const ElfW(Sym) *ref);
|
||||
|
||||
#define DL_SYMBOL_ADDRESS(map, ref) _dl_symbol_address(map, ref)
|
||||
|
||||
Elf32_Addr _dl_lookup_address (const void *address);
|
||||
|
||||
#define DL_LOOKUP_ADDRESS(addr) _dl_lookup_address (addr)
|
||||
|
||||
void _dl_unmap (struct link_map *map);
|
||||
|
||||
#define DL_UNMAP(map) _dl_unmap (map)
|
605
sysdeps/hppa/dl-machine.h
Normal file
605
sysdeps/hppa/dl-machine.h
Normal file
@ -0,0 +1,605 @@
|
||||
/* Machine-dependent ELF dynamic relocation inline functions. PA-RISC version.
|
||||
Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>
|
||||
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 dl_machine_h
|
||||
#define dl_machine_h 1
|
||||
|
||||
#define ELF_MACHINE_NAME "hppa"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <string.h>
|
||||
#include <link.h>
|
||||
#include <assert.h>
|
||||
|
||||
/* These must match the definition of the stub in bfd/elf32-hppa.c. */
|
||||
#define SIZEOF_PLT_STUB (4*4)
|
||||
#define GOT_FROM_PLT_STUB (4*4)
|
||||
|
||||
/* A PLABEL is a function descriptor. Properly they consist of just
|
||||
FUNC and GP. But we want to traverse a binary tree too. See
|
||||
dl-fptr.c for the code (it may be made common between HPPA and
|
||||
IA-64 in the future).
|
||||
|
||||
We call these 'fptr' to make it easier to steal code from IA-64. */
|
||||
|
||||
/* ld.so currently has 12 PLABEL32 relocs. We'll keep this constant
|
||||
large for now in case we require more, as the rest of these will be
|
||||
used by the dynamic program itself (libc.so has quite a few
|
||||
PLABEL32 relocs in it). */
|
||||
#define HPPA_BOOT_FPTR_SIZE 256
|
||||
|
||||
struct hppa_fptr
|
||||
{
|
||||
Elf32_Addr func;
|
||||
Elf32_Addr gp;
|
||||
struct hppa_fptr *next;
|
||||
};
|
||||
|
||||
extern struct hppa_fptr __boot_ldso_fptr[];
|
||||
extern struct hppa_fptr *__fptr_root;
|
||||
extern int __fptr_count;
|
||||
|
||||
extern Elf32_Addr __hppa_make_fptr (const struct link_map *, Elf32_Addr,
|
||||
struct hppa_fptr **, struct hppa_fptr *);
|
||||
|
||||
/* Return nonzero iff E_MACHINE is compatible with the running host. */
|
||||
static inline int
|
||||
elf_machine_matches_host (Elf32_Half e_machine)
|
||||
{
|
||||
return e_machine == EM_PARISC;
|
||||
}
|
||||
|
||||
|
||||
/* Return the link-time address of _DYNAMIC. */
|
||||
static inline Elf32_Addr
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
Elf32_Addr dynamic;
|
||||
|
||||
#if 0
|
||||
/* Use this method if GOT address not yet set up. */
|
||||
asm ("\
|
||||
b,l 1f,%0
|
||||
depi 0,31,2,%0
|
||||
1: addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 8),%0
|
||||
ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 12)(%%r1),%0"
|
||||
: "=r" (dynamic) : : "r1");
|
||||
#else
|
||||
/* This works because we already have our GOT address available. */
|
||||
dynamic = (Elf32_Addr) &_DYNAMIC;
|
||||
#endif
|
||||
|
||||
return dynamic;
|
||||
}
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
static inline Elf32_Addr
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
Elf32_Addr dynamic, dynamic_linkaddress;
|
||||
|
||||
asm ("\
|
||||
b,l 1f,%0
|
||||
depi 0,31,2,%0
|
||||
1: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%0
|
||||
ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%%r1),%1
|
||||
addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 16),%0
|
||||
ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 20)(%%r1),%0"
|
||||
: "=r" (dynamic_linkaddress), "=r" (dynamic) : : "r1");
|
||||
|
||||
return dynamic - dynamic_linkaddress;
|
||||
}
|
||||
|
||||
/* Fixup a PLT entry to bounce directly to the function at VALUE. */
|
||||
static inline Elf32_Addr
|
||||
elf_machine_fixup_plt (struct link_map *map, lookup_t t,
|
||||
const Elf32_Rela *reloc,
|
||||
Elf32_Addr *reloc_addr, Elf32_Addr value)
|
||||
{
|
||||
/* l is the link_map for the caller, t is the link_map for the object
|
||||
* being called */
|
||||
reloc_addr[1] = D_PTR (t, l_info[DT_PLTGOT]);
|
||||
reloc_addr[0] = value;
|
||||
/* Return the PLT slot rather than the function value so that the
|
||||
trampoline can load the new LTP. */
|
||||
return (Elf32_Addr) reloc_addr;
|
||||
}
|
||||
|
||||
/* Return the final value of a plt relocation. */
|
||||
static inline Elf32_Addr
|
||||
elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
|
||||
Elf32_Addr value)
|
||||
{
|
||||
/* We are rela only */
|
||||
return value + reloc->r_addend;
|
||||
}
|
||||
|
||||
/* 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, int profile)
|
||||
{
|
||||
extern void _dl_runtime_resolve (void);
|
||||
extern void _dl_runtime_profile (void);
|
||||
Elf32_Addr jmprel = D_PTR(l, l_info[DT_JMPREL]);
|
||||
|
||||
if (lazy && jmprel)
|
||||
{
|
||||
Elf32_Addr *got = NULL;
|
||||
Elf32_Addr l_addr;
|
||||
Elf32_Addr end_jmprel;
|
||||
Elf32_Addr iplt;
|
||||
|
||||
/* Relocate all the PLT slots. */
|
||||
l_addr = l->l_addr;
|
||||
end_jmprel = jmprel + l->l_info[DT_PLTRELSZ]->d_un.d_val;
|
||||
for (iplt = jmprel; iplt < end_jmprel; iplt += sizeof (Elf32_Rela))
|
||||
{
|
||||
const Elf32_Rela *reloc;
|
||||
Elf32_Word r_type;
|
||||
Elf32_Word r_sym;
|
||||
struct hppa_fptr *fptr;
|
||||
|
||||
reloc = (const Elf32_Rela *) iplt;
|
||||
r_type = ELF32_R_TYPE (reloc->r_info);
|
||||
r_sym = ELF32_R_SYM (reloc->r_info);
|
||||
|
||||
if (__builtin_expect (r_type == R_PARISC_IPLT, 1))
|
||||
{
|
||||
fptr = (struct hppa_fptr *) (reloc->r_offset + l_addr);
|
||||
if (r_sym != 0)
|
||||
{
|
||||
/* Relocate the pointer to the stub. */
|
||||
fptr->func += l_addr;
|
||||
/* Instead of the LTP value, we put the reloc offset
|
||||
here. The trampoline code will load the proper
|
||||
LTP and pass the reloc offset to the fixup
|
||||
function. */
|
||||
fptr->gp = iplt - jmprel;
|
||||
if (!got)
|
||||
{
|
||||
static union {
|
||||
unsigned char c[8];
|
||||
Elf32_Addr i[2];
|
||||
} sig = {{0x00,0xc0,0xff,0xee, 0xde,0xad,0xbe,0xef}};
|
||||
|
||||
/* Find our .got section. It's right after the
|
||||
stub. */
|
||||
got = (Elf32_Addr *) (fptr->func + GOT_FROM_PLT_STUB);
|
||||
|
||||
/* Sanity check to see if the address we are
|
||||
going to check below is within a reasonable
|
||||
approximation of the bounds of the PLT (or,
|
||||
at least, is at an address that won't fault
|
||||
on read). Then check for the magic signature
|
||||
above. */
|
||||
if (fptr->func < (Elf32_Addr) fptr + sizeof(*fptr))
|
||||
return 0;
|
||||
if (fptr->func >
|
||||
((Elf32_Addr) fptr
|
||||
+ SIZEOF_PLT_STUB
|
||||
+ ((l->l_info[DT_PLTRELSZ]->d_un.d_val / sizeof (Elf32_Rela))
|
||||
* 8)))
|
||||
return 0;
|
||||
if (got[-2] != sig.i[0] || got[-1] != sig.i[1])
|
||||
return 0; /* No lazy linking for you! */
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Relocate this *ABS* entry. */
|
||||
fptr->func = reloc->r_addend + l_addr;
|
||||
fptr->gp = D_PTR (l, l_info[DT_PLTGOT]);
|
||||
}
|
||||
}
|
||||
else if (__builtin_expect (r_type != R_PARISC_NONE, 0))
|
||||
_dl_reloc_bad_type (l, r_type, 1);
|
||||
}
|
||||
|
||||
if (got)
|
||||
{
|
||||
register Elf32_Addr ltp __asm__ ("%r19");
|
||||
/* Identify this shared object. */
|
||||
got[1] = (Elf32_Addr) l;
|
||||
|
||||
/* This function will be called to perform the relocation. */
|
||||
if (__builtin_expect (!profile, 1))
|
||||
got[-2] =
|
||||
(Elf32_Addr) ((struct hppa_fptr *)
|
||||
((unsigned long) &_dl_runtime_resolve & ~3))->func;
|
||||
else
|
||||
{
|
||||
if (_dl_name_match_p (_dl_profile, l))
|
||||
{
|
||||
/* This is the object we are looking for. Say that
|
||||
we really want profiling and the timers are
|
||||
started. */
|
||||
_dl_profile_map = l;
|
||||
}
|
||||
got[-2] =
|
||||
(Elf32_Addr) ((struct hppa_fptr *)
|
||||
((unsigned long) &_dl_runtime_profile & ~3))->func;
|
||||
}
|
||||
got[-1] = ltp;
|
||||
}
|
||||
}
|
||||
return lazy;
|
||||
}
|
||||
|
||||
/* 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 RTLD_START asm ("\
|
||||
.text
|
||||
.globl _start
|
||||
.type _start,@function
|
||||
_start:
|
||||
/* The kernel does not give us an initial stack frame. */
|
||||
ldo 64(%sp),%sp
|
||||
/* Save the relevant arguments (yes, those are the correct
|
||||
registers, the kernel is weird) in their stack slots. */
|
||||
stw %r25,-40(%sp) /* argc */
|
||||
stw %r24,-44(%sp) /* argv */
|
||||
|
||||
/* We need the LTP, and we need it now. */
|
||||
/* $PIC_pcrel$0 points 8 bytes past the current instruction,
|
||||
just like a branch reloc. This sequence gets us the runtime
|
||||
address of _DYNAMIC. */
|
||||
bl 0f,%r19
|
||||
depi 0,31,2,%r19 /* clear priviledge bits */
|
||||
0: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%r19
|
||||
ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%r1),%r26
|
||||
|
||||
/* Also get the link time address from the first entry of the GOT. */
|
||||
addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 16),%r19
|
||||
ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 20)(%r1),%r20
|
||||
|
||||
sub %r26,%r20,%r20 /* Calculate load offset */
|
||||
|
||||
/* Rummage through the dynamic entries, looking for DT_PLTGOT. */
|
||||
ldw,ma 8(%r26),%r19
|
||||
1: cmpib,=,n 3,%r19,2f /* tag == DT_PLTGOT? */
|
||||
cmpib,<>,n 0,%r19,1b
|
||||
ldw,ma 8(%r26),%r19
|
||||
|
||||
/* Uh oh! We didn't find one. Abort. */
|
||||
iitlbp %r0,(%r0)
|
||||
|
||||
2: ldw -4(%r26),%r19 /* Found it, load value. */
|
||||
add %r19,%r20,%r19 /* And add the load offset. */
|
||||
|
||||
/* Our initial stack layout is rather different from everyone
|
||||
else's due to the unique PA-RISC ABI. As far as I know it
|
||||
looks like this:
|
||||
|
||||
----------------------------------- (this frame created above)
|
||||
| 32 bytes of magic |
|
||||
|---------------------------------|
|
||||
| 32 bytes argument/sp save area |
|
||||
|---------------------------------| ((current->mm->env_end) + 63 & ~63)
|
||||
| N bytes of slack |
|
||||
|---------------------------------|
|
||||
| envvar and arg strings |
|
||||
|---------------------------------|
|
||||
| ELF auxiliary info |
|
||||
| (up to 28 words) |
|
||||
|---------------------------------|
|
||||
| Environment variable pointers |
|
||||
| upwards to NULL |
|
||||
|---------------------------------|
|
||||
| Argument pointers |
|
||||
| upwards to NULL |
|
||||
|---------------------------------|
|
||||
| argc (1 word) |
|
||||
-----------------------------------
|
||||
|
||||
So, obviously, we can't just pass %sp to _dl_start. That's
|
||||
okay, argv-4 will do just fine.
|
||||
|
||||
The pleasant part of this is that if we need to skip
|
||||
arguments we can just decrement argc and move argv, because
|
||||
the stack pointer is utterly unrelated to the location of
|
||||
the environment and argument vectors. */
|
||||
|
||||
/* This is always within range so we'll be okay. */
|
||||
bl _dl_start,%rp
|
||||
ldo -4(%r24),%r26
|
||||
|
||||
/* FALLTHRU */
|
||||
.globl _dl_start_user
|
||||
.type _dl_start_user,@function
|
||||
_dl_start_user:
|
||||
/* Save the entry point in %r3. */
|
||||
copy %ret0,%r3
|
||||
|
||||
/* Remember the lowest stack address. */
|
||||
addil LT'__libc_stack_end,%r19
|
||||
ldw RT'__libc_stack_end(%r1),%r20
|
||||
stw %sp,0(%r20)
|
||||
|
||||
/* See if we were called as a command with the executable file
|
||||
name as an extra leading argument. */
|
||||
addil LT'_dl_skip_args,%r19
|
||||
ldw RT'_dl_skip_args(%r1),%r20
|
||||
ldw 0(%r20),%r20
|
||||
|
||||
ldw -40(%sp),%r25 /* argc */
|
||||
comib,= 0,%r20,.Lnofix /* FIXME: will be mispredicted */
|
||||
ldw -44(%sp),%r24 /* argv (delay slot) */
|
||||
|
||||
sub %r25,%r20,%r25
|
||||
stw %r25,-40(%sp)
|
||||
sh2add %r20,%r24,%r24
|
||||
stw %r24,-44(%sp)
|
||||
|
||||
.Lnofix:
|
||||
/* Call _dl_init(_dl_loaded, argc, argv, envp). */
|
||||
addil LT'_dl_loaded,%r19
|
||||
ldw RT'_dl_loaded(%r1),%r26
|
||||
ldw 0(%r26),%r26
|
||||
/* envp = argv + argc + 1 */
|
||||
sh2add %r25,%r24,%r23
|
||||
bl _dl_init,%r2
|
||||
ldo 4(%r23),%r23 /* delay slot */
|
||||
|
||||
/* Reload argc, argv to the registers start.S expects them in (feh) */
|
||||
ldw -40(%sp),%r25
|
||||
ldw -44(%sp),%r24
|
||||
|
||||
/* _dl_fini does have a PLT slot now. I don't know how to get
|
||||
to it though, so this hack will remain. */
|
||||
.section .data
|
||||
__dl_fini_plabel:
|
||||
.word _dl_fini
|
||||
.word 0xdeadbeef
|
||||
.previous
|
||||
|
||||
addil LT'__dl_fini_plabel,%r19
|
||||
ldw RT'__dl_fini_plabel(%r1),%r23
|
||||
stw %r19,4(%r23)
|
||||
bv %r0(%r3)
|
||||
depi 2,31,2,%r23 /* delay slot */");
|
||||
|
||||
/* This code gets called via the .plt stub, and is used in
|
||||
dl-runtime.c to call the `fixup' function and then redirect to the
|
||||
address it returns.
|
||||
Enter with r19 = reloc offset, r20 = got-8, r21 = fixup ltp. */
|
||||
#define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \
|
||||
extern void tramp_name (void); \
|
||||
asm ( "\
|
||||
/* Trampoline for " #tramp_name " */
|
||||
.globl " #tramp_name "
|
||||
.type " #tramp_name ",@function
|
||||
" #tramp_name ":
|
||||
/* Save return pointer */
|
||||
stw %r2,-20(%sp)
|
||||
/* Save argument registers in the call stack frame. */
|
||||
stw %r26,-36(%sp)
|
||||
stw %r25,-40(%sp)
|
||||
stw %r24,-44(%sp)
|
||||
stw %r23,-48(%sp)
|
||||
/* Build a call frame. */
|
||||
stwm %sp,64(%sp)
|
||||
|
||||
/* Set up args to fixup func. */
|
||||
ldw 8+4(%r20),%r26 /* got[1] == struct link_map * */
|
||||
copy %r19,%r25 /* reloc offset */
|
||||
|
||||
/* Call the real address resolver. */
|
||||
bl " #fixup_name ",%r2
|
||||
copy %r21,%r19 /* delay slot, set fixup func ltp */
|
||||
|
||||
ldwm -64(%sp),%sp
|
||||
/* Arguments. */
|
||||
ldw -36(%sp),%r26
|
||||
ldw -40(%sp),%r25
|
||||
ldw -44(%sp),%r24
|
||||
ldw -48(%sp),%r23
|
||||
/* Return pointer. */
|
||||
ldw -20(%sp),%r2
|
||||
/* Call the real function. */
|
||||
ldw 0(%r28),%r22
|
||||
bv %r0(%r22)
|
||||
ldw 4(%r28),%r19
|
||||
");
|
||||
|
||||
#ifndef PROF
|
||||
#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
|
||||
TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup); \
|
||||
TRAMPOLINE_TEMPLATE (_dl_runtime_profile, profile_fixup);
|
||||
#else
|
||||
#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
|
||||
TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup); \
|
||||
strong_alias (_dl_runtime_resolve, _dl_runtime_profile);
|
||||
#endif
|
||||
|
||||
|
||||
/* Nonzero iff TYPE describes a relocation that should
|
||||
skip the executable when looking up the symbol value. */
|
||||
#define elf_machine_lookup_noexec_p(type) ((type) == R_PARISC_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_PARISC_IPLT \
|
||||
|| (type) == R_PARISC_EPLT)
|
||||
|
||||
/* Used by ld.so for ... something ... */
|
||||
#define ELF_MACHINE_JMP_SLOT R_PARISC_IPLT
|
||||
|
||||
/* We only use RELA. */
|
||||
#define ELF_MACHINE_NO_REL 1
|
||||
|
||||
#endif /* !dl_machine_h */
|
||||
|
||||
/* These are only actually used where RESOLVE_MAP is defined, anyway. */
|
||||
#ifdef RESOLVE_MAP
|
||||
|
||||
static inline void
|
||||
elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
|
||||
const Elf32_Sym *sym, const struct r_found_version *version,
|
||||
Elf32_Addr *const reloc_addr)
|
||||
{
|
||||
const Elf32_Sym *const refsym = sym;
|
||||
unsigned long const r_type = ELF32_R_TYPE (reloc->r_info);
|
||||
struct link_map *sym_map;
|
||||
Elf32_Addr value;
|
||||
|
||||
#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
|
||||
|
||||
/* RESOLVE_MAP will return a null value for undefined syms, and
|
||||
non-null for all other syms. In particular, relocs with no
|
||||
symbol (symbol index of zero), also called *ABS* relocs, will be
|
||||
resolved to MAP. (The first entry in a symbol table is all
|
||||
zeros, and an all zero Elf32_Sym has a binding of STB_LOCAL.)
|
||||
See RESOLVE_MAP definition in elf/dl-reloc.c */
|
||||
#ifdef RTLD_BOOTSTRAP
|
||||
/* RESOLVE_MAP in rtld.c doesn't have the local sym test. */
|
||||
sym_map = (ELF32_ST_BIND (sym->st_info) != STB_LOCAL
|
||||
? RESOLVE_MAP (&sym, version, r_type) : map);
|
||||
#else
|
||||
sym_map = RESOLVE_MAP (&sym, version, r_type);
|
||||
#endif
|
||||
if (sym_map)
|
||||
{
|
||||
value = sym ? sym_map->l_addr + sym->st_value : 0;
|
||||
value += reloc->r_addend;
|
||||
}
|
||||
else
|
||||
value = 0;
|
||||
|
||||
switch (r_type)
|
||||
{
|
||||
case R_PARISC_DIR32:
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
/* All hell breaks loose if we try to relocate these twice,
|
||||
because any initialized variables in ld.so that refer to
|
||||
other ones will have their values reset. In particular,
|
||||
__fptr_next will be reset, sometimes causing endless loops in
|
||||
__hppa_make_fptr(). So don't do that. */
|
||||
if (map == &_dl_rtld_map)
|
||||
return;
|
||||
#endif
|
||||
/* Otherwise, nothing more to do here. */
|
||||
break;
|
||||
|
||||
case R_PARISC_PLABEL32:
|
||||
/* Easy rule: If there is a symbol and it is global, then we
|
||||
need to make a dynamic function descriptor. Otherwise we
|
||||
have the address of a PLT slot for a local symbol which we
|
||||
know to be unique. */
|
||||
if (sym == NULL
|
||||
|| sym_map == NULL
|
||||
|| ELF32_ST_BIND (sym->st_info) == STB_LOCAL)
|
||||
break;
|
||||
|
||||
/* Okay, we need to make ourselves a PLABEL then. See the IA64
|
||||
code for an explanation of how this works. */
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
value = __hppa_make_fptr (sym_map, value, &__fptr_root, NULL);
|
||||
#else
|
||||
{
|
||||
struct hppa_fptr *p_boot_ldso_fptr;
|
||||
struct hppa_fptr **p_fptr_root;
|
||||
int *p_fptr_count;
|
||||
unsigned long dot;
|
||||
|
||||
/* Go from the top of __boot_ldso_fptr. As on IA64, we
|
||||
probably haven't relocated the necessary values by this
|
||||
point so we have to find them ourselves. */
|
||||
|
||||
asm ("bl 0f,%0
|
||||
depi 0,31,2,%0
|
||||
0: addil L'__boot_ldso_fptr - ($PIC_pcrel$0 - 8),%0
|
||||
ldo R'__boot_ldso_fptr - ($PIC_pcrel$0 - 12)(%%r1),%1
|
||||
addil L'__fptr_root - ($PIC_pcrel$0 - 16),%0
|
||||
ldo R'__fptr_root - ($PIC_pcrel$0 - 20)(%%r1),%2
|
||||
addil L'__fptr_count - ($PIC_pcrel$0 - 24),%0
|
||||
ldo R'__fptr_count - ($PIC_pcrel$0 - 28)(%%r1),%3"
|
||||
:
|
||||
"=r" (dot),
|
||||
"=r" (p_boot_ldso_fptr),
|
||||
"=r" (p_fptr_root),
|
||||
"=r" (p_fptr_count));
|
||||
|
||||
value = __hppa_make_fptr (sym_map, value, p_fptr_root,
|
||||
&p_boot_ldso_fptr[--*p_fptr_count]);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case R_PARISC_IPLT:
|
||||
if (__builtin_expect (sym_map != NULL, 1))
|
||||
elf_machine_fixup_plt (NULL, sym_map, reloc, reloc_addr, value);
|
||||
else
|
||||
{
|
||||
/* If we get here, it's a (weak) undefined sym. */
|
||||
elf_machine_fixup_plt (NULL, map, reloc, reloc_addr, value);
|
||||
}
|
||||
return;
|
||||
|
||||
case R_PARISC_COPY:
|
||||
if (__builtin_expect (sym == NULL, 0))
|
||||
/* This can happen in trace mode if an object could not be
|
||||
found. */
|
||||
break;
|
||||
if (__builtin_expect (sym->st_size > refsym->st_size, 0)
|
||||
|| (__builtin_expect (sym->st_size < refsym->st_size, 0)
|
||||
&& __builtin_expect (_dl_verbose, 0)))
|
||||
{
|
||||
const char *strtab;
|
||||
|
||||
strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
|
||||
_dl_sysdep_error (_dl_argv[0] ?: "<program name unknown>",
|
||||
": 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));
|
||||
return;
|
||||
|
||||
case R_PARISC_NONE: /* Alright, Wilbur. */
|
||||
return;
|
||||
|
||||
default:
|
||||
_dl_reloc_bad_type (map, r_type, 0);
|
||||
}
|
||||
|
||||
*reloc_addr = value;
|
||||
}
|
||||
|
||||
static inline void
|
||||
elf_machine_lazy_rel (struct link_map *map,
|
||||
Elf32_Addr l_addr, const Elf32_Rela *reloc)
|
||||
{
|
||||
/* We don't have anything to do here. elf_machine_runtime_setup has
|
||||
done all the relocs already. */
|
||||
}
|
||||
|
||||
#endif /* RESOLVE_MAP */
|
39
sysdeps/hppa/dl-symaddr.c
Normal file
39
sysdeps/hppa/dl-symaddr.c
Normal file
@ -0,0 +1,39 @@
|
||||
/* Get the symbol address. HPPA version.
|
||||
Copyright (C) 1999, 2000 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 <ldsodefs.h>
|
||||
#include <dl-machine.h>
|
||||
|
||||
void *
|
||||
_dl_symbol_address (const struct link_map *map, const ElfW(Sym) *ref)
|
||||
{
|
||||
Elf32_Addr value = (map ? map->l_addr : 0) + ref->st_value;
|
||||
|
||||
/* On hppa, we have to return the pointer to function descriptor. */
|
||||
if (ELFW(ST_TYPE) (ref->st_info) == STT_FUNC)
|
||||
return (void *) __hppa_make_fptr (map, value, &__fptr_root, NULL);
|
||||
else
|
||||
return (void *) value;
|
||||
}
|
||||
|
||||
ElfW(Addr)
|
||||
_dl_start_address (const struct link_map *map, ElfW(Addr) start)
|
||||
{
|
||||
return __hppa_make_fptr (map, start, &__fptr_root, NULL);
|
||||
}
|
117
sysdeps/hppa/elf/initfini.c
Normal file
117
sysdeps/hppa/elf/initfini.c
Normal file
@ -0,0 +1,117 @@
|
||||
/* Special .init and .fini section support for HPPA
|
||||
Copyright (C) 2000 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.
|
||||
|
||||
In addition to the permissions in the GNU Library General Public
|
||||
License, the Free Software Foundation gives you unlimited
|
||||
permission to link the compiled version of this file with other
|
||||
programs, and to distribute those programs without any restriction
|
||||
coming from the use of this file. (The Library General Public
|
||||
License restrictions do apply in other respects; for example, they
|
||||
cover modification of the file, and distribution when not linked
|
||||
into another program.)
|
||||
|
||||
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, 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* This file is compiled into assembly code which is then munged by a sed
|
||||
script into two files: crti.s and crtn.s.
|
||||
|
||||
* crti.s puts a function prologue at the beginning of the
|
||||
.init and .fini sections and defines global symbols for
|
||||
those addresses, so they can be called as functions.
|
||||
|
||||
* crtn.s puts the corresponding function epilogues
|
||||
in the .init and .fini sections. */
|
||||
|
||||
/* If we use the standard C version, the linkage table pointer won't
|
||||
be properly preserved due to the splitting up of function prologues
|
||||
and epilogues. Therefore we write these in assembly to make sure
|
||||
they do the right thing.
|
||||
|
||||
Note that we cannot have a weak undefined __gmon_start__, because
|
||||
that would require this to be PIC, and the linker is currently not
|
||||
able to generate a proper procedure descriptor for _init. Sad but
|
||||
true. Anyway, HPPA is one of those horrible architectures where
|
||||
making the comparison and indirect call is quite expensive (see the
|
||||
comment in sysdeps/generic/initfini.c). */
|
||||
|
||||
__asm__ ("
|
||||
|
||||
#include \"defs.h\"
|
||||
|
||||
/*@HEADER_ENDS*/
|
||||
|
||||
/*@_init_PROLOG_BEGINS*/
|
||||
.section .init
|
||||
.align 4
|
||||
.globl _init
|
||||
.type _init,@function
|
||||
.proc
|
||||
.callinfo
|
||||
_init:
|
||||
stw %rp,-20(%sp)
|
||||
stwm %r4,64(%sp)
|
||||
stw %r19,-32(%sp)
|
||||
bl __gmon_start__,%rp
|
||||
copy %r19,%r4 /* delay slot */
|
||||
copy %r4,%r19
|
||||
.align 4
|
||||
.procend
|
||||
/*@_init_PROLOG_ENDS*/
|
||||
|
||||
/*@_init_EPILOG_BEGINS*/
|
||||
.section .init
|
||||
copy %r4,%r19
|
||||
ldw -84(%sp),%rp
|
||||
bv %r0(%rp)
|
||||
ldwm -64(%sp),%r4
|
||||
.text
|
||||
.align 4
|
||||
.weak __gmon_start__
|
||||
.type __gmon_start__,@function
|
||||
.proc
|
||||
.callinfo
|
||||
__gmon_start__:
|
||||
bv,n %r0(%r2)
|
||||
.procend
|
||||
/*@_init_EPILOG_ENDS*/
|
||||
|
||||
/*@_fini_PROLOG_BEGINS*/
|
||||
.section .fini
|
||||
.align 4
|
||||
.globl _fini
|
||||
.type _fini,@function
|
||||
.proc
|
||||
.callinfo
|
||||
_fini:
|
||||
stw %rp,-20(%sp)
|
||||
stwm %r4,64(%sp)
|
||||
stw %r19,-32(%sp)
|
||||
copy %r19,%r4
|
||||
.align 4
|
||||
.procend
|
||||
/*@_fini_PROLOG_ENDS*/
|
||||
|
||||
/*@_fini_EPILOG_BEGINS*/
|
||||
.section .fini
|
||||
copy %r4,%r19
|
||||
ldw -84(%sp),%rp
|
||||
bv %r0(%rp)
|
||||
ldwm -64(%sp),%r4
|
||||
/*@_fini_EPILOG_ENDS*/
|
||||
|
||||
/*@TRAILER_BEGINS*/
|
||||
");
|
58
sysdeps/hppa/elf/start.S
Normal file
58
sysdeps/hppa/elf/start.S
Normal file
@ -0,0 +1,58 @@
|
||||
|
||||
.text
|
||||
|
||||
.align 4
|
||||
|
||||
.import main, code
|
||||
.import $global$, data
|
||||
.import __libc_start_main, code
|
||||
.import _fini, code
|
||||
.import _init, code
|
||||
|
||||
|
||||
|
||||
|
||||
.globl _start
|
||||
.export _start, ENTRY
|
||||
|
||||
_start:
|
||||
|
||||
.proc
|
||||
.callinfo
|
||||
|
||||
/* load main */
|
||||
ldil LP%main, %r26
|
||||
ldo RP%main(%r26), %r26
|
||||
|
||||
/* argc and argv should be in 25 and 24 */
|
||||
|
||||
/* Expand the stack to store the 5th through 7th args */
|
||||
ldo 64(%sp), %sp
|
||||
|
||||
/* void (*rtld_fini) (void) (actually the 6th arg) */
|
||||
stw %r23, -56(%sp)
|
||||
|
||||
/* void (*init) (void) */
|
||||
ldil LP%_init, %r23
|
||||
ldo RP%_init(%r23), %r23
|
||||
|
||||
/* void (*fini) (void) */
|
||||
ldil LP%_fini, %r22
|
||||
ldo RP%_fini(%r22), %r22
|
||||
stw %r22, -52(%sp)
|
||||
|
||||
/* void *stack_end */
|
||||
stw %sp, -60(%sp)
|
||||
|
||||
/* load global */
|
||||
ldil L%$global$, %dp
|
||||
ldo R%$global$(%dp), %dp
|
||||
|
||||
bl __libc_start_main,%r2
|
||||
nop
|
||||
/* die horribly if it returned (it shouldn't) */
|
||||
iitlbp %r0,(%r0)
|
||||
nop
|
||||
|
||||
.procend
|
||||
|
78
sysdeps/hppa/fpu/bits/fenv.h
Normal file
78
sysdeps/hppa/fpu/bits/fenv.h
Normal file
@ -0,0 +1,78 @@
|
||||
/* Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>
|
||||
|
||||
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 _FENV_H
|
||||
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
|
||||
#endif
|
||||
|
||||
/* Define bits representing the exception. We use the values of the
|
||||
appropriate enable bits in the FPU status word (which,
|
||||
coincidentally, are the same as the flag bits, but shifted right by
|
||||
27 bits). */
|
||||
enum
|
||||
{
|
||||
FE_INVALID = 1<<4, /* V */
|
||||
#define FE_INVALID FE_INVALID
|
||||
FE_DIVBYZERO = 1<<3, /* Z */
|
||||
#define FE_DIVBYZERO FE_DIVBYZERO
|
||||
FE_OVERFLOW = 1<<2, /* O */
|
||||
#define FE_OVERFLOW FE_OVERFLOW
|
||||
FE_UNDERFLOW = 1<<1, /* U */
|
||||
#define FE_UNDERFLOW FE_UNDERFLOW
|
||||
FE_INEXACT = 1<<0, /* I */
|
||||
#define FE_INEXACT FE_INEXACT
|
||||
};
|
||||
|
||||
#define FE_ALL_EXCEPT \
|
||||
(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
|
||||
|
||||
/* The PA-RISC FPU supports all of the four defined rounding modes.
|
||||
We use the values of the RM field in the floating point status
|
||||
register for the appropriate macros. */
|
||||
enum
|
||||
{
|
||||
FE_TONEAREST = 0 << 9,
|
||||
#define FE_TONEAREST FE_TONEAREST
|
||||
FE_TOWARDZERO = 1 << 9,
|
||||
#define FE_TOWARDZERO FE_TOWARDZERO
|
||||
FE_UPWARD = 2 << 9,
|
||||
#define FE_UPWARD FE_UPWARD
|
||||
FE_DOWNWARD = 3 << 9,
|
||||
#define FE_DOWNWARD FE_DOWNWARD
|
||||
};
|
||||
|
||||
/* Type representing exception flags. */
|
||||
typedef unsigned int fexcept_t;
|
||||
|
||||
/* Type representing floating-point environment. This structure
|
||||
corresponds to the layout of the status and exception words in the
|
||||
register file. */
|
||||
typedef struct
|
||||
{
|
||||
unsigned int __status_word;
|
||||
unsigned int __exception[7];
|
||||
} fenv_t;
|
||||
|
||||
/* If the default argument is used we use this value. */
|
||||
#define FE_DFL_ENV ((fenv_t *) -1)
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Floating-point environment where none of the exceptions are masked. */
|
||||
# define FE_NOMASK_ENV ((fenv_t *) -2)
|
||||
#endif
|
37
sysdeps/hppa/fpu/fclrexcpt.c
Normal file
37
sysdeps/hppa/fpu/fclrexcpt.c
Normal file
@ -0,0 +1,37 @@
|
||||
/* Clear given exceptions in current floating-point environment.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
feclearexcept (int excepts)
|
||||
{
|
||||
unsigned int sw[2];
|
||||
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
|
||||
/* Clear all the relevant bits. */
|
||||
sw[0] &= ~(excepts & FE_ALL_EXCEPT);
|
||||
__asm__ ("fldd 0(%0),%%fr0" : : "r" (sw));
|
||||
|
||||
/* Success. */
|
||||
return 0;
|
||||
}
|
37
sysdeps/hppa/fpu/fedisblxcpt.c
Normal file
37
sysdeps/hppa/fpu/fedisblxcpt.c
Normal file
@ -0,0 +1,37 @@
|
||||
/* Disable floating-point exceptions.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
fedisableexcept (int excepts)
|
||||
{
|
||||
unsigned int sw[2], old_exc;
|
||||
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
|
||||
old_exc = sw[0] & FE_ALL_EXCEPT;
|
||||
|
||||
sw[0] &= ~(excepts & FE_ALL_EXCEPT);
|
||||
__asm__ ("fldd 0(%0),%%fr0" : : "r" (sw));
|
||||
|
||||
return old_exc;
|
||||
}
|
37
sysdeps/hppa/fpu/feenablxcpt.c
Normal file
37
sysdeps/hppa/fpu/feenablxcpt.c
Normal file
@ -0,0 +1,37 @@
|
||||
/* Enable floating-point exceptions.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
feenableexcept (int excepts)
|
||||
{
|
||||
unsigned int sw[2], old_exc;
|
||||
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
|
||||
old_exc = sw[0] & FE_ALL_EXCEPT;
|
||||
|
||||
sw[0] |= (excepts & FE_ALL_EXCEPT);
|
||||
__asm__ ("fldd 0(%0),%%fr0" : : "r" (sw));
|
||||
|
||||
return old_exc;
|
||||
}
|
33
sysdeps/hppa/fpu/fegetenv.c
Normal file
33
sysdeps/hppa/fpu/fegetenv.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Store current floating-point environment.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
fegetenv (fenv_t *envp)
|
||||
{
|
||||
__asm__ (
|
||||
"fstd %%fr0,0(%2)\n"
|
||||
"fstd,ma %%fr1,8(%2)\n"
|
||||
"fstd,ma %%fr2,8(%2)\n"
|
||||
"fstd %%fr3,0(%2)\n"
|
||||
: "=m" (*envp), "=r" (envp) : "1" (envp));
|
||||
return 0;
|
||||
}
|
32
sysdeps/hppa/fpu/fegetexcept.c
Normal file
32
sysdeps/hppa/fpu/fegetexcept.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Get enabled floating-point exceptions.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
fegetexcept (void)
|
||||
{
|
||||
unsigned int sw[2];
|
||||
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
|
||||
return sw[0] & FE_ALL_EXCEPT;
|
||||
}
|
32
sysdeps/hppa/fpu/fegetround.c
Normal file
32
sysdeps/hppa/fpu/fegetround.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Return current rounding direction.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
fegetround (void)
|
||||
{
|
||||
unsigned int sw[2];
|
||||
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
|
||||
return sw[0] & FE_DOWNWARD;
|
||||
}
|
60
sysdeps/hppa/fpu/feholdexcpt.c
Normal file
60
sysdeps/hppa/fpu/feholdexcpt.c
Normal file
@ -0,0 +1,60 @@
|
||||
/* Store current floating-point environment and clear exceptions.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
#include <string.h>
|
||||
|
||||
int
|
||||
feholdexcept (fenv_t *envp)
|
||||
{
|
||||
fenv_t clear;
|
||||
|
||||
/* Store the environment. */
|
||||
{
|
||||
fenv_t * _regs = envp;
|
||||
__asm__ (
|
||||
"fstd %%fr0,0(%2)\n"
|
||||
"fstd,ma %%fr1,8(%2)\n"
|
||||
"fstd,ma %%fr2,8(%2)\n"
|
||||
"fstd %%fr3,0(%2)\n"
|
||||
: "=m" (*_regs), "=r" (_regs) : "1" (_regs));
|
||||
memcpy (&clear, envp, sizeof (clear));
|
||||
}
|
||||
|
||||
/* Now clear all exceptions. */
|
||||
clear.__status_word &= ~(FE_ALL_EXCEPT << 27);
|
||||
memset (clear.__exception, 0, sizeof (clear.__exception));
|
||||
|
||||
/* And set all exceptions to non-stop. */
|
||||
clear.__status_word &= ~FE_ALL_EXCEPT;
|
||||
|
||||
/* Load the new environment. */
|
||||
{
|
||||
fenv_t * _regs = &clear + 1;
|
||||
__asm__ (
|
||||
"fldd,mb -8(%2),%%fr3\n"
|
||||
"fldd,mb -8(%2),%%fr2\n"
|
||||
"fldd,mb -8(%2),%%fr1\n"
|
||||
"fldd -8(%2),%%fr0\n"
|
||||
: "=m" (*_regs), "=r" (_regs) : "1" (_regs));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
70
sysdeps/hppa/fpu/fesetenv.c
Normal file
70
sysdeps/hppa/fpu/fesetenv.c
Normal file
@ -0,0 +1,70 @@
|
||||
/* Install given floating-point environment.
|
||||
Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
Based on the m68k version by
|
||||
Andreas Schwab <schwab@suse.de>
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
fesetenv (const fenv_t *envp)
|
||||
{
|
||||
fenv_t temp;
|
||||
|
||||
/* Install the environment specified by ENVP. But there are a few
|
||||
values which we do not want to come from the saved environment.
|
||||
Therefore, we get the current environment and replace the values
|
||||
we want to use from the environment specified by the parameter. */
|
||||
{
|
||||
fenv_t * _regs = &temp;
|
||||
__asm__ (
|
||||
"fstd %%fr0,0(%2)\n"
|
||||
"fstd,ma %%fr1,8(%2)\n"
|
||||
"fstd,ma %%fr2,8(%2)\n"
|
||||
"fstd %%fr3,0(%2)\n"
|
||||
: "=m" (*_regs), "=r" (_regs) : "1" (_regs));
|
||||
}
|
||||
|
||||
temp.__status_word &= ~(FE_ALL_EXCEPT
|
||||
| (FE_ALL_EXCEPT << 27)
|
||||
| FE_DOWNWARD);
|
||||
if (envp == FE_DFL_ENV)
|
||||
;
|
||||
else if (envp == FE_NOMASK_ENV)
|
||||
temp.__status_word |= FE_ALL_EXCEPT;
|
||||
else
|
||||
temp.__status_word |= (envp->__status_word
|
||||
& (FE_ALL_EXCEPT
|
||||
| FE_DOWNWARD
|
||||
| (FE_ALL_EXCEPT << 27)));
|
||||
|
||||
/* Load the new environment. */
|
||||
{
|
||||
fenv_t * _regs = &temp + 1;
|
||||
__asm__ (
|
||||
"fldd,mb -8(%2),%%fr3\n"
|
||||
"fldd,mb -8(%2),%%fr2\n"
|
||||
"fldd,mb -8(%2),%%fr1\n"
|
||||
"fldd -8(%2),%%fr0\n"
|
||||
: "=m" (*_regs), "=r" (_regs) : "1" (_regs));
|
||||
}
|
||||
|
||||
/* Success. */
|
||||
return 0;
|
||||
}
|
39
sysdeps/hppa/fpu/fesetround.c
Normal file
39
sysdeps/hppa/fpu/fesetround.c
Normal file
@ -0,0 +1,39 @@
|
||||
/* Set current rounding direction.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
fesetround (int round)
|
||||
{
|
||||
unsigned int sw[2];
|
||||
|
||||
if (round & ~FE_DOWNWARD)
|
||||
/* ROUND is not a valid rounding mode. */
|
||||
return 1;
|
||||
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
sw[0] &= ~FE_UPWARD;
|
||||
sw[0] |= round;
|
||||
__asm__ ("fldd 0(%0),%%fr0" : : "r" (sw));
|
||||
|
||||
return 0;
|
||||
}
|
40
sysdeps/hppa/fpu/feupdateenv.c
Normal file
40
sysdeps/hppa/fpu/feupdateenv.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* Install given floating-point environment and raise exceptions.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
feupdateenv (const fenv_t *envp)
|
||||
{
|
||||
unsigned int sw[2];
|
||||
|
||||
/* Get the current exception status. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
sw[0] &= (FE_ALL_EXCEPT << 27);
|
||||
|
||||
/* Install new environment. */
|
||||
fesetenv (envp);
|
||||
|
||||
/* Raise the saved exception. */
|
||||
feraiseexcept (sw[0] >> 27);
|
||||
|
||||
/* Success. */
|
||||
return 0;
|
||||
}
|
36
sysdeps/hppa/fpu/fgetexcptflg.c
Normal file
36
sysdeps/hppa/fpu/fgetexcptflg.c
Normal file
@ -0,0 +1,36 @@
|
||||
/* Store current representation for exceptions.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
fegetexceptflag (fexcept_t *flagp, int excepts)
|
||||
{
|
||||
unsigned int sw[2];
|
||||
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
|
||||
*flagp = (sw[0] >> 27) & excepts & FE_ALL_EXCEPT;
|
||||
|
||||
/* Success. */
|
||||
return 0;
|
||||
}
|
||||
|
89
sysdeps/hppa/fpu/fraiseexcpt.c
Normal file
89
sysdeps/hppa/fpu/fraiseexcpt.c
Normal file
@ -0,0 +1,89 @@
|
||||
/* Raise given exceptions.
|
||||
Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>
|
||||
|
||||
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 <fenv.h>
|
||||
#include <math.h>
|
||||
|
||||
int
|
||||
feraiseexcept (int excepts)
|
||||
{
|
||||
/* Raise exceptions represented by EXCEPTS. But we must raise only one
|
||||
signal at a time. It is important that if the overflow/underflow
|
||||
exception and the divide by zero exception are given at the same
|
||||
time, the overflow/underflow exception follows the divide by zero
|
||||
exception. */
|
||||
|
||||
/* We do these bits in assembly to be certain GCC doesn't optimize
|
||||
away something important, and so we can force delayed traps to
|
||||
occur. */
|
||||
|
||||
/* FIXME: These all need verification! */
|
||||
|
||||
/* First: invalid exception. */
|
||||
if (excepts & FE_INVALID)
|
||||
{
|
||||
/* One example of a invalid operation is 0 * Infinity. */
|
||||
double d = HUGE_VAL;
|
||||
__asm__ __volatile__ ("fmpy,dbl %1,%%fr0,%0\n\t"
|
||||
/* FIXME: is this a proper trap barrier? */
|
||||
"fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0" (d));
|
||||
}
|
||||
|
||||
/* Next: division by zero. */
|
||||
if (excepts & FE_DIVBYZERO)
|
||||
{
|
||||
double d = 1.0;
|
||||
__asm__ __volatile__ ("fdiv,dbl %1,%%fr0,%0\n\t"
|
||||
"fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0" (d));
|
||||
}
|
||||
|
||||
/* Next: overflow. */
|
||||
/* FIXME: Compare with IA-64 - do we have the same problem? */
|
||||
if (excepts & FE_OVERFLOW)
|
||||
{
|
||||
double d = DBL_MAX;
|
||||
|
||||
__asm__ __volatile__ ("fmpy,dbl %1,%1,%0\n\t"
|
||||
"fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0" (d));
|
||||
}
|
||||
|
||||
/* Next: underflow. */
|
||||
if (excepts & FE_UNDERFLOW)
|
||||
{
|
||||
double d = DBL_MIN;
|
||||
double e = 69.69;
|
||||
|
||||
__asm__ __volatile__ ("fdiv,dbl %1,%2,%0\n\t"
|
||||
"fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0" (d), "f" (e));
|
||||
}
|
||||
|
||||
/* Last: inexact. */
|
||||
if (excepts & FE_INEXACT)
|
||||
{
|
||||
double d = 1.0;
|
||||
double e = M_PI;
|
||||
|
||||
__asm__ __volatile__ ("fdiv,dbl %1,%2,%0\n\t"
|
||||
"fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0" (d), "f" (e));
|
||||
}
|
||||
|
||||
/* Success. */
|
||||
return 0;
|
||||
}
|
41
sysdeps/hppa/fpu/fsetexcptflg.c
Normal file
41
sysdeps/hppa/fpu/fsetexcptflg.c
Normal file
@ -0,0 +1,41 @@
|
||||
/* Set floating-point environment exception handling.
|
||||
Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
#include <math.h>
|
||||
|
||||
int
|
||||
fesetexceptflag (const fexcept_t *flagp, int excepts)
|
||||
{
|
||||
unsigned int sw[2];
|
||||
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
|
||||
/* Install the new exception flags bits. */
|
||||
sw[0] &= ~(excepts & (FE_ALL_EXCEPT >> 27));
|
||||
sw[0] |= (*flagp & excepts & FE_ALL_EXCEPT) << 27;
|
||||
|
||||
/* Store the new status word. */
|
||||
__asm__ ("fldd 0(%0),%%fr0" : : "r" (sw));
|
||||
|
||||
/* Success. */
|
||||
return 0;
|
||||
}
|
32
sysdeps/hppa/fpu/ftestexcept.c
Normal file
32
sysdeps/hppa/fpu/ftestexcept.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Test exception in current environment.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
|
||||
|
||||
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 <fenv.h>
|
||||
|
||||
int
|
||||
fetestexcept (int excepts)
|
||||
{
|
||||
unsigned int sw[2];
|
||||
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
|
||||
|
||||
return (sw[0] >> 27) & excepts & FE_ALL_EXCEPT;
|
||||
}
|
28
sysdeps/hppa/frame.h
Normal file
28
sysdeps/hppa/frame.h
Normal file
@ -0,0 +1,28 @@
|
||||
/* Definition of stack frame structure. HPPA version.
|
||||
Copyright (C) 2000 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. */
|
||||
|
||||
/* PA stacks grow upwards. */
|
||||
#define INNER_THAN >
|
||||
|
||||
/* FIXME: will verify this later */
|
||||
struct layout
|
||||
{
|
||||
void *next;
|
||||
void *return_address;
|
||||
};
|
4
sysdeps/hppa/hppa1.1/Implies
Normal file
4
sysdeps/hppa/hppa1.1/Implies
Normal file
@ -0,0 +1,4 @@
|
||||
wordsize-32
|
||||
ieee754/flt-32
|
||||
ieee754/dbl-64
|
||||
ieee754/ldbl-128
|
@ -1,71 +1,72 @@
|
||||
; HP-PA-1.1 __mpn_addmul_1 -- Multiply a limb vector with a limb and
|
||||
; add the result to a second limb vector.
|
||||
;! HP-PA-1.1 __mpn_addmul_1 -- Multiply a limb vector with a limb and
|
||||
;! add the result to a second limb vector.
|
||||
|
||||
; Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
|
||||
;! Copyright (C) 1992, 1993, 1994 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.
|
||||
|
||||
|
||||
; INPUT PARAMETERS
|
||||
; res_ptr r26
|
||||
; s1_ptr r25
|
||||
; size r24
|
||||
; s2_limb r23
|
||||
;! INPUT PARAMETERS
|
||||
;! res_ptr r26
|
||||
;! s1_ptr r25
|
||||
;! size r24
|
||||
;! s2_limb r23
|
||||
|
||||
; This runs at 11 cycles/limb on a PA7000. With the used instructions, it
|
||||
; can not become faster due to data cache contention after a store. On the
|
||||
; PA7100 it runs at 10 cycles/limb, and that can not be improved either,
|
||||
; since only the xmpyu does not need the integer pipeline, so the only
|
||||
; dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb
|
||||
; on the PA7100.
|
||||
;! This runs at 11 cycles/limb on a PA7000. With the used instructions, it
|
||||
;! can not become faster due to data cache contention after a store. On the
|
||||
;! PA7100 it runs at 10 cycles/limb, and that can not be improved either,
|
||||
;! since only the xmpyu does not need the integer pipeline, so the only
|
||||
;! dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb
|
||||
;! on the PA7100.
|
||||
|
||||
; There are some ideas described in mul_1.s that applies to this code too.
|
||||
;! There are some ideas described in mul_1.s that applies to this code too.
|
||||
|
||||
.code
|
||||
.text
|
||||
.export __mpn_addmul_1
|
||||
__mpn_addmul_1
|
||||
__mpn_addmul_1:
|
||||
.proc
|
||||
.callinfo frame=64,no_calls
|
||||
.entry
|
||||
|
||||
ldo 64(%r30),%r30
|
||||
fldws,ma 4(%r25),%fr5
|
||||
stw %r23,-16(%r30) ; move s2_limb ...
|
||||
stw %r23,-16(%r30) ;! move s2_limb ...
|
||||
addib,= -1,%r24,L$just_one_limb
|
||||
fldws -16(%r30),%fr4 ; ... into fr4
|
||||
add %r0,%r0,%r0 ; clear carry
|
||||
fldws -16(%r30),%fr4 ;! ... into fr4
|
||||
add %r0,%r0,%r0 ;! clear carry
|
||||
xmpyu %fr4,%fr5,%fr6
|
||||
fldws,ma 4(%r25),%fr7
|
||||
fstds %fr6,-16(%r30)
|
||||
xmpyu %fr4,%fr7,%fr8
|
||||
ldw -12(%r30),%r19 ; least significant limb in product
|
||||
ldw -12(%r30),%r20 ;! least significant limb in product
|
||||
ldw -16(%r30),%r28
|
||||
|
||||
fstds %fr8,-16(%r30)
|
||||
addib,= -1,%r24,L$end
|
||||
ldw -12(%r30),%r1
|
||||
|
||||
; Main loop
|
||||
L$loop ldws 0(%r26),%r29
|
||||
;! Main loop
|
||||
L$loop:
|
||||
ldws 0(%r26),%r29
|
||||
fldws,ma 4(%r25),%fr5
|
||||
add %r29,%r19,%r19
|
||||
stws,ma %r19,4(%r26)
|
||||
addc %r28,%r1,%r19
|
||||
add %r29,%r20,%r20
|
||||
stws,ma %r20,4(%r26)
|
||||
addc %r28,%r1,%r20
|
||||
xmpyu %fr4,%fr5,%fr6
|
||||
ldw -16(%r30),%r28
|
||||
fstds %fr6,-16(%r30)
|
||||
@ -73,27 +74,28 @@ L$loop ldws 0(%r26),%r29
|
||||
addib,<> -1,%r24,L$loop
|
||||
ldw -12(%r30),%r1
|
||||
|
||||
L$end ldw 0(%r26),%r29
|
||||
add %r29,%r19,%r19
|
||||
stws,ma %r19,4(%r26)
|
||||
addc %r28,%r1,%r19
|
||||
L$end:
|
||||
ldw 0(%r26),%r29
|
||||
add %r29,%r20,%r20
|
||||
stws,ma %r20,4(%r26)
|
||||
addc %r28,%r1,%r20
|
||||
ldw -16(%r30),%r28
|
||||
ldws 0(%r26),%r29
|
||||
addc %r0,%r28,%r28
|
||||
add %r29,%r19,%r19
|
||||
stws,ma %r19,4(%r26)
|
||||
add %r29,%r20,%r20
|
||||
stws,ma %r20,4(%r26)
|
||||
addc %r0,%r28,%r28
|
||||
bv 0(%r2)
|
||||
ldo -64(%r30),%r30
|
||||
ldo -64(%r30),%r30
|
||||
|
||||
L$just_one_limb
|
||||
L$just_one_limb:
|
||||
xmpyu %fr4,%fr5,%fr6
|
||||
ldw 0(%r26),%r29
|
||||
fstds %fr6,-16(%r30)
|
||||
ldw -12(%r30),%r1
|
||||
ldw -16(%r30),%r28
|
||||
add %r29,%r1,%r19
|
||||
stw %r19,0(%r26)
|
||||
add %r29,%r1,%r20
|
||||
stw %r20,0(%r26)
|
||||
addc %r0,%r28,%r28
|
||||
bv 0(%r2)
|
||||
ldo -64(%r30),%r30
|
||||
|
@ -1,92 +1,94 @@
|
||||
; HP-PA-1.1 __mpn_mul_1 -- Multiply a limb vector with a limb and store
|
||||
; the result in a second limb vector.
|
||||
;! HP-PA-1.1 __mpn_mul_1 -- Multiply a limb vector with a limb and store
|
||||
;! the result in a second limb vector.
|
||||
|
||||
; Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
|
||||
;! Copyright (C) 1992, 1993, 1994 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.
|
||||
|
||||
|
||||
; INPUT PARAMETERS
|
||||
; res_ptr r26
|
||||
; s1_ptr r25
|
||||
; size r24
|
||||
; s2_limb r23
|
||||
;! INPUT PARAMETERS
|
||||
;! res_ptr r26
|
||||
;! s1_ptr r25
|
||||
;! size r24
|
||||
;! s2_limb r23
|
||||
|
||||
; This runs at 9 cycles/limb on a PA7000. With the used instructions, it can
|
||||
; not become faster due to data cache contention after a store. On the
|
||||
; PA7100 it runs at 7 cycles/limb, and that can not be improved either, since
|
||||
; only the xmpyu does not need the integer pipeline, so the only dual-issue
|
||||
; we will get are addc+xmpyu. Unrolling would not help either CPU.
|
||||
;! This runs at 9 cycles/limb on a PA7000. With the used instructions, it can
|
||||
;! not become faster due to data cache contention after a store. On the
|
||||
;! PA7100 it runs at 7 cycles/limb, and that can not be improved either, since
|
||||
;! only the xmpyu does not need the integer pipeline, so the only dual-issue
|
||||
;! we will get are addc+xmpyu. Unrolling would not help either CPU.
|
||||
|
||||
; We could use fldds to read two limbs at a time from the S1 array, and that
|
||||
; could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and
|
||||
; PA7100, respectively. We don't do that since it does not seem worth the
|
||||
; (alignment) troubles...
|
||||
;! We could use fldds to read two limbs at a time from the S1 array, and that
|
||||
;! could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and
|
||||
;! PA7100, respectively. We don't do that since it does not seem worth the
|
||||
;! (alignment) troubles...
|
||||
|
||||
; At least the PA7100 is rumored to be able to deal with cache-misses
|
||||
; without stalling instruction issue. If this is true, and the cache is
|
||||
; actually also lockup-free, we should use a deeper software pipeline, and
|
||||
; load from S1 very early! (The loads and stores to -12(sp) will surely be
|
||||
; in the cache.)
|
||||
;! At least the PA7100 is rumored to be able to deal with cache-misses
|
||||
;! without stalling instruction issue. If this is true, and the cache is
|
||||
;! actually also lockup-free, we should use a deeper software pipeline, and
|
||||
;! load from S1 very early; (The loads and stores to -12(sp) will surely be
|
||||
;! in the cache.)
|
||||
|
||||
.code
|
||||
.text
|
||||
.export __mpn_mul_1
|
||||
__mpn_mul_1
|
||||
__mpn_mul_1:
|
||||
.proc
|
||||
.callinfo frame=64,no_calls
|
||||
.entry
|
||||
|
||||
ldo 64(%r30),%r30
|
||||
fldws,ma 4(%r25),%fr5
|
||||
stw %r23,-16(%r30) ; move s2_limb ...
|
||||
stw %r23,-16(%r30) ;! move s2_limb ...
|
||||
addib,= -1,%r24,L$just_one_limb
|
||||
fldws -16(%r30),%fr4 ; ... into fr4
|
||||
add %r0,%r0,%r0 ; clear carry
|
||||
fldws -16(%r30),%fr4 ;! ... into fr4
|
||||
add %r0,%r0,%r0 ;! clear carry
|
||||
xmpyu %fr4,%fr5,%fr6
|
||||
fldws,ma 4(%r25),%fr7
|
||||
fstds %fr6,-16(%r30)
|
||||
xmpyu %fr4,%fr7,%fr8
|
||||
ldw -12(%r30),%r19 ; least significant limb in product
|
||||
ldw -12(%r30),%r20 ;! least significant limb in product
|
||||
ldw -16(%r30),%r28
|
||||
|
||||
fstds %fr8,-16(%r30)
|
||||
addib,= -1,%r24,L$end
|
||||
ldw -12(%r30),%r1
|
||||
|
||||
; Main loop
|
||||
L$loop fldws,ma 4(%r25),%fr5
|
||||
stws,ma %r19,4(%r26)
|
||||
addc %r28,%r1,%r19
|
||||
;! Main loop
|
||||
L$loop:
|
||||
fldws,ma 4(%r25),%fr5
|
||||
stws,ma %r20,4(%r26)
|
||||
addc %r28,%r1,%r20
|
||||
xmpyu %fr4,%fr5,%fr6
|
||||
ldw -16(%r30),%r28
|
||||
fstds %fr6,-16(%r30)
|
||||
addib,<> -1,%r24,L$loop
|
||||
ldw -12(%r30),%r1
|
||||
|
||||
L$end stws,ma %r19,4(%r26)
|
||||
addc %r28,%r1,%r19
|
||||
L$end:
|
||||
stws,ma %r20,4(%r26)
|
||||
addc %r28,%r1,%r20
|
||||
ldw -16(%r30),%r28
|
||||
stws,ma %r19,4(%r26)
|
||||
stws,ma %r20,4(%r26)
|
||||
addc %r0,%r28,%r28
|
||||
bv 0(%r2)
|
||||
ldo -64(%r30),%r30
|
||||
|
||||
L$just_one_limb
|
||||
L$just_one_limb:
|
||||
xmpyu %fr4,%fr5,%fr6
|
||||
fstds %fr6,-16(%r30)
|
||||
ldw -16(%r30),%r28
|
||||
|
@ -1,77 +1,78 @@
|
||||
; HP-PA-1.1 __mpn_submul_1 -- Multiply a limb vector with a limb and
|
||||
; subtract the result from a second limb vector.
|
||||
;! HP-PA-1.1 __mpn_submul_1 -- Multiply a limb vector with a limb and
|
||||
;! subtract the result from a second limb vector.
|
||||
|
||||
; Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
|
||||
;! Copyright (C) 1992, 1993, 1994 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.
|
||||
|
||||
|
||||
; INPUT PARAMETERS
|
||||
; res_ptr r26
|
||||
; s1_ptr r25
|
||||
; size r24
|
||||
; s2_limb r23
|
||||
;! INPUT PARAMETERS
|
||||
;! res_ptr r26
|
||||
;! s1_ptr r25
|
||||
;! size r24
|
||||
;! s2_limb r23
|
||||
|
||||
; This runs at 12 cycles/limb on a PA7000. With the used instructions, it
|
||||
; can not become faster due to data cache contention after a store. On the
|
||||
; PA7100 it runs at 11 cycles/limb, and that can not be improved either,
|
||||
; since only the xmpyu does not need the integer pipeline, so the only
|
||||
; dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb
|
||||
; on the PA7100.
|
||||
;! This runs at 12 cycles/limb on a PA7000. With the used instructions, it
|
||||
;! can not become faster due to data cache contention after a store. On the
|
||||
;! PA7100 it runs at 11 cycles/limb, and that can not be improved either,
|
||||
;! since only the xmpyu does not need the integer pipeline, so the only
|
||||
;! dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb
|
||||
;! on the PA7100.
|
||||
|
||||
; There are some ideas described in mul_1.s that applies to this code too.
|
||||
;! There are some ideas described in mul_1.s that applies to this code too.
|
||||
|
||||
; It seems possible to make this run as fast as __mpn_addmul_1, if we use
|
||||
; sub,>>= %r29,%r19,%r22
|
||||
; addi 1,%r28,%r28
|
||||
; but that requires reworking the hairy software pipeline...
|
||||
;! It seems possible to make this run as fast as __mpn_addmul_1, if we use
|
||||
;! sub,>>= %r29,%r20,%r22
|
||||
;! addi 1,%r28,%r28
|
||||
;! but that requires reworking the hairy software pipeline...
|
||||
|
||||
.code
|
||||
.text
|
||||
.export __mpn_submul_1
|
||||
__mpn_submul_1
|
||||
__mpn_submul_1:
|
||||
.proc
|
||||
.callinfo frame=64,no_calls
|
||||
.entry
|
||||
|
||||
ldo 64(%r30),%r30
|
||||
fldws,ma 4(%r25),%fr5
|
||||
stw %r23,-16(%r30) ; move s2_limb ...
|
||||
stw %r23,-16(%r30) ;! move s2_limb ...
|
||||
addib,= -1,%r24,L$just_one_limb
|
||||
fldws -16(%r30),%fr4 ; ... into fr4
|
||||
add %r0,%r0,%r0 ; clear carry
|
||||
fldws -16(%r30),%fr4 ;! ... into fr4
|
||||
add %r0,%r0,%r0 ;! clear carry
|
||||
xmpyu %fr4,%fr5,%fr6
|
||||
fldws,ma 4(%r25),%fr7
|
||||
fstds %fr6,-16(%r30)
|
||||
xmpyu %fr4,%fr7,%fr8
|
||||
ldw -12(%r30),%r19 ; least significant limb in product
|
||||
ldw -12(%r30),%r20 ;! least significant limb in product
|
||||
ldw -16(%r30),%r28
|
||||
|
||||
fstds %fr8,-16(%r30)
|
||||
addib,= -1,%r24,L$end
|
||||
ldw -12(%r30),%r1
|
||||
|
||||
; Main loop
|
||||
L$loop ldws 0(%r26),%r29
|
||||
;! Main loop
|
||||
L$loop:
|
||||
ldws 0(%r26),%r29
|
||||
fldws,ma 4(%r25),%fr5
|
||||
sub %r29,%r19,%r22
|
||||
add %r22,%r19,%r0
|
||||
sub %r29,%r20,%r22
|
||||
add %r22,%r20,%r0
|
||||
stws,ma %r22,4(%r26)
|
||||
addc %r28,%r1,%r19
|
||||
addc %r28,%r1,%r20
|
||||
xmpyu %fr4,%fr5,%fr6
|
||||
ldw -16(%r30),%r28
|
||||
fstds %fr6,-16(%r30)
|
||||
@ -79,22 +80,23 @@ L$loop ldws 0(%r26),%r29
|
||||
addib,<> -1,%r24,L$loop
|
||||
ldw -12(%r30),%r1
|
||||
|
||||
L$end ldw 0(%r26),%r29
|
||||
sub %r29,%r19,%r22
|
||||
add %r22,%r19,%r0
|
||||
L$end:
|
||||
ldw 0(%r26),%r29
|
||||
sub %r29,%r20,%r22
|
||||
add %r22,%r20,%r0
|
||||
stws,ma %r22,4(%r26)
|
||||
addc %r28,%r1,%r19
|
||||
addc %r28,%r1,%r20
|
||||
ldw -16(%r30),%r28
|
||||
ldws 0(%r26),%r29
|
||||
addc %r0,%r28,%r28
|
||||
sub %r29,%r19,%r22
|
||||
add %r22,%r19,%r0
|
||||
sub %r29,%r20,%r22
|
||||
add %r22,%r20,%r0
|
||||
stws,ma %r22,4(%r26)
|
||||
addc %r0,%r28,%r28
|
||||
bv 0(%r2)
|
||||
ldo -64(%r30),%r30
|
||||
|
||||
L$just_one_limb
|
||||
L$just_one_limb:
|
||||
xmpyu %fr4,%fr5,%fr6
|
||||
ldw 0(%r26),%r29
|
||||
fstds %fr6,-16(%r30)
|
||||
|
@ -1,53 +1,55 @@
|
||||
; HP-PA __udiv_qrnnd division support, used from longlong.h.
|
||||
; This version runs fast on PA 7000 and later.
|
||||
;! HP-PA __udiv_qrnnd division support, used from longlong.h.
|
||||
;! This version runs fast on PA 7000 and later.
|
||||
|
||||
; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
|
||||
;! Copyright (C) 1993, 1994 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.
|
||||
|
||||
|
||||
; INPUT PARAMETERS
|
||||
; rem_ptr gr26
|
||||
; n1 gr25
|
||||
; n0 gr24
|
||||
; d gr23
|
||||
;! INPUT PARAMETERS
|
||||
;! rem_ptr gr26
|
||||
;! n1 gr25
|
||||
;! n0 gr24
|
||||
;! d gr23
|
||||
|
||||
.code
|
||||
L$0000 .word 0x43f00000
|
||||
.text
|
||||
L$0000:
|
||||
.word 0x43f00000
|
||||
.word 0x0
|
||||
.export __udiv_qrnnd
|
||||
__udiv_qrnnd
|
||||
__udiv_qrnnd:
|
||||
.proc
|
||||
.callinfo frame=64,no_calls
|
||||
.entry
|
||||
ldo 64(%r30),%r30
|
||||
|
||||
stws %r25,-16(0,%r30) ; n_hi
|
||||
stws %r24,-12(0,%r30) ; n_lo
|
||||
ldil L'L$0000,%r19
|
||||
ldo R'L$0000(%r19),%r19
|
||||
stws %r25,-16(0,%r30) ;! n_hi
|
||||
stws %r24,-12(0,%r30) ;! n_lo
|
||||
b,l L$0,%r1
|
||||
ldo L$0000-L$0(%r1),%r1
|
||||
L$0:
|
||||
fldds -16(0,%r30),%fr5
|
||||
stws %r23,-12(0,%r30)
|
||||
comib,<= 0,%r25,L$1
|
||||
fcnvxf,dbl,dbl %fr5,%fr5
|
||||
fldds 0(0,%r19),%fr4
|
||||
fldds 0(0,%r1),%fr4
|
||||
fadd,dbl %fr4,%fr5,%fr5
|
||||
L$1
|
||||
L$1:
|
||||
fcpy,sgl %fr0,%fr6L
|
||||
fldws -12(0,%r30),%fr6R
|
||||
fcnvxf,dbl,dbl %fr6,%fr4
|
||||
@ -62,13 +64,14 @@ L$1
|
||||
ldws -12(0,%r30),%r21
|
||||
ldws -16(0,%r30),%r20
|
||||
sub %r24,%r21,%r22
|
||||
subb %r25,%r20,%r19
|
||||
comib,= 0,%r19,L$2
|
||||
subb %r25,%r20,%r1
|
||||
comib,= 0,%r1,L$2
|
||||
ldo -64(%r30),%r30
|
||||
|
||||
add %r22,%r23,%r22
|
||||
ldo -1(%r28),%r28
|
||||
L$2 bv 0(%r2)
|
||||
L$2:
|
||||
bv 0(%r2)
|
||||
stws %r22,0(0,%r26)
|
||||
|
||||
.exit
|
||||
|
@ -1,34 +1,34 @@
|
||||
; HP-PA __mpn_lshift --
|
||||
;! HP-PA __mpn_lshift --
|
||||
|
||||
; Copyright (C) 1992, 1994 Free Software Foundation, Inc.
|
||||
;! Copyright (C) 1992, 1994 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.
|
||||
|
||||
|
||||
; INPUT PARAMETERS
|
||||
; res_ptr gr26
|
||||
; s_ptr gr25
|
||||
; size gr24
|
||||
; cnt gr23
|
||||
;! INPUT PARAMETERS
|
||||
;! res_ptr gr26
|
||||
;! s_ptr gr25
|
||||
;! size gr24
|
||||
;! cnt gr23
|
||||
|
||||
.code
|
||||
.text
|
||||
.export __mpn_lshift
|
||||
__mpn_lshift
|
||||
__mpn_lshift:
|
||||
.proc
|
||||
.callinfo frame=64,no_calls
|
||||
.entry
|
||||
@ -39,12 +39,12 @@ __mpn_lshift
|
||||
subi 32,%r23,%r1
|
||||
mtsar %r1
|
||||
addib,= -1,%r24,L$0004
|
||||
vshd %r0,%r22,%r28 ; compute carry out limb
|
||||
vshd %r0,%r22,%r28 ;! compute carry out limb
|
||||
ldws,mb -4(0,%r25),%r29
|
||||
addib,= -1,%r24,L$0002
|
||||
vshd %r22,%r29,%r20
|
||||
|
||||
L$loop ldws,mb -4(0,%r25),%r22
|
||||
L$loop: ldws,mb -4(0,%r25),%r22
|
||||
stws,mb %r20,-4(0,%r26)
|
||||
addib,= -1,%r24,L$0003
|
||||
vshd %r29,%r22,%r20
|
||||
@ -53,12 +53,12 @@ L$loop ldws,mb -4(0,%r25),%r22
|
||||
addib,<> -1,%r24,L$loop
|
||||
vshd %r22,%r29,%r20
|
||||
|
||||
L$0002 stws,mb %r20,-4(0,%r26)
|
||||
L$0002: stws,mb %r20,-4(0,%r26)
|
||||
vshd %r29,%r0,%r20
|
||||
bv 0(%r2)
|
||||
stw %r20,-4(0,%r26)
|
||||
L$0003 stws,mb %r20,-4(0,%r26)
|
||||
L$0004 vshd %r22,%r0,%r20
|
||||
L$0003: stws,mb %r20,-4(0,%r26)
|
||||
L$0004: vshd %r22,%r0,%r20
|
||||
bv 0(%r2)
|
||||
stw %r20,-4(0,%r26)
|
||||
|
||||
|
22
sysdeps/hppa/memusage.h
Normal file
22
sysdeps/hppa/memusage.h
Normal file
@ -0,0 +1,22 @@
|
||||
/* Copyright (C) 2000 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 GETSP() ({ register uintptr_t stack_ptr asm ("%r30"); stack_ptr; })
|
||||
#define STACK_GROWS_UPWARD 1
|
||||
|
||||
#include <sysdeps/generic/memusage.h>
|
@ -1,34 +1,34 @@
|
||||
; HP-PA __mpn_rshift --
|
||||
;! HP-PA __mpn_rshift --
|
||||
|
||||
; Copyright (C) 1992, 1994 Free Software Foundation, Inc.
|
||||
;! Copyright (C) 1992, 1994 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.
|
||||
|
||||
|
||||
; INPUT PARAMETERS
|
||||
; res_ptr gr26
|
||||
; s_ptr gr25
|
||||
; size gr24
|
||||
; cnt gr23
|
||||
;! INPUT PARAMETERS
|
||||
;! res_ptr gr26
|
||||
;! s_ptr gr25
|
||||
;! size gr24
|
||||
;! cnt gr23
|
||||
|
||||
.code
|
||||
.text
|
||||
.export __mpn_rshift
|
||||
__mpn_rshift
|
||||
__mpn_rshift:
|
||||
.proc
|
||||
.callinfo frame=64,no_calls
|
||||
.entry
|
||||
@ -36,12 +36,12 @@ __mpn_rshift
|
||||
ldws,ma 4(0,%r25),%r22
|
||||
mtsar %r23
|
||||
addib,= -1,%r24,L$0004
|
||||
vshd %r22,%r0,%r28 ; compute carry out limb
|
||||
vshd %r22,%r0,%r28 ;! compute carry out limb
|
||||
ldws,ma 4(0,%r25),%r29
|
||||
addib,= -1,%r24,L$0002
|
||||
vshd %r29,%r22,%r20
|
||||
|
||||
L$loop ldws,ma 4(0,%r25),%r22
|
||||
L$loop: ldws,ma 4(0,%r25),%r22
|
||||
stws,ma %r20,4(0,%r26)
|
||||
addib,= -1,%r24,L$0003
|
||||
vshd %r22,%r29,%r20
|
||||
@ -50,12 +50,12 @@ L$loop ldws,ma 4(0,%r25),%r22
|
||||
addib,<> -1,%r24,L$loop
|
||||
vshd %r29,%r22,%r20
|
||||
|
||||
L$0002 stws,ma %r20,4(0,%r26)
|
||||
L$0002: stws,ma %r20,4(0,%r26)
|
||||
vshd %r0,%r29,%r20
|
||||
bv 0(%r2)
|
||||
stw %r20,0(0,%r26)
|
||||
L$0003 stws,ma %r20,4(0,%r26)
|
||||
L$0004 vshd %r0,%r22,%r20
|
||||
L$0003: stws,ma %r20,4(0,%r26)
|
||||
L$0004: vshd %r0,%r22,%r20
|
||||
bv 0(%r2)
|
||||
stw %r20,0(0,%r26)
|
||||
|
||||
|
69
sysdeps/hppa/setjmp.S
Normal file
69
sysdeps/hppa/setjmp.S
Normal file
@ -0,0 +1,69 @@
|
||||
/* setjmp for HPPA.
|
||||
Copyright (C) 1995, 1996, 1997, 1999 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>
|
||||
#define _ASM
|
||||
#define _SETJMP_H
|
||||
#include <bits/setjmp.h>
|
||||
|
||||
|
||||
.text
|
||||
.align 4
|
||||
.import __sigjmp_save, code
|
||||
.globl __sigsetjmp
|
||||
.export __sigsetjmp, code
|
||||
.proc
|
||||
.callinfo
|
||||
__sigsetjmp:
|
||||
stw %r3, 0(%r26)
|
||||
stw %r4, 8(%r26)
|
||||
stw %r5, 12(%r26)
|
||||
stw %r6, 16(%r26)
|
||||
stw %r7, 20(%r26)
|
||||
stw %r8, 24(%r26)
|
||||
stw %r9, 28(%r26)
|
||||
stw %r10, 32(%r26)
|
||||
stw %r11, 36(%r26)
|
||||
stw %r12, 40(%r26)
|
||||
stw %r13, 44(%r26)
|
||||
stw %r14, 48(%r26)
|
||||
stw %r15, 52(%r26)
|
||||
stw %r16, 56(%r26)
|
||||
stw %r17, 60(%r26)
|
||||
stw %r18, 64(%r26)
|
||||
stw %r19, 68(%r26)
|
||||
stw %r27, 72(%r26)
|
||||
stw %r30, 76(%r26)
|
||||
|
||||
stw %rp, 80(%r26)
|
||||
|
||||
ldo 88(%r26),%r19
|
||||
fstds,ma %fr12, 8(%r19) /* 88 */
|
||||
fstds,ma %fr13, 8(%r19) /* 96 */
|
||||
fstds,ma %fr14, 8(%r19) /* 104 */
|
||||
fstds,ma %fr15, 8(%r19) /* 112 */
|
||||
fstds,ma %fr16, 8(%r19) /* 120 */
|
||||
fstds,ma %fr17, 8(%r19) /* 128 */
|
||||
fstds,ma %fr18, 8(%r19) /* 136 */
|
||||
fstds,ma %fr19, 8(%r19) /* 144 */
|
||||
fstds,ma %fr20, 8(%r19) /* 152 */
|
||||
fstds %fr21, 0(%r19) /* 160 */
|
||||
b __sigjmp_save
|
||||
nop
|
||||
.procend
|
@ -1,56 +1,56 @@
|
||||
; HP-PA __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
|
||||
; store difference in a third limb vector.
|
||||
;! HP-PA __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
|
||||
;! store difference in a third limb vector.
|
||||
|
||||
; Copyright (C) 1992, 1994 Free Software Foundation, Inc.
|
||||
;! Copyright (C) 1992, 1994 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.
|
||||
|
||||
|
||||
; INPUT PARAMETERS
|
||||
; res_ptr gr26
|
||||
; s1_ptr gr25
|
||||
; s2_ptr gr24
|
||||
; size gr23
|
||||
;! INPUT PARAMETERS
|
||||
;! res_ptr gr26
|
||||
;! s1_ptr gr25
|
||||
;! s2_ptr gr24
|
||||
;! size gr23
|
||||
|
||||
; One might want to unroll this as for other processors, but it turns
|
||||
; out that the data cache contention after a store makes such
|
||||
; unrolling useless. We can't come under 5 cycles/limb anyway.
|
||||
;! One might want to unroll this as for other processors, but it turns
|
||||
;! out that the data cache contention after a store makes such
|
||||
;! unrolling useless. We can't come under 5 cycles/limb anyway.
|
||||
|
||||
.code
|
||||
.text
|
||||
.export __mpn_sub_n
|
||||
__mpn_sub_n
|
||||
__mpn_sub_n:
|
||||
.proc
|
||||
.callinfo frame=0,no_calls
|
||||
.entry
|
||||
|
||||
ldws,ma 4(0,%r25),%r20
|
||||
ldws,ma 4(0,%r24),%r19
|
||||
ldws,ma 4(0,%r25),%r21
|
||||
ldws,ma 4(0,%r24),%r20
|
||||
|
||||
addib,= -1,%r23,L$end ; check for (SIZE == 1)
|
||||
sub %r20,%r19,%r28 ; subtract first limbs ignoring cy
|
||||
addib,= -1,%r23,L$end ;! check for (SIZE == 1)
|
||||
sub %r21,%r20,%r28 ;! subtract first limbs ignoring cy
|
||||
|
||||
L$loop ldws,ma 4(0,%r25),%r20
|
||||
ldws,ma 4(0,%r24),%r19
|
||||
L$loop: ldws,ma 4(0,%r25),%r21
|
||||
ldws,ma 4(0,%r24),%r20
|
||||
stws,ma %r28,4(0,%r26)
|
||||
addib,<> -1,%r23,L$loop
|
||||
subb %r20,%r19,%r28
|
||||
subb %r21,%r20,%r28
|
||||
|
||||
L$end stws %r28,0(0,%r26)
|
||||
L$end: stws %r28,0(0,%r26)
|
||||
addc %r0,%r0,%r28
|
||||
bv 0(%r2)
|
||||
subi 1,%r28,%r28
|
||||
|
@ -20,6 +20,11 @@
|
||||
|
||||
#include <sysdeps/generic/sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "config.h"
|
||||
|
||||
#ifndef ASM_LINE_SEP
|
||||
#define ASM_LINE_SEP ;
|
||||
#endif
|
||||
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
@ -34,13 +39,12 @@
|
||||
incomplete stabs information. Fake some entries here which specify
|
||||
the current source file. */
|
||||
#define ENTRY(name) \
|
||||
.SPACE $TEXT$; \
|
||||
.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY; \
|
||||
.align ALIGNARG(4); \
|
||||
.NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY; \
|
||||
.EXPORT C_SYMBOL_NAME(name),ENTRY,PRIV_LEV=3,ARGW0=GR,RTNVAL=GR; \
|
||||
.SPACE $TEXT$ ASM_LINE_SEP \
|
||||
.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY ASM_LINE_SEP \
|
||||
.align ALIGNARG(4) ASM_LINE_SEP \
|
||||
.NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY ASM_LINE_SEP \
|
||||
.EXPORT C_SYMBOL_NAME(name),ENTRY,PRIV_LEV=3,ARGW0=GR,RTNVAL=GR ASM_LINE_SEP\
|
||||
C_LABEL(name) \
|
||||
|
||||
CALL_MCOUNT
|
||||
|
||||
#undef END
|
||||
@ -53,7 +57,7 @@
|
||||
/* The mcount code relies on a normal frame pointer being on the stack
|
||||
to locate our caller, so push one just for its benefit. */
|
||||
#define CALL_MCOUNT \
|
||||
XXX
|
||||
XXX ASM_LINE_SEP
|
||||
#else
|
||||
#define CALL_MCOUNT /* Do nothing. */
|
||||
#endif
|
||||
|
@ -1,45 +1,45 @@
|
||||
; HP-PA __udiv_qrnnd division support, used from longlong.h.
|
||||
; This version runs fast on pre-PA7000 CPUs.
|
||||
;! HP-PA __udiv_qrnnd division support, used from longlong.h.
|
||||
;! This version runs fast on pre-PA7000 CPUs.
|
||||
|
||||
; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
|
||||
;! Copyright (C) 1993, 1994 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.
|
||||
|
||||
|
||||
; INPUT PARAMETERS
|
||||
; rem_ptr gr26
|
||||
; n1 gr25
|
||||
; n0 gr24
|
||||
; d gr23
|
||||
;! INPUT PARAMETERS
|
||||
;! rem_ptr gr26
|
||||
;! n1 gr25
|
||||
;! n0 gr24
|
||||
;! d gr23
|
||||
|
||||
; The code size is a bit excessive. We could merge the last two ds;addc
|
||||
; sequences by simply moving the "bb,< Odd" instruction down. The only
|
||||
; trouble is the FFFFFFFF code that would need some hacking.
|
||||
;! The code size is a bit excessive. We could merge the last two ds;addc
|
||||
;! sequences by simply moving the "bb,< Odd" instruction down. The only
|
||||
;! trouble is the FFFFFFFF code that would need some hacking.
|
||||
|
||||
.code
|
||||
.text
|
||||
.export __udiv_qrnnd
|
||||
__udiv_qrnnd
|
||||
__udiv_qrnnd:
|
||||
.proc
|
||||
.callinfo frame=0,no_calls
|
||||
.entry
|
||||
|
||||
comb,< %r23,0,L$largedivisor
|
||||
sub %r0,%r23,%r1 ; clear cy as side-effect
|
||||
sub %r0,%r23,%r1 ;! clear cy as side-effect
|
||||
ds %r0,%r1,%r0
|
||||
addc %r24,%r24,%r24
|
||||
ds %r25,%r23,%r25
|
||||
@ -111,12 +111,12 @@ __udiv_qrnnd
|
||||
bv 0(%r2)
|
||||
addc %r28,%r28,%r28
|
||||
|
||||
L$largedivisor
|
||||
extru %r24,31,1,%r19 ; r19 = n0 & 1
|
||||
L$largedivisor:
|
||||
extru %r24,31,1,%r20 ;! r20 = n0 & 1
|
||||
bb,< %r23,31,L$odd
|
||||
extru %r23,30,31,%r22 ; r22 = d >> 1
|
||||
shd %r25,%r24,1,%r24 ; r24 = new n0
|
||||
extru %r25,30,31,%r25 ; r25 = new n1
|
||||
extru %r23,30,31,%r22 ;! r22 = d >> 1
|
||||
shd %r25,%r24,1,%r24 ;! r24 = new n0
|
||||
extru %r25,30,31,%r25 ;! r25 = new n1
|
||||
sub %r0,%r22,%r21
|
||||
ds %r0,%r21,%r0
|
||||
addc %r24,%r24,%r24
|
||||
@ -185,14 +185,14 @@ L$largedivisor
|
||||
ds %r25,%r22,%r25
|
||||
comclr,>= %r25,%r0,%r0
|
||||
addl %r25,%r22,%r25
|
||||
sh1addl %r25,%r19,%r25
|
||||
sh1addl %r25,%r20,%r25
|
||||
stws %r25,0(0,%r26)
|
||||
bv 0(%r2)
|
||||
addc %r24,%r24,%r28
|
||||
|
||||
L$odd addib,sv,n 1,%r22,L$FF.. ; r22 = (d / 2 + 1)
|
||||
shd %r25,%r24,1,%r24 ; r24 = new n0
|
||||
extru %r25,30,31,%r25 ; r25 = new n1
|
||||
L$odd: addib,sv,n 1,%r22,L$FF.. ;! r22 = (d / 2 + 1)
|
||||
shd %r25,%r24,1,%r24 ;! r24 = new n0
|
||||
extru %r25,30,31,%r25 ;! r25 = new n1
|
||||
sub %r0,%r22,%r21
|
||||
ds %r0,%r21,%r0
|
||||
addc %r24,%r24,%r24
|
||||
@ -262,8 +262,8 @@ L$odd addib,sv,n 1,%r22,L$FF.. ; r22 = (d / 2 + 1)
|
||||
addc %r24,%r24,%r28
|
||||
comclr,>= %r25,%r0,%r0
|
||||
addl %r25,%r22,%r25
|
||||
sh1addl %r25,%r19,%r25
|
||||
; We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
|
||||
sh1addl %r25,%r20,%r25
|
||||
;! We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
|
||||
add,nuv %r28,%r25,%r25
|
||||
addl %r25,%r1,%r25
|
||||
addc %r0,%r28,%r28
|
||||
@ -273,9 +273,9 @@ L$odd addib,sv,n 1,%r22,L$FF.. ; r22 = (d / 2 + 1)
|
||||
bv 0(%r2)
|
||||
addc %r0,%r28,%r28
|
||||
|
||||
; This is just a special case of the code above.
|
||||
; We come here when d == 0xFFFFFFFF
|
||||
L$FF.. add,uv %r25,%r24,%r24
|
||||
;! This is just a special case of the code above.
|
||||
;! We come here when d == 0xFFFFFFFF
|
||||
L$FF..: add,uv %r25,%r24,%r24
|
||||
sub,<< %r24,%r23,%r0
|
||||
ldo 1(%r24),%r24
|
||||
stws %r24,0(0,%r26)
|
||||
|
@ -34,8 +34,9 @@ do { \
|
||||
\
|
||||
numstr = _itoa_word (num, numbuf + sizeof numbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa_word (num, wnumbuf + sizeof wnumbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa_word (num, \
|
||||
wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t), \
|
||||
16, info->spec == 'A'); \
|
||||
\
|
||||
/* Fill with zeroes. */ \
|
||||
while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \
|
||||
@ -50,7 +51,7 @@ do { \
|
||||
/* We have 3 bits from the mantissa in the leading nibble. \
|
||||
Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */ \
|
||||
exponent = fpnum.ldbl.ieee.exponent; \
|
||||
\
|
||||
\
|
||||
if (exponent == 0) \
|
||||
{ \
|
||||
if (zero_mantissa) \
|
||||
|
@ -39,15 +39,17 @@ do { \
|
||||
{ \
|
||||
numstr = _itoa_word (num1, numbuf + sizeof numbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa_word (num1, wnumbuf + sizeof wnumbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa_word (num1,
|
||||
wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t),\
|
||||
16, info->spec == 'A'); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
numstr = _itoa (num1, numbuf + sizeof numbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa (num1, wnumbuf + sizeof wnumbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa (num1, \
|
||||
wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t), \
|
||||
16, info->spec == 'A'); \
|
||||
} \
|
||||
\
|
||||
while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \
|
||||
|
@ -38,14 +38,16 @@ do { \
|
||||
{ \
|
||||
numstr = _itoa_word (num, numbuf + sizeof numbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa_word (num, wnumbuf + sizeof wnumbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa_word (num, \
|
||||
wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t),\
|
||||
16, info->spec == 'A'); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
numstr = _itoa (num, numbuf + sizeof numbuf, 16, info->spec == 'A');\
|
||||
wnumstr = _itowa (num, wnumbuf + sizeof wnumbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa (num, \
|
||||
wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t), \
|
||||
16, info->spec == 'A'); \
|
||||
} \
|
||||
\
|
||||
/* Fill with zeroes. */ \
|
||||
|
@ -86,7 +86,7 @@ inhibit-siglist := yes
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),posix)
|
||||
sysdep_headers += bits/pthreadtypes.h
|
||||
sysdep_headers += bits/pthreadtypes.h bits/initspin.h
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),inet)
|
||||
|
1
sysdeps/unix/sysv/linux/bits/initspin.h
Normal file
1
sysdeps/unix/sysv/linux/bits/initspin.h
Normal file
@ -0,0 +1 @@
|
||||
/* No thread support. */
|
9
sysdeps/unix/sysv/linux/configure
vendored
9
sysdeps/unix/sysv/linux/configure
vendored
@ -61,6 +61,9 @@ case "$machine" in
|
||||
ia64*)
|
||||
arch_minimum_kernel=2.4.0
|
||||
;;
|
||||
hppa*)
|
||||
arch_minimum_kernel=2.3.99
|
||||
;;
|
||||
*)
|
||||
arch_minimum_kernel=2.0.10
|
||||
;;
|
||||
@ -82,10 +85,10 @@ fi
|
||||
|
||||
if test -n "$minimum_kernel"; then
|
||||
echo $ac_n "checking for kernel header at least $minimum_kernel""... $ac_c" 1>&6
|
||||
echo "configure:86: checking for kernel header at least $minimum_kernel" >&5
|
||||
echo "configure:89: checking for kernel header at least $minimum_kernel" >&5
|
||||
decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 89 "configure"
|
||||
#line 92 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <linux/version.h>
|
||||
#if LINUX_VERSION_CODE < $decnum
|
||||
@ -197,7 +200,7 @@ if test $host = $build; then
|
||||
ac_prefix=$ac_default_prefix
|
||||
fi
|
||||
echo $ac_n "checking for symlinks in ${ac_prefix}/include""... $ac_c" 1>&6
|
||||
echo "configure:201: checking for symlinks in ${ac_prefix}/include" >&5
|
||||
echo "configure:204: checking for symlinks in ${ac_prefix}/include" >&5
|
||||
ac_message=
|
||||
if test -L ${ac_prefix}/include/net; then
|
||||
ac_message="$ac_message
|
||||
|
@ -48,6 +48,9 @@ case "$machine" in
|
||||
ia64*)
|
||||
arch_minimum_kernel=2.4.0
|
||||
;;
|
||||
hppa*)
|
||||
arch_minimum_kernel=2.3.99
|
||||
;;
|
||||
*)
|
||||
arch_minimum_kernel=2.0.10
|
||||
;;
|
||||
|
@ -24,13 +24,13 @@
|
||||
#define SYS_NERR __new_sys_nerr
|
||||
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||
asm (".data; .globl __old_sys_errlist; __old_sys_errlist:");
|
||||
asm (".data\n\t.globl __old_sys_errlist\n__old_sys_errlist:");
|
||||
#endif
|
||||
|
||||
#include <sysdeps/gnu/errlist.c>
|
||||
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||
asm (".type __old_sys_errlist,@object;.size __old_sys_errlist,"
|
||||
asm (".type __old_sys_errlist,@object\n\t.size __old_sys_errlist,"
|
||||
OLD_ERRLIST_SIZE_STR "*" PTR_SIZE_STR);
|
||||
|
||||
extern const char *const *__old_sys_errlist;
|
||||
|
2
sysdeps/unix/sysv/linux/hppa/Makefile
Normal file
2
sysdeps/unix/sysv/linux/hppa/Makefile
Normal file
@ -0,0 +1,2 @@
|
||||
# linux/hppa does not use -lmilli anymore
|
||||
gnulib := -lgcc
|
6
sysdeps/unix/sysv/linux/hppa/Versions
Normal file
6
sysdeps/unix/sysv/linux/hppa/Versions
Normal file
@ -0,0 +1,6 @@
|
||||
libc {
|
||||
GLIBC_2.2 {
|
||||
# New rlimit interface
|
||||
getrlimit; setrlimit; getrlimit64; setrlimit64;
|
||||
}
|
||||
}
|
57
sysdeps/unix/sysv/linux/hppa/bits/errno.h
Normal file
57
sysdeps/unix/sysv/linux/hppa/bits/errno.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* Error constants. Linux/HPPA specific version.
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000 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. */
|
||||
|
||||
#ifdef _ERRNO_H
|
||||
|
||||
# undef EDOM
|
||||
# undef EILSEQ
|
||||
# undef ERANGE
|
||||
# include <linux/errno.h>
|
||||
|
||||
/* Linux also has no ECANCELED error code. Since it is not used here
|
||||
we define it to an invalid value. */
|
||||
# define ECANCELED 125
|
||||
|
||||
# ifndef __ASSEMBLER__
|
||||
/* We now need a declaration of the `errno' variable. */
|
||||
extern int errno;
|
||||
|
||||
/* Function to get address of global `errno' variable. */
|
||||
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
|
||||
|
||||
# if defined _LIBC
|
||||
/* We wouldn't need a special macro anymore but it is history. */
|
||||
# define __set_errno(val) (*__errno_location ()) = (val)
|
||||
# endif /* _LIBC */
|
||||
|
||||
# if !defined _LIBC || defined _LIBC_REENTRANT
|
||||
/* When using threads, errno is a per-thread value. */
|
||||
# define errno (*__errno_location ())
|
||||
# endif
|
||||
# endif /* !__ASSEMBLER__ */
|
||||
#endif /* _ERRNO_H */
|
||||
|
||||
#if !defined _ERRNO_H && defined __need_Emath
|
||||
/* This is ugly but the kernel header is not clean enough. We must
|
||||
define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
|
||||
defined. */
|
||||
# define EDOM 33 /* Math argument out of domain of function. */
|
||||
# define EILSEQ 84 /* Illegal byte sequence. */
|
||||
# define ERANGE 34 /* Math result not representable. */
|
||||
#endif /* !_ERRNO_H && __need_Emath */
|
148
sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
Normal file
148
sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
Normal file
@ -0,0 +1,148 @@
|
||||
/* O_*, F_*, FD_* bit values for Linux/HPPA.
|
||||
Copyright (C) 1995-1999, 2000 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 _FCNTL_H
|
||||
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
|
||||
located on an ext2 file system */
|
||||
#define O_RDONLY 00000000
|
||||
#define O_WRONLY 00000001
|
||||
#define O_RDWR 00000002
|
||||
#define O_ACCMODE 00000003
|
||||
#define O_APPEND 00000010
|
||||
#define O_BLKSEEK 00000100 /* HPUX only */
|
||||
#define O_CREAT 00000400 /* not fcntl */
|
||||
#define O_TRUNC 00001000 /* not fcntl */
|
||||
#define O_EXCL 00002000 /* not fcntl */
|
||||
#define O_ASYNC 00020000
|
||||
#define O_SYNC 00100000
|
||||
#define O_NONBLOCK 00200004 /* HPUX has separate NDELAY & NONBLOCK */
|
||||
#define O_NDELAY O_NONBLOCK
|
||||
#define O_NOCTTY 00400000 /* not fcntl */
|
||||
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define O_DIRECT 00040000 /* direct disk access hint - currently ignored */
|
||||
# define O_DIRECTORY 00010000 /* must be a directory */
|
||||
# define O_NOFOLLOW 00000200 /* don't follow links */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
# define O_LARGEFILE 00004000
|
||||
#endif
|
||||
|
||||
#if defined __USE_POSIX199309 || defined __USE_UNIX98
|
||||
# define O_DSYNC 01000000 /* HPUX only */
|
||||
# define O_RSYNC 02000000 /* HPUX only */
|
||||
#endif
|
||||
|
||||
/* Values for the second argument to `fcntl'. */
|
||||
#define F_DUPFD 0 /* Duplicate file descriptor. */
|
||||
#define F_GETFD 1 /* Get file descriptor flags. */
|
||||
#define F_SETFD 2 /* Set file descriptor flags. */
|
||||
#define F_GETFL 3 /* Get file status flags. */
|
||||
#define F_SETFL 4 /* Set file status flags. */
|
||||
#define F_GETLK 5 /* Get record locking info. */
|
||||
#define F_SETLK 6 /* Set record locking info (non-blocking). */
|
||||
#define F_SETLKW 7 /* Set record locking info (blocking). */
|
||||
|
||||
#define F_GETLK64 8 /* Get record locking info. */
|
||||
#define F_SETLK64 9 /* Set record locking info (non-blocking). */
|
||||
#define F_SETLKW64 10 /* Set record locking info (blocking). */
|
||||
|
||||
#if defined __USE_BSD || defined __USE_XOPEN2K
|
||||
# define F_GETOWN 11 /* Get owner of socket (receiver of SIGIO). */
|
||||
# define F_SETOWN 12 /* Set owner of socket (receiver of SIGIO). */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define F_SETSIG 13 /* Set number of signal to be sent. */
|
||||
# define F_GETSIG 14 /* Get number of signal to be sent. */
|
||||
#endif
|
||||
|
||||
/* for F_[GET|SET]FL */
|
||||
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
|
||||
|
||||
/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
|
||||
#define F_RDLCK 1 /* Read lock. */
|
||||
#define F_WRLCK 2 /* Write lock. */
|
||||
#define F_UNLCK 3 /* Remove lock. */
|
||||
|
||||
/* for old implementation of bsd flock () */
|
||||
#define F_EXLCK 4 /* or 3 */
|
||||
#define F_SHLCK 8 /* or 4 */
|
||||
|
||||
#ifdef __USE_BSD
|
||||
/* operations for bsd flock(), also used by the kernel implementation */
|
||||
# define LOCK_SH 1 /* shared lock */
|
||||
# define LOCK_EX 2 /* exclusive lock */
|
||||
# define LOCK_NB 4 /* or'd with one of the above to prevent
|
||||
blocking */
|
||||
# define LOCK_UN 8 /* remove lock */
|
||||
#endif
|
||||
|
||||
struct flock
|
||||
{
|
||||
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
|
||||
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__off_t l_start; /* Offset where the lock begins. */
|
||||
__off_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
#else
|
||||
__off64_t l_start; /* Offset where the lock begins. */
|
||||
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
#endif
|
||||
__pid_t l_pid; /* Process holding the lock. */
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct flock64
|
||||
{
|
||||
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
|
||||
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
|
||||
__off64_t l_start; /* Offset where the lock begins. */
|
||||
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
__pid_t l_pid; /* Process holding the lock. */
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Define some more compatibility macros to be backward compatible with
|
||||
BSD systems which did not managed to hide these kernel macros. */
|
||||
#ifdef __USE_BSD
|
||||
# define FAPPEND O_APPEND
|
||||
# define FFSYNC O_FSYNC
|
||||
# define FASYNC O_ASYNC
|
||||
# define FNONBLOCK O_NONBLOCK
|
||||
# define FNDELAY O_NDELAY
|
||||
#endif /* Use BSD. */
|
||||
|
||||
/* Advise to `posix_fadvise'. */
|
||||
#ifdef __USE_XOPEN2K
|
||||
# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
|
||||
# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
|
||||
# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
|
||||
# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
|
||||
# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
|
||||
# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
|
||||
#endif
|
37
sysdeps/unix/sysv/linux/hppa/bits/ioctls.h
Normal file
37
sysdeps/unix/sysv/linux/hppa/bits/ioctls.h
Normal file
@ -0,0 +1,37 @@
|
||||
/* Copyright (C) 1996, 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 _SYS_IOCTL_H
|
||||
# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
|
||||
#endif
|
||||
|
||||
/* Use the definitions from the kernel header files. */
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
/* Oh well, this is necessary since the kernel data structure is
|
||||
different from the user-level version. */
|
||||
#undef TCGETS
|
||||
#undef TCSETS
|
||||
#undef TCSETSW
|
||||
#undef TCSETSF
|
||||
#define TCGETS _IOR ('T', 16, char[36])
|
||||
#define TCSETS _IOW ('T', 17, char[36])
|
||||
#define TCSETSW _IOW ('T', 18, char[36])
|
||||
#define TCSETSF _IOW ('T', 19, char[36])
|
||||
|
||||
#include <linux/sockios.h>
|
61
sysdeps/unix/sysv/linux/hppa/bits/mman.h
Normal file
61
sysdeps/unix/sysv/linux/hppa/bits/mman.h
Normal file
@ -0,0 +1,61 @@
|
||||
/* Definitions for POSIX memory map interface. Insert rest of disclaimer here */
|
||||
|
||||
#ifndef _SYS_MMAN_H
|
||||
# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
|
||||
#endif
|
||||
|
||||
/* these are basically taken from the kernel definitions */
|
||||
|
||||
#define PROT_READ 0x1 /* page can be read */
|
||||
#define PROT_WRITE 0x2 /* page can be written */
|
||||
#define PROT_EXEC 0x4 /* page can be executed */
|
||||
#define PROT_NONE 0x0 /* page can not be accessed */
|
||||
|
||||
#define MAP_SHARED 0x01 /* Share changes */
|
||||
#define MAP_PRIVATE 0x02 /* Changes are private */
|
||||
#define MAP_TYPE 0x03 /* Mask for type of mapping */
|
||||
#define MAP_FIXED 0x04 /* Interpret addr exactly */
|
||||
#define MAP_ANONYMOUS 0x10 /* don't use a file */
|
||||
|
||||
#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
|
||||
#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
|
||||
#define MAP_LOCKED 0x2000 /* pages are locked */
|
||||
#define MAP_NORESERVE 0x4000 /* don't check for reservations */
|
||||
#define MAP_GROWSDOWN 0x8000 /* stack-like segment */
|
||||
|
||||
#define MS_SYNC 1 /* synchronous memory sync */
|
||||
#define MS_ASYNC 2 /* sync memory asynchronously */
|
||||
#define MS_INVALIDATE 4 /* invalidate the caches */
|
||||
|
||||
#define MCL_CURRENT 1 /* lock all current mappings */
|
||||
#define MCL_FUTURE 2 /* lock all future mappings */
|
||||
|
||||
#define MADV_NORMAL 0 /* no further special treatment */
|
||||
#define MADV_RANDOM 1 /* expect random page references */
|
||||
#define MADV_SEQUENTIAL 2 /* expect sequential page references */
|
||||
#define MADV_WILLNEED 3 /* will need these pages */
|
||||
#define MADV_DONTNEED 4 /* dont need these pages */
|
||||
#define MADV_SPACEAVAIL 5 /* insure that resources are reserved */
|
||||
#define MADV_VPS_PURGE 6 /* Purge pages from VM page cache */
|
||||
#define MADV_VPS_INHERIT 7 /* Inherit parents page size */
|
||||
|
||||
/* The range 12-64 is reserved for page size specification. */
|
||||
#define MADV_4K_PAGES 12 /* Use 4K pages */
|
||||
#define MADV_16K_PAGES 14 /* Use 16K pages */
|
||||
#define MADV_64K_PAGES 16 /* Use 64K pages */
|
||||
#define MADV_256K_PAGES 18 /* Use 256K pages */
|
||||
#define MADV_1M_PAGES 20 /* Use 1 Megabyte pages */
|
||||
#define MADV_4M_PAGES 22 /* Use 4 Megabyte pages */
|
||||
#define MADV_16M_PAGES 24 /* Use 16 Megabyte pages */
|
||||
#define MADV_64M_PAGES 26 /* Use 64 Megabyte pages */
|
||||
|
||||
/* compatibility flags */
|
||||
#define MAP_ANON MAP_ANONYMOUS
|
||||
#define MAP_FILE 0
|
||||
#define MAP_VARIABLE 0
|
||||
|
||||
/* Flags for `mremap'. */
|
||||
#ifdef __USE_GNU
|
||||
# define MREMAP_MAYMOVE 1
|
||||
#endif
|
||||
|
75
sysdeps/unix/sysv/linux/hppa/bits/sigaction.h
Normal file
75
sysdeps/unix/sysv/linux/hppa/bits/sigaction.h
Normal file
@ -0,0 +1,75 @@
|
||||
/* Definitions for Linux/hppa sigaction.
|
||||
Copyright (C) 1996, 1997, 2000 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 _SIGNAL_H
|
||||
# error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
|
||||
#endif
|
||||
|
||||
/* Structure describing the action to be taken when a signal arrives. */
|
||||
struct sigaction
|
||||
{
|
||||
/* Signal handler. */
|
||||
#ifdef __USE_POSIX199309
|
||||
union
|
||||
{
|
||||
/* Used if SA_SIGINFO is not set. */
|
||||
__sighandler_t sa_handler;
|
||||
/* Used if SA_SIGINFO is set. */
|
||||
void (*sa_sigaction) (int, siginfo_t *, void *);
|
||||
}
|
||||
__sigaction_handler;
|
||||
# define sa_handler __sigaction_handler.sa_handler
|
||||
# define sa_sigaction __sigaction_handler.sa_sigaction
|
||||
#else
|
||||
__sighandler_t sa_handler;
|
||||
#endif
|
||||
|
||||
/* Special flags. */
|
||||
unsigned long int sa_flags;
|
||||
|
||||
/* Additional set of signals to be blocked. */
|
||||
__sigset_t sa_mask;
|
||||
};
|
||||
|
||||
/* Bits in `sa_flags'. */
|
||||
|
||||
#define SA_NOCLDSTOP 0x00000008 /* Don't send SIGCHLD when children stop. */
|
||||
#define SA_NOCLDWAIT 0x00000080 /* Don't create zombie on child death. */
|
||||
#define SA_SIGINFO 0x00000010 /* Invoke signal-catching function with
|
||||
three arguments instead of one. */
|
||||
#if defined __USE_UNIX98 || defined __USE_MISC
|
||||
# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */
|
||||
# define SA_RESETHAND 0x00000004 /* Reset to SIG_DFL on entry to handler. */
|
||||
# define SA_NODEFER 0x00000020 /* Don't automatically block the signal
|
||||
when its handler is being executed. */
|
||||
# define SA_RESTART 0x00000040 /* Restart syscall on signal return. */
|
||||
#endif
|
||||
#ifdef __USE_MISC
|
||||
# define SA_INTERRUPT 0x20000000 /* Historic no-op. */
|
||||
|
||||
/* Some aliases for the SA_ constants. */
|
||||
# define SA_NOMASK SA_NODEFER
|
||||
# define SA_ONESHOT SA_RESETHAND
|
||||
# define SA_STACK SA_ONSTACK
|
||||
#endif
|
||||
|
||||
/* Values for the HOW argument to `sigprocmask'. */
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
82
sysdeps/unix/sysv/linux/hppa/bits/signum.h
Normal file
82
sysdeps/unix/sysv/linux/hppa/bits/signum.h
Normal file
@ -0,0 +1,82 @@
|
||||
/* Signal number definitions. Linux version.
|
||||
Copyright (C) 1995, 1996, 1997, 1998, 1999 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. */
|
||||
|
||||
#ifdef _SIGNAL_H
|
||||
|
||||
/* Fake signal functions. */
|
||||
#define SIG_ERR ((__sighandler_t) -1) /* Error return. */
|
||||
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */
|
||||
#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */
|
||||
|
||||
#ifdef __USE_UNIX98
|
||||
# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */
|
||||
#endif
|
||||
|
||||
|
||||
/* Signals. */
|
||||
#define SIGHUP 1 /* Hangup (POSIX). */
|
||||
#define SIGINT 2 /* Interrupt (ANSI). */
|
||||
#define SIGQUIT 3 /* Quit (POSIX). */
|
||||
#define SIGILL 4 /* Illegal instruction (ANSI). */
|
||||
#define SIGTRAP 5 /* Trace trap (POSIX). */
|
||||
#define SIGABRT 6 /* Abort (ANSI). */
|
||||
#define SIGIOT 6 /* IOT trap (4.2 BSD). */
|
||||
#define SIGEMT 7
|
||||
#define SIGFPE 8 /* Floating-point exception (ANSI). */
|
||||
#define SIGKILL 9 /* Kill, unblockable (POSIX). */
|
||||
#define SIGBUS 10 /* BUS error (4.2 BSD). */
|
||||
#define SIGSEGV 11 /* Segmentation violation (ANSI). */
|
||||
#define SIGSYS 12 /* Bad system call. */
|
||||
#define SIGPIPE 13 /* Broken pipe (POSIX). */
|
||||
#define SIGALRM 14 /* Alarm clock (POSIX). */
|
||||
#define SIGTERM 15 /* Termination (ANSI). */
|
||||
#define SIGUSR1 16 /* User-defined signal 1 (POSIX). */
|
||||
#define SIGUSR2 17 /* User-defined signal 2 (POSIX). */
|
||||
#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */
|
||||
#define SIGCHLD 18 /* Child status has changed (POSIX). */
|
||||
#define SIGPWR 19 /* Power failure restart (System V). */
|
||||
#define SIGVTALRM 20 /* Virtual alarm clock (4.2 BSD). */
|
||||
#define SIGPROF 21 /* Profiling alarm clock (4.2 BSD). */
|
||||
#define SIGPOLL SIGIO /* Pollable event occurred (System V). */
|
||||
#define SIGIO 22 /* I/O now possible (4.2 BSD). */
|
||||
#define SIGWINCH 23 /* Window size change (4.3 BSD, Sun). */
|
||||
#define SIGSTOP 24 /* Stop, unblockable (POSIX). */
|
||||
#define SIGTSTP 25 /* Keyboard stop (POSIX). */
|
||||
#define SIGCONT 26 /* Continue (POSIX). */
|
||||
#define SIGTTIN 27 /* Background read from tty (POSIX). */
|
||||
#define SIGTTOU 28 /* Background write to tty (POSIX). */
|
||||
#define SIGURG 29 /* Urgent condition on socket (4.2 BSD). */
|
||||
#define SIGLOST 30 /* Operating System Has Lost (HP/UX). */
|
||||
#define SIGUNUSED 31
|
||||
#define SIGXCPU 33 /* CPU limit exceeded (4.2 BSD). */
|
||||
#define SIGXFSZ 34 /* File size limit exceeded (4.2 BSD). */
|
||||
#define SIGSTKFLT 36 /* Stack fault. */
|
||||
|
||||
#define _NSIG 64 /* Biggest signal number + 1
|
||||
(including real-time signals). */
|
||||
|
||||
#define SIGRTMIN (__libc_current_sigrtmin ())
|
||||
#define SIGRTMAX (__libc_current_sigrtmax ())
|
||||
|
||||
/* These are the hard limits of the kernel. These values should not be
|
||||
used directly at user level. */
|
||||
#define __SIGRTMIN 37
|
||||
#define __SIGRTMAX (_NSIG - 1)
|
||||
|
||||
#endif /* <signal.h> included. */
|
47
sysdeps/unix/sysv/linux/hppa/brk.c
Normal file
47
sysdeps/unix/sysv/linux/hppa/brk.c
Normal file
@ -0,0 +1,47 @@
|
||||
/* brk system call for Linux/i386.
|
||||
Copyright (C) 1995, 1996 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 <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <sysdep.h>
|
||||
|
||||
/* This must be initialized data because commons can't have aliases. */
|
||||
void *__curbrk = 0;
|
||||
|
||||
/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
|
||||
to work around different old braindamage in the old Linux ELF dynamic
|
||||
linker. */
|
||||
weak_alias (__curbrk, ___brk_addr)
|
||||
|
||||
int
|
||||
__brk (void *addr)
|
||||
{
|
||||
void *newbrk, *scratch;
|
||||
|
||||
__curbrk = newbrk = INLINE_SYSCALL(brk, 1, addr);
|
||||
|
||||
if (newbrk < addr)
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
weak_alias (__brk, brk)
|
82
sysdeps/unix/sysv/linux/hppa/clone.S
Normal file
82
sysdeps/unix/sysv/linux/hppa/clone.S
Normal file
@ -0,0 +1,82 @@
|
||||
/* Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000.
|
||||
Based on the Alpha version by Richard Henderson <rth@tamu.edu>, 1996.
|
||||
|
||||
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/unistd.h>
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
|
||||
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) */
|
||||
|
||||
.text
|
||||
ENTRY(__clone)
|
||||
/* FIXME: I have no idea how profiling works on hppa. */
|
||||
|
||||
/* Sanity check arguments. */
|
||||
comib,<> 0,%arg0,.Lerror /* no NULL function pointers */
|
||||
ldi EINVAL,%ret0
|
||||
comib,<> 0,%arg1,.Lerror /* no NULL stack pointers */
|
||||
nop
|
||||
|
||||
/* Save the fn ptr and arg on the new stack. */
|
||||
stwm %arg3,64(%arg1)
|
||||
stw %arg3,-60(%arg1)
|
||||
|
||||
/* Do the system call */
|
||||
copy %arg2,%arg0
|
||||
ble 0x100(%sr7,%r0)
|
||||
ldi __NR_clone,%r20
|
||||
|
||||
ldi -4096,%r1
|
||||
comclr,>>= %r1,%ret0,%r0 /* Note: unsigned compare. */
|
||||
b,n .Lerror
|
||||
|
||||
comib,=,n 0,%ret0,thread_start
|
||||
|
||||
/* Successful return from the parent */
|
||||
bv %r0(%rp)
|
||||
nop
|
||||
|
||||
/* Something bad happened -- no child created */
|
||||
.Lerror:
|
||||
b __syscall_error
|
||||
nop
|
||||
|
||||
thread_start:
|
||||
/* Load up the arguments. */
|
||||
ldw -60(%sp),%arg0
|
||||
ldwm -64(%sp),%r22
|
||||
|
||||
/* Call the user's function */
|
||||
bl $$dyncall,%r31
|
||||
copy %r31,%rp
|
||||
|
||||
bl _exit,%rp
|
||||
copy %ret0,%arg0
|
||||
|
||||
/* Die horribly. */
|
||||
iitlbp %r0,(%r0)
|
||||
|
||||
PSEUDO_END(__clone)
|
||||
|
||||
weak_alias(__clone, clone)
|
1
sysdeps/unix/sysv/linux/hppa/getrlimit.c
Normal file
1
sysdeps/unix/sysv/linux/hppa/getrlimit.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getrlimit.c>
|
1
sysdeps/unix/sysv/linux/hppa/getrlimit64.c
Normal file
1
sysdeps/unix/sysv/linux/hppa/getrlimit64.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
|
18
sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h
Normal file
18
sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h
Normal file
@ -0,0 +1,18 @@
|
||||
/* We have a separate header file here because we do not support
|
||||
SA_RESTORER on hppa. */
|
||||
|
||||
/* This is the sigaction struction from the Linux 2.1.20 kernel. */
|
||||
/* Blah. This is bogus. We don't ever use it. */
|
||||
struct old_kernel_sigaction {
|
||||
__sighandler_t k_sa_handler;
|
||||
unsigned long sa_mask;
|
||||
unsigned long sa_flags;
|
||||
};
|
||||
|
||||
/* This is the sigaction structure from the Linux 2.1.68 kernel. */
|
||||
|
||||
struct kernel_sigaction {
|
||||
__sighandler_t k_sa_handler;
|
||||
unsigned long sa_flags;
|
||||
sigset_t sa_mask;
|
||||
};
|
32
sysdeps/unix/sysv/linux/hppa/kernel_stat.h
Normal file
32
sysdeps/unix/sysv/linux/hppa/kernel_stat.h
Normal file
@ -0,0 +1,32 @@
|
||||
/* definition of "struct stat" from the kernel */
|
||||
struct kernel_stat {
|
||||
unsigned long st_dev; /* dev_t is 32 bits on parisc */
|
||||
unsigned long st_ino; /* 32 bits */
|
||||
unsigned short st_mode; /* 16 bits */
|
||||
unsigned short st_nlink; /* 16 bits */
|
||||
unsigned short st_reserved1; /* old st_uid */
|
||||
unsigned short st_reserved2; /* old st_gid */
|
||||
unsigned long st_rdev;
|
||||
unsigned long st_size;
|
||||
unsigned long st_atime;
|
||||
unsigned long st_spare1;
|
||||
unsigned long st_mtime;
|
||||
unsigned long st_spare2;
|
||||
unsigned long st_ctime;
|
||||
unsigned long st_spare3;
|
||||
long st_blksize;
|
||||
long st_blocks;
|
||||
unsigned long __unused1; /* ACL stuff */
|
||||
unsigned long __unused2; /* network */
|
||||
unsigned long __unused3; /* network */
|
||||
unsigned long __unused4; /* cnodes */
|
||||
unsigned short __unused5; /* netsite */
|
||||
short st_fstype;
|
||||
unsigned long st_realdev;
|
||||
unsigned short st_basemode;
|
||||
unsigned short st_spareshort;
|
||||
unsigned long st_uid;
|
||||
unsigned long st_gid;
|
||||
unsigned long st_spare4[3];
|
||||
};
|
||||
|
50
sysdeps/unix/sysv/linux/hppa/mmap.c
Normal file
50
sysdeps/unix/sysv/linux/hppa/mmap.c
Normal file
@ -0,0 +1,50 @@
|
||||
/* Copyright (C) 1994, 1995, 1996, 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 <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* Map addresses starting near ADDR and extending for LEN bytes. From
|
||||
OFFSET into the file FD describes according to PROT and FLAGS. If ADDR
|
||||
is nonzero, it is the desired mapping address. If the MAP_FIXED bit is
|
||||
set in FLAGS, the mapping will be at ADDR exactly (which must be
|
||||
page-aligned); otherwise the system chooses a convenient nearby address.
|
||||
The return value is the actual mapping address chosen or MAP_FAILED
|
||||
for errors (in which case `errno' is set). A successful `mmap' call
|
||||
deallocates any previous mapping for the affected region. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
__ptr_t
|
||||
__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
|
||||
{
|
||||
|
||||
__ptr_t ret;
|
||||
|
||||
ret = INLINE_SYSCALL(mmap, 6, addr, len, prot, flags, fd, offset);
|
||||
|
||||
/* check if it's really a negative number */
|
||||
if(((unsigned long)ret & 0xfffff000) == 0xfffff000)
|
||||
return MAP_FAILED;
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
strong_alias (__mmap, mmap)
|
2
sysdeps/unix/sysv/linux/hppa/profil-counter.h
Normal file
2
sysdeps/unix/sysv/linux/hppa/profil-counter.h
Normal file
@ -0,0 +1,2 @@
|
||||
/* We can use the ix86 version. */
|
||||
#include <sysdeps/unix/sysv/linux/i386/profil-counter.h>
|
1
sysdeps/unix/sysv/linux/hppa/setrlimit.c
Normal file
1
sysdeps/unix/sysv/linux/hppa/setrlimit.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setrlimit.c>
|
10
sysdeps/unix/sysv/linux/hppa/socket.S
Normal file
10
sysdeps/unix/sysv/linux/hppa/socket.S
Normal file
@ -0,0 +1,10 @@
|
||||
#include <sysdep.h>
|
||||
|
||||
.globl __socket
|
||||
PSEUDO(__socket, socket, 3)
|
||||
|
||||
PSEUDO_END(__socket)
|
||||
|
||||
#ifndef NO_WEAK_ALIAS
|
||||
weak_alias (__socket, socket)
|
||||
#endif
|
113
sysdeps/unix/sysv/linux/hppa/sys/procfs.h
Normal file
113
sysdeps/unix/sysv/linux/hppa/sys/procfs.h
Normal file
@ -0,0 +1,113 @@
|
||||
/* Copyright (C) 1996, 1997, 1999, 2000 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 _SYS_PROCFS_H
|
||||
#define _SYS_PROCFS_H 1
|
||||
|
||||
/* This is somewhat modelled after the file of the same name on SVR4
|
||||
systems. It provides a definition of the core file format for ELF
|
||||
used on Linux. It doesn't have anything to do with the /proc file
|
||||
system, even though Linux has one.
|
||||
|
||||
Anyway, the whole purpose of this file is for GDB and GDB only.
|
||||
Don't read too much into it. Don't use it for anything other than
|
||||
GDB unless you know what you are doing. */
|
||||
|
||||
#include <features.h>
|
||||
#include <signal.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ucontext.h>
|
||||
#include <sys/user.h>
|
||||
#include <asm/elf.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
struct elf_siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_code; /* Extra code. */
|
||||
int si_errno; /* Errno. */
|
||||
};
|
||||
|
||||
/* Definitions to generate Intel SVR4-like core files. These mostly
|
||||
have the same names as the SVR4 types with "elf_" tacked on the
|
||||
front to prevent clashes with Linux definitions, and the typedef
|
||||
forms have been avoided. This is mostly like the SVR4 structure,
|
||||
but more Linuxy, with things that Linux does not support and which
|
||||
GDB doesn't really use excluded. */
|
||||
|
||||
struct elf_prstatus
|
||||
{
|
||||
struct elf_siginfo pr_info; /* Info associated with signal. */
|
||||
short int pr_cursig; /* Current signal. */
|
||||
unsigned long int pr_sigpend; /* Set of pending signals. */
|
||||
unsigned long int pr_sighold; /* Set of held signals. */
|
||||
__pid_t pr_pid;
|
||||
__pid_t pr_ppid;
|
||||
__pid_t pr_pgrp;
|
||||
__pid_t pr_sid;
|
||||
struct timeval pr_utime; /* User time. */
|
||||
struct timeval pr_stime; /* System time. */
|
||||
struct timeval pr_cutime; /* Cumulative user time. */
|
||||
struct timeval pr_cstime; /* Cumulative system time. */
|
||||
elf_gregset_t pr_reg; /* GP registers. */
|
||||
int pr_fpvalid; /* True if math copro being used. */
|
||||
};
|
||||
|
||||
|
||||
#define ELF_PRARGSZ (80) /* Number of chars for args. */
|
||||
|
||||
struct elf_prpsinfo
|
||||
{
|
||||
char pr_state; /* Numeric process state. */
|
||||
char pr_sname; /* Char for pr_state. */
|
||||
char pr_zomb; /* Zombie. */
|
||||
char pr_nice; /* Nice val. */
|
||||
unsigned long int pr_flag; /* Flags. */
|
||||
unsigned int pr_uid;
|
||||
unsigned int pr_gid;
|
||||
int pr_pid, pr_ppid, pr_pgrp, pr_sid;
|
||||
/* Lots missing */
|
||||
char pr_fname[16]; /* Filename of executable. */
|
||||
char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
|
||||
};
|
||||
|
||||
|
||||
/* The rest of this file provides the types for emulation of the
|
||||
Solaris <proc_service.h> interfaces that should be implemented by
|
||||
users of libthread_db. */
|
||||
|
||||
/* Addresses. */
|
||||
typedef void *psaddr_t;
|
||||
|
||||
/* Register sets. Linux has different names. */
|
||||
typedef elf_gregset_t prgregset_t;
|
||||
typedef elf_fpregset_t prfpregset_t;
|
||||
|
||||
/* We don't have any differences between processes and threads,
|
||||
therefore have only one PID type. */
|
||||
typedef __pid_t lwpid_t;
|
||||
|
||||
/* Process status and info. In the end we do provide typedefs for them. */
|
||||
typedef struct elf_prstatus prstatus_t;
|
||||
typedef struct elf_prpsinfo prpsinfo_t;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/procfs.h */
|
68
sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
Normal file
68
sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
Normal file
@ -0,0 +1,68 @@
|
||||
/* Copyright (C) 1997, 1998, 2000 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. */
|
||||
|
||||
/* Don't rely on this, the interface is currently messed up and may need to
|
||||
be broken to be fixed. */
|
||||
#ifndef _SYS_UCONTEXT_H
|
||||
#define _SYS_UCONTEXT_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <signal.h>
|
||||
|
||||
/* We need the signal context definitions even if they are not used
|
||||
included in <signal.h>. */
|
||||
#include <bits/sigcontext.h>
|
||||
|
||||
|
||||
/* Type for general register. */
|
||||
typedef unsigned long int greg_t;
|
||||
|
||||
/* Number of general registers. */
|
||||
#define NGREG 42
|
||||
#define NFPREG 33
|
||||
|
||||
/* Container for all general registers. */
|
||||
typedef struct gregset {
|
||||
greg_t g_regs[32];
|
||||
greg_t sr_regs[5];
|
||||
greg_t g_pad[5];
|
||||
} gregset_t;
|
||||
|
||||
/* Container for all FPU registers. */
|
||||
typedef struct fpregset {
|
||||
double fp_dregs[32];
|
||||
} fpregset_t;
|
||||
|
||||
/* Context to describe whole processor state. */
|
||||
typedef struct
|
||||
{
|
||||
gregset_t gregs;
|
||||
fpregset_t fpregs;
|
||||
} mcontext_t;
|
||||
|
||||
/* Userlevel context. */
|
||||
typedef struct ucontext
|
||||
{
|
||||
unsigned long int uc_flags;
|
||||
struct ucontext *uc_link;
|
||||
stack_t uc_stack;
|
||||
mcontext_t uc_mcontext;
|
||||
__sigset_t uc_sigmask;
|
||||
} ucontext_t;
|
||||
|
||||
#endif /* sys/ucontext.h */
|
28
sysdeps/unix/sysv/linux/hppa/syscall.S
Normal file
28
sysdeps/unix/sysv/linux/hppa/syscall.S
Normal file
@ -0,0 +1,28 @@
|
||||
/* Copyright (C) 1995, 1996, 1998 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>
|
||||
|
||||
/* Please consult the file sysdeps/unix/sysv/linux/i386/sysdep.h for
|
||||
more information about the value -4095 used below.*/
|
||||
|
||||
.text
|
||||
ENTRY (syscall)
|
||||
b .
|
||||
nop
|
||||
|
39
sysdeps/unix/sysv/linux/hppa/syscalls.list
Normal file
39
sysdeps/unix/sysv/linux/hppa/syscalls.list
Normal file
@ -0,0 +1,39 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
# semaphore and shm system calls
|
||||
msgctl - msgctl i:iip __msgctl msgctl
|
||||
msgget - msgget i:ii __msgget msgget
|
||||
msgrcv - msgrcv i:ibnii __msgrcv msgrcv
|
||||
msgsnd - msgsnd i:ibni __msgsnd msgsnd
|
||||
shmat - shmat i:ipi __shmat shmat
|
||||
shmctl - shmctl i:iip __shmctl shmctl
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semop - semop i:ipi __semop semop
|
||||
semget - semget i:iii __semget semget
|
||||
semctl - semctl i:iiii __semctl semctl
|
||||
|
||||
# proper socket implementations:
|
||||
accept - accept i:iBN __libc_accept __accept accept
|
||||
bind - bind i:ipi __bind bind
|
||||
connect - connect i:ipi __libc_connect __connect connect
|
||||
getpeername - getpeername i:ipp __getpeername getpeername
|
||||
getsockname - getsockname i:ipp __getsockname getsockname
|
||||
getsockopt - getsockopt i:iiiBN __getsockopt getsockopt
|
||||
listen - listen i:ii __listen listen
|
||||
recv - recv i:ibni __libc_recv __recv recv
|
||||
recvfrom - recvfrom i:ibniBN __libc_recvfrom __recvfrom recvfrom
|
||||
recvmsg - recvmsg i:ipi __libc_recvmsg recvmsg
|
||||
send - send i:ibni __libc_send __send send
|
||||
sendmsg - sendmsg i:ipi __libc_sendmsg sendmsg
|
||||
sendto - sendto i:ibnibn __libc_sendto __sendto sendto
|
||||
setsockopt - setsockopt i:iiibn __setsockopt setsockopt
|
||||
shutdown - shutdown i:ii __shutdown shutdown
|
||||
socket - socket i:iii __socket socket
|
||||
socketpair - socketpair i:iiif __socketpair socketpair
|
||||
|
||||
ptrace - ptrace 4 __ptrace ptrace
|
||||
|
||||
getresuid - getresuid i:ppp getresuid
|
||||
getresgid - getresgid i:ppp getresgid
|
||||
|
34
sysdeps/unix/sysv/linux/hppa/sysdep.c
Normal file
34
sysdeps/unix/sysv/linux/hppa/sysdep.c
Normal file
@ -0,0 +1,34 @@
|
||||
/* Copyright (C) 1997, 1998 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>
|
||||
#include <errno.h>
|
||||
|
||||
/* This routine is jumped to by all the syscall handlers, to stash
|
||||
an error number into errno. */
|
||||
int
|
||||
__syscall_error (int err_no)
|
||||
{
|
||||
__set_errno (err_no);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* We also have to have a 'real' definition of errno. */
|
||||
#undef errno
|
||||
int errno = 0;
|
||||
weak_alias (errno, _errno)
|
242
sysdeps/unix/sysv/linux/hppa/sysdep.h
Normal file
242
sysdeps/unix/sysv/linux/hppa/sysdep.h
Normal file
@ -0,0 +1,242 @@
|
||||
/* Assembler macros for PA-RISC.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999.
|
||||
Linux/PA-RISC changes by Philipp Rumpf, <prumpf@tux.org>, March 2000.
|
||||
|
||||
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 <asm/unistd.h>
|
||||
#include <sysdeps/generic/sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "config.h"
|
||||
|
||||
#ifndef ASM_LINE_SEP
|
||||
#define ASM_LINE_SEP ;
|
||||
#endif
|
||||
|
||||
#undef SYS_ify
|
||||
#define SYS_ify(syscall_name) (__NR_##syscall_name)
|
||||
|
||||
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
/* Syntactic details of assembler. */
|
||||
|
||||
#define ALIGNARG(log2) log2
|
||||
|
||||
/* For Linux we can use the system call table in the header file
|
||||
/usr/include/asm/unistd.h
|
||||
of the kernel. But these symbols do not follow the SYS_* syntax
|
||||
so we have to redefine the `SYS_ify' macro here. */
|
||||
#undef SYS_ify
|
||||
#define SYS_ify(syscall_name) __NR_##syscall_name
|
||||
|
||||
/* ELF-like local names start with `.L'. */
|
||||
#undef L
|
||||
#define L(name) .L##name
|
||||
|
||||
/* Linux uses a negative return value to indicate syscall errors,
|
||||
unlike most Unices, which use the condition codes' carry flag.
|
||||
|
||||
Since version 2.1 the return value of a system call might be
|
||||
negative even if the call succeeded. E.g., the `lseek' system call
|
||||
might return a large offset. Therefore we must not anymore test
|
||||
for < 0, but test for a real error by making sure the value in %eax
|
||||
is a real error number. Linus said he will make sure the no syscall
|
||||
returns a value in -1 .. -4095 as a valid result so we can safely
|
||||
test with -4095. */
|
||||
|
||||
/* We don't want the label for the error handle to be global when we define
|
||||
it here. */
|
||||
#ifdef PIC
|
||||
# define SYSCALL_ERROR_LABEL 0f
|
||||
#else
|
||||
# define SYSCALL_ERROR_LABEL syscall_error
|
||||
#endif
|
||||
|
||||
/* Define an entry point visible from C.
|
||||
|
||||
There is currently a bug in gdb which prevents us from specifying
|
||||
incomplete stabs information. Fake some entries here which specify
|
||||
the current source file. */
|
||||
#define ENTRY(name) \
|
||||
.text ASM_LINE_SEP \
|
||||
.export C_SYMBOL_NAME(name) ASM_LINE_SEP \
|
||||
.type C_SYMBOL_NAME(name),@function ASM_LINE_SEP \
|
||||
C_LABEL(name) \
|
||||
CALL_MCOUNT
|
||||
|
||||
#define ret \
|
||||
bv 0(2) ASM_LINE_SEP \
|
||||
nop
|
||||
|
||||
#undef END
|
||||
#define END(name) \
|
||||
1: .size C_SYMBOL_NAME(name),1b-C_SYMBOL_NAME(name)
|
||||
|
||||
/* If compiled for profiling, call `mcount' at the start of each function. */
|
||||
#ifdef PROF
|
||||
/* The mcount code relies on a normal frame pointer being on the stack
|
||||
to locate our caller, so push one just for its benefit. */
|
||||
#define CALL_MCOUNT /* XXX */
|
||||
#else
|
||||
#define CALL_MCOUNT /* Do nothing. */
|
||||
#endif
|
||||
|
||||
/* syscall wrappers consist of
|
||||
#include <sysdep.h>
|
||||
PSEUDO(...)
|
||||
ret
|
||||
PSEUDO_END(...)
|
||||
|
||||
which means
|
||||
ENTRY(name)
|
||||
DO_CALL(...)
|
||||
nop
|
||||
bv 0(2)
|
||||
nop
|
||||
*/
|
||||
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
ENTRY (name) \
|
||||
DO_CALL(args, syscall_name) ASM_LINE_SEP \
|
||||
nop
|
||||
|
||||
#undef PSEUDO_END
|
||||
#define PSEUDO_END(name) \
|
||||
END (name)
|
||||
|
||||
#define JUMPTARGET(name) name
|
||||
#define SYSCALL_PIC_SETUP /* Nothing. */
|
||||
|
||||
/* Linux takes system call arguments in registers:
|
||||
syscall number gr20
|
||||
arg 1 gr26
|
||||
arg 2 gr25
|
||||
arg 3 gr24
|
||||
arg 4 gr23
|
||||
arg 5 gr22
|
||||
arg 6 gr21
|
||||
|
||||
The compiler calls us by the C convention:
|
||||
syscall number in the DO_CALL macro
|
||||
arg 1 gr26
|
||||
arg 2 gr25
|
||||
arg 3 gr24
|
||||
arg 4 gr23
|
||||
arg 5 -52(gr30)
|
||||
arg 6 -56(gr30)
|
||||
|
||||
gr22 and gr21 are caller-saves, so we can just load the arguments
|
||||
there and generally be happy. */
|
||||
|
||||
/* the cmpb...no_error code below inside DO_CALL
|
||||
* is intended to mimic the if (__sys_res...)
|
||||
* code inside INLINE_SYSCALL
|
||||
*/
|
||||
|
||||
#undef DO_CALL
|
||||
#define DO_CALL(args, syscall_name) \
|
||||
DOARGS_##args \
|
||||
ble 0x100(%sr2,%r0) ASM_LINE_SEP \
|
||||
ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \
|
||||
ldi -0x1000,%r1 ASM_LINE_SEP \
|
||||
cmpb,>>=,n %r1,%ret0,0f ASM_LINE_SEP \
|
||||
stw %rp, -20(%sr0,%r30) ASM_LINE_SEP \
|
||||
stw %ret0, -24(%sr0,%r30) ASM_LINE_SEP \
|
||||
.import __errno_location,code ASM_LINE_SEP \
|
||||
bl __errno_location,%rp ASM_LINE_SEP \
|
||||
ldo 64(%r30), %r30 ASM_LINE_SEP \
|
||||
ldo -64(%r30), %r30 ASM_LINE_SEP \
|
||||
ldw -24(%r30), %r26 ASM_LINE_SEP \
|
||||
sub %r0, %r26, %r26 ASM_LINE_SEP \
|
||||
stw %r26, 0(%sr0,%ret0) ASM_LINE_SEP \
|
||||
ldo -1(%r0), %ret0 ASM_LINE_SEP \
|
||||
ldw -20(%r30), %rp ASM_LINE_SEP \
|
||||
0: ASM_LINE_SEP \
|
||||
UNDOARGS_##args
|
||||
|
||||
#define DOARGS_0 /* nothing */
|
||||
#define DOARGS_1 /* nothing */
|
||||
#define DOARGS_2 /* nothing */
|
||||
#define DOARGS_3 /* nothing */
|
||||
#define DOARGS_4 /* nothing */
|
||||
#define DOARGS_5 ldw -52(%r30), %r22 ASM_LINE_SEP
|
||||
#define DOARGS_6 ldw -52(%r30), %r22 ASM_LINE_SEP \
|
||||
ldw -56(%r30), %r21 ASM_LINE_SEP
|
||||
|
||||
|
||||
#define UNDOARGS_0 /* nothing */
|
||||
#define UNDOARGS_1 /* nothing */
|
||||
#define UNDOARGS_2 /* nothing */
|
||||
#define UNDOARGS_3 /* nothing */
|
||||
#define UNDOARGS_4 /* nothing */
|
||||
#define UNDOARGS_5 /* nothing */
|
||||
#define UNDOARGS_6 /* nothing */
|
||||
|
||||
#else
|
||||
|
||||
#undef INLINE_SYSCALL
|
||||
#define INLINE_SYSCALL(name, nr, args...) ({ \
|
||||
unsigned long __sys_res; \
|
||||
{ \
|
||||
register unsigned long __res asm("r28"); \
|
||||
LOAD_ARGS_##nr(args) \
|
||||
asm volatile( \
|
||||
"ble 0x100(%%sr2, %%r0)\n\t" \
|
||||
" ldi %1, %%r20" \
|
||||
: "=r" (__res) \
|
||||
: "i" (SYS_ify(name)) ASM_ARGS_##nr \
|
||||
); \
|
||||
__sys_res = __res; \
|
||||
} \
|
||||
if (__sys_res >= (unsigned long)-4095) { \
|
||||
__set_errno(-__sys_res); \
|
||||
__sys_res == (unsigned long)-1; \
|
||||
} \
|
||||
__sys_res; \
|
||||
})
|
||||
|
||||
#define LOAD_ARGS_0()
|
||||
#define LOAD_ARGS_1(r26) \
|
||||
register unsigned long __r26 __asm__("r26") = (unsigned long)r26; \
|
||||
LOAD_ARGS_0()
|
||||
#define LOAD_ARGS_2(r26,r25) \
|
||||
register unsigned long __r25 __asm__("r25") = (unsigned long)r25; \
|
||||
LOAD_ARGS_1(r26)
|
||||
#define LOAD_ARGS_3(r26,r25,r24) \
|
||||
register unsigned long __r24 __asm__("r24") = (unsigned long)r24; \
|
||||
LOAD_ARGS_2(r26,r25)
|
||||
#define LOAD_ARGS_4(r26,r25,r24,r23) \
|
||||
register unsigned long __r23 __asm__("r23") = (unsigned long)r23; \
|
||||
LOAD_ARGS_3(r26,r25,r24)
|
||||
#define LOAD_ARGS_5(r26,r25,r24,r23,r22) \
|
||||
register unsigned long __r22 __asm__("r22") = (unsigned long)r22; \
|
||||
LOAD_ARGS_4(r26,r25,r24,r23)
|
||||
#define LOAD_ARGS_6(r26,r25,r24,r23,r22,r21) \
|
||||
register unsigned long __r21 __asm__("r21") = (unsigned long)r21; \
|
||||
LOAD_ARGS_5(r26,r25,r24,r23,r22)
|
||||
|
||||
#define ASM_ARGS_0
|
||||
#define ASM_ARGS_1 , "r" (__r26)
|
||||
#define ASM_ARGS_2 , "r" (__r26), "r" (__r25)
|
||||
#define ASM_ARGS_3 , "r" (__r26), "r" (__r25), "r" (__r24)
|
||||
#define ASM_ARGS_4 , "r" (__r26), "r" (__r25), "r" (__r24), "r" (__r23)
|
||||
#define ASM_ARGS_5 , "r" (__r26), "r" (__r25), "r" (__r24), "r" (__r23), "r" (__r22)
|
||||
#define ASM_ARGS_6 , "r" (__r26), "r" (__r25), "r" (__r24), "r" (__r23), "r" (__r22), "r" (__r21)
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
9
sysdeps/unix/sysv/linux/hppa/umount.c
Normal file
9
sysdeps/unix/sysv/linux/hppa/umount.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* since we don't have an oldumount system call, do what the kernel
|
||||
does down here */
|
||||
|
||||
long __umount(char *name)
|
||||
{
|
||||
return __umount2(name, 0);
|
||||
}
|
||||
|
||||
weak_alias(__umount, umount);
|
Loading…
x
Reference in New Issue
Block a user