From 5107cf1d7d27f17c6de68ec15a8e8d9dd5b471c1 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 21 Jun 1997 02:59:26 +0000 Subject: Update. 1997-06-21 02:48 Ulrich Drepper * config.h.in: Add DO_STATIC_NSS. * config.make.in: Add build-static-nss. * elf/eval.c: Use __getdelim instead of __getline. * locale/programs/locale.c: Correct comment. * manual/libc.texinfo: Update copyright and date. Remove A4 option. * sysdeps/libm-ieee754/k_standard.c: Always return HUGE_VAL for gamma overflow. * sysdeps/libm-ieee754/w_gamma.c: Handle SVID and ISO C behaviour. * sysdeps/libm-ieee754/w_gammaf.c: Likewise. * sysdeps/libm-ieee754/w_gammalp.c: Likewise. * po/ko.po: Update. 1997-06-13 10:06 Richard Henderson The Great Bit File Move: * configure.in (AC_INIT): Look in include/ for features.h. (sysnames): Add include as the final search directory. (AC_OUTPUT): Create a bits directory in the build directory. * Makeconfig (CPPFLAGS): Look in include/ for libc-symbols.h. * Makefile: Make sure the target directory exists when installing and . * csu/Makefile: Use $(compile.S) and $(compile.c) instead of invoking $(CC) directly, as the former have the full include path. * ansidecl.h: Removed. * aliases.h: Moved to include/. * alloca.h: Likewise. * argp.h: Likewise. * argz.h: Likewise. * arpa/ftp.h: Likewise. * arpa/inet.h: Likewise. * arpa/nameser.h: Likewise. * arpa/telnet.h: Likewise. * arpa/tftp.h: Likewise. * assert.h: Likewise. * ctype.h: Likewise. * db.h: Likewise. * dirent.h: Likewise. * dlfcn.h: Likewise. * elf.h: Likewise. * endian.h: Likewise. * envz.h: Likewise. * err.h: Likewise. * errno.h: Likewise. * error.h: Likewise. * fcntl.h: Likewise. * features.h: Likewise. * fnmatch.h: Likewise. * ftw.h: Likewise. * getopt.h: Likewise. * glob.h: Likewise. * gnu-versions.h: Likewise. * grp.h: Likewise. * langinfo.h: Likewise. * libc-symbols.h: Likewise. * libgen.h: Likewise. * libintl.h: Likewise. * limits.h: Likewise. * linewrap.h: Likewise. * link.h: Likewise. * locale.h: Likewise. * malloc.h: Likewise. * math.h: Likewise. * mathcalls.h: Likewise. * mcheck.h: Likewise. * memory.h: Likewise. * netdb.h: Likewise. * netgroup.h: Likewise. * netinet/ether.h: Likewise. * netinet/in.h: Likewise. * nlist.h: Likewise. * nss.h: Likewise. * nsswitch.h: Likewise. * obstack.h: Likewise. * poll.h: Likewise. * posix1_lim.h: Likewise. * posix2_lim.h: Likewise. * printf.h: Likewise. * protocols/routed.h: Likewise. * protocols/rwhod.h: Likewise. * protocols/talkd.h: Likewise. * protocols/timed.h: Likewise. * pwd.h: Likewise. * regex.h: Likewise. * resolv.h: Likewise. * rpc/auth_unix.h: Likewise. * rpc/clnt.h: Likewise. * rpc/netdb.h: Likewise. * rpc/pmap_clnt.h: Likewise. * rpc/pmap_prot.h: Likewise. * rpc/pmap_rmt.h: Likewise. * rpc/rpc.h: Likewise. * rpc/rpc_msg.h: Likewise. * rpc/svc.h: Likewise. * rpc/svc_auth.h: Likewise. * rpc/types.h: Likewise. * rpc/xdr.h: Likewise. * sched.h: Likewise. * search.h: Likewise. * set-hooks.h: Likewise. * setjmp.h: Likewise. * sgtty.h: Likewise. * shadow.h: Likewise. * signal.h: Likewise. * stab.def: Likewise. * stab.h: Likewise. * stdio.h: Likewise. * stdlib.h: Likewise. * string.h: Likewise. * strings.h: Likewise. * sys/bitypes.h: Likewise. * sys/cdefs.h: Likewise. * sys/dir.h: Likewise. * sys/errno.h: Likewise. * sys/fcntl.h: Likewise. * sys/file.h: Likewise. * sys/gmon.h: Likewise. * sys/ioctl.h: Likewise. * sys/ipc.h: Likewise. * sys/msg.h: Likewise. * sys/poll.h: Likewise. * sys/queue.h: Likewise. * sys/resource.h: Likewise. * sys/select.h: Likewise. * sys/sem.h: Likewise. * sys/shm.h: Likewise. * sys/signal.h: Likewise. * sys/socket.h: Likewise. * sys/stat.h: Likewise. * sys/statfs.h: Likewise. * sys/syslog.h: Likewise. * sys/termios.h: Likewise. * sys/time.h: Likewise. * sys/timeb.h: Likewise. * sys/times.h: Likewise. * sys/types.h: Likewise. * sys/uio.h: Likewise. * sys/un.h: Likewise. * sys/unistd.h: Likewise. * sys/utsname.h: Likewise. * sys/vlimit.h: Likewise. * sys/vtimes.h: Likewise. * sys/wait.h: Likewise. * syscall.h: Likewise. * syslog.h: Likewise. * tar.h: Likewise. * termios.h: Likewise. * time.h: Likewise. * ttyent.h: Likewise. * unistd.h: Likewise. * utime.h: Likewise. * utmp.h: Likewise. * values.h: Likewise. * wchar.h: Likewise. * wctype.h: Likewise. * wordexp.h: Likewise. * xlocale.h: Likewise. * xopen_lim.h: Likewise. * linuxthreads/sysdeps/alpha/semaphorebits.h: -> .../bits/semaphore.h. * linuxthreads/sysdeps/powerpc/semaphorebits.h: Likewise. * linuxthreads/sysdeps/pthread/cmpxchg/semaphorebits.h: Likewise. * linuxthreads/sysdeps/pthread/no-cmpxchg/semaphorebits.h: Likewise. * linuxthreads/sysdeps/pthread/libc-lock.h: -> bits/ * sysdeps/mach/libc-lock.h: Likewise. * sysdeps/stub/libc-lock.h: Likewise. * linuxthreads/sysdeps/pthread/stdio-lock.h: Likewise. * linuxthreads/sysdeps/unix/sysv/linux/local_lim.h: Likewise. * sysdeps/mach/hurd/local_lim.h: Likewise. * sysdeps/stub/local_lim.h: Likewise. * sysdeps/unix/sysv/linux/local_lim.h: Likewise. * sysdeps/unix/sysv/local_lim.h: Likewise. * sysdeps/unix/sysv/sco3.2/local_lim.h: Likewise. * linuxthreads/sysdeps/unix/sysv/linux/posix_opt.h: Likewise. * sysdeps/mach/hurd/posix_opt.h: Likewise. * sysdeps/stub/posix_opt.h: Likewise. * sysdeps/unix/bsd/posix_opt.h: Likewise. * sysdeps/unix/bsd/ultrix4/posix_opt.h: Likewise. * sysdeps/unix/sysv/linux/posix_opt.h: Likewise. * math/cmathcalls.h: -> bits/ * math/mathcalls.h: Likewise. * misc/stab.def: -> bits/ * posix/posix1_lim.h: -> bits/ * posix/posix2_lim.h: Likewise. * sysdeps/alpha/__math.h: -> .../fpu/bits/mathinline.h * sysdeps/i386/fpu/__math.h: Likewise. * sysdeps/m68k/fpu/__math.h: Likewise. * sysdeps/m68k/fpu/switch/__math.h: Likewise. * sysdeps/powerpc/__math.h: Likewise. * sysdeps/stub/__math.h: Likewise. * sysdeps/alpha/bytesex.h: -> .../bits/endian.h * sysdeps/arm/bytesex.h: Likewise. * sysdeps/i386/bytesex.h: Likewise. * sysdeps/m68k/bytesex.h: Likewise. * sysdeps/mips/bytesex.h: Likewise. * sysdeps/mips/dec/bytesex.h: Likewise. * sysdeps/mips/mipsel/bytesex.h: Likewise. * sysdeps/mips/p40/bytesex.h: Likewise. * sysdeps/sparc/bytesex.h: Likewise. * sysdeps/stub/bytesex.h: Likewise. * sysdeps/alpha/fpu/fenvbits.h: -> .../bits/fenv.h * sysdeps/i386/fpu/fenvbits.h: Likewise. * sysdeps/m68k/fpu/fenvbits.h: Likewise. * sysdeps/powerpc/fenvbits.h: Likewise. * sysdeps/stub/fenvbits.h: Likewise. * sysdeps/alpha/jmp_buf.h: -> .../bits/setenv.h * sysdeps/arm/jmp_buf.h: Likewise. * sysdeps/i386/jmp_buf.h: Likewise. * sysdeps/m68k/jmp_buf.h: Likewise. * sysdeps/mips/jmp_buf.h: Likewise. * sysdeps/sparc/jmp_buf.h: Likewise. * sysdeps/powerpc/jmp_buf.h: Likewise. * sysdeps/stub/jmp_buf.h: Likewise. * sysdeps/vax/jmp_buf.h: Likewise. * sysdeps/generic/confname.h: -> bits/ * sysdeps/unix/sysv/irix4/confname.h: Likewise. * sysdeps/unix/sysv/sco3.2.4/confname.h: Likewise. * sysdeps/generic/gnu/types.h: -> ../bits/types.h * sysdeps/unix/sysv/linux/alpha/gnu/types.h: Likewise. * sysdeps/unix/sysv/linux/gnu/types.h: Likewise. * sysdeps/generic/ioctl-types.h: -> bits/ * sysdeps/unix/sysv/linux/ioctl-types.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/ioctl-types.h: Likewise. * sysdeps/generic/iovec.h: -> .../bits/uio.h * sysdeps/unix/sysv/linux/iovec.h: Likewise. * sysdeps/generic/mathbits.h: -> .../bits/mathdef.h * sysdeps/i386/fpu/mathbits.h: Likewise. * sysdeps/m68k/fpu/mathbits.h: Likewise. * sysdeps/powerpc/mathbits.h: Likewise. * sysdeps/generic/resourcebits.h: -> .../bits/resource.h * sysdeps/unix/bsd/sun/sunos4/resourcebits.h: Likewise. * sysdeps/unix/sysv/linux/resourcebits.h: Likewise. * sysdeps/generic/schedbits.h: -> .../bits/sched.h * sysdeps/unix/sysv/linux/schedbits.h: Likewise. * sysdeps/generic/selectbits.h: -> .../bits/select.h * sysdeps/i386/selectbits.h: Likewise. * sysdeps/generic/sigaction.h: -> bits/ * sysdeps/unix/bsd/osf/sigaction.h: Likewise. * sysdeps/unix/sysv/linux/alpha/sigaction.h: Likewise. * sysdeps/unix/sysv/linux/sigaction.h: Likewise. * sysdeps/unix/sysv/linux/sparc/sigaction.h: Likewise. * sysdeps/unix/sysv/minix/sigaction.h: Likewise. * sysdeps/unix/sysv/sco3.2.4/sigaction.h: Likewise. * sysdeps/unix/sysv/sysv4/sigaction.h: Likewise. * sysdeps/generic/sigset.h: -> bits/ * sysdeps/unix/sysv/linux/sigset.h: Likewise. * sysdeps/unix/sysv/sysv4/sigset.h: Likewise. * sysdeps/generic/sockaddrcom.h: -> .../bits/sockaddr.h * sysdeps/unix/bsd/bsd4.4/sockaddrcom.h: Likewise. * sysdeps/generic/socketbits.h: -> .../bits/socket.h * sysdeps/unix/sysv/linux/socketbits.h: Likewise. * sysdeps/generic/statfsbuf.h: -> .../bits/statfs.h * sysdeps/unix/sysv/linux/statfsbuf.h: Likewise. * sysdeps/generic/termbits.h: -> .../bits/termios.h * sysdeps/unix/bsd/sun/sunos4/termbits.h: Likewise. * sysdeps/unix/sysv/linux/alpha/termbits.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/termbits.h: Likewise. * sysdeps/unix/sysv/linux/sparc/termbits.h: Likewise. * sysdeps/unix/sysv/linux/termbits.h: Likewise. * sysdeps/generic/ustatbits.h: -> .../bits/ustat.h * sysdeps/unix/sysv/linux/ustatbits.h: Likewise. * sysdeps/generic/utmpbits.h: -> .../bits/utmp.h * sysdeps/gnu/utmpbits.h: Likewise. * sysdeps/unix/sysv/utmpbits.h: Likewise. * sysdeps/generic/utsnamelen.h: -> .../bits/utsname.h * sysdeps/unix/bsd/sun/sunos4/utsnamelen.h: Likewise. * sysdeps/unix/bsd/ultrix4/utsnamelen.h: Likewise. * sysdeps/unix/sysv/linux/utsnamelen.h: Likewise. * sysdeps/unix/sysv/sysv4/utsnamelen.h: Likewise. * sysdeps/unix/sysv/utsnamelen.h: Likewise. * sysdeps/generic/waitstatus.h: -> bits/ * sysdeps/i386/huge_val.h: -> bits/ * sysdeps/ieee754/huge_val.h: Likewise. * sysdeps/m68k/huge_val.h: Likewise. * sysdeps/stub/huge_val.h: Likewise. * sysdeps/vax/huge_val.h: Likewise. * sysdeps/ieee754/nan.h: Likewise. * sysdeps/stub/nan.h: Likewise. * sysdeps/mach/hurd/alpha/sigcontext.h: -> bits/ * sysdeps/mach/hurd/hppa/sigcontext.h: Likewise. * sysdeps/mach/hurd/i386/sigcontext.h: Likewise. * sysdeps/mach/hurd/mips/sigcontext.h: Likewise. * sysdeps/stub/sigcontext.h: Likewise. * sysdeps/unix/bsd/sun/m68k/sigcontext.h: Likewise. * sysdeps/unix/bsd/sun/sparc/sigcontext.h: Likewise. * sysdeps/unix/bsd/ultrix4/mips/sigcontext.h: Likewise. * sysdeps/unix/sysv/linux/sigcontext.h: Likewise. * sysdeps/mach/hurd/errnos.h: -> .../bits/errno.h * sysdeps/standalone/arm/errnos.h: Likewise. * sysdeps/stub/errnos.h: Likewise. * sysdeps/unix/bsd/bsd4.4/errnos.h: Likewise. * sysdeps/unix/sysv/linux/errnos.h: Likewise. * sysdeps/mach/hurd/fcntlbits.h: -> .../bits/fcntl.h * sysdeps/stub/fcntlbits.h: Likewise. * sysdeps/unix/bsd/bsd4.4/fcntlbits.h: Likewise. * sysdeps/unix/bsd/fcntlbits.h: Likewise. * sysdeps/unix/bsd/sun/sunos4/fcntlbits.h: Likewise. * sysdeps/unix/bsd/ultrix4/fcntlbits.h: Likewise. * sysdeps/unix/common/fcntlbits.h: Likewise. * sysdeps/unix/sysv/fcntlbits.h: Likewise. * sysdeps/unix/sysv/irix4/fcntlbits.h: Likewise. * sysdeps/unix/sysv/linux/alpha/fcntlbits.h: Likewise. * sysdeps/unix/sysv/linux/fcntlbits.h: Likewise. * sysdeps/unix/sysv/linux/sparc/fcntlbits.h: Likewise. * sysdeps/mach/hurd/ioctls.h: -> bits/ * sysdeps/stub/ioctls.h: Likewise. * sysdeps/unix/bsd/bsd4.4/ioctls.h: Likewise. * sysdeps/unix/sysv/linux/alpha/ioctls.h: Likewise. * sysdeps/unix/sysv/linux/ioctls.h: Likewise. * sysdeps/unix/sysv/linux/sparc/ioctls.h: Likewise. * sysdeps/mach/hurd/statbuf.h: -> .../bits/stat.h * sysdeps/stub/statbuf.h: Likewise. * sysdeps/unix/bsd/osf/alpha/statbuf.h: Likewise. * sysdeps/unix/bsd/statbuf.h: Likewise. * sysdeps/unix/sysv/irix4/statbuf.h: Likewise. * sysdeps/unix/sysv/linux/alpha/statbuf.h: Likewise. * sysdeps/unix/sysv/linux/statbuf.h: Likewise. * sysdeps/unix/sysv/statbuf.h: Likewise. * sysdeps/unix/sysv/sysv4/i386/statbuf.h: Likewise. * sysdeps/unix/sysv/sysv4/solaris2/statbuf.h: Likewise. * sysdeps/standalone/stdio_lim.h: -> bits/ * sysdeps/stub/stdio_lim.h: Likewise. * sysdeps/stub/direntry.h: -> ../bits/dirent.h * sysdeps/unix/bsd/bsd4.4/direntry.h: Likewise. * sysdeps/unix/bsd/direntry.h: Likewise. * sysdeps/unix/common/direntry.h: Likewise. * sysdeps/unix/sysv/direntry.h: Likewise. * sysdeps/unix/sysv/linux/direntry.h: Likewise. * sysdeps/stub/elfclass.h: -> bits/ * sysdeps/wordsize-32/elfclass.h: Likewise. * sysdeps/wordsize-64/elfclass.h: Likewise. * sysdeps/stub/signum.h: -> bits/ * sysdeps/unix/bsd/signum.h: Likewise. * sysdeps/unix/bsd/sun/signum.h: Likewise. * sysdeps/unix/sysv/irix4/signum.h: Likewise. * sysdeps/unix/sysv/linux/alpha/signum.h: Likewise. * sysdeps/unix/sysv/linux/signum.h: Likewise. * sysdeps/unix/sysv/linux/sparc/signum.h: Likewise. * sysdeps/unix/sysv/signum.h: Likewise. * sysdeps/unix/sysv/sysv4/signum.h: Likewise. * sysdeps/unix/sysv/sysv4/solaris2/signum.h: Likewise. * sysdeps/stub/sys/ipc_buf.h: -> .../bits/ipc.h * sysdeps/unix/sysv/linux/alpha/sys/ipc_buf.h: Likewise. * sysdeps/unix/sysv/linux/sys/ipc_buf.h: Likewise. * sysdeps/stub/sys/msq_buf.h: -> .../bits/msq.h * sysdeps/unix/sysv/linux/sys/msq_buf.h: Likewise. * sysdeps/stub/sys/sem_buf.h: -> .../bits/sem.h * sysdeps/unix/sysv/linux/sys/sem_buf.h: Likewise. * sysdeps/stub/sys/shm_buf.h: -> .../bits/shm.h * sysdeps/unix/sysv/linux/sys/shm_buf.h: Likewise. * sysdeps/stub/timebits.h: -> .../bits/time.h * sysdeps/unix/sysv/linux/alpha/timebits.h: Likewise. * sysdeps/unix/sysv/linux/timebits.h: Likewise. * sysdeps/stub/waitflags.h: -> bits/ * sysdeps/unix/bsd/waitflags.h: Likewise. * sysdeps/unix/sysv/linux/waitflags.h: Likewise. * sysdeps/unix/sysv/sysv4/waitflags.h: Likewise. * sysdeps/unix/sysv/linux/alpha/sys/kernel_termios.h: -> ../ * sysdeps/unix/sysv/linux/powerpc/sys/kernel_termios.h: Likewise. * sysdeps/unix/sysv/linux/sys/kernel_termios.h: Likewise. * sysdeps/unix/sysv/linux/sys/socketcall.h: -> ../ * argp/argp-fmtstream.h: Standardize the multiple-include protect. * argp/argp.h: Likewise. * catgets/nl_types.h: Likewise. * crypt/sysdeps/unix/crypt.h: Likewise. * ctype/ctype.h: Likewise. * db/db.h: Likewise. * db/mpool.h: Likewise. * db/ndbm.h: Likewise. * dirent/dirent.h: Likewise. * elf/dlfcn.h: Likewise. * elf/elf.h: Likewise. * elf/link.h: Likewise. * gmon/sys/gmon.h: Likewise. * gmon/sys/gmon_out.h: Likewise. * grp/grp.h: Likewise. * inet/aliases.h: Likewise. * inet/arpa/ftp.h: Likewise. * inet/arpa/inet.h: Likewise. * inet/arpa/telnet.h: Likewise. * inet/arpa/tftp.h: Likewise. * inet/netinet/ether.h: Likewise. * inet/netinet/icmp6.h: Likewise. * inet/netinet/in.h: Likewise. * inet/netinet/ip6.h: Likewise. * inet/protocols/routed.h: Likewise. * inet/protocols/rwhod.h: Likewise. * inet/protocols/talkd.h: Likewise. * inet/protocols/timed.h: Likewise. * intl/libintl.h: Likewise. * io/fcntl.h: Likewise. * io/fts.h: Likewise. * io/ftw.h: Likewise. * io/sys/poll.h: Likewise. * io/sys/stat.h: Likewise. * io/sys/statfs.h: Likewise. * io/utime.h: Likewise. * linuxthreads/semaphore.h: Likewise. * linuxthreads/sysdeps/pthread/pthread.h: Likewise. * locale/locale.h: Likewise. * login/pty.h: Likewise. * login/utmp.h: Likewise. * malloc/malloc.h: Likewise. * malloc/obstack.h: Likewise. * math/complex.h: Likewise. * math/fenv.h: Likewise. * math/math.h: Likewise. * md5-crypt/md5.h: Likewise. * misc/ar.h: Likewise. * misc/err.h: Likewise. * misc/error.h: Likewise. * misc/fstab.h: Likewise. * misc/libgen.h: Likewise. * misc/nlist.h: Likewise. * misc/sys/cdefs.h: Likewise. * misc/sys/file.h: Likewise. * misc/sys/ioctl.h: Likewise. * misc/sys/queue.h: Likewise. * misc/sys/select.h: Likewise. * misc/sys/syslog.h: Likewise. * misc/sys/uio.h: Likewise. * misc/sysexits.h: Likewise. * misc/ttyent.h: Likewise. * nss/nss.h: Likewise. * posix/fnmatch.h: Likewise. * posix/getopt.h: Likewise. * posix/glob.h: Likewise. * posix/regex.h: Likewise. * posix/sys/times.h: Likewise. * posix/sys/types.h: Likewise. * posix/sys/utsname.h: Likewise. * posix/sys/wait.h: Likewise. * posix/tar.h: Likewise. * posix/unistd.h: Likewise. * posix/wordexp.h: Likewise. * pwd/pwd.h: Likewise. * resolv/arpa/nameser.h: Likewise. * resolv/netdb.h: Likewise. * resolv/resolv.h: Likewise. * resource/sys/resource.h: Likewise. * resource/sys/vlimit.h: Likewise. * resource/sys/vtimes.h: Likewise. * setjmp/setjmp.h: Likewise. * shadow/shadow.h: Likewise. * socket/sys/socket.h: Likewise. * socket/sys/un.h: Likewise. * stdlib/exit.h: Likewise. * stdlib/fmtmsg.h: Likewise. * stdlib/monetary.h: Likewise. * stdlib/stdlib.h: Likewise. * string/argz.h: Likewise. * string/envz.h: Likewise. * string/memory.h: Likewise. * string/string.h: Likewise. * string/strings.h: Likewise. * sunrpc/rpc/rpc.h: Likewise. * sunrpc/rpc/svc.h: Likewise. * sunrpc/rpc/types.h: Likewise. * sunrpc/rpc/xdr.h: Likewise. * termios/sys/ttychars.h: Likewise. * termios/termios.h: Likewise. * argp/argp-parse.c: -> . * crypt/sysdeps/unix/crypt_util.c: Likewise. * dirent/dirent.h: Likewise. * elf/link.h: Likewise. * grp/fgetgrent.c: Likewise. * grp/grp.h: Likewise. * hurd/hurd/ioctl.h: Likewise. * inet/getnameinfo.c: Likewise. * inet/getnetgrent_r.c: Likewise. * inet/inet_ntoa.c: Likewise. * inet/netinet/in.h: Likewise. * io/fcntl.h: Likewise. * io/ftw.h: Likewise. * io/sys/stat.h: Likewise. * io/sys/statfs.h: Likewise. * io/utime.h: Likewise. * libio/_G_config.h: Likewise. * libio/libio.h: Likewise. * libio/libioP.h: Likewise. * libio/stdio.h: Likewise. * linuxthreads/lockfile.c: Likewise. * linuxthreads/semaphore.h: Likewise. * locale/duplocale.c: Likewise. * locale/freelocale.c: Likewise. * locale/lc-time.c: Likewise. * locale/setlocale.c: Likewise. * login/getutent_r.c: Likewise. * login/getutid_r.c: Likewise. * login/getutline_r.c: Likewise. * login/lastlog.h: Likewise. * login/pty.h: Likewise. * login/utmp.h: Likewise. * login/utmpname.c: Likewise. * malloc/mtrace.c: Likewise. * malloc/thread-m.h: Likewise. * math/complex.h: Likewise. * math/fenv.h: Likewise. * math/libm-test.c: Likewise. * math/math.h: Likewise. * misc/sgtty.h: Likewise. * misc/stab.h: Likewise. * misc/sys/ioctl.h: Likewise. * misc/sys/select.h: Likewise. * misc/sys/uio.h: Likewise. * misc/sys/ustat.h: Likewise. * misc/syslog.c: Likewise. * nis/nss_compat/compat-grp.c: Likewise. * nis/nss_compat/compat-pwd.c: Likewise. * nis/nss_compat/compat-spwd.c: Likewise. * nis/nss_nis/nis-alias.c: Likewise. * nis/nss_nis/nis-ethers.c: Likewise. * nis/nss_nis/nis-grp.c: Likewise. * nis/nss_nis/nis-hosts.c: Likewise. * nis/nss_nis/nis-netgrp.c: Likewise. * nis/nss_nis/nis-network.c: Likewise. * nis/nss_nis/nis-proto.c: Likewise. * nis/nss_nis/nis-publickey.c: Likewise. * nis/nss_nis/nis-pwd.c: Likewise. * nis/nss_nis/nis-rpc.c: Likewise. * nis/nss_nis/nis-service.c: Likewise. * nis/nss_nis/nis-spwd.c: Likewise. * nss_nisplus/nisplus-alias.c: Likewise. * nis/nss_nisplus/nisplus-ethers.c: Likewise. * nis/nss_nisplus/nisplus-grp.c: Likewise. * nis/nss_nisplus/nisplus-hosts.c: Likewise. * nis/nss_nisplus/nisplus-netgrp.c: Likewise. * nis/nss_nisplus/nisplus-netgrp.c: Likewise. * nis/nss_nisplus/nisplus-proto.c: Likewise. * nis/nss_nisplus/nisplus-pwd.c: Likewise. * nis/nss_nisplus/nisplus-rpc.c: Likewise. * nis/nss_nisplus/nisplus-service.c: Likewise. * nis/nss_nisplus/nisplus-spwd.c: Likewise. * nis/ypclnt.c: Likewise. * nss/getXXbyYY.c: Likewise. * nss/getXXent.c: Likewise. * nss/getXXent_r.c: Likewise. * nss/nss_db/db-XXX.c: Likewise. * nss/nss_db/db-alias.c: Likewise. * nss/nss_db/db-netgrp.c: Likewise. * nss/nss_files/files-XXX.c: Likewise. * nss/nss_files/files-alias.c: Likewise. * nss/nsswitch.c: Likewise. * posix/sched.h: Likewise. * posix/sys/types.h: Likewise. * posix/sys/utsname.h: Likewise. * posix/sys/wait.h: Likewise. * posix/unistd.h: Likewise. * pwd/fgetpwent.c: Likewise. * pwd/pwd.h: Likewise. * resource/sys/resource.h: Likewise. * setjmp/setjmp.h: Likewise. * shadow/fgetspent.c: Likewise. * shadow/lckpwdf.c: Likewise. * shadow/sgetspent.c: Likewise. * signal/signal.h: Likewise. * signal/sigsetops.c: Likewise. * socket/sys/socket.h: Likewise. * socket/sys/un.h: Likewise. * stdio/stdio.h: Likewise. * stdio-common/vfprintf.c: Likewise. * stdio-common/vfscanf.c: Likewise. * stdlib/atexit.c: Likewise. * stdlib/fmtmsg.c: Likewise. * stdlib/random.c: Likewise. * string/endian.h: Likewise. * sysdeps/alpha/w_sqrt.S: Likewise. * sysdeps/arm/__longjmp.S: Likewise. * sysdeps/arm/setjmp.S: Likewise. * sysdeps/generic/abort.c: Likewise. * sysdeps/generic/netinet/ip.h: Likewise. * sysdeps/generic/setenv.c: Likewise. * generic/sys/mman.h: Likewise. * sysdeps/i386/__longjmp.S: Likewise. * sysdeps/i386/setjmp.S: Likewise. * sysdeps/mach/hurd/dirstream.h: Likewise. * sysdeps/mach/hurd/jmp-unwind.c: Likewise. * sysdeps/posix/mk-stdiolim.c: Likewise. * sysdeps/powerpc/__longjmp.S: Likewise. * sysdeps/powerpc/setjmp.S: Likewise. * sysdeps/sparc/__longjmp.S: Likewise. * sysdeps/sparc/setjmp.S: Likewise. * sysdeps/standalone/close.c: Likewise. * sysdeps/standalone/filedesc.h: Likewise. * sysdeps/standalone/open.c: Likewise. * sysdeps/unix/bsd/bsd4.4/tcsetattr.c: Likewise. * sysdeps/unix/bsd/m68k/sysdep.S: Likewise. * sysdeps/unix/bsd/osf/sys/mman.h: Likewise. * sysdeps/unix/bsd/sun/m68k/sethostid.S: Likewise. * sysdeps/unix/bsd/sun/sparc/sethostid.S: Likewise. * sysdeps/unix/bsd/sun/sunos4/sys/mman.h: Likewise. * sysdeps/unix/bsd/ultrix4/sys/mman.h: Likewise. * sysdeps/unix/bsd/vax/sysdep.S: Likewise. * sysdeps/unix/dirstream.h: Likewise. * sysdeps/unix/i386/sysdep.S: Likewise. * sysdeps/unix/mips/sysdep.S: Likewise. * sysdeps/unix/mk-local_lim.c: Likewise. * sysdeps/unix/sparc/sysdep.S: Likewise. * sysdeps/unix/sysv/irix4/sys/mman.h: Likewise. * sysdeps/unix/sysv/linux/alpha/brk.S: Likewise. * sysdeps/unix/sysv/linux/alpha/clone.S: Likewise. * sysdeps/unix/sysv/linux/arm/clone.S: Likewise. * sysdeps/unix/sysv/linux/i386/clone.S: Likewise. * sysdeps/unix/sysv/linux/m68k/clone.S: Likewise. * sysdeps/unix/sysv/linux/netinet/ip.h: Likewise. * sysdeps/unix/sysv/linux/netinet/tcp.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/clone.S: Likewise. * sysdeps/unix/sysv/linux/sys/mman.h: Likewise. * sysdeps/unix/sysv/linux/sys/syscall.h: Likewise. * sysdeps/unix/sysv/linux/tcgetattr.c: Likewise. * sysdeps/unix/sysv/sco3.2.4/sysconf.S: Likewise. * sysdeps/unix/sysv/sysv4/i386/sysdep.h: Likewise. * sysdeps/unix/sysv/sysv4/solaris2/sparc/sysdep.S: Likewise. * sysvipc/sys/ipc.h: Likewise. * sysvipc/sys/msg.h: Likewise. * sysvipc/sys/sem.h: Likewise. * sysvipc/sys/shm.h: Likewise. * termios/termios.h: Likewise. * time/localtime.c: Likewise. * time/sys/time.h: Likewise. * time/time.h: Likewise. * time/tzset.c: Likewise. * sysdeps/unix/sysv/linux/arm/socket.S: socketcall.h change. * sysdeps/unix/sysv/linux/i386/socket.S: Likewise. * sysdeps/unix/sysv/linux/m68k/socket.S: Likewise. * sysdeps/unix/sysv/linux/powerpc/socket.S: Likewise. * sysdeps/unix/sysv/linux/sparc/socket.S: Likewise. * Makefile (headers): foo.h -> bits/foo.h. * dirent/Makefile: Likewise. * elf/Makefile: Likewise. * io/Makefile: Likewise. * linuxthreads/Makefile: Likewise. * linuxthreads/sysdeps/pthread/Makefile: Likewise. * login/Makefile: Likewise. * math/Makefile: Likewise. * misc/Makefile: Likewise. * posix/Makefile: Likewise. * resource/Makefile: Likewise. * setjmp/Makefile: Likewise. * signal/Makefile: Likewise. * socket/Makefile: Likewise. * stdio-common/Makefile: Likewise. * sysdeps/unix/sysv/linux/Makefile: Likewise. * sysvipc/Makefile: Likewise. * termios/Makefile: Likewise. * time/Makefile: Likewise. * sysdeps/generic/Makefile (make_siglist-CFLAGS): Likewise. * sysdeps/posix/Makefile: stdio_lim.h -> bits/stdio_lim.h * sysdeps/unix/Makefile: Likewise with local_lim.h, errnos.h, ioctls.h, termbits.h. * sysdeps/unix/sysv/linux/Dist: sys/kernel_termios.h -> kernel_termios.h, sys/socketcall.h -> socketcall.h * elf/elf.h: Use definitions instead of __attribute__ for getting the proper length on the ELF types to be friendly to non-gcc compilers. * posix/sys/types.h: Notice when int8_t and friends are defined and don't redefine them. * sysdeps/wordsize-32/inttypes.h: Likewise. * sysdeps/wordsize-64/inttypes.h: Likewise. * sysdeps/unix/sysv/linux/arm/profil-counter.h: Get sigcontext via instead. * sysdeps/unix/sysv/linux/i386/profil-counter.h: Likewise. * sysdeps/unix/sysv/linux/sparc/profil-counter.h: Likewise. 1997-06-20 17:59 Kazumoto Kojima * hurd/intr-msg.c: More 64bit changes. * mach/msg-destroy.c: Likewise. * sysdeps/mach/hurd/ioctl.c: Likewise. * sysdeps/mach/hurd/ioctls.h: Likewise. * sysdeps/mach/hurd/select.c: Likewise. * sysdeps/mach/hurd/statbuf.h: Likewise. * sysdeps/mach/hurd/mips/dl-machine.c: Hurd/MIPS64 patches. * sysdeps/mach/hurd/mips/exc2signal.c: Likewise. * sysdeps/mach/hurd/mips/init-fault.c: Likewise. * sysdeps/mach/hurd/mips/init-first.c: Likewise. * sysdeps/mach/hurd/mips/intr-msg.h: Likewise. * sysdeps/mach/hurd/mips/longjmp-ctx.c: Likewise. * sysdeps/mach/hurd/mips/longjmp-ts.c: Likewise. * sysdeps/mach/hurd/mips/sigcontext.h: Likewise. * sysdeps/mach/hurd/mips/sigreturn.c: Likewise. * sysdeps/mach/hurd/mips/trampoline.c: Likewise. * sysdeps/mach/mips/cacheflush.c: Likewise. * sysdeps/mach/mips/machine-lock.h: Likewise. * sysdeps/mach/mips/machine-sp.h: Likewise. * sysdeps/mach/mips/syscall.S: Likewise. * sysdeps/mach/mips/sysdep.h: Likewise. * sysdeps/mach/mips/thread_state.h: Likewise. * sysdeps/mach/start.c: Likewise. * sysdeps/mips/dl-machine.h: MIPS changes. * sysdeps/mips/elf/start.S: Likewise. * sysdeps/mips/init-first.c: Likewise. * sysdeps/mips/fpu_control.h: Likewise. * sysdeps/mips/machine-gmon.h: Likewise. * sysdeps/mips/jmp_buf.h: Likewise. * sysdeps/mips/__longjmp.c: Likewise. * sysdeps/mips/bsd-_setjmp.S: Likewise. * sysdeps/mips/bsd-setjmp.S: Likewise. * sysdeps/mips/setjmp.S: Likewise. * sysdeps/mips/setjmp_aux.c: Likewise. * sysdeps/mips/mips64/gmp-mparam.h: Likewise. * sysdeps/mips/add_n.S: New file. * sysdeps/mips/addmul_1.S: Likewise. * sysdeps/mips/lshift.S: Likewise. * sysdeps/mips/mul_1.S: Likewise. * sysdeps/mips/rshift.S: Likewise. * sysdeps/mips/sub_n.S: Likewise. * sysdeps/mips/submul_1.S: Likewise. * sysdeps/mips/mips64/Implies: Likewise. * sysdeps/mips/mips64/add_n.S: Likewise. * sysdeps/mips/mips64/addmul_1.S: Likewise. * sysdeps/mips/mips64/lshift.S: Likewise. * sysdeps/mips/mips64/mul_1.S: Likewise. * sysdeps/mips/mips64/rshift.S: Likewise. * sysdeps/mips/mips64/sub_n.S: Likewise. * sysdeps/mips/mips64/submul_1.S: Likewise. * sysdeps/mips/add_n.S: Removed. * sysdeps/mips/addmul_1.S: Likewise. * sysdeps/mips/lshift.S: Likewise. * sysdeps/mips/mul_1.S: Likewise. * sysdeps/mips/rshift.S: Likewise. * sysdeps/mips/sub_n.S: Likewise. * sysdeps/mips/submul_1.S: Likewise. * nss/Makefile: Prepare for static NSS. * resolv/Makefile: Likewise. * nss/nsswitch.c: Add code for static NSS. * nss/function.def: Define functions for static NSS. 1997-06-19 11:10 Andreas Schwab * libc.map: Add yet more symbols. 1997-06-19 20:33 Andreas Schwab * elf/dl-lookup.c (_dl_lookup_versioned_symbol): Don't pass NULL as object name to _dl_signal_error. (do_lookup): Skip objects that could not be opened. * sysdeps/m68k/dl-machine.h (elf_machine_rela): Check that the symbol was found. * sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise. * sysdeps/powerpc/dl-machine.h (elf_machine_rela): Likewise. 1997-06-20 03:13 Kazumoto Kojima * ctype/ctype-info.c: Use int32_t where `int' with 4 bytes is assumed. * ctype/ctype.h: Likewise. * math/math_private.h: Likewise. * inet/netinet/in.h: Likewise. * wctype/wctype.h: Likewise. * nss/Makefile: Only inhibit nss_files and nss_db modules if static NSS modules are not enabled. * resolv/Makefile: Likewise for nss_dns. * nss/function.def: New file. List all available lookup functions for static NSS. * nss/nsswitch.c: Add code for static NSS. 1997-06-15 21:15 Andreas Jaeger * math/libm-test.c (gamma_test): Test for _SVID_ and for normal behaviour. 1997-06-15 20:32 Andreas Jaeger * math/libm.map: Add all necessary functions, correct existing entries. 1997-06-20 02:35 a sun * sysdeps/unix/sysv/linux/netipx/ipx.h: Don't use kernel header. 1997-06-19 18:43 Andreas Jaeger * nis/nss_nisplus/nisplus-spwd.c (_nss_nisplus_parse_spent): Compare pointer with NULL. * login/logout.c (logout): Compare pututline result with NULL. * inet/rcmd.c: Correct a few typos. Reported by Erik Troan. --- sysdeps/mach/bits/libc-lock.h | 90 +++++++ sysdeps/mach/hurd/alpha/bits/sigcontext.h | 65 +++++ sysdeps/mach/hurd/alpha/sigcontext.h | 65 ----- sysdeps/mach/hurd/bits/errno.h | 316 +++++++++++++++++++++++ sysdeps/mach/hurd/bits/fcntl.h | 175 +++++++++++++ sysdeps/mach/hurd/bits/ioctls.h | 353 ++++++++++++++++++++++++++ sysdeps/mach/hurd/bits/local_lim.h | 39 +++ sysdeps/mach/hurd/bits/posix_opt.h | 21 ++ sysdeps/mach/hurd/bits/stat.h | 136 ++++++++++ sysdeps/mach/hurd/dirstream.h | 2 +- sysdeps/mach/hurd/errnos.h | 316 ----------------------- sysdeps/mach/hurd/fcntlbits.h | 179 ------------- sysdeps/mach/hurd/hppa/bits/sigcontext.h | 86 +++++++ sysdeps/mach/hurd/hppa/sigcontext.h | 86 ------- sysdeps/mach/hurd/i386/bits/sigcontext.h | 106 ++++++++ sysdeps/mach/hurd/i386/sigcontext.h | 106 -------- sysdeps/mach/hurd/ioctl.c | 8 +- sysdeps/mach/hurd/ioctls.h | 349 ------------------------- sysdeps/mach/hurd/jmp-unwind.c | 2 +- sysdeps/mach/hurd/local_lim.h | 39 --- sysdeps/mach/hurd/mips/bits/sigcontext.h | 71 ++++++ sysdeps/mach/hurd/mips/dl-machine.c | 131 ++++++++++ sysdeps/mach/hurd/mips/exc2signal.c | 65 +++-- sysdeps/mach/hurd/mips/init-fault.c | 41 +++ sysdeps/mach/hurd/mips/init-first.c | 407 ++++++++++++++++++++++++++++++ sysdeps/mach/hurd/mips/intr-msg.h | 127 ++++++++++ sysdeps/mach/hurd/mips/longjmp-ctx.c | 41 +++ sysdeps/mach/hurd/mips/longjmp-ts.c | 34 +-- sysdeps/mach/hurd/mips/sigcontext.h | 71 ------ sysdeps/mach/hurd/mips/sigreturn.c | 100 ++++++-- sysdeps/mach/hurd/mips/trampoline.c | 217 ++++++++++------ sysdeps/mach/hurd/posix_opt.h | 21 -- sysdeps/mach/hurd/select.c | 2 +- sysdeps/mach/hurd/statbuf.h | 131 ---------- sysdeps/mach/libc-lock.h | 90 ------- sysdeps/mach/mips/cacheflush.c | 30 +-- sysdeps/mach/mips/machine-lock.h | 63 +++-- sysdeps/mach/mips/machine-sp.h | 34 +-- sysdeps/mach/mips/syscall.S | 57 +++-- sysdeps/mach/mips/sysdep.h | 58 +++-- sysdeps/mach/mips/thread_state.h | 33 ++- sysdeps/mach/start.c | 3 + 42 files changed, 2641 insertions(+), 1725 deletions(-) create mode 100644 sysdeps/mach/bits/libc-lock.h create mode 100644 sysdeps/mach/hurd/alpha/bits/sigcontext.h delete mode 100644 sysdeps/mach/hurd/alpha/sigcontext.h create mode 100644 sysdeps/mach/hurd/bits/errno.h create mode 100644 sysdeps/mach/hurd/bits/fcntl.h create mode 100644 sysdeps/mach/hurd/bits/ioctls.h create mode 100644 sysdeps/mach/hurd/bits/local_lim.h create mode 100644 sysdeps/mach/hurd/bits/posix_opt.h create mode 100644 sysdeps/mach/hurd/bits/stat.h delete mode 100644 sysdeps/mach/hurd/errnos.h delete mode 100644 sysdeps/mach/hurd/fcntlbits.h create mode 100644 sysdeps/mach/hurd/hppa/bits/sigcontext.h delete mode 100644 sysdeps/mach/hurd/hppa/sigcontext.h create mode 100644 sysdeps/mach/hurd/i386/bits/sigcontext.h delete mode 100644 sysdeps/mach/hurd/i386/sigcontext.h delete mode 100644 sysdeps/mach/hurd/ioctls.h delete mode 100644 sysdeps/mach/hurd/local_lim.h create mode 100644 sysdeps/mach/hurd/mips/bits/sigcontext.h create mode 100644 sysdeps/mach/hurd/mips/dl-machine.c create mode 100644 sysdeps/mach/hurd/mips/init-fault.c create mode 100644 sysdeps/mach/hurd/mips/init-first.c create mode 100644 sysdeps/mach/hurd/mips/intr-msg.h create mode 100644 sysdeps/mach/hurd/mips/longjmp-ctx.c delete mode 100644 sysdeps/mach/hurd/mips/sigcontext.h delete mode 100644 sysdeps/mach/hurd/posix_opt.h delete mode 100644 sysdeps/mach/hurd/statbuf.h delete mode 100644 sysdeps/mach/libc-lock.h (limited to 'sysdeps/mach') diff --git a/sysdeps/mach/bits/libc-lock.h b/sysdeps/mach/bits/libc-lock.h new file mode 100644 index 0000000000..f3ce23a88c --- /dev/null +++ b/sysdeps/mach/bits/libc-lock.h @@ -0,0 +1,90 @@ +/* libc-internal interface for mutex locks. Mach cthreads version. + 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 _BITS_LIBC_LOCK_H +#define _BITS_LIBC_LOCK_H 1 + +#ifdef _LIBC +#include +#define __libc_lock_t struct mutex +#else +typedef struct __libc_lock_opaque__ __libc_lock_t; +#endif + +/* Define a lock variable NAME with storage class CLASS. The lock must be + initialized with __libc_lock_init before it can be used (or define it + with __libc_lock_define_initialized, below). Use `extern' for CLASS to + declare a lock defined in another module. In public structure + definitions you must use a pointer to the lock structure (i.e., NAME + begins with a `*'), because its storage size will not be known outside + of libc. */ +#define __libc_lock_define(CLASS,NAME) \ + CLASS __libc_lock_t NAME; + +/* Define an initialized lock variable NAME with storage class CLASS. */ +#define __libc_lock_define_initialized(CLASS,NAME) \ + CLASS __libc_lock_t NAME = MUTEX_INITIALIZER; + +/* Initialize the named lock variable, leaving it in a consistent, unlocked + state. */ +#define __libc_lock_init(NAME) __mutex_init (&(NAME)) + +/* Finalize the named lock variable, which must be locked. It cannot be + used again until __libc_lock_init is called again on it. This must be + called on a lock variable before the containing storage is reused. */ +#define __libc_lock_fini(NAME) __mutex_unlock (&(NAME)) + +/* Lock the named lock variable. */ +#define __libc_lock_lock(NAME) __mutex_lock (&(NAME)) + +/* Lock the named lock variable. */ +#define __libc_lock_trylock(NAME) (!__mutex_trylock (&(NAME))) + +/* Unlock the named lock variable. */ +#define __libc_lock_unlock(NAME) __mutex_unlock (&(NAME)) + +/* Start a critical region with a cleanup function */ +#define __libc_cleanup_region_start(FCT, ARG) \ +{ \ + typeof (FCT) __save_FCT = FCT; \ + typeof (ARG) __save_ARG = ARG; \ + /* close brace is in __libc_cleanup_region_end below. */ + +/* End a critical region started with __libc_cleanup_region_start. */ +#define __libc_cleanup_region_end(DOIT) \ + if (DOIT) \ + (*__save_FCT)(__save_ARG); \ +} + + +#ifdef _LIBC +/* We need portable names for some functions. E.g., when they are + used as argument to __libc_cleanup_region_start. */ +#define __libc_mutex_unlock __mutex_unlock +#endif + +/* XXX until cthreads supports recursive locks */ +#define __libc_lock_define_initialized_recursive __libc_lock_define_initialized +#define __libc_lock_init_recursive __libc_lock_init +#define __libc_lock_fini_recursive __libc_lock_fini +#define __libc_lock_trylock_recursive __libc_lock_trylock +#define __libc_lock_unlock_recursive __libc_lock_unlock +#define __libc_lock_lock_recursive __libc_lock_lock + +#endif /* bits/libc-lock.h */ diff --git a/sysdeps/mach/hurd/alpha/bits/sigcontext.h b/sysdeps/mach/hurd/alpha/bits/sigcontext.h new file mode 100644 index 0000000000..32e0c94f98 --- /dev/null +++ b/sysdeps/mach/hurd/alpha/bits/sigcontext.h @@ -0,0 +1,65 @@ +/* Machine-dependent signal context structure for GNU Hurd. Alpha version. +Copyright (C) 1994 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* Signal handlers are actually called: + void handler (int sig, int code, struct sigcontext *scp); */ + +/* State of this thread when the signal was taken. */ +struct sigcontext + { + /* These first members are machine-independent. */ + + long int sc_onstack; /* Nonzero if running on sigstack. */ + __sigset_t sc_mask; /* Blocked signals to restore. */ + + /* MiG reply port this thread is using. */ + unsigned long int sc_reply_port; + + /* Port this thread is doing an interruptible RPC on. */ + unsigned long int sc_intr_port; + + /* Error code associated with this signal (interpreted as `error_t'). */ + int sc_error; + + /* All following members are machine-dependent. The rest of this + structure is written to be laid out identically to: + { + struct alpha_thread_state basic; + struct alpha_exc_state exc; + struct alpha_float_state fpu; + } + trampoline.c knows this, so it must be changed if this changes. */ + +#define sc_alpha_thread_state sc_regs /* Beginning of correspondence. */ + long int sc_regs[31]; /* General registers $0..$30. */ + long int sc_pc; /* Program counter. */ + + /* struct alpha_exc_state */ +#define sc_alpha_exc_state sc_badvaddr + unsigned long int sc_badvaddr; + unsigned int sc_cause; /* Machine-level trap code. */ +#define SC_CAUSE_SET_SSTEP 1 + int sc_used_fpa; /* Nonzero if FPU was used. */ + + /* struct alpha_float_state + This is only filled in if sc_used_fpa is nonzero. */ +#define sc_alpha_float_state sc_fpregs + double sc_fpregs[31]; /* Floating point registers $f0..$f30. */ + long int sc_fpcsr; /* Floating point control/status register. */ + }; diff --git a/sysdeps/mach/hurd/alpha/sigcontext.h b/sysdeps/mach/hurd/alpha/sigcontext.h deleted file mode 100644 index 32e0c94f98..0000000000 --- a/sysdeps/mach/hurd/alpha/sigcontext.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Machine-dependent signal context structure for GNU Hurd. Alpha version. -Copyright (C) 1994 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., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -/* Signal handlers are actually called: - void handler (int sig, int code, struct sigcontext *scp); */ - -/* State of this thread when the signal was taken. */ -struct sigcontext - { - /* These first members are machine-independent. */ - - long int sc_onstack; /* Nonzero if running on sigstack. */ - __sigset_t sc_mask; /* Blocked signals to restore. */ - - /* MiG reply port this thread is using. */ - unsigned long int sc_reply_port; - - /* Port this thread is doing an interruptible RPC on. */ - unsigned long int sc_intr_port; - - /* Error code associated with this signal (interpreted as `error_t'). */ - int sc_error; - - /* All following members are machine-dependent. The rest of this - structure is written to be laid out identically to: - { - struct alpha_thread_state basic; - struct alpha_exc_state exc; - struct alpha_float_state fpu; - } - trampoline.c knows this, so it must be changed if this changes. */ - -#define sc_alpha_thread_state sc_regs /* Beginning of correspondence. */ - long int sc_regs[31]; /* General registers $0..$30. */ - long int sc_pc; /* Program counter. */ - - /* struct alpha_exc_state */ -#define sc_alpha_exc_state sc_badvaddr - unsigned long int sc_badvaddr; - unsigned int sc_cause; /* Machine-level trap code. */ -#define SC_CAUSE_SET_SSTEP 1 - int sc_used_fpa; /* Nonzero if FPU was used. */ - - /* struct alpha_float_state - This is only filled in if sc_used_fpa is nonzero. */ -#define sc_alpha_float_state sc_fpregs - double sc_fpregs[31]; /* Floating point registers $f0..$f30. */ - long int sc_fpcsr; /* Floating point control/status register. */ - }; diff --git a/sysdeps/mach/hurd/bits/errno.h b/sysdeps/mach/hurd/bits/errno.h new file mode 100644 index 0000000000..beb35ecd9a --- /dev/null +++ b/sysdeps/mach/hurd/bits/errno.h @@ -0,0 +1,316 @@ +/* This file generated by errnos.awk. */ + +/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */ +#ifndef _HURD_ERRNO +#define _HURD_ERRNO(n) ((0x10 << 26) | ((n) & 0x3fff)) +#endif + +#ifdef _ERRNO_H + +enum __error_t_codes +{ +#undef EDOM +#undef ERANGE + EPERM = _HURD_ERRNO (1), +#define EPERM _HURD_ERRNO (1) /* Operation not permitted */ + ENOENT = _HURD_ERRNO (2), +#define ENOENT _HURD_ERRNO (2) /* No such file or directory */ + ESRCH = _HURD_ERRNO (3), +#define ESRCH _HURD_ERRNO (3) /* No such process */ + EINTR = _HURD_ERRNO (4), +#define EINTR _HURD_ERRNO (4) /* Interrupted system call */ + EIO = _HURD_ERRNO (5), +#define EIO _HURD_ERRNO (5) /* Input/output error */ + ENXIO = _HURD_ERRNO (6), +#define ENXIO _HURD_ERRNO (6) /* Device not configured */ + E2BIG = _HURD_ERRNO (7), +#define E2BIG _HURD_ERRNO (7) /* Argument list too long */ + ENOEXEC = _HURD_ERRNO (8), +#define ENOEXEC _HURD_ERRNO (8) /* Exec format error */ + EBADF = _HURD_ERRNO (9), +#define EBADF _HURD_ERRNO (9) /* Bad file descriptor */ + ECHILD = _HURD_ERRNO (10), +#define ECHILD _HURD_ERRNO (10)/* No child processes */ + EDEADLK = _HURD_ERRNO (11), +#define EDEADLK _HURD_ERRNO (11)/* Resource deadlock avoided */ + ENOMEM = _HURD_ERRNO (12), +#define ENOMEM _HURD_ERRNO (12)/* Cannot allocate memory */ + EACCES = _HURD_ERRNO (13), +#define EACCES _HURD_ERRNO (13)/* Permission denied */ + EFAULT = _HURD_ERRNO (14), +#define EFAULT _HURD_ERRNO (14)/* Bad address */ + ENOTBLK = _HURD_ERRNO (15), +#define ENOTBLK _HURD_ERRNO (15)/* Block device required */ + EBUSY = _HURD_ERRNO (16), +#define EBUSY _HURD_ERRNO (16)/* Device or resource busy */ + EEXIST = _HURD_ERRNO (17), +#define EEXIST _HURD_ERRNO (17)/* File exists */ + EXDEV = _HURD_ERRNO (18), +#define EXDEV _HURD_ERRNO (18)/* Invalid cross-device link */ + ENODEV = _HURD_ERRNO (19), +#define ENODEV _HURD_ERRNO (19)/* Operation not supported by device */ + ENOTDIR = _HURD_ERRNO (20), +#define ENOTDIR _HURD_ERRNO (20)/* Not a directory */ + EISDIR = _HURD_ERRNO (21), +#define EISDIR _HURD_ERRNO (21)/* Is a directory */ + EINVAL = _HURD_ERRNO (22), +#define EINVAL _HURD_ERRNO (22)/* Invalid argument */ + EMFILE = _HURD_ERRNO (24), +#define EMFILE _HURD_ERRNO (24)/* Too many open files */ + ENFILE = _HURD_ERRNO (23), +#define ENFILE _HURD_ERRNO (23)/* Too many open files in system */ + ENOTTY = _HURD_ERRNO (25), +#define ENOTTY _HURD_ERRNO (25)/* Inappropriate ioctl for device */ + ETXTBSY = _HURD_ERRNO (26), +#define ETXTBSY _HURD_ERRNO (26)/* Text file busy */ + EFBIG = _HURD_ERRNO (27), +#define EFBIG _HURD_ERRNO (27)/* File too large */ + ENOSPC = _HURD_ERRNO (28), +#define ENOSPC _HURD_ERRNO (28)/* No space left on device */ + ESPIPE = _HURD_ERRNO (29), +#define ESPIPE _HURD_ERRNO (29)/* Illegal seek */ + EROFS = _HURD_ERRNO (30), +#define EROFS _HURD_ERRNO (30)/* Read-only file system */ + EMLINK = _HURD_ERRNO (31), +#define EMLINK _HURD_ERRNO (31)/* Too many links */ + EPIPE = _HURD_ERRNO (32), +#define EPIPE _HURD_ERRNO (32)/* Broken pipe */ + EDOM = _HURD_ERRNO (33), +#define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */ + ERANGE = _HURD_ERRNO (34), +#define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */ + EAGAIN = _HURD_ERRNO (35), +#define EAGAIN _HURD_ERRNO (35)/* Resource temporarily unavailable */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ + EINPROGRESS = _HURD_ERRNO (36), +#define EINPROGRESS _HURD_ERRNO (36)/* Operation now in progress */ + EALREADY = _HURD_ERRNO (37), +#define EALREADY _HURD_ERRNO (37)/* Operation already in progress */ + ENOTSOCK = _HURD_ERRNO (38), +#define ENOTSOCK _HURD_ERRNO (38)/* Socket operation on non-socket */ + EMSGSIZE = _HURD_ERRNO (40), +#define EMSGSIZE _HURD_ERRNO (40)/* Message too long */ + EPROTOTYPE = _HURD_ERRNO (41), +#define EPROTOTYPE _HURD_ERRNO (41)/* Protocol wrong type for socket */ + ENOPROTOOPT = _HURD_ERRNO (42), +#define ENOPROTOOPT _HURD_ERRNO (42)/* Protocol not available */ + EPROTONOSUPPORT = _HURD_ERRNO (43), +#define EPROTONOSUPPORT _HURD_ERRNO (43)/* Protocol not supported */ + ESOCKTNOSUPPORT = _HURD_ERRNO (44), +#define ESOCKTNOSUPPORT _HURD_ERRNO (44)/* Socket type not supported */ + EOPNOTSUPP = _HURD_ERRNO (45), +#define EOPNOTSUPP _HURD_ERRNO (45)/* Operation not supported */ + EPFNOSUPPORT = _HURD_ERRNO (46), +#define EPFNOSUPPORT _HURD_ERRNO (46)/* Protocol family not supported */ + EAFNOSUPPORT = _HURD_ERRNO (47), +#define EAFNOSUPPORT _HURD_ERRNO (47)/* Address family not supported by protocol */ + EADDRINUSE = _HURD_ERRNO (48), +#define EADDRINUSE _HURD_ERRNO (48)/* Address already in use */ + EADDRNOTAVAIL = _HURD_ERRNO (49), +#define EADDRNOTAVAIL _HURD_ERRNO (49)/* Cannot assign requested address */ + ENETDOWN = _HURD_ERRNO (50), +#define ENETDOWN _HURD_ERRNO (50)/* Network is down */ + ENETUNREACH = _HURD_ERRNO (51), +#define ENETUNREACH _HURD_ERRNO (51)/* Network is unreachable */ + ENETRESET = _HURD_ERRNO (52), +#define ENETRESET _HURD_ERRNO (52)/* Network dropped connection on reset */ + ECONNABORTED = _HURD_ERRNO (53), +#define ECONNABORTED _HURD_ERRNO (53)/* Software caused connection abort */ + ECONNRESET = _HURD_ERRNO (54), +#define ECONNRESET _HURD_ERRNO (54)/* Connection reset by peer */ + ENOBUFS = _HURD_ERRNO (55), +#define ENOBUFS _HURD_ERRNO (55)/* No buffer space available */ + EISCONN = _HURD_ERRNO (56), +#define EISCONN _HURD_ERRNO (56)/* Transport endpoint is already connected */ + ENOTCONN = _HURD_ERRNO (57), +#define ENOTCONN _HURD_ERRNO (57)/* Transport endpoint is not connected */ + EDESTADDRREQ = _HURD_ERRNO (39), +#define EDESTADDRREQ _HURD_ERRNO (39)/* Destination address required */ + ESHUTDOWN = _HURD_ERRNO (58), +#define ESHUTDOWN _HURD_ERRNO (58)/* Cannot send after transport endpoint shutdown */ + ETOOMANYREFS = _HURD_ERRNO (59), +#define ETOOMANYREFS _HURD_ERRNO (59)/* Too many references: cannot splice */ + ETIMEDOUT = _HURD_ERRNO (60), +#define ETIMEDOUT _HURD_ERRNO (60)/* Connection timed out */ + ECONNREFUSED = _HURD_ERRNO (61), +#define ECONNREFUSED _HURD_ERRNO (61)/* Connection refused */ + ELOOP = _HURD_ERRNO (62), +#define ELOOP _HURD_ERRNO (62)/* Too many levels of symbolic links */ + ENAMETOOLONG = _HURD_ERRNO (63), +#define ENAMETOOLONG _HURD_ERRNO (63)/* File name too long */ + EHOSTDOWN = _HURD_ERRNO (64), +#define EHOSTDOWN _HURD_ERRNO (64)/* Host is down */ + EHOSTUNREACH = _HURD_ERRNO (65), +#define EHOSTUNREACH _HURD_ERRNO (65)/* No route to host */ + ENOTEMPTY = _HURD_ERRNO (66), +#define ENOTEMPTY _HURD_ERRNO (66)/* Directory not empty */ + EPROCLIM = _HURD_ERRNO (67), +#define EPROCLIM _HURD_ERRNO (67)/* Too many processes */ + EUSERS = _HURD_ERRNO (68), +#define EUSERS _HURD_ERRNO (68)/* Too many users */ + EDQUOT = _HURD_ERRNO (69), +#define EDQUOT _HURD_ERRNO (69)/* Disc quota exceeded */ + ESTALE = _HURD_ERRNO (70), +#define ESTALE _HURD_ERRNO (70)/* Stale NFS file handle */ + EREMOTE = _HURD_ERRNO (71), +#define EREMOTE _HURD_ERRNO (71)/* Object is remote */ + EBADRPC = _HURD_ERRNO (72), +#define EBADRPC _HURD_ERRNO (72)/* RPC struct is bad */ + ERPCMISMATCH = _HURD_ERRNO (73), +#define ERPCMISMATCH _HURD_ERRNO (73)/* RPC version wrong */ + EPROGUNAVAIL = _HURD_ERRNO (74), +#define EPROGUNAVAIL _HURD_ERRNO (74)/* RPC program not available */ + EPROGMISMATCH = _HURD_ERRNO (75), +#define EPROGMISMATCH _HURD_ERRNO (75)/* RPC program version wrong */ + EPROCUNAVAIL = _HURD_ERRNO (76), +#define EPROCUNAVAIL _HURD_ERRNO (76)/* RPC bad procedure for program */ + ENOLCK = _HURD_ERRNO (77), +#define ENOLCK _HURD_ERRNO (77)/* No locks available */ + EFTYPE = _HURD_ERRNO (79), +#define EFTYPE _HURD_ERRNO (79)/* Inappropriate file type or format */ + EAUTH = _HURD_ERRNO (80), +#define EAUTH _HURD_ERRNO (80)/* Authentication error */ + ENEEDAUTH = _HURD_ERRNO (81), +#define ENEEDAUTH _HURD_ERRNO (81)/* Need authenticator */ + ENOSYS = _HURD_ERRNO (78), +#define ENOSYS _HURD_ERRNO (78)/* Function not implemented */ + EILSEQ = _HURD_ERRNO (106), +#define EILSEQ _HURD_ERRNO (106)/* Invalid or incomplete multibyte or wide character */ + EBACKGROUND = _HURD_ERRNO (100), +#define EBACKGROUND _HURD_ERRNO (100)/* Inappropriate operation for background process */ + EDIED = _HURD_ERRNO (101), +#define EDIED _HURD_ERRNO (101)/* Translator died */ + ED = _HURD_ERRNO (102), +#define ED _HURD_ERRNO (102)/* ? */ + EGREGIOUS = _HURD_ERRNO (103), +#define EGREGIOUS _HURD_ERRNO (103)/* You really blew it this time */ + EIEIO = _HURD_ERRNO (104), +#define EIEIO _HURD_ERRNO (104)/* Computer bought the farm */ + EGRATUITOUS = _HURD_ERRNO (105), +#define EGRATUITOUS _HURD_ERRNO (105)/* Gratuitous error */ + EBADMSG = _HURD_ERRNO (107), +#define EBADMSG _HURD_ERRNO (107)/* Bad message */ + EIDRM = _HURD_ERRNO (108), +#define EIDRM _HURD_ERRNO (108)/* Identifier removed */ + EMULTIHOP = _HURD_ERRNO (109), +#define EMULTIHOP _HURD_ERRNO (109)/* Multihop attempted */ + ENODATA = _HURD_ERRNO (110), +#define ENODATA _HURD_ERRNO (110)/* No data available */ + ENOLINK = _HURD_ERRNO (111), +#define ENOLINK _HURD_ERRNO (111)/* Link has been severed */ + ENOMSG = _HURD_ERRNO (112), +#define ENOMSG _HURD_ERRNO (112)/* No message of desired type */ + ENOSR = _HURD_ERRNO (113), +#define ENOSR _HURD_ERRNO (113)/* Out of streams resources */ + ENOSTR = _HURD_ERRNO (114), +#define ENOSTR _HURD_ERRNO (114)/* Device not a stream */ + EOVERFLOW = _HURD_ERRNO (115), +#define EOVERFLOW _HURD_ERRNO (115)/* Value too large for defined data type */ + EPROTO = _HURD_ERRNO (116), +#define EPROTO _HURD_ERRNO (116)/* Protocol error */ + ETIME = _HURD_ERRNO (117), +#define ETIME _HURD_ERRNO (117)/* Timer expired */ + + /* Errors from . */ + EMACH_SEND_IN_PROGRESS = 0x10000001, + EMACH_SEND_INVALID_DATA = 0x10000002, + EMACH_SEND_INVALID_DEST = 0x10000003, + EMACH_SEND_TIMED_OUT = 0x10000004, + EMACH_SEND_WILL_NOTIFY = 0x10000005, + EMACH_SEND_NOTIFY_IN_PROGRESS = 0x10000006, + EMACH_SEND_INTERRUPTED = 0x10000007, + EMACH_SEND_MSG_TOO_SMALL = 0x10000008, + EMACH_SEND_INVALID_REPLY = 0x10000009, + EMACH_SEND_INVALID_RIGHT = 0x1000000a, + EMACH_SEND_INVALID_NOTIFY = 0x1000000b, + EMACH_SEND_INVALID_MEMORY = 0x1000000c, + EMACH_SEND_NO_BUFFER = 0x1000000d, + EMACH_SEND_NO_NOTIFY = 0x1000000e, + EMACH_SEND_INVALID_TYPE = 0x1000000f, + EMACH_SEND_INVALID_HEADER = 0x10000010, + EMACH_RCV_IN_PROGRESS = 0x10004001, + EMACH_RCV_INVALID_NAME = 0x10004002, + EMACH_RCV_TIMED_OUT = 0x10004003, + EMACH_RCV_TOO_LARGE = 0x10004004, + EMACH_RCV_INTERRUPTED = 0x10004005, + EMACH_RCV_PORT_CHANGED = 0x10004006, + EMACH_RCV_INVALID_NOTIFY = 0x10004007, + EMACH_RCV_INVALID_DATA = 0x10004008, + EMACH_RCV_PORT_DIED = 0x10004009, + EMACH_RCV_IN_SET = 0x1000400a, + EMACH_RCV_HEADER_ERROR = 0x1000400b, + EMACH_RCV_BODY_ERROR = 0x1000400c, + + /* Errors from . */ + EKERN_INVALID_ADDRESS = 1, + EKERN_PROTECTION_FAILURE = 2, + EKERN_NO_SPACE = 3, + EKERN_INVALID_ARGUMENT = 4, + EKERN_FAILURE = 5, + EKERN_RESOURCE_SHORTAGE = 6, + EKERN_NOT_RECEIVER = 7, + EKERN_NO_ACCESS = 8, + EKERN_MEMORY_FAILURE = 9, + EKERN_MEMORY_ERROR = 10, + EKERN_NOT_IN_SET = 12, + EKERN_NAME_EXISTS = 13, + EKERN_ABORTED = 14, + EKERN_INVALID_NAME = 15, + EKERN_INVALID_TASK = 16, + EKERN_INVALID_RIGHT = 17, + EKERN_INVALID_VALUE = 18, + EKERN_UREFS_OVERFLOW = 19, + EKERN_INVALID_CAPABILITY = 20, + EKERN_RIGHT_EXISTS = 21, + EKERN_INVALID_HOST = 22, + EKERN_MEMORY_PRESENT = 23, + EKERN_WRITE_PROTECTION_FAILURE = 24, + EKERN_TERMINATED = 26, + + /* Errors from . */ + EMIG_TYPE_ERROR = -300, /* client type check failure */ + EMIG_REPLY_MISMATCH = -301, /* wrong reply message ID */ + EMIG_REMOTE_ERROR = -302, /* server detected error */ + EMIG_BAD_ID = -303, /* bad request message ID */ + EMIG_BAD_ARGUMENTS = -304, /* server type check failure */ + EMIG_NO_REPLY = -305, /* no reply should be sent */ + EMIG_EXCEPTION = -306, /* server raised exception */ + EMIG_ARRAY_TOO_LARGE = -307, /* array not large enough */ + EMIG_SERVER_DIED = -308, /* server died */ + EMIG_DESTROY_REQUEST = -309, /* destroy request with no reply */ + + /* Errors from . */ + ED_IO_ERROR = 2500, /* hardware IO error */ + ED_WOULD_BLOCK = 2501, /* would block, but D_NOWAIT set */ + ED_NO_SUCH_DEVICE = 2502, /* no such device */ + ED_ALREADY_OPEN = 2503, /* exclusive-use device already open */ + ED_DEVICE_DOWN = 2504, /* device has been shut down */ + ED_INVALID_OPERATION = 2505, /* bad operation for device */ + ED_INVALID_RECNUM = 2506, /* invalid record (block) number */ + ED_INVALID_SIZE = 2507, /* invalid IO size */ + ED_NO_MEMORY = 2508, /* memory allocation failure */ + ED_READ_ONLY = 2509, /* device cannot be written to */ + +}; + +#define _HURD_ERRNOS 118 + +/* User-visible type of error codes. It is ok to use `int' or + `kern_return_t' for these, but with `error_t' the debugger prints + symbolic values. */ +#ifdef __USE_GNU +typedef enum __error_t_codes error_t; +#define __error_t_defined 1 +#endif + +/* errno is a per-thread variable. */ +#include +#define errno (*__hurd_errno_location ()) +#define __set_errno(val) errno = (val) + +#endif /* included. */ + +#if !defined (_ERRNO_H) && defined (__need_Emath) +#define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */ +#define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */ +#endif /* not included and need math error codes. */ diff --git a/sysdeps/mach/hurd/bits/fcntl.h b/sysdeps/mach/hurd/bits/fcntl.h new file mode 100644 index 0000000000..4983b338ae --- /dev/null +++ b/sysdeps/mach/hurd/bits/fcntl.h @@ -0,0 +1,175 @@ +/* O_*, F_*, FD_* bit values for GNU. + Copyright (C) 1993, 1994, 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 _FCNTL_H +#error "Never use directly; include instead." +#endif + +/* File access modes. These are understood by io servers; they can be + passed in `dir_lookup', and are returned by `io_get_openmodes'. + Consequently they can be passed to `open', `hurd_file_name_lookup', and + `file_name_lookup'; and are returned by `fcntl' with the F_GETFL + command. */ + +/* In GNU, read and write are bits (unlike BSD). */ +#ifdef __USE_GNU +#define O_READ O_RDONLY /* Open for reading. */ +#define O_WRITE O_WRONLY /* Open for writing. */ +#define O_EXEC 0x0004 /* Open for execution. */ +#define O_NORW 0 /* Open without R/W access. */ +#endif +/* POSIX.1 standard names. */ +#define O_RDONLY 0x0001 /* Open read-only. */ +#define O_WRONLY 0x0002 /* Open write-only. */ +#define O_RDWR (O_RDONLY|O_WRONLY) /* Open for reading and writing. */ +#define O_ACCMODE O_RDWR /* Mask for file access modes. */ + + + +/* File name translation flags. These are understood by io servers; + they can be passed in `dir_lookup', and consequently to `open', + `hurd_file_name_lookup', and `file_name_lookup'. */ + +#define O_CREAT 0x0010 /* Create file if it doesn't exist. */ +#define O_EXCL 0x0020 /* Fail if file already exists. */ +#ifdef __USE_GNU +#define O_NOLINK 0x0040 /* No name mappings on final component. */ +#define O_NOTRANS 0x0080 /* No translator on final component. */ +#endif + + +/* I/O operating modes. These are understood by io servers; they can be + passed in `dir_lookup' and set or fetched with `io_*_openmodes'. + Consequently they can be passed to `open', `hurd_file_name_lookup', + `file_name_lookup', and `fcntl' with the F_SETFL command; and are + returned by `fcntl' with the F_GETFL command. */ + +#define O_APPEND 0x0100 /* Writes always append to the file. */ +#ifdef __USE_BSD +#define O_ASYNC 0x0200 /* Send SIGIO to owner when data is ready. */ +#define O_FSYNC 0x0400 /* Synchronous writes. */ +#define O_SYNC O_FSYNC +#endif +#ifdef __USE_GNU +#define O_NOATIME 0x0800 /* Don't set access time on read (owner). */ +#endif +#ifdef __USE_MISC +#define O_SHLOCK 0x00020000 /* Open with shared file lock. */ +#define O_EXLOCK 0x00040000 /* Open with exclusive file lock. */ +#endif + + +/* The name O_NONBLOCK is unfortunately overloaded; it is both a file name + translation flag and an I/O operating mode. O_NDELAY is the deprecated + BSD name for the same flag, overloaded in the same way. + + When used in `dir_lookup' (and consequently `open', `hurd_file_name_lookup', + or `file_name_lookup'), O_NONBLOCK says the open should return immediately + instead of blocking for any significant length of time (e.g., to wait + for carrier detect on a serial line). It is also saved as an I/O + operating mode, and after open has the following meaning. + + When used in `io_*_openmodes' (and consequently `fcntl' with the F_SETFL + command), the O_NONBLOCK flag means to do nonblocking i/o: any i/o + operation that would block for any significant length of time will instead + fail with EAGAIN. */ + +#define O_NONBLOCK 0x0008 /* Non-blocking open or non-blocking I/O. */ +#ifdef __USE_BSD +#define O_NDELAY O_NONBLOCK /* Deprecated. */ +#endif + + +#ifdef __USE_GNU +/* Mask of bits which are understood by io servers. */ +#define O_HURD (0xffff | O_EXLOCK | O_SHLOCK) +#endif + + +/* Open-time action flags. These are understood by `hurd_file_name_lookup' + and consequently by `open' and `file_name_lookup'. They are not preserved + once the file has been opened. */ + +#define O_TRUNC 0x00010000 /* Truncate file to zero length. */ + + +/* Controlling terminal flags. These are understood only by `open', + and are not preserved once the file has been opened. */ + +#ifdef __USE_GNU +#define O_IGNORE_CTTY 0x00080000 /* Don't do any ctty magic at all. */ +#endif +/* `open' never assigns a controlling terminal in GNU. */ +#define O_NOCTTY 0 /* Don't assign a controlling terminal. */ + + +#ifdef __USE_BSD +/* Bits in the file status flags returned by F_GETFL. */ +#define FREAD O_RDONLY +#define FWRITE O_WRONLY + +/* Traditional BSD names the O_* bits. */ +#define FASYNC O_ASYNC +#define FCREAT O_CREAT +#define FEXCL O_EXCL +#define FTRUNC O_TRUNC +#define FNOCTTY O_NOCTTY +#define FFSYNC O_FSYNC +#define FSYNC O_SYNC +#define FAPPEND O_APPEND +#define FNONBLOCK O_NONBLOCK +#define FNDELAY O_NDELAY +#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. */ +#ifdef __USE_BSD +#define F_GETOWN 5 /* Get owner (receiver of SIGIO). */ +#define F_SETOWN 6 /* Set owner (receiver of SIGIO). */ +#endif +#define F_GETLK 7 /* Get record locking info. */ +#define F_SETLK 8 /* Set record locking info (non-blocking). */ +#define F_SETLKW 9 /* Set record locking info (blocking). */ + +/* File descriptor flags used with F_GETFD and F_SETFD. */ +#define FD_CLOEXEC 1 /* Close on exec. */ + + +#include + +/* The structure describing an advisory lock. This is the type of the third + argument to `fcntl' for the F_GETLK, F_SETLK, and F_SETLKW requests. */ +struct flock + { + int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + int l_whence; /* Where `l_start' is relative to (like `lseek'). */ + __off_t l_start; /* Offset where the lock begins. */ + __off_t l_len; /* Size of the locked area; zero means until EOF. */ + __pid_t l_pid; /* Process holding the lock. */ + }; + +/* Values for the `l_type' field of a `struct flock'. */ +#define F_RDLCK 1 /* Read lock. */ +#define F_WRLCK 2 /* Write lock. */ +#define F_UNLCK 3 /* Remove lock. */ diff --git a/sysdeps/mach/hurd/bits/ioctls.h b/sysdeps/mach/hurd/bits/ioctls.h new file mode 100644 index 0000000000..b04438bcca --- /dev/null +++ b/sysdeps/mach/hurd/bits/ioctls.h @@ -0,0 +1,353 @@ +/* Copyright (C) 1992, 1993, 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. */ + +/* + * Never include this file directly; use instead. + */ + +#ifndef _BITS_IOCTLS_H +#define _BITS_IOCTLS_H 1 + +/* These macros are also defined in (with numerically + identical values) but this serves to shut up cpp's complaining. */ +#ifdef MDMBUF +#undef MDMBUF +#endif +#ifdef ECHO +#undef ECHO +#endif +#ifdef TOSTOP +#undef TOSTOP +#endif +#ifdef FLUSHO +#undef FLUSHO +#endif +#ifdef PENDIN +#undef PENDIN +#endif +#ifdef NOFLSH +#undef NOFLSH +#endif + +/* Hurd ioctl request are made up of several fields: + + 10987654321098765432109876543210 + IOt0t1t2cc0c0cc1c1cc2ggggccccccc + + bits [31,30]: inout direction (enum __ioctl_dir) + bits [29,11]: type encoding as follows; zero count indicates omitted datum + [29,28]: datum #0 type (enum __ioctl_datum) + [27,26]: datum #1 type (enum __ioctl_datum) + [24,25]: datum #2 type (enum __ioctl_datum) + [23,19]: datum #0 count [0,31] + [18,14]: datum #1 count [0,31] + [13,11]: datum #2 count [0,3] + bits [07,10]: group (letter - 'f': ['f','v']) + bits [00,06]: command [0,127] + + The following macros construct and dissect these fields. */ + +enum __ioctl_dir + { + IOC_VOID = 0, /* No parameters. */ + IOC_OUT = 1, /* Data is written into the user's buffer. */ + IOC_IN = 2, /* Data is read from the user's buffer. */ + IOC_INOUT = (IOC_IN|IOC_OUT) + }; + +enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 }; + +/* Construct an ioctl from constructed type plus other fields. */ +#define _IOC(inout, group, num, type) \ + ((num) | ((((group) - 'f') | ((type) | (inout) << 19) << 4) << 7)) + +/* Dissect an ioctl into its component fields. */ +#define _IOC_INOUT(request) (((unsigned int) (request) >> 30) & IOC_INOUT) +#define _IOC_GROUP(request) ('f' + (((unsigned int) (request) >> 7) & 0xf)) +#define _IOC_COMMAND(request) ((unsigned int) (request) & 0x7f) +#define _IOC_TYPE(request) (((unsigned int) (request) >> 11) & 0x7ffff) +#define _IOC_NOTYPE(request) ((unsigned int) (request) & 0x3ff) + +/* Construct a type information field from + the broken-out type and count fields. */ +#define _IOT(t0, c0, t1, c1, t2, c2) \ + ((c2) | (((c1) | ((c0) | ((t2) | ((t1) | (t0) << 2) << 2) << 5) << 5) << 3)) + +/* Dissect a type information field into the type and count fields. */ +#define _IOT_TYPE0(type) (((unsigned int) (type) >> 17) & 3) +#define _IOT_TYPE1(type) (((unsigned int) (type) >> 15) & 3) +#define _IOT_TYPE2(type) (((unsigned int) (type) >> 13) & 3) +#define _IOT_COUNT0(type) (((unsigned int) (type) >> 8) & 0x1f) +#define _IOT_COUNT1(type) (((unsigned int) (type) >> 3) & 0x1f) +#define _IOT_COUNT2(type) (((unsigned int) (type) >> 0) & 7) + +/* Construct an ioctl from all the broken-out fields. */ +#define _IOCT(inout, group, num, t0, c0, t1, c1, t2, c2) \ + _IOC ((inout), (group), (num), _IOT ((t0), (c0), (t1), (c1), (t2), (c2))) + +/* Standard flavors of ioctls. + _IOT_foobar is defined either in this file, + or where struct foobar is defined. */ +#define _IO(g, n) _IOC (IOC_VOID, (g), (n), 0) +#define _IOR(g, n, t) _IOC (IOC_OUT, (g), (n), _IOT_##t) +#define _IOW(g, n, t) _IOC (IOC_IN, (g), (n), _IOT_##t) +#define _IOWR(g, n, t) _IOC (IOC_INOUT, (g), (n), _IOT_##t) + +/* Construct an individual type field for TYPE. */ +#define _IOTS(type) \ + (sizeof (type) == 8 ? IOC_64 : (sizeof (type) >> 1)) + +/* Construct a type information field for + a single argument of the scalar TYPE. */ +#define _IOT_SIMPLE(type) _IOT (_IOTS (type), 1, 0, 0, 0, 0) + +/* Basic C types. */ +#define _IOT_int _IOT_SIMPLE (int) +#define _IOT_char _IOT_SIMPLE (char) +#define _IOT_short _IOT_SIMPLE (short) + + +/* ioctls verbatim from 4.4 , with `struct' keywords removed. */ + +#define TIOCMODG _IOR('t', 3, int) /* get modem control state */ +#define TIOCMODS _IOW('t', 4, int) /* set modem control state */ +#define TIOCM_LE 0001 /* line enable */ +#define TIOCM_DTR 0002 /* data terminal ready */ +#define TIOCM_RTS 0004 /* request to send */ +#define TIOCM_ST 0010 /* secondary transmit */ +#define TIOCM_SR 0020 /* secondary receive */ +#define TIOCM_CTS 0040 /* clear to send */ +#define TIOCM_CAR 0100 /* carrier detect */ +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RNG 0200 /* ring */ +#define TIOCM_RI TIOCM_RNG +#define TIOCM_DSR 0400 /* data set ready */ + /* 8-10 compat */ +#define TIOCEXCL _IO('t', 13) /* set exclusive use of tty */ +#define TIOCNXCL _IO('t', 14) /* reset exclusive use of tty */ + /* 15 unused */ +#define TIOCFLUSH _IOW('t', 16, int) /* flush buffers */ + /* 17-18 compat */ +#define TIOCGETA _IOR('t', 19, termios) /* get termios struct */ +#define TIOCSETA _IOW('t', 20, termios) /* set termios struct */ +#define TIOCSETAW _IOW('t', 21, termios) /* drain output, set */ +#define TIOCSETAF _IOW('t', 22, termios) /* drn out, fls in, set */ +#define TIOCGETD _IOR('t', 26, int) /* get line discipline */ +#define TIOCSETD _IOW('t', 27, int) /* set line discipline */ + /* 127-124 compat */ +#define TIOCSBRK _IO('t', 123) /* set break bit */ +#define TIOCCBRK _IO('t', 122) /* clear break bit */ +#define TIOCSDTR _IO('t', 121) /* set data terminal ready */ +#define TIOCCDTR _IO('t', 120) /* clear data terminal ready */ +#define TIOCGPGRP _IOR('t', 119, int) /* get pgrp of tty */ +#define TIOCSPGRP _IOW('t', 118, int) /* set pgrp of tty */ + /* 117-116 compat */ +#define TIOCOUTQ _IOR('t', 115, int) /* output queue size */ +#define TIOCSTI _IOW('t', 114, char) /* simulate terminal input */ +#define TIOCNOTTY _IO('t', 113) /* void tty association */ +#define TIOCPKT _IOW('t', 112, int) /* pty: set/clear packet mode */ +#define TIOCPKT_DATA 0x00 /* data packet */ +#define TIOCPKT_FLUSHREAD 0x01 /* flush packet */ +#define TIOCPKT_FLUSHWRITE 0x02 /* flush packet */ +#define TIOCPKT_STOP 0x04 /* stop output */ +#define TIOCPKT_START 0x08 /* start output */ +#define TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */ +#define TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */ +#define TIOCPKT_IOCTL 0x40 /* state change of pty driver */ +#define TIOCSTOP _IO('t', 111) /* stop output, like ^S */ +#define TIOCSTART _IO('t', 110) /* start output, like ^Q */ +#define TIOCMSET _IOW('t', 109, int) /* set all modem bits */ +#define TIOCMBIS _IOW('t', 108, int) /* bis modem bits */ +#define TIOCMBIC _IOW('t', 107, int) /* bic modem bits */ +#define TIOCMGET _IOR('t', 106, int) /* get all modem bits */ +#define TIOCREMOTE _IOW('t', 105, int) /* remote input editing */ +#define TIOCGWINSZ _IOR('t', 104, winsize) /* get window size */ +#define TIOCSWINSZ _IOW('t', 103, winsize) /* set window size */ +#define TIOCUCNTL _IOW('t', 102, int) /* pty: set/clr usr cntl mode */ +#define UIOCCMD(n) _IO('u', n) /* usr cntl op "n" */ +#define TIOCCONS _IOW('t', 98, int) /* become virtual console */ +#define TIOCSCTTY _IO('t', 97) /* become controlling tty */ +#define TIOCEXT _IOW('t', 96, int) /* pty: external processing */ +#define TIOCSIG _IO('t', 95) /* pty: generate signal */ +#define TIOCDRAIN _IO('t', 94) /* wait till output drained */ + +#define TTYDISC 0 /* termios tty line discipline */ +#define TABLDISC 3 /* tablet discipline */ +#define SLIPDISC 4 /* serial IP discipline */ + + +#define FIOCLEX _IO('f', 1) /* set close on exec on fd */ +#define FIONCLEX _IO('f', 2) /* remove close on exec */ +#define FIONREAD _IOR('f', 127, int) /* get # bytes to read */ +#define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */ +#define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */ +#define FIOSETOWN _IOW('f', 124, int) /* set owner */ +#define FIOGETOWN _IOR('f', 123, int) /* get owner */ + +/* socket i/o controls */ +#define SIOCSHIWAT _IOW('s', 0, int) /* set high watermark */ +#define SIOCGHIWAT _IOR('s', 1, int) /* get high watermark */ +#define SIOCSLOWAT _IOW('s', 2, int) /* set low watermark */ +#define SIOCGLOWAT _IOR('s', 3, int) /* get low watermark */ +#define SIOCATMARK _IOR('s', 7, int) /* at oob mark? */ +#define SIOCSPGRP _IOW('s', 8, int) /* set process group */ +#define SIOCGPGRP _IOR('s', 9, int) /* get process group */ + +#define SIOCADDRT _IOW('r', 10, ortentry) /* add route */ +#define SIOCDELRT _IOW('r', 11, ortentry) /* delete route */ + +#define SIOCSIFADDR _IOW('i', 12, ifreq) /* set ifnet address */ +#define OSIOCGIFADDR _IOWR('i',13, ifreq) /* get ifnet address */ +#define SIOCGIFADDR _IOWR('i',33, ifreq) /* get ifnet address */ +#define SIOCSIFDSTADDR _IOW('i', 14, ifreq) /* set p-p address */ +#define OSIOCGIFDSTADDR _IOWR('i',15, ifreq) /* get p-p address */ +#define SIOCGIFDSTADDR _IOWR('i',34, ifreq) /* get p-p address */ +#define SIOCSIFFLAGS _IOW('i', 16, ifreq) /* set ifnet flags */ +#define SIOCGIFFLAGS _IOWR('i',17, ifreq) /* get ifnet flags */ +#define OSIOCGIFBRDADDR _IOWR('i',18, ifreq) /* get broadcast addr */ +#define SIOCGIFBRDADDR _IOWR('i',35, ifreq) /* get broadcast addr */ +#define SIOCSIFBRDADDR _IOW('i',19, ifreq) /* set broadcast addr */ +#define OSIOCGIFCONF _IOWR('i',20, ifconf) /* get ifnet list */ +#define SIOCGIFCONF _IOWR('i',36, ifconf) /* get ifnet list */ +#define OSIOCGIFNETMASK _IOWR('i',21, ifreq) /* get net addr mask */ +#define SIOCGIFNETMASK _IOWR('i',37, ifreq) /* get net addr mask */ +#define SIOCSIFNETMASK _IOW('i',22, ifreq) /* set net addr mask */ +#define SIOCGIFMETRIC _IOWR('i',23, ifreq) /* get IF metric */ +#define SIOCSIFMETRIC _IOW('i',24, ifreq) /* set IF metric */ +#define SIOCDIFADDR _IOW('i',25, ifreq) /* delete IF addr */ +#define SIOCAIFADDR _IOW('i',26, ifaliasreq) /* add/chg IF alias */ + +#define SIOCSARP _IOW('i', 30, arpreq) /* set arp entry */ +#define OSIOCGARP _IOWR('i',31, arpreq) /* get arp entry */ +#define SIOCGARP _IOWR('i',38, arpreq) /* get arp entry */ +#define SIOCDARP _IOW('i', 32, arpreq) /* delete arp entry */ + + +/* Compatibility with 4.3 BSD terminal driver. + From 4.4 . */ + +#ifdef USE_OLD_TTY +# undef TIOCGETD +# define TIOCGETD _IOR('t', 0, int) /* get line discipline */ +# undef TIOCSETD +# define TIOCSETD _IOW('t', 1, int) /* set line discipline */ +#else +# define OTIOCGETD _IOR('t', 0, int) /* get line discipline */ +# define OTIOCSETD _IOW('t', 1, int) /* set line discipline */ +#endif +#define TIOCHPCL _IO('t', 2) /* hang up on last close */ +#define TIOCGETP _IOR('t', 8,sgttyb)/* get parameters -- gtty */ +#define TIOCSETP _IOW('t', 9,sgttyb)/* set parameters -- stty */ +#define TIOCSETN _IOW('t',10,sgttyb)/* as above, but no flushtty*/ +#define TIOCSETC _IOW('t',17,tchars)/* set special characters */ +#define TIOCGETC _IOR('t',18,tchars)/* get special characters */ +#define TANDEM 0x00000001 /* send stopc on out q full */ +#define CBREAK 0x00000002 /* half-cooked mode */ +#define LCASE 0x00000004 /* simulate lower case */ +#define ECHO 0x00000008 /* echo input */ +#define CRMOD 0x00000010 /* map \r to \r\n on output */ +#define RAW 0x00000020 /* no i/o processing */ +#define ODDP 0x00000040 /* get/send odd parity */ +#define EVENP 0x00000080 /* get/send even parity */ +#define ANYP 0x000000c0 /* get any parity/send none */ +#define NLDELAY 0x00000300 /* \n delay */ +#define NL0 0x00000000 +#define NL1 0x00000100 /* tty 37 */ +#define NL2 0x00000200 /* vt05 */ +#define NL3 0x00000300 +#define TBDELAY 0x00000c00 /* horizontal tab delay */ +#define TAB0 0x00000000 +#define TAB1 0x00000400 /* tty 37 */ +#define TAB2 0x00000800 +#define XTABS 0x00000c00 /* expand tabs on output */ +#define CRDELAY 0x00003000 /* \r delay */ +#define CR0 0x00000000 +#define CR1 0x00001000 /* tn 300 */ +#define CR2 0x00002000 /* tty 37 */ +#define CR3 0x00003000 /* concept 100 */ +#define VTDELAY 0x00004000 /* vertical tab delay */ +#define FF0 0x00000000 +#define FF1 0x00004000 /* tty 37 */ +#define BSDELAY 0x00008000 /* \b delay */ +#define BS0 0x00000000 +#define BS1 0x00008000 +#define ALLDELAY (NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY) +#define CRTBS 0x00010000 /* do backspacing for crt */ +#define PRTERA 0x00020000 /* \ ... / erase */ +#define CRTERA 0x00040000 /* " \b " to wipe out char */ +#define TILDE 0x00080000 /* hazeltine tilde kludge */ +#define MDMBUF 0x00100000 /*start/stop output on carrier*/ +#define LITOUT 0x00200000 /* literal output */ +#define TOSTOP 0x00400000 /*SIGSTOP on background output*/ +#define FLUSHO 0x00800000 /* flush output to terminal */ +#define NOHANG 0x01000000 /* (no-op) was no SIGHUP on carrier drop */ +#define L001000 0x02000000 +#define CRTKIL 0x04000000 /* kill line with " \b " */ +#define PASS8 0x08000000 +#define CTLECH 0x10000000 /* echo control chars as ^X */ +#define PENDIN 0x20000000 /* tp->t_rawq needs reread */ +#define DECCTQ 0x40000000 /* only ^Q starts after ^S */ +#define NOFLSH 0x80000000 /* no output flush on signal */ +#define TIOCLBIS _IOW('t', 127, int) /* bis local mode bits */ +#define TIOCLBIC _IOW('t', 126, int) /* bic local mode bits */ +#define TIOCLSET _IOW('t', 125, int) /* set entire local mode word */ +#define TIOCLGET _IOR('t', 124, int) /* get local modes */ +#define LCRTBS (CRTBS>>16) +#define LPRTERA (PRTERA>>16) +#define LCRTERA (CRTERA>>16) +#define LTILDE (TILDE>>16) +#define LMDMBUF (MDMBUF>>16) +#define LLITOUT (LITOUT>>16) +#define LTOSTOP (TOSTOP>>16) +#define LFLUSHO (FLUSHO>>16) +#define LNOHANG (NOHANG>>16) +#define LCRTKIL (CRTKIL>>16) +#define LPASS8 (PASS8>>16) +#define LCTLECH (CTLECH>>16) +#define LPENDIN (PENDIN>>16) +#define LDECCTQ (DECCTQ>>16) +#define LNOFLSH (NOFLSH>>16) +#define TIOCSLTC _IOW('t',117,ltchars)/* set local special chars*/ +#define TIOCGLTC _IOR('t',116,ltchars)/* get local special chars*/ +#define OTIOCCONS _IO('t', 98) /* for hp300 -- sans int arg */ +#define OTTYDISC 0 +#define NETLDISC 1 +#define NTTYDISC 2 + +/* From 4.4 . */ +#ifdef USE_OLD_TTY +#define B0 0 +#define B50 1 +#define B75 2 +#define B110 3 +#define B134 4 +#define B150 5 +#define B200 6 +#define B300 7 +#define B600 8 +#define B1200 9 +#define B1800 10 +#define B2400 11 +#define B4800 12 +#define B9600 13 +#define EXTA 14 +#define EXTB 15 +#endif /* USE_OLD_TTY */ + + +#endif /* bits/ioctls.h */ diff --git a/sysdeps/mach/hurd/bits/local_lim.h b/sysdeps/mach/hurd/bits/local_lim.h new file mode 100644 index 0000000000..e26aa248cb --- /dev/null +++ b/sysdeps/mach/hurd/bits/local_lim.h @@ -0,0 +1,39 @@ +/* Minimum guaranteed maximum values for system limits. Hurd version. + Copyright (C) 1993, 1994, 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. */ + +/* GNU has no arbitrary fixed limits on these things, so we don't + define the macros. Some things are unlimited. Some are in fact + limited but the limit is run-time dependent and fetched with + `sysconf' or `pathconf'. + + POSIX.1 requires that we define NGROUPS_MAX (though none of the others + is required). GNU allows any number of supplementary groups, + dynamically allocated. So we pick a number which seems vaguely + suitable, and `sysconf' will return a number at least as large. */ + +#define NGROUPS_MAX 256 + +/* The maximum number of symbolic links that are allowed in a single file + name resolution. When a further link is encountered, the call returns + ELOOP. This name is a GNU extension; POSIX.1 has no such limit, and BSD + calls it MAXSYMLINKS in . */ + +#ifdef __USE_GNU /* 1003.1a defines this */ +#define SYMLOOP_MAX 8 +#endif diff --git a/sysdeps/mach/hurd/bits/posix_opt.h b/sysdeps/mach/hurd/bits/posix_opt.h new file mode 100644 index 0000000000..045b4b6666 --- /dev/null +++ b/sysdeps/mach/hurd/bits/posix_opt.h @@ -0,0 +1,21 @@ +/* Posix options supported by the GNU Hurd port of GNU libc. */ + +#define _POSIX_JOB_CONTROL 1 +#define _POSIX_SAVED_IDS 1 +#define _POSIX_VDISABLE ((unsigned char) -1) + +/* Different Hurd filesystems might do these differently. */ +#undef _POSIX_CHOWN_RESTRICTED +#undef _POSIX_NO_TRUNC +/* Posix options supported by the GNU Hurd port of GNU libc. */ + +#define _POSIX_JOB_CONTROL 1 +#define _POSIX_SAVED_IDS 1 +#define _POSIX_VDISABLE ((unsigned char) -1) + +/* Different Hurd filesystems might do these differently. */ +#undef _POSIX_CHOWN_RESTRICTED +#undef _POSIX_NO_TRUNC + + + diff --git a/sysdeps/mach/hurd/bits/stat.h b/sysdeps/mach/hurd/bits/stat.h new file mode 100644 index 0000000000..2110a73aae --- /dev/null +++ b/sysdeps/mach/hurd/bits/stat.h @@ -0,0 +1,136 @@ +/* Copyright (C) 1992, 1993, 1994, 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. */ + +/* + * Never include this file directly; use instead. + */ + +#ifndef _BITS_STAT_H +#define _BITS_STAT_H 1 + +#include + +/* NOTE: The size of this structure (32 ints) is known in + , since it is used in the `io_stat' RPC. MiG + does not cope at all well with the passed C structure not being of + the expected size. There are some filler words at the end to allow + for future expansion. To increase the size of the structure used + in the RPC and retain binary compatibility, we would need to assign + a new message number. */ + +struct stat + { + int st_fstype; /* File system type. */ + __fsid_t st_fsid; /* File system ID. */ +#define st_dev st_fsid + + __ino_t st_ino; /* File number. */ + unsigned int st_gen; /* To detect reuse of file numbers. */ + __dev_t st_rdev; /* Device if special file. */ + __mode_t st_mode; /* File mode. */ + __nlink_t st_nlink; /* Number of links. */ + + __uid_t st_uid; /* Owner. */ + __gid_t st_gid; /* Owning group. */ + + __off_t st_size; /* Size in bytes. */ + + __time_t st_atime; /* Access time, seconds */ + unsigned long int st_atime_usec; /* and microseconds. */ + __time_t st_mtime; /* Modification time, seconds */ + unsigned long int st_mtime_usec; /* and microseconds. */ + __time_t st_ctime; /* Status change time, seconds */ + unsigned long int st_ctime_usec; /* and microseconds. */ + + unsigned int st_blksize; /* Optimal size for I/O. */ + +#define _STATBUF_ST_BLKSIZE /* Tell code we have this member. */ + + unsigned int st_blocks; /* Number of 512-byte blocks allocated. + Not related to `st_blksize'. */ + + __uid_t st_author; /* File author. */ + + unsigned int st_flags; /* User-defined flags. + High 16 bits can be set only by root. */ + +#define _SPARE_SIZE ((sizeof (__fsid_t) == sizeof (int)) ? 12 : 11) + int st_spare[_SPARE_SIZE]; /* Room for future expansion. */ +#undef _SPARE_SIZE + }; + +/* Encoding of the file mode. */ + +#define __S_IFMT 0170000 /* These bits determine file type. */ + +/* File types. */ +#define __S_IFDIR 0040000 /* Directory. */ +#define __S_IFCHR 0020000 /* Character device. */ +#define __S_IFBLK 0060000 /* Block device. */ +#define __S_IFREG 0100000 /* Regular file. */ +#define __S_IFLNK 0120000 /* Symbolic link. */ +#define __S_IFSOCK 0140000 /* Socket. */ +#define __S_IFIFO 0010000 /* FIFO. */ + +/* Protection bits. */ + +#define __S_ISUID 04000 /* Set user ID on execution. */ +#define __S_ISGID 02000 /* Set group ID on execution. */ +#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ +#define __S_IREAD 00400 /* Read by owner. */ +#define __S_IWRITE 00200 /* Write by owner. */ +#define __S_IEXEC 00100 /* Execute by owner. */ + + +#ifdef __USE_GNU +/* If set, there is no benefit in caching the contents of this file. */ +#define S_INOCACHE 000000200000 + +/* If the S_IUSEUNK bit is set, then the S_IUNKNOWN bits (see below) + control access for unknown users. If S_IUSEUNK is clear, then unknown + users are treated as "others" for purposes of access control. */ +#define S_IUSEUNK 000000400000 +/* Mask of protection bits for unknown users (no effective IDs at all). */ +#define S_IUNKNOWN 000007000000 +/* Shift S_IREAD, S_IWRITE, S_IEXEC left this many bits to produce the + protection bits for unknown users. */ +#define S_IUNKSHIFT 12 + +/* Read only bits: */ + +/* There is a passive translator set for this file */ +#define S_IPTRANS 000010000000 +/* There is an active translator running on this file */ +#define S_IATRANS 000020000000 +/* This is the root of a filesystem (or single node translator) */ +#define S_IROOT 000040000000 +/* All the bits relevant to translators */ +#define S_ITRANS 000070000000 + +/* ALL the unused bits. */ +#define S_ISPARE (~(S_IFMT|S_ITRANS|S_INOCACHE| \ + S_IUSEUNK|S_IUNKNOWN|07777)) +#endif + +/* Default file creation mask (umask). */ +#ifdef __USE_BSD +#define CMASK 0022 +#endif + + +#endif /* bits/stat.h */ diff --git a/sysdeps/mach/hurd/dirstream.h b/sysdeps/mach/hurd/dirstream.h index c13383dbd9..9eeb7d9a9e 100644 --- a/sysdeps/mach/hurd/dirstream.h +++ b/sysdeps/mach/hurd/dirstream.h @@ -20,7 +20,7 @@ Cambridge, MA 02139, USA. */ #define _DIRSTREAM_H 1 -#include +#include /* Directory stream type. diff --git a/sysdeps/mach/hurd/errnos.h b/sysdeps/mach/hurd/errnos.h deleted file mode 100644 index beb35ecd9a..0000000000 --- a/sysdeps/mach/hurd/errnos.h +++ /dev/null @@ -1,316 +0,0 @@ -/* This file generated by errnos.awk. */ - -/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */ -#ifndef _HURD_ERRNO -#define _HURD_ERRNO(n) ((0x10 << 26) | ((n) & 0x3fff)) -#endif - -#ifdef _ERRNO_H - -enum __error_t_codes -{ -#undef EDOM -#undef ERANGE - EPERM = _HURD_ERRNO (1), -#define EPERM _HURD_ERRNO (1) /* Operation not permitted */ - ENOENT = _HURD_ERRNO (2), -#define ENOENT _HURD_ERRNO (2) /* No such file or directory */ - ESRCH = _HURD_ERRNO (3), -#define ESRCH _HURD_ERRNO (3) /* No such process */ - EINTR = _HURD_ERRNO (4), -#define EINTR _HURD_ERRNO (4) /* Interrupted system call */ - EIO = _HURD_ERRNO (5), -#define EIO _HURD_ERRNO (5) /* Input/output error */ - ENXIO = _HURD_ERRNO (6), -#define ENXIO _HURD_ERRNO (6) /* Device not configured */ - E2BIG = _HURD_ERRNO (7), -#define E2BIG _HURD_ERRNO (7) /* Argument list too long */ - ENOEXEC = _HURD_ERRNO (8), -#define ENOEXEC _HURD_ERRNO (8) /* Exec format error */ - EBADF = _HURD_ERRNO (9), -#define EBADF _HURD_ERRNO (9) /* Bad file descriptor */ - ECHILD = _HURD_ERRNO (10), -#define ECHILD _HURD_ERRNO (10)/* No child processes */ - EDEADLK = _HURD_ERRNO (11), -#define EDEADLK _HURD_ERRNO (11)/* Resource deadlock avoided */ - ENOMEM = _HURD_ERRNO (12), -#define ENOMEM _HURD_ERRNO (12)/* Cannot allocate memory */ - EACCES = _HURD_ERRNO (13), -#define EACCES _HURD_ERRNO (13)/* Permission denied */ - EFAULT = _HURD_ERRNO (14), -#define EFAULT _HURD_ERRNO (14)/* Bad address */ - ENOTBLK = _HURD_ERRNO (15), -#define ENOTBLK _HURD_ERRNO (15)/* Block device required */ - EBUSY = _HURD_ERRNO (16), -#define EBUSY _HURD_ERRNO (16)/* Device or resource busy */ - EEXIST = _HURD_ERRNO (17), -#define EEXIST _HURD_ERRNO (17)/* File exists */ - EXDEV = _HURD_ERRNO (18), -#define EXDEV _HURD_ERRNO (18)/* Invalid cross-device link */ - ENODEV = _HURD_ERRNO (19), -#define ENODEV _HURD_ERRNO (19)/* Operation not supported by device */ - ENOTDIR = _HURD_ERRNO (20), -#define ENOTDIR _HURD_ERRNO (20)/* Not a directory */ - EISDIR = _HURD_ERRNO (21), -#define EISDIR _HURD_ERRNO (21)/* Is a directory */ - EINVAL = _HURD_ERRNO (22), -#define EINVAL _HURD_ERRNO (22)/* Invalid argument */ - EMFILE = _HURD_ERRNO (24), -#define EMFILE _HURD_ERRNO (24)/* Too many open files */ - ENFILE = _HURD_ERRNO (23), -#define ENFILE _HURD_ERRNO (23)/* Too many open files in system */ - ENOTTY = _HURD_ERRNO (25), -#define ENOTTY _HURD_ERRNO (25)/* Inappropriate ioctl for device */ - ETXTBSY = _HURD_ERRNO (26), -#define ETXTBSY _HURD_ERRNO (26)/* Text file busy */ - EFBIG = _HURD_ERRNO (27), -#define EFBIG _HURD_ERRNO (27)/* File too large */ - ENOSPC = _HURD_ERRNO (28), -#define ENOSPC _HURD_ERRNO (28)/* No space left on device */ - ESPIPE = _HURD_ERRNO (29), -#define ESPIPE _HURD_ERRNO (29)/* Illegal seek */ - EROFS = _HURD_ERRNO (30), -#define EROFS _HURD_ERRNO (30)/* Read-only file system */ - EMLINK = _HURD_ERRNO (31), -#define EMLINK _HURD_ERRNO (31)/* Too many links */ - EPIPE = _HURD_ERRNO (32), -#define EPIPE _HURD_ERRNO (32)/* Broken pipe */ - EDOM = _HURD_ERRNO (33), -#define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */ - ERANGE = _HURD_ERRNO (34), -#define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */ - EAGAIN = _HURD_ERRNO (35), -#define EAGAIN _HURD_ERRNO (35)/* Resource temporarily unavailable */ -#define EWOULDBLOCK EAGAIN /* Operation would block */ - EINPROGRESS = _HURD_ERRNO (36), -#define EINPROGRESS _HURD_ERRNO (36)/* Operation now in progress */ - EALREADY = _HURD_ERRNO (37), -#define EALREADY _HURD_ERRNO (37)/* Operation already in progress */ - ENOTSOCK = _HURD_ERRNO (38), -#define ENOTSOCK _HURD_ERRNO (38)/* Socket operation on non-socket */ - EMSGSIZE = _HURD_ERRNO (40), -#define EMSGSIZE _HURD_ERRNO (40)/* Message too long */ - EPROTOTYPE = _HURD_ERRNO (41), -#define EPROTOTYPE _HURD_ERRNO (41)/* Protocol wrong type for socket */ - ENOPROTOOPT = _HURD_ERRNO (42), -#define ENOPROTOOPT _HURD_ERRNO (42)/* Protocol not available */ - EPROTONOSUPPORT = _HURD_ERRNO (43), -#define EPROTONOSUPPORT _HURD_ERRNO (43)/* Protocol not supported */ - ESOCKTNOSUPPORT = _HURD_ERRNO (44), -#define ESOCKTNOSUPPORT _HURD_ERRNO (44)/* Socket type not supported */ - EOPNOTSUPP = _HURD_ERRNO (45), -#define EOPNOTSUPP _HURD_ERRNO (45)/* Operation not supported */ - EPFNOSUPPORT = _HURD_ERRNO (46), -#define EPFNOSUPPORT _HURD_ERRNO (46)/* Protocol family not supported */ - EAFNOSUPPORT = _HURD_ERRNO (47), -#define EAFNOSUPPORT _HURD_ERRNO (47)/* Address family not supported by protocol */ - EADDRINUSE = _HURD_ERRNO (48), -#define EADDRINUSE _HURD_ERRNO (48)/* Address already in use */ - EADDRNOTAVAIL = _HURD_ERRNO (49), -#define EADDRNOTAVAIL _HURD_ERRNO (49)/* Cannot assign requested address */ - ENETDOWN = _HURD_ERRNO (50), -#define ENETDOWN _HURD_ERRNO (50)/* Network is down */ - ENETUNREACH = _HURD_ERRNO (51), -#define ENETUNREACH _HURD_ERRNO (51)/* Network is unreachable */ - ENETRESET = _HURD_ERRNO (52), -#define ENETRESET _HURD_ERRNO (52)/* Network dropped connection on reset */ - ECONNABORTED = _HURD_ERRNO (53), -#define ECONNABORTED _HURD_ERRNO (53)/* Software caused connection abort */ - ECONNRESET = _HURD_ERRNO (54), -#define ECONNRESET _HURD_ERRNO (54)/* Connection reset by peer */ - ENOBUFS = _HURD_ERRNO (55), -#define ENOBUFS _HURD_ERRNO (55)/* No buffer space available */ - EISCONN = _HURD_ERRNO (56), -#define EISCONN _HURD_ERRNO (56)/* Transport endpoint is already connected */ - ENOTCONN = _HURD_ERRNO (57), -#define ENOTCONN _HURD_ERRNO (57)/* Transport endpoint is not connected */ - EDESTADDRREQ = _HURD_ERRNO (39), -#define EDESTADDRREQ _HURD_ERRNO (39)/* Destination address required */ - ESHUTDOWN = _HURD_ERRNO (58), -#define ESHUTDOWN _HURD_ERRNO (58)/* Cannot send after transport endpoint shutdown */ - ETOOMANYREFS = _HURD_ERRNO (59), -#define ETOOMANYREFS _HURD_ERRNO (59)/* Too many references: cannot splice */ - ETIMEDOUT = _HURD_ERRNO (60), -#define ETIMEDOUT _HURD_ERRNO (60)/* Connection timed out */ - ECONNREFUSED = _HURD_ERRNO (61), -#define ECONNREFUSED _HURD_ERRNO (61)/* Connection refused */ - ELOOP = _HURD_ERRNO (62), -#define ELOOP _HURD_ERRNO (62)/* Too many levels of symbolic links */ - ENAMETOOLONG = _HURD_ERRNO (63), -#define ENAMETOOLONG _HURD_ERRNO (63)/* File name too long */ - EHOSTDOWN = _HURD_ERRNO (64), -#define EHOSTDOWN _HURD_ERRNO (64)/* Host is down */ - EHOSTUNREACH = _HURD_ERRNO (65), -#define EHOSTUNREACH _HURD_ERRNO (65)/* No route to host */ - ENOTEMPTY = _HURD_ERRNO (66), -#define ENOTEMPTY _HURD_ERRNO (66)/* Directory not empty */ - EPROCLIM = _HURD_ERRNO (67), -#define EPROCLIM _HURD_ERRNO (67)/* Too many processes */ - EUSERS = _HURD_ERRNO (68), -#define EUSERS _HURD_ERRNO (68)/* Too many users */ - EDQUOT = _HURD_ERRNO (69), -#define EDQUOT _HURD_ERRNO (69)/* Disc quota exceeded */ - ESTALE = _HURD_ERRNO (70), -#define ESTALE _HURD_ERRNO (70)/* Stale NFS file handle */ - EREMOTE = _HURD_ERRNO (71), -#define EREMOTE _HURD_ERRNO (71)/* Object is remote */ - EBADRPC = _HURD_ERRNO (72), -#define EBADRPC _HURD_ERRNO (72)/* RPC struct is bad */ - ERPCMISMATCH = _HURD_ERRNO (73), -#define ERPCMISMATCH _HURD_ERRNO (73)/* RPC version wrong */ - EPROGUNAVAIL = _HURD_ERRNO (74), -#define EPROGUNAVAIL _HURD_ERRNO (74)/* RPC program not available */ - EPROGMISMATCH = _HURD_ERRNO (75), -#define EPROGMISMATCH _HURD_ERRNO (75)/* RPC program version wrong */ - EPROCUNAVAIL = _HURD_ERRNO (76), -#define EPROCUNAVAIL _HURD_ERRNO (76)/* RPC bad procedure for program */ - ENOLCK = _HURD_ERRNO (77), -#define ENOLCK _HURD_ERRNO (77)/* No locks available */ - EFTYPE = _HURD_ERRNO (79), -#define EFTYPE _HURD_ERRNO (79)/* Inappropriate file type or format */ - EAUTH = _HURD_ERRNO (80), -#define EAUTH _HURD_ERRNO (80)/* Authentication error */ - ENEEDAUTH = _HURD_ERRNO (81), -#define ENEEDAUTH _HURD_ERRNO (81)/* Need authenticator */ - ENOSYS = _HURD_ERRNO (78), -#define ENOSYS _HURD_ERRNO (78)/* Function not implemented */ - EILSEQ = _HURD_ERRNO (106), -#define EILSEQ _HURD_ERRNO (106)/* Invalid or incomplete multibyte or wide character */ - EBACKGROUND = _HURD_ERRNO (100), -#define EBACKGROUND _HURD_ERRNO (100)/* Inappropriate operation for background process */ - EDIED = _HURD_ERRNO (101), -#define EDIED _HURD_ERRNO (101)/* Translator died */ - ED = _HURD_ERRNO (102), -#define ED _HURD_ERRNO (102)/* ? */ - EGREGIOUS = _HURD_ERRNO (103), -#define EGREGIOUS _HURD_ERRNO (103)/* You really blew it this time */ - EIEIO = _HURD_ERRNO (104), -#define EIEIO _HURD_ERRNO (104)/* Computer bought the farm */ - EGRATUITOUS = _HURD_ERRNO (105), -#define EGRATUITOUS _HURD_ERRNO (105)/* Gratuitous error */ - EBADMSG = _HURD_ERRNO (107), -#define EBADMSG _HURD_ERRNO (107)/* Bad message */ - EIDRM = _HURD_ERRNO (108), -#define EIDRM _HURD_ERRNO (108)/* Identifier removed */ - EMULTIHOP = _HURD_ERRNO (109), -#define EMULTIHOP _HURD_ERRNO (109)/* Multihop attempted */ - ENODATA = _HURD_ERRNO (110), -#define ENODATA _HURD_ERRNO (110)/* No data available */ - ENOLINK = _HURD_ERRNO (111), -#define ENOLINK _HURD_ERRNO (111)/* Link has been severed */ - ENOMSG = _HURD_ERRNO (112), -#define ENOMSG _HURD_ERRNO (112)/* No message of desired type */ - ENOSR = _HURD_ERRNO (113), -#define ENOSR _HURD_ERRNO (113)/* Out of streams resources */ - ENOSTR = _HURD_ERRNO (114), -#define ENOSTR _HURD_ERRNO (114)/* Device not a stream */ - EOVERFLOW = _HURD_ERRNO (115), -#define EOVERFLOW _HURD_ERRNO (115)/* Value too large for defined data type */ - EPROTO = _HURD_ERRNO (116), -#define EPROTO _HURD_ERRNO (116)/* Protocol error */ - ETIME = _HURD_ERRNO (117), -#define ETIME _HURD_ERRNO (117)/* Timer expired */ - - /* Errors from . */ - EMACH_SEND_IN_PROGRESS = 0x10000001, - EMACH_SEND_INVALID_DATA = 0x10000002, - EMACH_SEND_INVALID_DEST = 0x10000003, - EMACH_SEND_TIMED_OUT = 0x10000004, - EMACH_SEND_WILL_NOTIFY = 0x10000005, - EMACH_SEND_NOTIFY_IN_PROGRESS = 0x10000006, - EMACH_SEND_INTERRUPTED = 0x10000007, - EMACH_SEND_MSG_TOO_SMALL = 0x10000008, - EMACH_SEND_INVALID_REPLY = 0x10000009, - EMACH_SEND_INVALID_RIGHT = 0x1000000a, - EMACH_SEND_INVALID_NOTIFY = 0x1000000b, - EMACH_SEND_INVALID_MEMORY = 0x1000000c, - EMACH_SEND_NO_BUFFER = 0x1000000d, - EMACH_SEND_NO_NOTIFY = 0x1000000e, - EMACH_SEND_INVALID_TYPE = 0x1000000f, - EMACH_SEND_INVALID_HEADER = 0x10000010, - EMACH_RCV_IN_PROGRESS = 0x10004001, - EMACH_RCV_INVALID_NAME = 0x10004002, - EMACH_RCV_TIMED_OUT = 0x10004003, - EMACH_RCV_TOO_LARGE = 0x10004004, - EMACH_RCV_INTERRUPTED = 0x10004005, - EMACH_RCV_PORT_CHANGED = 0x10004006, - EMACH_RCV_INVALID_NOTIFY = 0x10004007, - EMACH_RCV_INVALID_DATA = 0x10004008, - EMACH_RCV_PORT_DIED = 0x10004009, - EMACH_RCV_IN_SET = 0x1000400a, - EMACH_RCV_HEADER_ERROR = 0x1000400b, - EMACH_RCV_BODY_ERROR = 0x1000400c, - - /* Errors from . */ - EKERN_INVALID_ADDRESS = 1, - EKERN_PROTECTION_FAILURE = 2, - EKERN_NO_SPACE = 3, - EKERN_INVALID_ARGUMENT = 4, - EKERN_FAILURE = 5, - EKERN_RESOURCE_SHORTAGE = 6, - EKERN_NOT_RECEIVER = 7, - EKERN_NO_ACCESS = 8, - EKERN_MEMORY_FAILURE = 9, - EKERN_MEMORY_ERROR = 10, - EKERN_NOT_IN_SET = 12, - EKERN_NAME_EXISTS = 13, - EKERN_ABORTED = 14, - EKERN_INVALID_NAME = 15, - EKERN_INVALID_TASK = 16, - EKERN_INVALID_RIGHT = 17, - EKERN_INVALID_VALUE = 18, - EKERN_UREFS_OVERFLOW = 19, - EKERN_INVALID_CAPABILITY = 20, - EKERN_RIGHT_EXISTS = 21, - EKERN_INVALID_HOST = 22, - EKERN_MEMORY_PRESENT = 23, - EKERN_WRITE_PROTECTION_FAILURE = 24, - EKERN_TERMINATED = 26, - - /* Errors from . */ - EMIG_TYPE_ERROR = -300, /* client type check failure */ - EMIG_REPLY_MISMATCH = -301, /* wrong reply message ID */ - EMIG_REMOTE_ERROR = -302, /* server detected error */ - EMIG_BAD_ID = -303, /* bad request message ID */ - EMIG_BAD_ARGUMENTS = -304, /* server type check failure */ - EMIG_NO_REPLY = -305, /* no reply should be sent */ - EMIG_EXCEPTION = -306, /* server raised exception */ - EMIG_ARRAY_TOO_LARGE = -307, /* array not large enough */ - EMIG_SERVER_DIED = -308, /* server died */ - EMIG_DESTROY_REQUEST = -309, /* destroy request with no reply */ - - /* Errors from . */ - ED_IO_ERROR = 2500, /* hardware IO error */ - ED_WOULD_BLOCK = 2501, /* would block, but D_NOWAIT set */ - ED_NO_SUCH_DEVICE = 2502, /* no such device */ - ED_ALREADY_OPEN = 2503, /* exclusive-use device already open */ - ED_DEVICE_DOWN = 2504, /* device has been shut down */ - ED_INVALID_OPERATION = 2505, /* bad operation for device */ - ED_INVALID_RECNUM = 2506, /* invalid record (block) number */ - ED_INVALID_SIZE = 2507, /* invalid IO size */ - ED_NO_MEMORY = 2508, /* memory allocation failure */ - ED_READ_ONLY = 2509, /* device cannot be written to */ - -}; - -#define _HURD_ERRNOS 118 - -/* User-visible type of error codes. It is ok to use `int' or - `kern_return_t' for these, but with `error_t' the debugger prints - symbolic values. */ -#ifdef __USE_GNU -typedef enum __error_t_codes error_t; -#define __error_t_defined 1 -#endif - -/* errno is a per-thread variable. */ -#include -#define errno (*__hurd_errno_location ()) -#define __set_errno(val) errno = (val) - -#endif /* included. */ - -#if !defined (_ERRNO_H) && defined (__need_Emath) -#define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */ -#define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */ -#endif /* not included and need math error codes. */ diff --git a/sysdeps/mach/hurd/fcntlbits.h b/sysdeps/mach/hurd/fcntlbits.h deleted file mode 100644 index 9906c97eb3..0000000000 --- a/sysdeps/mach/hurd/fcntlbits.h +++ /dev/null @@ -1,179 +0,0 @@ -/* O_*, F_*, FD_* bit values for GNU. - Copyright (C) 1993, 1994, 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 _FCNTLBITS_H - -#define _FCNTLBITS_H 1 - - -/* File access modes. These are understood by io servers; they can be - passed in `dir_lookup', and are returned by `io_get_openmodes'. - Consequently they can be passed to `open', `hurd_file_name_lookup', and - `file_name_lookup'; and are returned by `fcntl' with the F_GETFL - command. */ - -/* In GNU, read and write are bits (unlike BSD). */ -#ifdef __USE_GNU -#define O_READ O_RDONLY /* Open for reading. */ -#define O_WRITE O_WRONLY /* Open for writing. */ -#define O_EXEC 0x0004 /* Open for execution. */ -#define O_NORW 0 /* Open without R/W access. */ -#endif -/* POSIX.1 standard names. */ -#define O_RDONLY 0x0001 /* Open read-only. */ -#define O_WRONLY 0x0002 /* Open write-only. */ -#define O_RDWR (O_RDONLY|O_WRONLY) /* Open for reading and writing. */ -#define O_ACCMODE O_RDWR /* Mask for file access modes. */ - - - -/* File name translation flags. These are understood by io servers; - they can be passed in `dir_lookup', and consequently to `open', - `hurd_file_name_lookup', and `file_name_lookup'. */ - -#define O_CREAT 0x0010 /* Create file if it doesn't exist. */ -#define O_EXCL 0x0020 /* Fail if file already exists. */ -#ifdef __USE_GNU -#define O_NOLINK 0x0040 /* No name mappings on final component. */ -#define O_NOTRANS 0x0080 /* No translator on final component. */ -#endif - - -/* I/O operating modes. These are understood by io servers; they can be - passed in `dir_lookup' and set or fetched with `io_*_openmodes'. - Consequently they can be passed to `open', `hurd_file_name_lookup', - `file_name_lookup', and `fcntl' with the F_SETFL command; and are - returned by `fcntl' with the F_GETFL command. */ - -#define O_APPEND 0x0100 /* Writes always append to the file. */ -#ifdef __USE_BSD -#define O_ASYNC 0x0200 /* Send SIGIO to owner when data is ready. */ -#define O_FSYNC 0x0400 /* Synchronous writes. */ -#define O_SYNC O_FSYNC -#endif -#ifdef __USE_GNU -#define O_NOATIME 0x0800 /* Don't set access time on read (owner). */ -#endif -#ifdef __USE_MISC -#define O_SHLOCK 0x00020000 /* Open with shared file lock. */ -#define O_EXLOCK 0x00040000 /* Open with exclusive file lock. */ -#endif - - -/* The name O_NONBLOCK is unfortunately overloaded; it is both a file name - translation flag and an I/O operating mode. O_NDELAY is the deprecated - BSD name for the same flag, overloaded in the same way. - - When used in `dir_lookup' (and consequently `open', `hurd_file_name_lookup', - or `file_name_lookup'), O_NONBLOCK says the open should return immediately - instead of blocking for any significant length of time (e.g., to wait - for carrier detect on a serial line). It is also saved as an I/O - operating mode, and after open has the following meaning. - - When used in `io_*_openmodes' (and consequently `fcntl' with the F_SETFL - command), the O_NONBLOCK flag means to do nonblocking i/o: any i/o - operation that would block for any significant length of time will instead - fail with EAGAIN. */ - -#define O_NONBLOCK 0x0008 /* Non-blocking open or non-blocking I/O. */ -#ifdef __USE_BSD -#define O_NDELAY O_NONBLOCK /* Deprecated. */ -#endif - - -#ifdef __USE_GNU -/* Mask of bits which are understood by io servers. */ -#define O_HURD (0xffff | O_EXLOCK | O_SHLOCK) -#endif - - -/* Open-time action flags. These are understood by `hurd_file_name_lookup' - and consequently by `open' and `file_name_lookup'. They are not preserved - once the file has been opened. */ - -#define O_TRUNC 0x00010000 /* Truncate file to zero length. */ - - -/* Controlling terminal flags. These are understood only by `open', - and are not preserved once the file has been opened. */ - -#ifdef __USE_GNU -#define O_IGNORE_CTTY 0x00080000 /* Don't do any ctty magic at all. */ -#endif -/* `open' never assigns a controlling terminal in GNU. */ -#define O_NOCTTY 0 /* Don't assign a controlling terminal. */ - - -#ifdef __USE_BSD -/* Bits in the file status flags returned by F_GETFL. */ -#define FREAD O_RDONLY -#define FWRITE O_WRONLY - -/* Traditional BSD names the O_* bits. */ -#define FASYNC O_ASYNC -#define FCREAT O_CREAT -#define FEXCL O_EXCL -#define FTRUNC O_TRUNC -#define FNOCTTY O_NOCTTY -#define FFSYNC O_FSYNC -#define FSYNC O_SYNC -#define FAPPEND O_APPEND -#define FNONBLOCK O_NONBLOCK -#define FNDELAY O_NDELAY -#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. */ -#ifdef __USE_BSD -#define F_GETOWN 5 /* Get owner (receiver of SIGIO). */ -#define F_SETOWN 6 /* Set owner (receiver of SIGIO). */ -#endif -#define F_GETLK 7 /* Get record locking info. */ -#define F_SETLK 8 /* Set record locking info (non-blocking). */ -#define F_SETLKW 9 /* Set record locking info (blocking). */ - -/* File descriptor flags used with F_GETFD and F_SETFD. */ -#define FD_CLOEXEC 1 /* Close on exec. */ - - -#include - -/* The structure describing an advisory lock. This is the type of the third - argument to `fcntl' for the F_GETLK, F_SETLK, and F_SETLKW requests. */ -struct flock - { - int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; - -/* Values for the `l_type' field of a `struct flock'. */ -#define F_RDLCK 1 /* Read lock. */ -#define F_WRLCK 2 /* Write lock. */ -#define F_UNLCK 3 /* Remove lock. */ - - -#endif /* fcntlbits.h */ diff --git a/sysdeps/mach/hurd/hppa/bits/sigcontext.h b/sysdeps/mach/hurd/hppa/bits/sigcontext.h new file mode 100644 index 0000000000..b616469f21 --- /dev/null +++ b/sysdeps/mach/hurd/hppa/bits/sigcontext.h @@ -0,0 +1,86 @@ +/* Machine-dependent signal context structure for GNU Hurd. HPPA version. +Copyright (C) 1995 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* Signal handlers are actually called: + void handler (int sig, int code, struct sigcontext *scp); */ + +/* State of this thread when the signal was taken. */ +struct sigcontext + { + /* These first members are machine-independent. */ + + int sc_onstack; /* Nonzero if running on sigstack. */ + __sigset_t sc_mask; /* Blocked signals to restore. */ + + /* MiG reply port this thread is using. */ + unsigned int sc_reply_port; + + /* Port this thread is doing an interruptible RPC on. */ + unsigned int sc_intr_port; + + /* Error code associated with this signal (interpreted as `error_t'). */ + int sc_error; + + /* All following members are machine-dependent. The rest of this + structure is written to be laid out identically to a `struct + parisc_thread_state'. trampoline.c knows this, so it must be + changed if this changes. */ + +#define sc_parisc_thread_state sc_flags /* Beginning of correspondence. */ + /* "General" registers $1..$31. */ + unsigned int sc_regs[31]; + + /* Control registers. */ + unsigned int sc_cr11; /* sar */ + /* These four registers make up the PC. */ + unsigned int iioq_head; + unsigned int iisq_head; + unsigned int iioq_tail; + unsigned int iisq_tail; + unsigned int sc_cr15; + unsigned int sc_cr19; + unsigned int sc_cr20; + unsigned int sc_cr21; + unsigned int sc_cr22; /* ipsw */ + unsigned int sc_bsd_goto; /* unused */ + unsigned int sc_sr4; + unsigned int sc_sr0; + unsigned int sc_sr1; + unsigned int sc_sr2; + unsigned int sc_sr3; + unsigned int sc_sr5; + unsigned int sc_sr6; + unsigned int sc_sr7; + unsigned int sc_cr0; + unsigned int sc_cr8; + unsigned int sc_cr9; + unsigned int sc_cr10; /* unused */ + unsigned int sc_cr12; + unsigned int sc_cr13; + unsigned int sc_cr24; /* unused */ + unsigned int sc_cr25; /* unused */ + unsigned int sc_cr26; /* unused */ + unsigned sc_mpsfu_high; /* unused */ + unsigned sc_mpsfu_low; /* unused */ + unsigned sc_mpsfu_ovflo; /* unused */ + int sc_pad; + + /* Floating point registers $f0..$f31. */ + double sc_fpregs[32]; + }; diff --git a/sysdeps/mach/hurd/hppa/sigcontext.h b/sysdeps/mach/hurd/hppa/sigcontext.h deleted file mode 100644 index b616469f21..0000000000 --- a/sysdeps/mach/hurd/hppa/sigcontext.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Machine-dependent signal context structure for GNU Hurd. HPPA version. -Copyright (C) 1995 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., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -/* Signal handlers are actually called: - void handler (int sig, int code, struct sigcontext *scp); */ - -/* State of this thread when the signal was taken. */ -struct sigcontext - { - /* These first members are machine-independent. */ - - int sc_onstack; /* Nonzero if running on sigstack. */ - __sigset_t sc_mask; /* Blocked signals to restore. */ - - /* MiG reply port this thread is using. */ - unsigned int sc_reply_port; - - /* Port this thread is doing an interruptible RPC on. */ - unsigned int sc_intr_port; - - /* Error code associated with this signal (interpreted as `error_t'). */ - int sc_error; - - /* All following members are machine-dependent. The rest of this - structure is written to be laid out identically to a `struct - parisc_thread_state'. trampoline.c knows this, so it must be - changed if this changes. */ - -#define sc_parisc_thread_state sc_flags /* Beginning of correspondence. */ - /* "General" registers $1..$31. */ - unsigned int sc_regs[31]; - - /* Control registers. */ - unsigned int sc_cr11; /* sar */ - /* These four registers make up the PC. */ - unsigned int iioq_head; - unsigned int iisq_head; - unsigned int iioq_tail; - unsigned int iisq_tail; - unsigned int sc_cr15; - unsigned int sc_cr19; - unsigned int sc_cr20; - unsigned int sc_cr21; - unsigned int sc_cr22; /* ipsw */ - unsigned int sc_bsd_goto; /* unused */ - unsigned int sc_sr4; - unsigned int sc_sr0; - unsigned int sc_sr1; - unsigned int sc_sr2; - unsigned int sc_sr3; - unsigned int sc_sr5; - unsigned int sc_sr6; - unsigned int sc_sr7; - unsigned int sc_cr0; - unsigned int sc_cr8; - unsigned int sc_cr9; - unsigned int sc_cr10; /* unused */ - unsigned int sc_cr12; - unsigned int sc_cr13; - unsigned int sc_cr24; /* unused */ - unsigned int sc_cr25; /* unused */ - unsigned int sc_cr26; /* unused */ - unsigned sc_mpsfu_high; /* unused */ - unsigned sc_mpsfu_low; /* unused */ - unsigned sc_mpsfu_ovflo; /* unused */ - int sc_pad; - - /* Floating point registers $f0..$f31. */ - double sc_fpregs[32]; - }; diff --git a/sysdeps/mach/hurd/i386/bits/sigcontext.h b/sysdeps/mach/hurd/i386/bits/sigcontext.h new file mode 100644 index 0000000000..b742326bdb --- /dev/null +++ b/sysdeps/mach/hurd/i386/bits/sigcontext.h @@ -0,0 +1,106 @@ +/* Machine-dependent signal context structure for GNU Hurd. i386 version. +Copyright (C) 1991, 1992, 1994 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* Signal handlers are actually called: + void handler (int sig, int code, struct sigcontext *scp); */ + +#include + +/* State of this thread when the signal was taken. */ +struct sigcontext + { + /* These first members are machine-independent. */ + + int sc_onstack; /* Nonzero if running on sigstack. */ + __sigset_t sc_mask; /* Blocked signals to restore. */ + + /* MiG reply port this thread is using. */ + unsigned int sc_reply_port; + + /* Port this thread is doing an interruptible RPC on. */ + unsigned int sc_intr_port; + + /* Error code associated with this signal (interpreted as `error_t'). */ + int sc_error; + + /* All following members are machine-dependent. The rest of this + structure is written to be laid out identically to: + { + struct i386_thread_state basic; + struct i386_float_state fpu; + } + trampoline.c knows this, so it must be changed if this changes. */ + +#define sc_i386_thread_state sc_gs /* Beginning of correspondence. */ + /* Segment registers. */ + int sc_gs; + int sc_fs; + int sc_es; + int sc_ds; + + /* "General" registers. These members are in the order that the i386 + `pusha' and `popa' instructions use (`popa' ignores %esp). */ + int sc_edi; + int sc_esi; + int sc_ebp; + int sc_esp; /* Not used; sc_uesp is used instead. */ + int sc_ebx; + int sc_edx; + int sc_ecx; + int sc_eax; + + int sc_eip; /* Instruction pointer. */ + int sc_cs; /* Code segment register. */ + + int sc_efl; /* Processor flags. */ + + int sc_uesp; /* This stack pointer is used. */ + int sc_ss; /* Stack segment register. */ + + /* Following mimics struct i386_float_state. Structures and symbolic + values can be found in . */ +#define sc_i386_float_state sc_fpkind + int sc_fpkind; /* FP_NO, FP_387, etc. */ + int sc_fpused; /* If zero, ignore rest of float state. */ + struct i386_fp_save sc_fpsave; + struct i386_fp_regs sc_fpregs; + int sc_fpexcsr; /* FPSR including exception bits. */ + }; + + +/* Codes for SIGFPE. */ +#define FPE_INTOVF_TRAP 0x1 /* integer overflow */ +#define FPE_INTDIV_FAULT 0x2 /* integer divide by zero */ +#define FPE_FLTOVF_FAULT 0x3 /* floating overflow */ +#define FPE_FLTDIV_FAULT 0x4 /* floating divide by zero */ +#define FPE_FLTUND_FAULT 0x5 /* floating underflow */ +#define FPE_SUBRNG_FAULT 0x7 /* BOUNDS instruction failed */ +#define FPE_FLTDNR_FAULT 0x8 /* denormalized operand */ +#define FPE_FLTINX_FAULT 0x9 /* floating loss of precision */ +#define FPE_EMERR_FAULT 0xa /* mysterious emulation error 33 */ +#define FPE_EMBND_FAULT 0xb /* emulation BOUNDS instruction failed */ + +/* Codes for SIGILL. */ +#define ILL_INVOPR_FAULT 0x1 /* invalid operation */ +#define ILL_STACK_FAULT 0x2 /* fault on microkernel stack access */ +#define ILL_FPEOPR_FAULT 0x3 /* invalid floating operation */ + +/* Codes for SIGTRAP. */ +#define DBG_SINGLE_TRAP 0x1 /* single step */ +#define DBG_BRKPNT_FAULT 0x2 /* breakpoint instruction */ diff --git a/sysdeps/mach/hurd/i386/sigcontext.h b/sysdeps/mach/hurd/i386/sigcontext.h deleted file mode 100644 index b742326bdb..0000000000 --- a/sysdeps/mach/hurd/i386/sigcontext.h +++ /dev/null @@ -1,106 +0,0 @@ -/* Machine-dependent signal context structure for GNU Hurd. i386 version. -Copyright (C) 1991, 1992, 1994 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., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -/* Signal handlers are actually called: - void handler (int sig, int code, struct sigcontext *scp); */ - -#include - -/* State of this thread when the signal was taken. */ -struct sigcontext - { - /* These first members are machine-independent. */ - - int sc_onstack; /* Nonzero if running on sigstack. */ - __sigset_t sc_mask; /* Blocked signals to restore. */ - - /* MiG reply port this thread is using. */ - unsigned int sc_reply_port; - - /* Port this thread is doing an interruptible RPC on. */ - unsigned int sc_intr_port; - - /* Error code associated with this signal (interpreted as `error_t'). */ - int sc_error; - - /* All following members are machine-dependent. The rest of this - structure is written to be laid out identically to: - { - struct i386_thread_state basic; - struct i386_float_state fpu; - } - trampoline.c knows this, so it must be changed if this changes. */ - -#define sc_i386_thread_state sc_gs /* Beginning of correspondence. */ - /* Segment registers. */ - int sc_gs; - int sc_fs; - int sc_es; - int sc_ds; - - /* "General" registers. These members are in the order that the i386 - `pusha' and `popa' instructions use (`popa' ignores %esp). */ - int sc_edi; - int sc_esi; - int sc_ebp; - int sc_esp; /* Not used; sc_uesp is used instead. */ - int sc_ebx; - int sc_edx; - int sc_ecx; - int sc_eax; - - int sc_eip; /* Instruction pointer. */ - int sc_cs; /* Code segment register. */ - - int sc_efl; /* Processor flags. */ - - int sc_uesp; /* This stack pointer is used. */ - int sc_ss; /* Stack segment register. */ - - /* Following mimics struct i386_float_state. Structures and symbolic - values can be found in . */ -#define sc_i386_float_state sc_fpkind - int sc_fpkind; /* FP_NO, FP_387, etc. */ - int sc_fpused; /* If zero, ignore rest of float state. */ - struct i386_fp_save sc_fpsave; - struct i386_fp_regs sc_fpregs; - int sc_fpexcsr; /* FPSR including exception bits. */ - }; - - -/* Codes for SIGFPE. */ -#define FPE_INTOVF_TRAP 0x1 /* integer overflow */ -#define FPE_INTDIV_FAULT 0x2 /* integer divide by zero */ -#define FPE_FLTOVF_FAULT 0x3 /* floating overflow */ -#define FPE_FLTDIV_FAULT 0x4 /* floating divide by zero */ -#define FPE_FLTUND_FAULT 0x5 /* floating underflow */ -#define FPE_SUBRNG_FAULT 0x7 /* BOUNDS instruction failed */ -#define FPE_FLTDNR_FAULT 0x8 /* denormalized operand */ -#define FPE_FLTINX_FAULT 0x9 /* floating loss of precision */ -#define FPE_EMERR_FAULT 0xa /* mysterious emulation error 33 */ -#define FPE_EMBND_FAULT 0xb /* emulation BOUNDS instruction failed */ - -/* Codes for SIGILL. */ -#define ILL_INVOPR_FAULT 0x1 /* invalid operation */ -#define ILL_STACK_FAULT 0x2 /* fault on microkernel stack access */ -#define ILL_FPEOPR_FAULT 0x3 /* invalid floating operation */ - -/* Codes for SIGTRAP. */ -#define DBG_SINGLE_TRAP 0x1 /* single step */ -#define DBG_BRKPNT_FAULT 0x2 /* breakpoint instruction */ diff --git a/sysdeps/mach/hurd/ioctl.c b/sysdeps/mach/hurd/ioctl.c index 4646c42920..1a7c42aad7 100644 --- a/sysdeps/mach/hurd/ioctl.c +++ b/sysdeps/mach/hurd/ioctl.c @@ -39,7 +39,7 @@ __ioctl (int fd, unsigned long int request, ...) /* Map individual type fields to Mach IPC types. */ static const int mach_types[] = { MACH_MSG_TYPE_CHAR, MACH_MSG_TYPE_INTEGER_16, MACH_MSG_TYPE_INTEGER_32, - -1 }; + MACH_MSG_TYPE_INTEGER_64 }; #define io2mach_type(count, type) \ ((mach_msg_type_t) { mach_types[type], typesize (type) * 8, count, 1, 0, 0 }) @@ -47,12 +47,14 @@ __ioctl (int fd, unsigned long int request, ...) unsigned int type = _IOC_TYPE (request); /* Message buffer. */ +#define msg_align(x) \ + (((x) + sizeof (mach_msg_type_t) - 1) & ~(sizeof (mach_msg_type_t) - 1)) struct { mig_reply_header_t header; char data[3 * sizeof (mach_msg_type_t) + - _IOT_COUNT0 (type) * typesize (_IOT_TYPE0 (type)) + - _IOT_COUNT1 (type) * typesize (_IOT_TYPE1 (type)) + + msg_align (_IOT_COUNT0 (type) * typesize (_IOT_TYPE0 (type))) + + msg_align (_IOT_COUNT1 (type) * typesize (_IOT_TYPE1 (type))) + _IOT_COUNT2 (type) * typesize (_IOT_TYPE2 (type))]; } msg; mach_msg_header_t *const m = &msg.header.Head; diff --git a/sysdeps/mach/hurd/ioctls.h b/sysdeps/mach/hurd/ioctls.h deleted file mode 100644 index f6bb4b4ce7..0000000000 --- a/sysdeps/mach/hurd/ioctls.h +++ /dev/null @@ -1,349 +0,0 @@ -/* Copyright (C) 1992, 1993, 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., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#ifndef _IOCTLS_H - -#define _IOCTLS_H 1 - -/* These macros are also defined in termbits.h (with numerically - identical values) but this serves to shut up cpp's complaining. */ -#ifdef MDMBUF -#undef MDMBUF -#endif -#ifdef ECHO -#undef ECHO -#endif -#ifdef TOSTOP -#undef TOSTOP -#endif -#ifdef FLUSHO -#undef FLUSHO -#endif -#ifdef PENDIN -#undef PENDIN -#endif -#ifdef NOFLSH -#undef NOFLSH -#endif - -/* Hurd ioctl request are made up of several fields: - - 10987654321098765432109876543210 - IOt0t1t2cc0c0cc1c1cc2ggggccccccc - - bits [31,30]: inout direction (enum __ioctl_dir) - bits [29,11]: type encoding as follows; zero count indicates omitted datum - [29,28]: datum #0 type (enum __ioctl_datum) - [27,26]: datum #1 type (enum __ioctl_datum) - [24,25]: datum #2 type (enum __ioctl_datum) - [23,19]: datum #0 count [0,31] - [18,14]: datum #1 count [0,31] - [13,11]: datum #2 count [0,3] - bits [07,10]: group (letter - 'f': ['f','v']) - bits [00,06]: command [0,127] - - The following macros construct and dissect these fields. */ - -enum __ioctl_dir - { - IOC_VOID = 0, /* No parameters. */ - IOC_OUT = 1, /* Data is written into the user's buffer. */ - IOC_IN = 2, /* Data is read from the user's buffer. */ - IOC_INOUT = (IOC_IN|IOC_OUT) - }; - -enum __ioctl_datum { IOC_8, IOC_16, IOC_32 }; - -/* Construct an ioctl from constructed type plus other fields. */ -#define _IOC(inout, group, num, type) \ - ((num) | ((((group) - 'f') | ((type) | (inout) << 19) << 4) << 7)) - -/* Dissect an ioctl into its component fields. */ -#define _IOC_INOUT(request) (((unsigned int) (request) >> 30) & IOC_INOUT) -#define _IOC_GROUP(request) ('f' + (((unsigned int) (request) >> 7) & 0xf)) -#define _IOC_COMMAND(request) ((unsigned int) (request) & 0x7f) -#define _IOC_TYPE(request) (((unsigned int) (request) >> 11) & 0x7ffff) -#define _IOC_NOTYPE(request) ((unsigned int) (request) & 0x3ff) - -/* Construct a type information field from - the broken-out type and count fields. */ -#define _IOT(t0, c0, t1, c1, t2, c2) \ - ((c2) | (((c1) | ((c0) | ((t2) | ((t1) | (t0) << 2) << 2) << 5) << 5) << 3)) - -/* Dissect a type information field into the type and count fields. */ -#define _IOT_TYPE0(type) (((unsigned int) (type) >> 17) & 3) -#define _IOT_TYPE1(type) (((unsigned int) (type) >> 15) & 3) -#define _IOT_TYPE2(type) (((unsigned int) (type) >> 13) & 3) -#define _IOT_COUNT0(type) (((unsigned int) (type) >> 8) & 0x1f) -#define _IOT_COUNT1(type) (((unsigned int) (type) >> 3) & 0x1f) -#define _IOT_COUNT2(type) (((unsigned int) (type) >> 0) & 7) - -/* Construct an ioctl from all the broken-out fields. */ -#define _IOCT(inout, group, num, t0, c0, t1, c1, t2, c2) \ - _IOC ((inout), (group), (num), _IOT ((t0), (c0), (t1), (c1), (t2), (c2))) - -/* Standard flavors of ioctls. - _IOT_foobar is defined either in this file, - or where struct foobar is defined. */ -#define _IO(g, n) _IOC (IOC_VOID, (g), (n), 0) -#define _IOR(g, n, t) _IOC (IOC_OUT, (g), (n), _IOT_##t) -#define _IOW(g, n, t) _IOC (IOC_IN, (g), (n), _IOT_##t) -#define _IOWR(g, n, t) _IOC (IOC_INOUT, (g), (n), _IOT_##t) - -/* Construct an individual type field for TYPE. */ -#define _IOTS(type) (sizeof (type) >> 1) - -/* Construct a type information field for - a single argument of the scalar TYPE. */ -#define _IOT_SIMPLE(type) _IOT (_IOTS (type), 1, 0, 0, 0, 0) - -/* Basic C types. */ -#define _IOT_int _IOT_SIMPLE (int) -#define _IOT_char _IOT_SIMPLE (char) -#define _IOT_short _IOT_SIMPLE (short) - - -/* ioctls verbatim from 4.4 , with `struct' keywords removed. */ - -#define TIOCMODG _IOR('t', 3, int) /* get modem control state */ -#define TIOCMODS _IOW('t', 4, int) /* set modem control state */ -#define TIOCM_LE 0001 /* line enable */ -#define TIOCM_DTR 0002 /* data terminal ready */ -#define TIOCM_RTS 0004 /* request to send */ -#define TIOCM_ST 0010 /* secondary transmit */ -#define TIOCM_SR 0020 /* secondary receive */ -#define TIOCM_CTS 0040 /* clear to send */ -#define TIOCM_CAR 0100 /* carrier detect */ -#define TIOCM_CD TIOCM_CAR -#define TIOCM_RNG 0200 /* ring */ -#define TIOCM_RI TIOCM_RNG -#define TIOCM_DSR 0400 /* data set ready */ - /* 8-10 compat */ -#define TIOCEXCL _IO('t', 13) /* set exclusive use of tty */ -#define TIOCNXCL _IO('t', 14) /* reset exclusive use of tty */ - /* 15 unused */ -#define TIOCFLUSH _IOW('t', 16, int) /* flush buffers */ - /* 17-18 compat */ -#define TIOCGETA _IOR('t', 19, termios) /* get termios struct */ -#define TIOCSETA _IOW('t', 20, termios) /* set termios struct */ -#define TIOCSETAW _IOW('t', 21, termios) /* drain output, set */ -#define TIOCSETAF _IOW('t', 22, termios) /* drn out, fls in, set */ -#define TIOCGETD _IOR('t', 26, int) /* get line discipline */ -#define TIOCSETD _IOW('t', 27, int) /* set line discipline */ - /* 127-124 compat */ -#define TIOCSBRK _IO('t', 123) /* set break bit */ -#define TIOCCBRK _IO('t', 122) /* clear break bit */ -#define TIOCSDTR _IO('t', 121) /* set data terminal ready */ -#define TIOCCDTR _IO('t', 120) /* clear data terminal ready */ -#define TIOCGPGRP _IOR('t', 119, int) /* get pgrp of tty */ -#define TIOCSPGRP _IOW('t', 118, int) /* set pgrp of tty */ - /* 117-116 compat */ -#define TIOCOUTQ _IOR('t', 115, int) /* output queue size */ -#define TIOCSTI _IOW('t', 114, char) /* simulate terminal input */ -#define TIOCNOTTY _IO('t', 113) /* void tty association */ -#define TIOCPKT _IOW('t', 112, int) /* pty: set/clear packet mode */ -#define TIOCPKT_DATA 0x00 /* data packet */ -#define TIOCPKT_FLUSHREAD 0x01 /* flush packet */ -#define TIOCPKT_FLUSHWRITE 0x02 /* flush packet */ -#define TIOCPKT_STOP 0x04 /* stop output */ -#define TIOCPKT_START 0x08 /* start output */ -#define TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */ -#define TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */ -#define TIOCPKT_IOCTL 0x40 /* state change of pty driver */ -#define TIOCSTOP _IO('t', 111) /* stop output, like ^S */ -#define TIOCSTART _IO('t', 110) /* start output, like ^Q */ -#define TIOCMSET _IOW('t', 109, int) /* set all modem bits */ -#define TIOCMBIS _IOW('t', 108, int) /* bis modem bits */ -#define TIOCMBIC _IOW('t', 107, int) /* bic modem bits */ -#define TIOCMGET _IOR('t', 106, int) /* get all modem bits */ -#define TIOCREMOTE _IOW('t', 105, int) /* remote input editing */ -#define TIOCGWINSZ _IOR('t', 104, winsize) /* get window size */ -#define TIOCSWINSZ _IOW('t', 103, winsize) /* set window size */ -#define TIOCUCNTL _IOW('t', 102, int) /* pty: set/clr usr cntl mode */ -#define UIOCCMD(n) _IO('u', n) /* usr cntl op "n" */ -#define TIOCCONS _IOW('t', 98, int) /* become virtual console */ -#define TIOCSCTTY _IO('t', 97) /* become controlling tty */ -#define TIOCEXT _IOW('t', 96, int) /* pty: external processing */ -#define TIOCSIG _IO('t', 95) /* pty: generate signal */ -#define TIOCDRAIN _IO('t', 94) /* wait till output drained */ - -#define TTYDISC 0 /* termios tty line discipline */ -#define TABLDISC 3 /* tablet discipline */ -#define SLIPDISC 4 /* serial IP discipline */ - - -#define FIOCLEX _IO('f', 1) /* set close on exec on fd */ -#define FIONCLEX _IO('f', 2) /* remove close on exec */ -#define FIONREAD _IOR('f', 127, int) /* get # bytes to read */ -#define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */ -#define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */ -#define FIOSETOWN _IOW('f', 124, int) /* set owner */ -#define FIOGETOWN _IOR('f', 123, int) /* get owner */ - -/* socket i/o controls */ -#define SIOCSHIWAT _IOW('s', 0, int) /* set high watermark */ -#define SIOCGHIWAT _IOR('s', 1, int) /* get high watermark */ -#define SIOCSLOWAT _IOW('s', 2, int) /* set low watermark */ -#define SIOCGLOWAT _IOR('s', 3, int) /* get low watermark */ -#define SIOCATMARK _IOR('s', 7, int) /* at oob mark? */ -#define SIOCSPGRP _IOW('s', 8, int) /* set process group */ -#define SIOCGPGRP _IOR('s', 9, int) /* get process group */ - -#define SIOCADDRT _IOW('r', 10, ortentry) /* add route */ -#define SIOCDELRT _IOW('r', 11, ortentry) /* delete route */ - -#define SIOCSIFADDR _IOW('i', 12, ifreq) /* set ifnet address */ -#define OSIOCGIFADDR _IOWR('i',13, ifreq) /* get ifnet address */ -#define SIOCGIFADDR _IOWR('i',33, ifreq) /* get ifnet address */ -#define SIOCSIFDSTADDR _IOW('i', 14, ifreq) /* set p-p address */ -#define OSIOCGIFDSTADDR _IOWR('i',15, ifreq) /* get p-p address */ -#define SIOCGIFDSTADDR _IOWR('i',34, ifreq) /* get p-p address */ -#define SIOCSIFFLAGS _IOW('i', 16, ifreq) /* set ifnet flags */ -#define SIOCGIFFLAGS _IOWR('i',17, ifreq) /* get ifnet flags */ -#define OSIOCGIFBRDADDR _IOWR('i',18, ifreq) /* get broadcast addr */ -#define SIOCGIFBRDADDR _IOWR('i',35, ifreq) /* get broadcast addr */ -#define SIOCSIFBRDADDR _IOW('i',19, ifreq) /* set broadcast addr */ -#define OSIOCGIFCONF _IOWR('i',20, ifconf) /* get ifnet list */ -#define SIOCGIFCONF _IOWR('i',36, ifconf) /* get ifnet list */ -#define OSIOCGIFNETMASK _IOWR('i',21, ifreq) /* get net addr mask */ -#define SIOCGIFNETMASK _IOWR('i',37, ifreq) /* get net addr mask */ -#define SIOCSIFNETMASK _IOW('i',22, ifreq) /* set net addr mask */ -#define SIOCGIFMETRIC _IOWR('i',23, ifreq) /* get IF metric */ -#define SIOCSIFMETRIC _IOW('i',24, ifreq) /* set IF metric */ -#define SIOCDIFADDR _IOW('i',25, ifreq) /* delete IF addr */ -#define SIOCAIFADDR _IOW('i',26, ifaliasreq) /* add/chg IF alias */ - -#define SIOCSARP _IOW('i', 30, arpreq) /* set arp entry */ -#define OSIOCGARP _IOWR('i',31, arpreq) /* get arp entry */ -#define SIOCGARP _IOWR('i',38, arpreq) /* get arp entry */ -#define SIOCDARP _IOW('i', 32, arpreq) /* delete arp entry */ - - -/* Compatibility with 4.3 BSD terminal driver. - From 4.4 . */ - -#ifdef USE_OLD_TTY -# undef TIOCGETD -# define TIOCGETD _IOR('t', 0, int) /* get line discipline */ -# undef TIOCSETD -# define TIOCSETD _IOW('t', 1, int) /* set line discipline */ -#else -# define OTIOCGETD _IOR('t', 0, int) /* get line discipline */ -# define OTIOCSETD _IOW('t', 1, int) /* set line discipline */ -#endif -#define TIOCHPCL _IO('t', 2) /* hang up on last close */ -#define TIOCGETP _IOR('t', 8,sgttyb)/* get parameters -- gtty */ -#define TIOCSETP _IOW('t', 9,sgttyb)/* set parameters -- stty */ -#define TIOCSETN _IOW('t',10,sgttyb)/* as above, but no flushtty*/ -#define TIOCSETC _IOW('t',17,tchars)/* set special characters */ -#define TIOCGETC _IOR('t',18,tchars)/* get special characters */ -#define TANDEM 0x00000001 /* send stopc on out q full */ -#define CBREAK 0x00000002 /* half-cooked mode */ -#define LCASE 0x00000004 /* simulate lower case */ -#define ECHO 0x00000008 /* echo input */ -#define CRMOD 0x00000010 /* map \r to \r\n on output */ -#define RAW 0x00000020 /* no i/o processing */ -#define ODDP 0x00000040 /* get/send odd parity */ -#define EVENP 0x00000080 /* get/send even parity */ -#define ANYP 0x000000c0 /* get any parity/send none */ -#define NLDELAY 0x00000300 /* \n delay */ -#define NL0 0x00000000 -#define NL1 0x00000100 /* tty 37 */ -#define NL2 0x00000200 /* vt05 */ -#define NL3 0x00000300 -#define TBDELAY 0x00000c00 /* horizontal tab delay */ -#define TAB0 0x00000000 -#define TAB1 0x00000400 /* tty 37 */ -#define TAB2 0x00000800 -#define XTABS 0x00000c00 /* expand tabs on output */ -#define CRDELAY 0x00003000 /* \r delay */ -#define CR0 0x00000000 -#define CR1 0x00001000 /* tn 300 */ -#define CR2 0x00002000 /* tty 37 */ -#define CR3 0x00003000 /* concept 100 */ -#define VTDELAY 0x00004000 /* vertical tab delay */ -#define FF0 0x00000000 -#define FF1 0x00004000 /* tty 37 */ -#define BSDELAY 0x00008000 /* \b delay */ -#define BS0 0x00000000 -#define BS1 0x00008000 -#define ALLDELAY (NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY) -#define CRTBS 0x00010000 /* do backspacing for crt */ -#define PRTERA 0x00020000 /* \ ... / erase */ -#define CRTERA 0x00040000 /* " \b " to wipe out char */ -#define TILDE 0x00080000 /* hazeltine tilde kludge */ -#define MDMBUF 0x00100000 /*start/stop output on carrier*/ -#define LITOUT 0x00200000 /* literal output */ -#define TOSTOP 0x00400000 /*SIGSTOP on background output*/ -#define FLUSHO 0x00800000 /* flush output to terminal */ -#define NOHANG 0x01000000 /* (no-op) was no SIGHUP on carrier drop */ -#define L001000 0x02000000 -#define CRTKIL 0x04000000 /* kill line with " \b " */ -#define PASS8 0x08000000 -#define CTLECH 0x10000000 /* echo control chars as ^X */ -#define PENDIN 0x20000000 /* tp->t_rawq needs reread */ -#define DECCTQ 0x40000000 /* only ^Q starts after ^S */ -#define NOFLSH 0x80000000 /* no output flush on signal */ -#define TIOCLBIS _IOW('t', 127, int) /* bis local mode bits */ -#define TIOCLBIC _IOW('t', 126, int) /* bic local mode bits */ -#define TIOCLSET _IOW('t', 125, int) /* set entire local mode word */ -#define TIOCLGET _IOR('t', 124, int) /* get local modes */ -#define LCRTBS (CRTBS>>16) -#define LPRTERA (PRTERA>>16) -#define LCRTERA (CRTERA>>16) -#define LTILDE (TILDE>>16) -#define LMDMBUF (MDMBUF>>16) -#define LLITOUT (LITOUT>>16) -#define LTOSTOP (TOSTOP>>16) -#define LFLUSHO (FLUSHO>>16) -#define LNOHANG (NOHANG>>16) -#define LCRTKIL (CRTKIL>>16) -#define LPASS8 (PASS8>>16) -#define LCTLECH (CTLECH>>16) -#define LPENDIN (PENDIN>>16) -#define LDECCTQ (DECCTQ>>16) -#define LNOFLSH (NOFLSH>>16) -#define TIOCSLTC _IOW('t',117,ltchars)/* set local special chars*/ -#define TIOCGLTC _IOR('t',116,ltchars)/* get local special chars*/ -#define OTIOCCONS _IO('t', 98) /* for hp300 -- sans int arg */ -#define OTTYDISC 0 -#define NETLDISC 1 -#define NTTYDISC 2 - -/* From 4.4 . */ -#ifdef USE_OLD_TTY -#define B0 0 -#define B50 1 -#define B75 2 -#define B110 3 -#define B134 4 -#define B150 5 -#define B200 6 -#define B300 7 -#define B600 8 -#define B1200 9 -#define B1800 10 -#define B2400 11 -#define B4800 12 -#define B9600 13 -#define EXTA 14 -#define EXTB 15 -#endif /* USE_OLD_TTY */ - - -#endif /* ioctls.h */ diff --git a/sysdeps/mach/hurd/jmp-unwind.c b/sysdeps/mach/hurd/jmp-unwind.c index 2d5804c71e..7b66df3b4d 100644 --- a/sysdeps/mach/hurd/jmp-unwind.c +++ b/sysdeps/mach/hurd/jmp-unwind.c @@ -25,7 +25,7 @@ #ifndef _JMPBUF_UNWINDS - #error "sysdeps/MACHINE/jmp_buf.h fails to define _JMPBUF_UNWINDS" +#error " fails to define _JMPBUF_UNWINDS" #endif /* This function is called by `longjmp' (with its arguments) to restore diff --git a/sysdeps/mach/hurd/local_lim.h b/sysdeps/mach/hurd/local_lim.h deleted file mode 100644 index e26aa248cb..0000000000 --- a/sysdeps/mach/hurd/local_lim.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. Hurd version. - Copyright (C) 1993, 1994, 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. */ - -/* GNU has no arbitrary fixed limits on these things, so we don't - define the macros. Some things are unlimited. Some are in fact - limited but the limit is run-time dependent and fetched with - `sysconf' or `pathconf'. - - POSIX.1 requires that we define NGROUPS_MAX (though none of the others - is required). GNU allows any number of supplementary groups, - dynamically allocated. So we pick a number which seems vaguely - suitable, and `sysconf' will return a number at least as large. */ - -#define NGROUPS_MAX 256 - -/* The maximum number of symbolic links that are allowed in a single file - name resolution. When a further link is encountered, the call returns - ELOOP. This name is a GNU extension; POSIX.1 has no such limit, and BSD - calls it MAXSYMLINKS in . */ - -#ifdef __USE_GNU /* 1003.1a defines this */ -#define SYMLOOP_MAX 8 -#endif diff --git a/sysdeps/mach/hurd/mips/bits/sigcontext.h b/sysdeps/mach/hurd/mips/bits/sigcontext.h new file mode 100644 index 0000000000..81d1f25f25 --- /dev/null +++ b/sysdeps/mach/hurd/mips/bits/sigcontext.h @@ -0,0 +1,71 @@ +/* Copyright (C) 1994 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* Signal handlers are actually called: + void handler (int sig, int code, struct sigcontext *scp); */ + +/* State of this thread when the signal was taken. */ +struct sigcontext + { + /* These first members are machine-independent. */ + + int sc_onstack; /* Nonzero if running on sigstack. */ + __sigset_t sc_mask; /* Blocked signals to restore. */ + + /* MiG reply port this thread is using. */ + unsigned int sc_reply_port; + + /* Port this thread is doing an interruptible RPC on. */ + unsigned int sc_intr_port; + + /* Error code associated with this signal (interpreted as `error_t'). */ + int sc_error; + + /* All following members are machine-dependent. The rest of this + structure is written to be laid out identically to: + { + struct mips_thread_state ts; + struct mips_exc_state es; + struct mips_float_state fs; + } + trampoline.c knows this, so it must be changed if this changes. */ +#define sc_mips_thread_state sc_gpr /* Beginning of correspondence. */ + int sc_gpr[31]; /* "General" registers; [0] is r1. */ + int sc_mdlo, sc_mdhi; /* Low and high multiplication results. */ + int sc_pc; /* Instruction pointer. */ + + /* struct mips_exc_state */ +#define sc_mips_exc_state sc_cause + unsigned int sc_cause; /* Machine-level trap code. */ +#define SC_CAUSE_SST 0x00000044 + unsigned int sc_badvaddr; + unsigned int sc_coproc_used; /* Which coprocessors the thread has used. */ +#define SC_COPROC_USE_COP0 1 /* (by definition) */ +#define SC_COPROC_USE_COP1 2 /* FPA */ +#define SC_COPROC_USE_FPU SC_COPROC_USE_COP1 +#define SC_COPROC_USE_COP2 4 +#define SC_COPROC_USE_COP3 8 + + /* struct mips_float_state + This is only filled in if the SC_COPROC_USE_FPU bit + is set in sc_coproc_used. */ +#define sc_mips_float_state sc_fpr + int sc_fpr[32]; /* FP registers. */ + int sc_fpcsr; /* FPU status register. */ + int sc_fpeir; /* FP exception instruction register. */ + }; diff --git a/sysdeps/mach/hurd/mips/dl-machine.c b/sysdeps/mach/hurd/mips/dl-machine.c new file mode 100644 index 0000000000..18261e1115 --- /dev/null +++ b/sysdeps/mach/hurd/mips/dl-machine.c @@ -0,0 +1,131 @@ +/* Operating system support for run-time dynamic linker. MIPS specific + stuffs on Hurd. + 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. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../stdio-common/_itoa.h" +#include +#include +#include + +void weak_function +abort (void) +{ + _exit (127); +} + + +#include +#include +#include + +#undef _ +#define _(x) x + +/* Return a string describing the errno code in ERRNUM. */ +char * weak_function +_strerror_internal (int errnum, char *buf, size_t buflen) +{ + int system; + int sub; + int code; + const struct error_system *es; + extern void __mach_error_map_compat (int *); + + __mach_error_map_compat (&errnum); + + system = err_get_system (errnum); + sub = err_get_sub (errnum); + code = err_get_code (errnum); + + if (system > err_max_system || ! __mach_error_systems[system].bad_sub) + { + const char *unk = _("Error in unknown error system: "); + const size_t unklen = strlen (unk); + char *p = buf + buflen; + *--p = '\0'; + p = _itoa (errnum, p, 16, 1); + return memcpy (p - unklen, unk, unklen); + } + + es = &__mach_error_systems[system]; + + if (sub >= es->max_sub) + return (char *) es->bad_sub; + + if (code >= es->subsystem[sub].max_code) + { + const char *unk = _("Unknown error "); + const size_t unklen = strlen (unk); + char *p = buf + buflen; + size_t len = strlen (es->subsystem[sub].subsys_name); + *--p = '\0'; + p = _itoa (errnum, p, 16, 1); + *p-- = ' '; + p = memcpy (p - len, es->subsystem[sub].subsys_name, len); + return memcpy (p - unklen, unk, unklen); + } + + return (char *) _(es->subsystem[sub].codes[code]); +} + +/* Read the whole contents of FILE into new mmap'd space with given + protections. The size of the file is returned in SIZE. */ +void * +_dl_sysdep_read_whole_file (const char *file, size_t *size, int prot) +{ + struct stat stat; + mach_port_t memobj_rd; + void *contents; + error_t err; + + memobj_rd = __open (file, O_RDONLY, 0); + if (memobj_rd) + { + err = __io_stat ((file_t) memobj_rd, &stat); + if (err) + { + __hurd_fail (err); + contents = 0; + } + else + { + /* Map a copy of the file contents. */ + contents = __mmap (0, stat.st_size, prot, MAP_COPY, memobj_rd, 0); + if (contents == (void *)-1) + contents = 0; + else + *size = stat.st_size; + } + + __mach_port_deallocate (__mach_task_self (), memobj_rd); + } + else + contents = 0; + + return contents; +} diff --git a/sysdeps/mach/hurd/mips/exc2signal.c b/sysdeps/mach/hurd/mips/exc2signal.c index f907c89cf0..235b2e2947 100644 --- a/sysdeps/mach/hurd/mips/exc2signal.c +++ b/sysdeps/mach/hurd/mips/exc2signal.c @@ -1,21 +1,21 @@ /* Translate Mach exception codes into signal numbers. MIPS version. -Copyright (C) 1991, 1992, 1994, 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. + 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 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. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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 #include @@ -25,56 +25,55 @@ Cambridge, MA 02139, USA. */ into a signal number and signal subcode. */ void -_hurd_exception2signal (int exception, int code, int subcode, - int *signo, long int *sigcode, int *error) +_hurd_exception2signal (struct hurd_signal_detail *detail, int *signo) { - *error = 0; + detail->error = 0; - switch (exception) + switch (detail->exc) { default: *signo = SIGIOT; - *sigcode = exception; + detail->code = detail->exc; break; case EXC_BAD_ACCESS: - if (code == KERN_PROTECTION_FAILURE) + if (detail->exc_code == KERN_PROTECTION_FAILURE) *signo = SIGSEGV; else *signo = SIGBUS; - *sigcode = subcode; - *error = code; + detail->code = detail->exc_subcode; + detail->error = detail->exc_code; break; case EXC_BAD_INSTRUCTION: *signo = SIGILL; - if (code == EXC_MIPS_II) - *sigcode = code; + if (detail->exc_code == EXC_MIPS_II) + detail->code = detail->exc_subcode; else - *sigcode = 0; + detail->code = 0; break; case EXC_ARITHMETIC: - switch (code) + switch (detail->exc_code) { case EXC_MIPS_OV: /* integer overflow */ *signo = SIGFPE; - *sigcode = EXC_MIPS_FLT_OVERFLOW; + detail->code = detail->exc_subcode; break; default: *signo = SIGFPE; - *sigcode = 0; + detail->code = 0; break; case EXC_MIPS_INT: /* Subcode is the fp_status word saved by the hardware. Give an error code corresponding to the first bit set. */ - if (subcode == EXC_MIPS_FLT_UNIMP) + if (detail->exc_subcode == EXC_MIPS_FLT_UNIMP) *signo = SIGILL; else *signo = SIGFPE; - *sigcode = subcode; + detail->code = detail->exc_subcode; break; } break; @@ -82,17 +81,17 @@ _hurd_exception2signal (int exception, int code, int subcode, case EXC_EMULATION: /* 3.0 doesn't give this one, why, I don't know. */ *signo = SIGEMT; - *sigcode = 0; + detail->code = 0; break; case EXC_SOFTWARE: *signo = SIGEMT; - *sigcode = 0; + detail->code = 0; break; case EXC_BREAKPOINT: *signo = SIGTRAP; - *sigcode = code; + detail->code = 0; break; } } diff --git a/sysdeps/mach/hurd/mips/init-fault.c b/sysdeps/mach/hurd/mips/init-fault.c new file mode 100644 index 0000000000..619ef996a9 --- /dev/null +++ b/sysdeps/mach/hurd/mips/init-fault.c @@ -0,0 +1,41 @@ +/* Set up a thread_state for proc_handle_exceptions. MIPS version. + 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. */ + +#include +#include +#include +#include + +extern jmp_buf _hurd_sigthread_fault_env; + +static char fault_stack[32]; +static volatile void +faulted (void) +{ + __longjmp (_hurd_sigthread_fault_env, 1); +} + +void +_hurd_initialize_fault_recovery_state (void *state) +{ + struct mips_thread_state *ts = state; + memset (ts, 0, sizeof (*ts)); + ts->r29 = (int) &fault_stack[sizeof (fault_stack)]; + ts->pc = (int) &faulted; +} diff --git a/sysdeps/mach/hurd/mips/init-first.c b/sysdeps/mach/hurd/mips/init-first.c new file mode 100644 index 0000000000..b057aeb097 --- /dev/null +++ b/sysdeps/mach/hurd/mips/init-first.c @@ -0,0 +1,407 @@ +/* Initialization code run first thing by the ELF startup code. For Mips/Hurd. + 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. */ + +#include +#include +#include +#include +#include "hurdstartup.h" +#include "set-hooks.h" +#include "hurdmalloc.h" /* XXX */ + +extern void __mach_init (void); +extern void __libc_init (int, char **, char **); +extern void __getopt_clean_environment (void); +extern void __libc_global_ctors (void); + +unsigned int __hurd_threadvar_max; +unsigned long int __hurd_threadvar_stack_offset; +unsigned long int __hurd_threadvar_stack_mask; + +int __libc_multiple_libcs = 1; + +int __libc_argc; +char **__libc_argv; + +/* We often need the PID. Cache this value. */ +pid_t __libc_pid; + +void *(*_cthread_init_routine) (void); /* Returns new SP to use. */ +void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__)); + + +/* Things that want to be run before _hurd_init or much anything else. + Importantly, these are called before anything tries to use malloc. */ +DEFINE_HOOK (_hurd_preinit_hook, (void)); + +static void +init1 (int argc, char *arg0, ...) +{ + char **argv = &arg0; + char **envp = &argv[argc + 1]; + struct hurd_startup_data *d; + + __libc_argc = argc; + __libc_argv = argv; + __environ = envp; + while (*envp) + ++envp; + d = (void *) ++envp; + + /* If we are the bootstrap task started by the kernel, + then after the environment pointers there is no Hurd + data block; the argument strings start there. */ + if ((void *) d != argv[0]) + { + _hurd_init_dtable = d->dtable; + _hurd_init_dtablesize = d->dtablesize; + + { + /* Check if the stack we are now on is different from + the one described by _hurd_stack_{base,size}. */ + + char dummy; + const vm_address_t newsp = (vm_address_t) &dummy; + + if (d->stack_size != 0 && (newsp < d->stack_base || + newsp - d->stack_base > d->stack_size)) + /* The new stack pointer does not intersect with the + stack the exec server set up for us, so free that stack. */ + __vm_deallocate (__mach_task_self (), d->stack_base, d->stack_size); + } + } + + if (__hurd_threadvar_stack_mask == 0) + { + /* We are not using cthreads, so we will have just a single allocated + area for the per-thread variables of the main user thread. */ + unsigned long int i; + __hurd_threadvar_stack_offset + = (unsigned long int) malloc (__hurd_threadvar_max * + sizeof (unsigned long int)); + if (__hurd_threadvar_stack_offset == 0) + __libc_fatal ("Can't allocate single-threaded per-thread variables."); + for (i = 0; i < __hurd_threadvar_max; ++i) + ((unsigned long int *) __hurd_threadvar_stack_offset)[i] = 0; + } + + if ((void *) d != argv[0] && (d->portarray || d->intarray)) + /* Initialize library data structures, start signal processing, etc. */ + _hurd_init (d->flags, argv, + d->portarray, d->portarraysize, + d->intarray, d->intarraysize); + + __libc_init (argc, argv, __environ); + + /* This is a hack to make the special getopt in GNU libc working. */ + __getopt_clean_environment (); + +#ifdef PIC + __libc_global_ctors (); +#endif + + (void) &init1; +} + +static void * +__init (int *data) +{ + int argc = *data; + char **argv = (void *) (data + 1); + char **envp = &argv[argc + 1]; + struct hurd_startup_data *d; + + __environ = envp; + while (*envp) + ++envp; + d = (void *) ++envp; + + /* The user might have defined a value for this, to get more variables. + Otherwise it will be zero on startup. We must make sure it is set + properly before before cthreads initialization, so cthreads can know + how much space to leave for thread variables. */ + if (__hurd_threadvar_max < _HURD_THREADVAR_MAX) + __hurd_threadvar_max = _HURD_THREADVAR_MAX; + + + /* After possibly switching stacks, call `init1' (above) with the user + code as the return address, and the argument data immediately above + that on the stack. */ + + if (_cthread_init_routine) + { + /* Initialize cthreads, which will allocate us a new stack to run on. */ + void *newsp = (*_cthread_init_routine) (); + struct hurd_startup_data *od; + + /* Copy the argdata from the old stack to the new one. */ + newsp = memcpy (newsp - ((char *) &d[1] - (char *) data), data, + (char *) d - (char *) data); + + /* Set up the Hurd startup data block immediately following + the argument and environment pointers on the new stack. */ + od = (newsp + ((char *) d - (char *) data)); + if ((void *) argv[0] == d) + /* We were started up by the kernel with arguments on the stack. + There is no Hurd startup data, so zero the block. */ + memset (od, 0, sizeof *od); + else + /* Copy the Hurd startup data block to the new stack. */ + *od = *d; + + /* Push the user code address on the top of the new stack. It will + be the return address for `init1'; we will jump there with NEWSP + as the stack pointer. */ + return newsp; + } + + /* The argument data is just above the stack frame we will unwind by + returning. */ + return (void *) data; + + (void) &__init; +} + +#ifdef PIC +/* This function is called to initialize the shared C library. + It is called just before the user _start code from mips/elf/start.S, + with the stack set up as that code gets it. */ + +/* NOTE! The linker notices the magical name `_init' and sets the DT_INIT + pointer in the dynamic section based solely on that. It is convention + for this function to be in the `.init' section, but the symbol name is + the only thing that really matters!! */ +/*void _init (int argc, ...) __attribute__ ((unused, section (".init")));*/ + +#if __mips64 +asm ("\ + .section .init,\"ax\",@progbits\n\ + .align 3\n\ + .globl _init\n\ + .type _init,@function\n\ + .ent _init\n\ +_init:\n\ + .set noreorder\n\ + .cpload $25\n\ + .set reorder\n\ + dsubu $29, 8*8\n\ + .cprestore 6*8\n\ + sd $16, 4*8($29)\n\ + sd $31, 5*8($29)\n\ + jal preinit\n\ + sd $28, 6*8($29)\n\ + move $16, $29 # Save the old stack pointer to s0 ($16)\n\ + daddu $4, $29, 4*8 + jal __init\n\ + # Restore saved registers from the old stack.\n\ + ld $28, 6*8($16)\n\ + ld $31, 5*8($16)\n\ + ld $16, 4*8($16)\n\ + move $29, $2 # set new sp to SP\n\ +call_init1:\n\ + ld $4, 0($29)\n\ + ld $5, 1*8($29)\n\ + ld $6, 2*8($29)\n\ + ld $7, 3*8($29)\n\ + dla $25, init1\n\ + jr $25\n\ + .end _init\n\ + .text\n\ +"); +#else +asm ("\ + .section .init,\"ax\",@progbits\n\ + .align 2\n\ + .globl _init\n\ + .type _init,@function\n\ + .ent _init\n\ +_init:\n\ + .set noreorder\n\ + .cpload $25\n\ + .set reorder\n\ + subu $29, 32\n\ + .cprestore 24\n\ + sw $16, 16($29)\n\ + sw $31, 20($29)\n\ + jal preinit\n\ + sw $28, 24($29)\n\ + move $16, $29 # Save the old stack pointer to s0 ($16)\n\ + addu $4, $29, 32 + jal __init\n\ + # Restore saved registers from the old stack.\n\ + lw $28, 24($16)\n\ + lw $31, 20($16)\n\ + lw $16, 16($16)\n\ + move $29, $2 # set new sp to SP\n\ +call_init1:\n\ + lw $4, 0($29)\n\ + lw $5, 4($29)\n\ + lw $6, 8($29)\n\ + lw $7, 12($29)\n\ + la $25, init1\n\ + jr $25\n\ + .end _init\n\ + .text\n\ +"); +#endif + +static void +preinit (void) +{ + /* Initialize data structures so we can do RPCs. */ + __mach_init (); + + RUN_HOOK (_hurd_preinit_hook, ()); + + (void) &preinit; +} + +void __libc_init_first (int argc, ...) +{ +} +#endif + +#ifndef PIC +/* An assembler code wrapping c function __init. */ +#ifdef __mips64 +asm ("\ + .text\n\ + .align 3\n\ +init:\n\ + dsubu $29, 8*8\n\ + sd $16, 4*8($29)\n\ + sd $31, 5*8($29)\n\ + move $16, $29\n\ + jal __init\n\ + ld $31, 5*8($16)\n\ + ld $16, 4*8($16)\n\ + move $29, $2 # set new sp to SP\n\ +call_init1:\n\ + ld $4, 0($29)\n\ + ld $5, 1*8($29)\n\ + ld $6, 2*8($29)\n\ + ld $7, 3*8($29)\n\ + dla $25, init1\n\ + jr $25\n\ +"); +#else +asm ("\ + .text\n\ + .align 2\n\ +init:\n\ + subu $29, 32\n\ + sw $16, 16($29)\n\ + sw $31, 20($29)\n\ + move $16, $29\n\ + jal __init\n\ + lw $31, 20($16)\n\ + lw $16, 16($16)\n\ + move $29, $2 # set new sp to SP\n\ +call_init1:\n\ + lw $4, 0($29)\n\ + lw $5, 4($29)\n\ + lw $6, 8($29)\n\ + lw $7, 12($29)\n\ + la $25, init1\n\ + jr $25\n\ +"); +#endif + +/* An assembler code wrapping c function ___libc_init_first. + ___libc_init_first does an RPC call to flush cache to put doinit + function on the stack, so we should call __mach_init first in + this wrap. */ +#ifdef __mips64 +asm ("\ + .text\n\ + .align 3\n\ + .globl __libc_init_first\n\ +__libc_init_first:\n\ + dsubu $29, 8\n\ + sd $31, 0($29) + jal __mach_init\n\ + ld $4, 0($29) + ld $5, 1*8($29) + ld $6, 2*8($29) + ld $7, 3*8($29) + j ___libc_init_first\n\ +"); +#else +asm ("\ + .text\n\ + .align 2\n\ + .globl __libc_init_first\n\ +__libc_init_first:\n\ + subu $29, 4\n\ + sw $31, 0($29) + jal __mach_init\n\ + lw $4, 0($29) + lw $5, 4($29) + lw $6, 8($29) + lw $7, 12($29) + j ___libc_init_first\n\ +"); +#endif + +static void +___libc_init_first (int return_addr, int argc, ...) +{ + void doinit (int *data) + { +#if 0 + /* This function gets called with the argument data at TOS. */ + void doinit1 (int argc, ...) + { + init (&argc); + } +#endif + extern void init (int *data); + + /* Push the user return address after the argument data, and then + jump to `doinit1' (above), so it is as if __libc_init_first's + caller had called `init' with the argument data already on the + stack. */ + *--data = return_addr; + +#ifdef __mips64 + asm volatile ("ld $31, 0(%0)\n" /* Load the original return address. */ + "daddu $29, %0, 8\n" /* Switch to new outermost stack. */ + "move $4, $29\n" + "jr %1" : : "r" (data), "r" (&init)); +#else + asm volatile ("lw $31, 0(%0)\n" /* Load the original return address. */ + "addu $29, %0, 4\n" /* Switch to new outermost stack. */ + "move $4, $29\n" + "jr %1" : : "r" (data), "r" (&init)); +#endif + /* NOTREACHED */ + } + +#if 0 + /* Initialize data structures so we can do RPCs. */ + __mach_init (); +#endif + + RUN_HOOK (_hurd_preinit_hook, ()); + + _hurd_startup ((void **) &argc, &doinit); + + (void) &___libc_init_first; +} +#endif diff --git a/sysdeps/mach/hurd/mips/intr-msg.h b/sysdeps/mach/hurd/mips/intr-msg.h new file mode 100644 index 0000000000..7d155f63f3 --- /dev/null +++ b/sysdeps/mach/hurd/mips/intr-msg.h @@ -0,0 +1,127 @@ +/* Machine-dependent details of interruptible RPC messaging. Mips version. + 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. */ + + +#ifdef __mips64 +#define INTR_MSG_TRAP(msg, option, send_size, rcv_size, rcv_name, timeout, notify) \ +({ \ + error_t err; \ + mach_port_t __rcv_name = (rcv_name); \ + mach_msg_timeout_t __timeout = (timeout); \ + mach_port_t __notify = (notify); \ + asm (".globl _hurd_intr_rpc_msg_do_trap\n" \ + ".globl _hurd_intr_rpc_msg_in_trap\n" \ + " move $4, %1\n" \ + " move $5, %2\n" \ + " move $6, %3\n" \ + " move $7, %4\n" \ + " move $8, %5\n" \ + " move $9, %6\n" \ + " move $10, %7\n" \ + " dli $2, -25\n" \ + "_hurd_intr_rpc_msg_do_trap: syscall\n" \ + "_hurd_intr_rpc_msg_in_trap: move %0, $2\n" \ + : "=r" (err) \ + : "r" (msg), "r" (option), "r" (send_size), "r" (rcv_size), \ + "r" (__rcv_name), "r" (__timeout), "r" (__notify) \ + : "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", \ + "$11", "$12", "$13", "$14", "$15", "$24", "$25", "$28"); \ + err; \ +}) +#else +#define INTR_MSG_TRAP(msg, option, send_size, rcv_size, rcv_name, timeout, notify) \ +({ \ + error_t err; \ + mach_port_t __rcv_name = (rcv_name); \ + mach_msg_timeout_t __timeout = (timeout); \ + mach_port_t __notify = (notify); \ + asm (".globl _hurd_intr_rpc_msg_do_trap\n" \ + ".globl _hurd_intr_rpc_msg_in_trap\n" \ + " move $4, %1\n" \ + " move $5, %2\n" \ + " move $6, %3\n" \ + " move $7, %4\n" \ + " move $8, %5\n" \ + " move $9, %6\n" \ + " move $10, %7\n" \ + " li $2, -25\n" \ + "_hurd_intr_rpc_msg_do_trap: syscall\n" \ + "_hurd_intr_rpc_msg_in_trap: move %0, $2\n" \ + : "=r" (err) \ + : "r" (msg), "r" (option), "r" (send_size), "r" (rcv_size), \ + "r" (__rcv_name), "r" (__timeout), "r" (__notify) \ + : "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", \ + "$11", "$12", "$13", "$14", "$15", "$24", "$25", "$28"); \ + err; \ +}) +#endif + +static inline void +INTR_MSG_BACK_OUT (struct mips_thread_state *state) +{ + return; +} + +#include "hurdfault.h" + +static inline int +SYSCALL_EXAMINE (struct mips_thread_state *state, int *callno) +{ + u_int32_t *p = (void *) (state->pc - 4); + int result; + if (_hurdsig_catch_memory_fault (p)) + return 0; + if (result = (*p == 0x0000000c)) + /* The PC is just after a `syscall' instruction. + This is a system call in progress; v0($2) holds the call number. */ + *callno = state->r2; + _hurdsig_end_catch_fault (); + return result; +} + + +struct mach_msg_trap_args + { + /* This is the order of arguments to mach_msg_trap. */ + mach_msg_header_t *msg; + mach_msg_option_t option; + mach_msg_size_t send_size; + mach_msg_size_t rcv_size; + mach_port_t rcv_name; + mach_msg_timeout_t timeout; + mach_port_t notify; + }; + + +static inline mach_port_t +MSG_EXAMINE (struct mips_thread_state *state, int *msgid) +{ + mach_msg_header_t *msg; + mach_port_t send_port; + + msg = (mach_msg_header_t *) state->r4; + + if (_hurdsig_catch_memory_fault (msg)) + return MACH_PORT_NULL; + send_port = msg->msgh_remote_port; + *msgid = msg->msgh_id; + _hurdsig_end_catch_fault (); + + return send_port; +} diff --git a/sysdeps/mach/hurd/mips/longjmp-ctx.c b/sysdeps/mach/hurd/mips/longjmp-ctx.c new file mode 100644 index 0000000000..df04900e78 --- /dev/null +++ b/sysdeps/mach/hurd/mips/longjmp-ctx.c @@ -0,0 +1,41 @@ +/* Perform a `longjmp' on a `struct sigcontext'. MIPS version. + 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. */ + +#include +#include +#include + +void +_hurd_longjmp_sigcontext (struct sigcontext *scp, jmp_buf env, int retval) +{ + scp->sc_gpr[16] = env[0].__regs[0]; + scp->sc_gpr[17] = env[0].__regs[1]; + scp->sc_gpr[18] = env[0].__regs[2]; + scp->sc_gpr[19] = env[0].__regs[3]; + scp->sc_gpr[20] = env[0].__regs[4]; + scp->sc_gpr[21] = env[0].__regs[5]; + scp->sc_gpr[22] = env[0].__regs[6]; + scp->sc_gpr[23] = env[0].__regs[7]; + + scp->sc_gpr[28] = (int) env[0].__gp; + scp->sc_fp = (int) env[0].__fp; + scp->sc_sp = (int) env[0].__sp; + scp->sc_pc = (int) env[0].__pc; + scp->sc_gpr[2] = retval ?: 1; +} diff --git a/sysdeps/mach/hurd/mips/longjmp-ts.c b/sysdeps/mach/hurd/mips/longjmp-ts.c index 980a2ceb94..ea62bb1bf3 100644 --- a/sysdeps/mach/hurd/mips/longjmp-ts.c +++ b/sysdeps/mach/hurd/mips/longjmp-ts.c @@ -1,21 +1,21 @@ /* Perform a `longjmp' on a Mach thread_state. MIPS version. -Copyright (C) 1991, 1994 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., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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. */ #include #include diff --git a/sysdeps/mach/hurd/mips/sigcontext.h b/sysdeps/mach/hurd/mips/sigcontext.h deleted file mode 100644 index 81d1f25f25..0000000000 --- a/sysdeps/mach/hurd/mips/sigcontext.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 1994 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., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -/* Signal handlers are actually called: - void handler (int sig, int code, struct sigcontext *scp); */ - -/* State of this thread when the signal was taken. */ -struct sigcontext - { - /* These first members are machine-independent. */ - - int sc_onstack; /* Nonzero if running on sigstack. */ - __sigset_t sc_mask; /* Blocked signals to restore. */ - - /* MiG reply port this thread is using. */ - unsigned int sc_reply_port; - - /* Port this thread is doing an interruptible RPC on. */ - unsigned int sc_intr_port; - - /* Error code associated with this signal (interpreted as `error_t'). */ - int sc_error; - - /* All following members are machine-dependent. The rest of this - structure is written to be laid out identically to: - { - struct mips_thread_state ts; - struct mips_exc_state es; - struct mips_float_state fs; - } - trampoline.c knows this, so it must be changed if this changes. */ -#define sc_mips_thread_state sc_gpr /* Beginning of correspondence. */ - int sc_gpr[31]; /* "General" registers; [0] is r1. */ - int sc_mdlo, sc_mdhi; /* Low and high multiplication results. */ - int sc_pc; /* Instruction pointer. */ - - /* struct mips_exc_state */ -#define sc_mips_exc_state sc_cause - unsigned int sc_cause; /* Machine-level trap code. */ -#define SC_CAUSE_SST 0x00000044 - unsigned int sc_badvaddr; - unsigned int sc_coproc_used; /* Which coprocessors the thread has used. */ -#define SC_COPROC_USE_COP0 1 /* (by definition) */ -#define SC_COPROC_USE_COP1 2 /* FPA */ -#define SC_COPROC_USE_FPU SC_COPROC_USE_COP1 -#define SC_COPROC_USE_COP2 4 -#define SC_COPROC_USE_COP3 8 - - /* struct mips_float_state - This is only filled in if the SC_COPROC_USE_FPU bit - is set in sc_coproc_used. */ -#define sc_mips_float_state sc_fpr - int sc_fpr[32]; /* FP registers. */ - int sc_fpcsr; /* FPU status register. */ - int sc_fpeir; /* FP exception instruction register. */ - }; diff --git a/sysdeps/mach/hurd/mips/sigreturn.c b/sysdeps/mach/hurd/mips/sigreturn.c index 7396a8bb22..fe38fac1df 100644 --- a/sysdeps/mach/hurd/mips/sigreturn.c +++ b/sysdeps/mach/hurd/mips/sigreturn.c @@ -1,30 +1,32 @@ -/* Copyright (C) 1991, 1992, 1994, 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* 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 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. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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 #include #include #include +#include int __sigreturn (struct sigcontext *scp) { struct hurd_sigstate *ss; + struct hurd_userlink *link = (void *) &scp[1]; mach_port_t *reply_port; if (scp == NULL || (scp->sc_mask & _SIG_CANT_MASK)) @@ -36,6 +38,11 @@ __sigreturn (struct sigcontext *scp) ss = _hurd_self_sigstate (); __spin_lock (&ss->lock); + /* Remove the link on the `active resources' chain added by + _hurd_setup_sighandler. Its purpose was to make sure + that we got called; now we have, it is done. */ + _hurd_userlink_unlink (link); + /* Restore the set of blocked signals, and the intr_port slot. */ ss->blocked = scp->sc_mask; ss->intr_port = scp->sc_intr_port; @@ -48,15 +55,11 @@ __sigreturn (struct sigcontext *scp) the signal thread will notice it if it runs another handler, and arrange to have us called over again in the new reality. */ ss->context = scp; - /* Clear the intr_port slot, since we are not in fact doing - an interruptible RPC right now. If SS->intr_port is not null, - the SCP context is doing an interruptible RPC, but the signal - thread will examine us while we are blocked in the sig_post RPC. */ - ss->intr_port = MACH_PORT_NULL; __spin_unlock (&ss->lock); - __msg_sig_post (_hurd_msgport, 0, __mach_task_self ()); + __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); /* If a pending signal was handled, sig_post never returned. */ __spin_lock (&ss->lock); + ss->context = NULL; } if (scp->sc_onstack) @@ -73,7 +76,17 @@ __sigreturn (struct sigcontext *scp) reply_port = (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY); if (*reply_port) - __mach_port_destroy (__mach_task_self (), *reply_port); + { + mach_port_t port = *reply_port; + + /* Assigning MACH_PORT_DEAD here tells libc's mig_get_reply_port not to + get another reply port, but avoids mig_dealloc_reply_port trying to + deallocate it after the receive fails (which it will, because the + reply port will be bogus, whether we do this or not). */ + *reply_port = MACH_PORT_DEAD; + + __mach_port_destroy (__mach_task_self (), port); + } *reply_port = scp->sc_reply_port; if (scp->sc_coproc_used & SC_COPROC_USE_FPU) @@ -83,30 +96,70 @@ __sigreturn (struct sigcontext *scp) asm volatile ("l.d $f" #n ",%0" : : "m" (scp->sc_fpr[n])) /* Restore floating-point registers. */ +#ifdef __mips64 restore_fpr (0); + restore_fpr (1); restore_fpr (2); + restore_fpr (3); restore_fpr (4); + restore_fpr (5); restore_fpr (6); + restore_fpr (7); restore_fpr (8); + restore_fpr (9); restore_fpr (10); + restore_fpr (11); restore_fpr (12); + restore_fpr (13); restore_fpr (14); + restore_fpr (15); restore_fpr (16); + restore_fpr (17); restore_fpr (18); + restore_fpr (19); restore_fpr (20); + restore_fpr (21); restore_fpr (22); + restore_fpr (23); restore_fpr (24); + restore_fpr (25); restore_fpr (26); + restore_fpr (27); restore_fpr (28); + restore_fpr (29); restore_fpr (30); + restore_fpr (31); +#else + restore_fpr (0); + restore_fpr (2); + restore_fpr (4); + restore_fpr (6); + restore_fpr (8); + restore_fpr (10); + restore_fpr (12); + restore_fpr (14); + restore_fpr (16); + restore_fpr (18); + restore_fpr (20); + restore_fpr (22); + restore_fpr (24); + restore_fpr (26); + restore_fpr (28); + restore_fpr (30); +#endif /* Restore the floating-point control/status register ($f31). */ asm volatile ("ctc1 %0,$f31" : : "r" (scp->sc_fpcsr)); } /* Load all the registers from the sigcontext. */ +#ifdef __mips64 +#define restore_gpr(n) \ + asm volatile ("ld $" #n ",%0" : : "m" (scpreg->sc_gpr[n - 1])) +#else #define restore_gpr(n) \ asm volatile ("lw $" #n ",%0" : : "m" (scpreg->sc_gpr[n - 1])) +#endif { register const struct sigcontext *const scpreg asm ("$1") = scp; @@ -157,9 +210,10 @@ __sigreturn (struct sigcontext *scp) at = &scpreg->sc_pc; /* This is an emulated instruction that will find at the address in $1 two words: the PC value to restore, and the $1 value to restore. */ - asm volatile (".word op_sigreturn"); - + asm volatile (".word %0" : : "i" (op_sigreturn)); asm volatile (".set reorder; .set at;"); + /* NOTREACHED */ + return at; /* To prevent optimization. */ } /* NOTREACHED */ diff --git a/sysdeps/mach/hurd/mips/trampoline.c b/sysdeps/mach/hurd/mips/trampoline.c index 03e3d1da6f..fbb7df508f 100644 --- a/sysdeps/mach/hurd/mips/trampoline.c +++ b/sysdeps/mach/hurd/mips/trampoline.c @@ -1,56 +1,58 @@ /* Set thread_state for sighandler, and sigcontext to recover. MIPS version. -Copyright (C) 1994, 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. + 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 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. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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 +#include #include "thread_state.h" - - -struct mach_msg_trap_args - { - /* This is the order of arguments to mach_msg_trap. */ - mach_msg_header_t *msg; - mach_msg_option_t option; - mach_msg_size_t send_size; - mach_msg_size_t rcv_size; - mach_port_t rcv_name; - mach_msg_timeout_t timeout; - mach_port_t notify; - }; +#include +#include +#include "hurdfault.h" +#include "intr-msg.h" struct sigcontext * _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, - int signo, long int sigcode, - int rpc_wait, + int signo, struct hurd_signal_detail *detail, + volatile int rpc_wait, struct machine_thread_all_state *state) { - - __label__ trampoline, rpc_wait_trampoline; - void *sigsp; + __label__ trampoline, rpc_wait_trampoline, firewall; + void *volatile sigsp; struct sigcontext *scp; + struct + { + int signo; + long int sigcode; + struct sigcontext *scp; /* Points to ctx, below. */ + void *sigreturn_addr; + void *sigreturn_returns_here; + struct sigcontext *return_scp; /* Same; arg to sigreturn. */ + struct sigcontext ctx; + struct hurd_userlink link; + } *stackframe; if (ss->context) { /* We have a previous sigcontext that sigreturn was about to restore when another signal arrived. We will just base our setup on that. */ - if (! setjmp (_hurd_sigthread_fault_env)) + if (! _hurdsig_catch_memory_fault (ss->context)) { memcpy (&state->basic, &ss->context->sc_mips_thread_state, sizeof (state->basic)); @@ -63,24 +65,17 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, sizeof (state->fpu)); state->set |= (1 << MIPS_FLOAT_STATE); } - assert (! rpc_wait); - /* The intr_port slot was cleared before sigreturn sent us the - sig_post that made us notice this pending signal, so - _hurd_internal_post_signal wouldn't do interrupt_operation. - After we return, our caller will set SCP->sc_intr_port (in the - new context) from SS->intr_port and clear SS->intr_port. Now - that we are restoring this old context recorded by sigreturn, - we want to restore its intr_port too; so store it in - SS->intr_port now, so it will end up in SCP->sc_intr_port - later. */ - ss->intr_port = ss->context->sc_intr_port; } - /* If the sigreturn context was bogus, just ignore it. */ - ss->context = NULL; } - else if (! machine_get_basic_state (ss->thread, state)) + + if (! machine_get_basic_state (ss->thread, state)) return NULL; + /* Save the original SP in the gratuitous s0 ($16) slot. + We may need to reset the SP (the `r29' slot) to avoid clobbering an + interrupted RPC frame. */ + state->basic.r16 = state->basic.r29; + if ((ss->actions[signo].sa_flags & SA_ONSTACK) && !(ss->sigaltstack.ss_flags & (SA_DISABLE|SA_ONSTACK))) { @@ -92,13 +87,46 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, else sigsp = (char *) state->basic.r29; - /* Set up the sigcontext structure on the stack. This is all the stack - needs, since the args are passed in registers (below). */ - sigsp -= sizeof (*scp); - scp = sigsp; + /* Push the arguments to call `trampoline' on the stack. */ + sigsp -= sizeof (*stackframe); + stackframe = sigsp; - if (! setjmp (_hurd_sigthread_fault_env)) + if (_hurdsig_catch_memory_fault (stackframe)) { + /* We got a fault trying to write the stack frame. + We cannot set up the signal handler. + Returning NULL tells our caller, who will nuke us with a SIGILL. */ + return NULL; + } + else + { + int ok; + + extern void _hurdsig_longjmp_from_handler (void *, jmp_buf, int); + + /* Add a link to the thread's active-resources list. We mark this as + the only user of the "resource", so the cleanup function will be + called by any longjmp which is unwinding past the signal frame. + The cleanup function (in sigunwind.c) will make sure that all the + appropriate cleanups done by sigreturn are taken care of. */ + stackframe->link.cleanup = &_hurdsig_longjmp_from_handler; + stackframe->link.cleanup_data = &stackframe->ctx; + stackframe->link.resource.next = NULL; + stackframe->link.resource.prevp = NULL; + stackframe->link.thread.next = ss->active_resources; + stackframe->link.thread.prevp = &ss->active_resources; + if (stackframe->link.thread.next) + stackframe->link.thread.next->thread.prevp + = &stackframe->link.thread.next; + ss->active_resources = &stackframe->link; + + /* Set up the arguments for the signal handler. */ + stackframe->signo = signo; + stackframe->sigcode = detail->code; + stackframe->scp = stackframe->return_scp = scp = &stackframe->ctx; + stackframe->sigreturn_addr = &__sigreturn; + stackframe->sigreturn_returns_here = &&firewall; /* Crash on return. */ + /* Set up the sigcontext from the current state of the thread. */ scp->sc_onstack = ss->sigaltstack.ss_flags & SA_ONSTACK ? 1 : 0; @@ -110,24 +138,23 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, /* struct sigcontext is laid out so that starting at sc_cause mimics a struct mips_exc_state. */ - if (! machine_get_state (ss->thread, state, MIPS_EXC_STATE, - &state->exc, &scp->sc_cause, - sizeof (state->exc))) - return NULL; - if ((scp->sc_coproc_used & SC_COPROC_USE_FPU) && - /* struct sigcontext is laid out so that starting at sc_fpr - mimics a struct mips_float_state. This state - is only meaningful if the coprocessor was used. */ - ! machine_get_state (ss->thread, state, MIPS_FLOAT_STATE, - &state->fpu, - &scp->sc_mips_float_state, sizeof (state->fpu))) + ok = machine_get_state (ss->thread, state, MIPS_EXC_STATE, + &state->exc, &scp->sc_cause, + sizeof (state->exc)); + + if (ok && (scp->sc_coproc_used & SC_COPROC_USE_FPU)) + /* struct sigcontext is laid out so that starting at sc_fpr + mimics a struct mips_float_state. This state + is only meaningful if the coprocessor was used. */ + ok = machine_get_state (ss->thread, state, MIPS_FLOAT_STATE, + &state->fpu, &scp->sc_mips_float_state, + sizeof (state->fpu)); + + _hurdsig_end_catch_fault (); + + if (! ok) return NULL; } - else - /* We got a fault trying to write the stack frame. - We cannot set up the signal handler. - Returning NULL tells our caller, who will nuke us with a SIGILL. */ - return NULL; /* Modify the thread state to call the trampoline code on the new stack. */ if (rpc_wait) @@ -145,6 +172,12 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, starting with a0 ($4). */ struct mach_msg_trap_args *args = (void *) &state->basic.r4; + if (_hurdsig_catch_memory_fault (args)) + { + /* Faulted accessing ARGS. Bomb. */ + return NULL; + } + assert (args->option & MACH_RCV_MSG); /* Disable the message-send, since it has already completed. The calls we retry need only wait to receive the reply message. */ @@ -156,17 +189,22 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, args->option |= MACH_RCV_TIMEOUT; args->timeout = _hurd_interrupted_rpc_timeout; + _hurdsig_end_catch_fault (); + state->basic.pc = (int) &&rpc_wait_trampoline; - state->basic.r29 = (int) sigsp; /* $29 is the stack pointer register. */ + /* The reply-receiving trampoline code runs initially on the original + user stack. We pass it the signal stack pointer in s4 ($20). */ + state->basic.r29 = state->basic.r16; /* Restore mach_msg syscall SP. */ + state->basic.r20 = (int) sigsp; /* After doing the message receive, the trampoline code will need to update the v0 ($2) value to be restored by sigreturn. To simplify the assembly code, we pass the address of its slot in SCP to the - trampoline code in v1 ($3). */ - state->basic.r3 = (int) &scp->sc_gpr[1]; + trampoline code in s5 ($21). */ + state->basic.r21 = (int) &scp->sc_gpr[1]; /* We must preserve the mach_msg_trap args in a0..t2 ($4..$10). Pass the handler args to the trampoline code in s1..s3 ($17..$19). */ state->basic.r17 = signo; - state->basic.r18 = sigcode; + state->basic.r18 = detail->code; state->basic.r19 = (int) scp; } else @@ -174,12 +212,12 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, state->basic.pc = (int) &&trampoline; state->basic.r29 = (int) sigsp; state->basic.r4 = signo; - state->basic.r5 = sigcode; + state->basic.r5 = detail->code; state->basic.r6 = (int) scp; } - /* We pass the handler function to the trampoline code in at ($1). */ - state->basic.r1 = (int) handler; + /* We pass the handler function to the trampoline code in s6 ($22). */ + state->basic.r22 = (int) handler; /* In the callee-saved register s0 ($16), we save the SCP value to pass to __sigreturn after the handler returns. */ state->basic.r16 = (int) scp; @@ -197,21 +235,31 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, asm volatile (".set noat; .set noreorder; .set nomacro\n" /* Retry the interrupted mach_msg system call. */ +#ifdef __mips64 + "dli $2, -25\n" /* mach_msg_trap */ +#else "li $2, -25\n" /* mach_msg_trap */ +#endif "syscall\n" /* When the sigcontext was saved, v0 was MACH_RCV_INTERRUPTED. But now the message receive has completed and the original caller of the RPC (i.e. the code running when the signal arrived) needs to see the final return value of the message receive in v0. So store the new v0 value into the sc_gpr[1] member of the sigcontext - (whose address is in v1 to make this code simpler). */ - "sw $2, ($3)\n" + (whose address is in s5 to make this code simpler). */ +#ifdef __mips64 + "sd $2, ($21)\n" +#else + "sw $2, ($21)\n" +#endif /* Since the argument registers needed to have the mach_msg_trap arguments, we've stored the arguments to the handler function in registers s1..s3 ($17..$19). */ "move $4, $17\n" "move $5, $18\n" - "move $6, $19\n"); + "move $6, $19\n" + /* Switch to the signal stack. */ + "move $29, $20\n"); trampoline: /* Entry point for running the handler normally. The arguments to the @@ -222,14 +270,23 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, a2 SCP */ asm volatile - ("jal $1; nop\n" /* Call the handler function. */ + ("move $25, $22\n" /* Copy s6 to t9 for MIPS ABI. */ + "jal $25; nop\n" /* Call the handler function. */ /* Call __sigreturn (SCP); this cannot return. */ - "j %0\n" +#ifdef __mips64 + "dla $1,%0\n" +#else + "la $1,%0\n" +#endif + "j $1\n" "move $4, $16" /* Set up arg from saved SCP in delay slot. */ : : "i" (&__sigreturn)); /* NOTREACHED */ asm volatile (".set reorder; .set at; .set macro"); + firewall: + asm volatile ("hlt: j hlt"); + return NULL; } diff --git a/sysdeps/mach/hurd/posix_opt.h b/sysdeps/mach/hurd/posix_opt.h deleted file mode 100644 index 045b4b6666..0000000000 --- a/sysdeps/mach/hurd/posix_opt.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Posix options supported by the GNU Hurd port of GNU libc. */ - -#define _POSIX_JOB_CONTROL 1 -#define _POSIX_SAVED_IDS 1 -#define _POSIX_VDISABLE ((unsigned char) -1) - -/* Different Hurd filesystems might do these differently. */ -#undef _POSIX_CHOWN_RESTRICTED -#undef _POSIX_NO_TRUNC -/* Posix options supported by the GNU Hurd port of GNU libc. */ - -#define _POSIX_JOB_CONTROL 1 -#define _POSIX_SAVED_IDS 1 -#define _POSIX_VDISABLE ((unsigned char) -1) - -/* Different Hurd filesystems might do these differently. */ -#undef _POSIX_CHOWN_RESTRICTED -#undef _POSIX_NO_TRUNC - - - diff --git a/sysdeps/mach/hurd/select.c b/sysdeps/mach/hurd/select.c index 391b57bf5c..f8385ff29b 100644 --- a/sysdeps/mach/hurd/select.c +++ b/sysdeps/mach/hurd/select.c @@ -223,7 +223,7 @@ __select (nfds, readfds, writefds, exceptfds, timeout) /* We got a message. Decode it. */ #define IO_SELECT_REPLY_MSGID (21012 + 100) /* XXX */ const mach_msg_type_t inttype = - { MACH_MSG_TYPE_INTEGER_32, 32, 1, 1, 0, 0 }; + { MACH_MSG_TYPE_INTEGER_T, MACH_MSG_SIZE_INTEGER_T, 1, 1, 0, 0 }; if (msg.head.msgh_id == IO_SELECT_REPLY_MSGID && msg.head.msgh_size >= sizeof msg.error && !(msg.head.msgh_bits & MACH_MSGH_BITS_COMPLEX) && diff --git a/sysdeps/mach/hurd/statbuf.h b/sysdeps/mach/hurd/statbuf.h deleted file mode 100644 index a8f92cb5ed..0000000000 --- a/sysdeps/mach/hurd/statbuf.h +++ /dev/null @@ -1,131 +0,0 @@ -/* Copyright (C) 1992, 1993, 1994, 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. */ - -#ifndef _STATBUF_H - -#define _STATBUF_H 1 - -#include - -/* NOTE: The size of this structure (32 ints) is known in - , since it is used in the `io_stat' RPC. MiG - does not cope at all well with the passed C structure not being of - the expected size. There are some filler words at the end to allow - for future expansion. To increase the size of the structure used - in the RPC and retain binary compatibility, we would need to assign - a new message number. */ - -struct stat - { - int st_fstype; /* File system type. */ - __fsid_t st_fsid; /* File system ID. */ -#define st_dev st_fsid - - __ino_t st_ino; /* File number. */ - unsigned int st_gen; /* To detect reuse of file numbers. */ - __dev_t st_rdev; /* Device if special file. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Number of links. */ - - __uid_t st_uid; /* Owner. */ - __gid_t st_gid; /* Owning group. */ - - __off_t st_size; /* Size in bytes. */ - - __time_t st_atime; /* Access time, seconds */ - unsigned long int st_atime_usec; /* and microseconds. */ - __time_t st_mtime; /* Modification time, seconds */ - unsigned long int st_mtime_usec; /* and microseconds. */ - __time_t st_ctime; /* Status change time, seconds */ - unsigned long int st_ctime_usec; /* and microseconds. */ - - unsigned int st_blksize; /* Optimal size for I/O. */ - -#define _STATBUF_ST_BLKSIZE /* Tell code we have this member. */ - - unsigned int st_blocks; /* Number of 512-byte blocks allocated. - Not related to `st_blksize'. */ - - __uid_t st_author; /* File author. */ - - unsigned int st_flags; /* User-defined flags. - High 16 bits can be set only by root. */ - - int st_spare[11]; /* Room for future expansion. */ - }; - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ -#define __S_IFIFO 0010000 /* FIFO. */ - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 00400 /* Read by owner. */ -#define __S_IWRITE 00200 /* Write by owner. */ -#define __S_IEXEC 00100 /* Execute by owner. */ - - -#ifdef __USE_GNU -/* If set, there is no benefit in caching the contents of this file. */ -#define S_INOCACHE 000000200000 - -/* If the S_IUSEUNK bit is set, then the S_IUNKNOWN bits (see below) - control access for unknown users. If S_IUSEUNK is clear, then unknown - users are treated as "others" for purposes of access control. */ -#define S_IUSEUNK 000000400000 -/* Mask of protection bits for unknown users (no effective IDs at all). */ -#define S_IUNKNOWN 000007000000 -/* Shift S_IREAD, S_IWRITE, S_IEXEC left this many bits to produce the - protection bits for unknown users. */ -#define S_IUNKSHIFT 12 - -/* Read only bits: */ - -/* There is a passive translator set for this file */ -#define S_IPTRANS 000010000000 -/* There is an active translator running on this file */ -#define S_IATRANS 000020000000 -/* This is the root of a filesystem (or single node translator) */ -#define S_IROOT 000040000000 -/* All the bits relevant to translators */ -#define S_ITRANS 000070000000 - -/* ALL the unused bits. */ -#define S_ISPARE (~(S_IFMT|S_ITRANS|S_INOCACHE| \ - S_IUSEUNK|S_IUNKNOWN|07777)) -#endif - -/* Default file creation mask (umask). */ -#ifdef __USE_BSD -#define CMASK 0022 -#endif - - -#endif /* statbuf.h */ diff --git a/sysdeps/mach/libc-lock.h b/sysdeps/mach/libc-lock.h deleted file mode 100644 index cfd176750a..0000000000 --- a/sysdeps/mach/libc-lock.h +++ /dev/null @@ -1,90 +0,0 @@ -/* libc-internal interface for mutex locks. Mach cthreads version. - 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 _LIBC_LOCK_H -#define _LIBC_LOCK_H 1 - -#ifdef _LIBC -#include -#define __libc_lock_t struct mutex -#else -typedef struct __libc_lock_opaque__ __libc_lock_t; -#endif - -/* Define a lock variable NAME with storage class CLASS. The lock must be - initialized with __libc_lock_init before it can be used (or define it - with __libc_lock_define_initialized, below). Use `extern' for CLASS to - declare a lock defined in another module. In public structure - definitions you must use a pointer to the lock structure (i.e., NAME - begins with a `*'), because its storage size will not be known outside - of libc. */ -#define __libc_lock_define(CLASS,NAME) \ - CLASS __libc_lock_t NAME; - -/* Define an initialized lock variable NAME with storage class CLASS. */ -#define __libc_lock_define_initialized(CLASS,NAME) \ - CLASS __libc_lock_t NAME = MUTEX_INITIALIZER; - -/* Initialize the named lock variable, leaving it in a consistent, unlocked - state. */ -#define __libc_lock_init(NAME) __mutex_init (&(NAME)) - -/* Finalize the named lock variable, which must be locked. It cannot be - used again until __libc_lock_init is called again on it. This must be - called on a lock variable before the containing storage is reused. */ -#define __libc_lock_fini(NAME) __mutex_unlock (&(NAME)) - -/* Lock the named lock variable. */ -#define __libc_lock_lock(NAME) __mutex_lock (&(NAME)) - -/* Lock the named lock variable. */ -#define __libc_lock_trylock(NAME) (!__mutex_trylock (&(NAME))) - -/* Unlock the named lock variable. */ -#define __libc_lock_unlock(NAME) __mutex_unlock (&(NAME)) - -/* Start a critical region with a cleanup function */ -#define __libc_cleanup_region_start(FCT, ARG) \ -{ \ - typeof (FCT) __save_FCT = FCT; \ - typeof (ARG) __save_ARG = ARG; \ - /* close brace is in __libc_cleanup_region_end below. */ - -/* End a critical region started with __libc_cleanup_region_start. */ -#define __libc_cleanup_region_end(DOIT) \ - if (DOIT) \ - (*__save_FCT)(__save_ARG); \ -} - - -#ifdef _LIBC -/* We need portable names for some functions. E.g., when they are - used as argument to __libc_cleanup_region_start. */ -#define __libc_mutex_unlock __mutex_unlock -#endif - -/* XXX until cthreads supports recursive locks */ -#define __libc_lock_define_initialized_recursive __libc_lock_define_initialized -#define __libc_lock_init_recursive __libc_lock_init -#define __libc_lock_fini_recursive __libc_lock_fini -#define __libc_lock_trylock_recursive __libc_lock_trylock -#define __libc_lock_unlock_recursive __libc_lock_unlock -#define __libc_lock_lock_recursive __libc_lock_lock - -#endif /* libc-lock.h */ diff --git a/sysdeps/mach/mips/cacheflush.c b/sysdeps/mach/mips/cacheflush.c index 5325e6fd1e..de2ec58bff 100644 --- a/sysdeps/mach/mips/cacheflush.c +++ b/sysdeps/mach/mips/cacheflush.c @@ -1,28 +1,28 @@ /* Flush the insn cache after GCC writes a closure on the stack. Mach/MIPS. -Copyright (C) 1994 Free Software Foundation, Inc. -This file is part of the GNU C Library. + 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 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. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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 #include /* Stupid name, but this is what GCC generates (config/mips/mips.h). */ void -cacheflush (void *addr, size_t size, int flag) +cacheflush (void *addr, unsigned size, int flag) { vm_machine_attribute_val_t val; diff --git a/sysdeps/mach/mips/machine-lock.h b/sysdeps/mach/mips/machine-lock.h index 628aae41bb..91d39e3753 100644 --- a/sysdeps/mach/mips/machine-lock.h +++ b/sysdeps/mach/mips/machine-lock.h @@ -1,25 +1,28 @@ /* Machine-specific definition for spin locks. MIPS version. -Copyright (C) 1994 Free Software Foundation, Inc. -This file is part of the GNU C Library. + 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 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. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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 _MACHINE_LOCK_H #define _MACHINE_LOCK_H +/* To get the TAS pseudo-instruction. */ +#include + /* The type of a spin lock variable. */ typedef __volatile int __spin_lock_t; @@ -46,19 +49,35 @@ __spin_unlock (__spin_lock_t *__lock) _EXTERN_INLINE int __spin_try_lock (register __spin_lock_t *__lock) { - register int __rtn; +#if (__mips >= 2) + int __rtn; + __asm__ __volatile (".set noreorder"); -#if 0 - __asm__ __volatile ("lw %0,0(%1)": "=r" (__rtn) : "r" (__lock)); - __asm__ __volatile ("sw %0,0(%0)": : "r" (__lock)); - __asm__ __volatile ("xor %0,%1,%0": "=r" (__rtn) : "r" (__lock)); +#if (__mips64) + __asm__ __volatile ("lld %0,0(%1)" : "=r" (__rtn) : "r" (__lock)); #else - /* Use the Mach microkernel's emulated TAS pseudo-instruction. */ - register int __rtn __asm__ ("a0"); - __asm__ __volatile (".word 0xf ! %0 " : "=r" (__rtn) : "0" (__lock)); + __asm__ __volatile ("ll %0,0(%1)" : "=r" (__rtn) : "r" (__lock)); +#endif + if (__rtn) + return 0; + __asm__ __volatile ("move %0,%1" : "=r" (__rtn) : "r" (__lock)); +#if (__mips64) + __asm__ __volatile ("scd %0,0(%1)" : "=r" (__rtn) : "r" (__lock)); +#else + __asm__ __volatile ("sc %0,0(%1)" : "=r" (__rtn) : "r" (__lock)); #endif + __asm__ __volatile (".set reorder"); + return __rtn; +#else + register int __rtn __asm__ ("a0"); + + /* Use the Mach microkernel's emulated TAS pseudo-instruction. */ + __asm__ __volatile (".set noreorder"); + __asm__ __volatile (".word %1" : "=r" (__rtn) : "i" (op_tas), "0" (__lock)); + __asm__ __volatile ("nop"); __asm__ __volatile (".set reorder"); return __rtn ^ (int) __lock; +#endif } /* Return nonzero if LOCK is locked. */ diff --git a/sysdeps/mach/mips/machine-sp.h b/sysdeps/mach/mips/machine-sp.h index 7406658f53..e1217c31f3 100644 --- a/sysdeps/mach/mips/machine-sp.h +++ b/sysdeps/mach/mips/machine-sp.h @@ -1,21 +1,21 @@ /* Machine-specific function to return the stack pointer. MIPS version. -Copyright (C) 1994 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., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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 _MACHINE_SP_H #define _MACHINE_SP_H diff --git a/sysdeps/mach/mips/syscall.S b/sysdeps/mach/mips/syscall.S index bf56b401dd..9936772295 100644 --- a/sysdeps/mach/mips/syscall.S +++ b/sysdeps/mach/mips/syscall.S @@ -1,37 +1,48 @@ -/* Copyright (C) 1994 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* 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 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. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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 +#ifdef PIC + .option pic2 +#endif ENTRY (syscall) - .frame sp,0,ra move v0, a0 /* Load system call number from first arg. */ move a0, a1 /* Move the next three args up a register. */ move a1, a2 move a2, a3 /* Load the remaining possible args (up to 11) from the stack. */ - lw t0,16(sp) - lw t1,20(sp) - lw t2,24(sp) - lw t3,28(sp) - lw t4,32(sp) - lw t5,36(sp) - lw t6,40(sp) +#ifdef __mips64 + ld t0,4*8(sp) + ld t1,5*8(sp) + ld t2,6*8(sp) + ld t3,7*8(sp) + ld t4,8*8(sp) + ld t5,9*8(sp) + ld t6,10*8(sp) +#else + lw t0,4*4(sp) + lw t1,5*4(sp) + lw t2,6*4(sp) + lw t3,7*4(sp) + lw t4,8*4(sp) + lw t5,9*4(sp) + lw t6,10*4(sp) +#endif syscall /* Do the system call. */ j ra /* Return to caller. */ - .end syscall diff --git a/sysdeps/mach/mips/sysdep.h b/sysdeps/mach/mips/sysdep.h index 7609be5931..a4e6dff148 100644 --- a/sysdeps/mach/mips/sysdep.h +++ b/sysdeps/mach/mips/sysdep.h @@ -1,35 +1,40 @@ -/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* 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 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. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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 MOVE(x,y) move y , x - -#if 0 #define LOSE asm volatile ("1: b 1b") -#endif +#define START_MACHDEP asm ("\ + .text\n\ + .globl _start\n\ + .ent _start\n\ +_start:\n\ + # Put initial SP in a0.\n\ + move $4, $29\n\ + # Jump to _start0; don't return.\n\ + j _start0\n\ + .end _start\n\ +"); +#define START_ARGS int *entry_sp #define SNARF_ARGS(argc, argv, envp) \ do \ { \ - int *entry_sp; \ register char **p; \ \ - asm ("addu %0,$30,4" : "=r" (entry_sp)); \ - \ argc = *entry_sp; \ argv = (char **) (entry_sp + 1); \ p = argv; \ @@ -44,11 +49,20 @@ Cambridge, MA 02139, USA. */ ({ register int __fn = fn, __sp = (int) sp; \ asm volatile ("move $sp,%0; j %1" : : "r" (__sp), "r" (__fn));}) +#define RETURN_TO(sp, pc, retval) \ + asm volatile ("move $29, %0; move $2, %2; move $25, %1; jr $25" \ + : : "r" (sp), "r" (pc), "r" (retval)) + #define STACK_GROWTH_DOWN -#ifdef P40 #include +#if defined (ASSEMBLER) + +#define ALIGN 2 + +#define MOVE(x,y) move y , x + #define SYSCALL(name, args) \ .globl syscall_error; \ kernel_trap(name,SYS_##name,args); \ diff --git a/sysdeps/mach/mips/thread_state.h b/sysdeps/mach/mips/thread_state.h index f4f4b429cf..a72848dfc0 100644 --- a/sysdeps/mach/mips/thread_state.h +++ b/sysdeps/mach/mips/thread_state.h @@ -1,25 +1,30 @@ /* Mach thread state definitions for machine-independent code. MIPS version. -Copyright (C) 1994 Free Software Foundation, Inc. -This file is part of the GNU C Library. + 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 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. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + 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 MACHINE_THREAD_STATE_FLAVOR MIPS_THREAD_STATE #define MACHINE_THREAD_STATE_COUNT MIPS_THREAD_STATE_COUNT +#ifdef PIC +#define MACHINE_THREAD_STATE_SET_PC(ts, pc) \ + ((ts)->PC = (ts)->r25 = (unsigned long int) (pc)) +#endif + #define machine_thread_state mips_thread_state #define PC pc diff --git a/sysdeps/mach/start.c b/sysdeps/mach/start.c index c2ea3e3b7b..b1d121eb75 100644 --- a/sysdeps/mach/start.c +++ b/sysdeps/mach/start.c @@ -29,7 +29,9 @@ Cambridge, MA 02139, USA. */ /* The first piece of initialized data. */ int __data_start = 0; +#ifndef _HURD_THREADVAR_H volatile int errno; +#endif extern void __mach_init (void); extern void __libc_init (int argc, char **argv, char **envp); @@ -62,6 +64,7 @@ start1 (void) #ifndef START_ARGS #define START_ARGS void +#endif #ifdef START_MACHDEP START_MACHDEP #define _start _start0 -- cgit v1.2.3