mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01:00
Update.
1997-07-13 01:18 Ulrich Drepper <drepper@cygnus.com> * setjmp/setjmp.h: Define _setjmp and _longjmp also if __USE_XOPEN. * sysdeps/unix/sysv/linux/bits/ipc.h: Fix comment. * sysdeps/unix/sysv/linux/bits/msq.h: Likewise. * sysdeps/unix/sysv/linux/bits/sem.h: Likewise. * sysdeps/unix/sysv/linux/bits/shm.h: Likewise. * time/Makefile (routines): Add getdate. * time/time.h: Add prototype for getdate and getdate_r. * time/getdate.c: New file. Provided by Mark Kettenis <kettenis@phys.uva.nl>. 1997-06-30 14:49 H.J. Lu <hjl@gnu.ai.mit.edu> From Ralf Baechle <ralf@informatik.uni-koblenz.de> on Sat Jun 21 18:11:21 1997: * sysdeps/unix/sysv/linux/syscalls.list (swapon): Add __swapon alias. (swapoff): New. * elf/Makefile: Add linker script support. (headers): Add bits/dlfcn.h. * elf/dl-load.c (MAP_BASE_ADDR): New. * elf/dlfcn.h: Include <bits/dlfcn.h>. * elf/elf.h: Add MIPS support. * sysdeps/generic/Dist: Add entry.h. * sysdeps/generic/entry.h: New, define the entry symbol. * elf/rtld.c (_start): Include <entry.h>. Change to ENTRY_POINT. * sysdeps/generic/dl-sysdep.c (_start): Likewise. * mips/elf/start.S (_start): Likewise. * sysdeps/mips/bsd-_setjmp.S: Fix PIC. * sysdeps/mips/bsd-setjmp.S: Likewise. * sysdeps/mips/setjmp.S: Likewise. * mips/elf/start.S: Likewise. * sysdeps/unix/mips/brk.S: Likewise. * sysdeps/unix/mips/sysdep.S: Likewise. * sysdeps/unix/mips/sysdep.h: Likewise. * sysdeps/unix/mips/wait.S: Likewise. * sysdeps/mips/dl-machine.h: Update for Linux/MIPS. * sysdeps/mips/fpu_control.h: Likewise. * sysdeps/generic/bits/dlfcn.h: New file. * sysdeps/mips/rtld-ldscript.in: New for Linux/MIPS. * sysdeps/mips/rtld-parms: Likewise. * sysdeps/mips/bits/dlfcn.h: Likewise. * sysdeps/mips/mips64/rtld-parms: Likewise. * sysdeps/mips/mipsel/rtld-parms: Likewise. * sysdeps/unix/sysv/linux/mips/Dist: Likewise. * sysdeps/unix/sysv/linux/mips/Makefile: Likewise. * sysdeps/unix/sysv/linux/mips/clone.S: Likewise. * sysdeps/unix/sysv/linux/mips/entry.h: Likewise. * sysdeps/unix/sysv/linux/mips/fpregdef.h: Likewise. * sysdeps/unix/sysv/linux/mips/fxstat.c: Likewise. * sysdeps/unix/sysv/linux/mips/kernel_sigaction.h: Likewise. * sysdeps/unix/sysv/linux/mips/kernel_stat.h: Likewise. * sysdeps/unix/sysv/linux/mips/kernel_termios.h: Likewise. * sysdeps/unix/sysv/linux/mips/lxstat.c: Likewise. * sysdeps/unix/sysv/linux/mips/regdef.h: Likewise. * sysdeps/unix/sysv/linux/mips/sgidefs.h: Likewise. * sysdeps/unix/sysv/linux/mips/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/mips/ustat.c: Likewise. * sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise. * sysdeps/unix/sysv/linux/mips/xstat.c: Likewise. * sysdeps/unix/sysv/linux/mips/bits/endian.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h: * sysdeps/unix/sysv/linux/mips/bits/ipc.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/shm.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/signum.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/socket.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/termios.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/time.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/acct.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/asm.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/cachectl.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/fpregdef.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/procfs.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/regdef.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/syscall.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/sysmips.h: Likewise. 1997-04-09 19:05 H.J. Lu (hjl@gnu.ai.mit.edu) * isomac.c (xstrndup): New, use it instead of strndup (). 1997-07-02 08:55 H.J. Lu <hjl@gnu.ai.mit.edu> * sysdeps/i386/dl-machine.h (elf_machine_rel): Print the program name for different sizes. 1997-07-10 15:47 Fila Kolodny <fila@ibi.com> * nis/ypclnt.c: Change references to MAXHOSTNAMELEN to NIS_MAXNAMELEN. Add include of rpcsvc/nis.h. * inet/getnameinfo.c: Delete references to MAXHOSTNAMELEN. * sysdeps/posix/getaddrinfo.c: Likewise. Change size of variable buffer to be big enough to hold an IPv6 address in printable format. 1997-07-12 18:47 Ulrich Drepper <drepper@cygnus.com> * assert/assert.h [!NDEBUG] (assert, assert_perror): Don't use || and && in tests to allow use in C++ code which overloads these operators. Reported by Istvan Marko <istvan@cmdmail.amd.com>. * configure.in: Move mips64* recognition before mips*. Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>. 1997-07-03 20:44 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules (lib%.so, $(common-objpfx)libc.so): Don't use automatic variables in dependency lists. (build-shlib): Always filter out the version script file. * extra-lib.mk ($(objpfx)$(lib).so): Depend on version script. 1997-07-12 17:56 Ulrich Drepper <drepper@cygnus.com> * login/login.c (tty_name): Test return value of ttyname_r for != 0, not < 0. * misc/ttyslot.c (ttyslot): Test return value of ttyname_r for == 0, not >= 0. * sysdeps/unix/getlogin.c (getlogin): Test return value of ttyname_r for != 0. * sysdeps/unix/getlogin_r.c (getlogin_r): Likewise. 1997-07-10 Andreas Jaeger <aj@arthur.rhein-neckar.de> * login/utmp_file.c (getutline_r_file): Fix type: compare with *result. 1997-07-11 00:21 Mark Kettenis <kettenis@phys.uva.nl> * login/Makefile (headers): Add utmpx.h and bits/utmpx.h. 1997-07-09 19:21 Mark Kettenis <kettenis@phys.uva.nl> * login/programs/utmpd.c, login/programs/database.c, login/programs/request.c: Prepare messages for internationalization. * login/programs/utmpd.c: (main): Change handling of errors in opening the database. * login/programs/database.c: (open_database, synchronize_dtatabase, initialize_database): Properly handle errors. (get_mtime): Use fstat instead of stat. All callers changed. * login/getutent_r.c: Make setutxent a weak alias for __setutxent. * login/getutent.c: Rename getutent to __getutent and make getutent a weak alias. Make getutxent a weak alias for __getutent. * login/utmpx.h: New file. * sysdeps/gnu/bits/utmp.h: Cleanup. Added comments. * sysdeps/gnu/bits/utmpx.h: New file. * stdio-common/strops.c: Partialy undo last change. Will need more investigation.
This commit is contained in:
parent
2d7da676f3
commit
f21acc89c0
95 changed files with 4750 additions and 3295 deletions
171
ChangeLog
171
ChangeLog
|
@ -1,3 +1,171 @@
|
|||
1997-07-13 01:18 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* setjmp/setjmp.h: Define _setjmp and _longjmp also if __USE_XOPEN.
|
||||
|
||||
* sysdeps/unix/sysv/linux/bits/ipc.h: Fix comment.
|
||||
* sysdeps/unix/sysv/linux/bits/msq.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/bits/sem.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/bits/shm.h: Likewise.
|
||||
|
||||
* time/Makefile (routines): Add getdate.
|
||||
* time/time.h: Add prototype for getdate and getdate_r.
|
||||
* time/getdate.c: New file.
|
||||
Provided by Mark Kettenis <kettenis@phys.uva.nl>.
|
||||
|
||||
1997-06-30 14:49 H.J. Lu <hjl@gnu.ai.mit.edu>
|
||||
|
||||
From Ralf Baechle <ralf@informatik.uni-koblenz.de> on
|
||||
Sat Jun 21 18:11:21 1997:
|
||||
|
||||
* sysdeps/unix/sysv/linux/syscalls.list (swapon): Add __swapon alias.
|
||||
(swapoff): New.
|
||||
|
||||
* elf/Makefile: Add linker script support.
|
||||
(headers): Add bits/dlfcn.h.
|
||||
|
||||
* elf/dl-load.c (MAP_BASE_ADDR): New.
|
||||
|
||||
* elf/dlfcn.h: Include <bits/dlfcn.h>.
|
||||
|
||||
* elf/elf.h: Add MIPS support.
|
||||
|
||||
* sysdeps/generic/Dist: Add entry.h.
|
||||
* sysdeps/generic/entry.h: New, define the entry symbol.
|
||||
|
||||
* elf/rtld.c (_start): Include <entry.h>. Change to ENTRY_POINT.
|
||||
* sysdeps/generic/dl-sysdep.c (_start): Likewise.
|
||||
* mips/elf/start.S (_start): Likewise.
|
||||
|
||||
* sysdeps/mips/bsd-_setjmp.S: Fix PIC.
|
||||
* sysdeps/mips/bsd-setjmp.S: Likewise.
|
||||
* sysdeps/mips/setjmp.S: Likewise.
|
||||
* mips/elf/start.S: Likewise.
|
||||
* sysdeps/unix/mips/brk.S: Likewise.
|
||||
* sysdeps/unix/mips/sysdep.S: Likewise.
|
||||
* sysdeps/unix/mips/sysdep.h: Likewise.
|
||||
* sysdeps/unix/mips/wait.S: Likewise.
|
||||
|
||||
* sysdeps/mips/dl-machine.h: Update for Linux/MIPS.
|
||||
* sysdeps/mips/fpu_control.h: Likewise.
|
||||
|
||||
* sysdeps/generic/bits/dlfcn.h: New file.
|
||||
|
||||
* sysdeps/mips/rtld-ldscript.in: New for Linux/MIPS.
|
||||
* sysdeps/mips/rtld-parms: Likewise.
|
||||
* sysdeps/mips/bits/dlfcn.h: Likewise.
|
||||
* sysdeps/mips/mips64/rtld-parms: Likewise.
|
||||
* sysdeps/mips/mipsel/rtld-parms: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/Dist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/Makefile: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/clone.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/entry.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/fpregdef.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/fxstat.c: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/kernel_sigaction.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/kernel_stat.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/kernel_termios.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/lxstat.c: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/regdef.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/sgidefs.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/syscalls.list: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/ustat.c: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/xstat.c: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/endian.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h:
|
||||
* sysdeps/unix/sysv/linux/mips/bits/ipc.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/shm.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/signum.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/socket.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/termios.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/bits/time.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/sys/acct.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/sys/asm.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/sys/cachectl.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/sys/fpregdef.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/sys/procfs.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/sys/regdef.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/sys/syscall.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/sys/sysmips.h: Likewise.
|
||||
|
||||
1997-04-09 19:05 H.J. Lu (hjl@gnu.ai.mit.edu)
|
||||
|
||||
* isomac.c (xstrndup): New, use it instead of strndup ().
|
||||
|
||||
1997-07-02 08:55 H.J. Lu <hjl@gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/i386/dl-machine.h (elf_machine_rel): Print
|
||||
the program name for different sizes.
|
||||
|
||||
1997-07-10 15:47 Fila Kolodny <fila@ibi.com>
|
||||
|
||||
* nis/ypclnt.c: Change references to MAXHOSTNAMELEN to NIS_MAXNAMELEN.
|
||||
Add include of rpcsvc/nis.h.
|
||||
* inet/getnameinfo.c: Delete references to MAXHOSTNAMELEN.
|
||||
* sysdeps/posix/getaddrinfo.c: Likewise.
|
||||
Change size of variable buffer to be big enough to hold an IPv6
|
||||
address in printable format.
|
||||
|
||||
1997-07-12 18:47 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* assert/assert.h [!NDEBUG] (assert, assert_perror): Don't use ||
|
||||
and && in tests to allow use in C++ code which overloads these
|
||||
operators. Reported by Istvan Marko <istvan@cmdmail.amd.com>.
|
||||
|
||||
* configure.in: Move mips64* recognition before mips*.
|
||||
Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>.
|
||||
|
||||
1997-07-03 20:44 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* Makerules (lib%.so, $(common-objpfx)libc.so): Don't use
|
||||
automatic variables in dependency lists.
|
||||
(build-shlib): Always filter out the version script file.
|
||||
* extra-lib.mk ($(objpfx)$(lib).so): Depend on version script.
|
||||
|
||||
1997-07-12 17:56 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* login/login.c (tty_name): Test return value of ttyname_r for !=
|
||||
0, not < 0.
|
||||
* misc/ttyslot.c (ttyslot): Test return value of ttyname_r for ==
|
||||
0, not >= 0.
|
||||
* sysdeps/unix/getlogin.c (getlogin): Test return value of
|
||||
ttyname_r for != 0.
|
||||
* sysdeps/unix/getlogin_r.c (getlogin_r): Likewise.
|
||||
|
||||
1997-07-10 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||
|
||||
* login/utmp_file.c (getutline_r_file): Fix type: compare with
|
||||
*result.
|
||||
|
||||
1997-07-11 00:21 Mark Kettenis <kettenis@phys.uva.nl>
|
||||
|
||||
* login/Makefile (headers): Add utmpx.h and bits/utmpx.h.
|
||||
|
||||
1997-07-09 19:21 Mark Kettenis <kettenis@phys.uva.nl>
|
||||
|
||||
* login/programs/utmpd.c, login/programs/database.c,
|
||||
login/programs/request.c: Prepare messages for
|
||||
internationalization.
|
||||
|
||||
* login/programs/utmpd.c:
|
||||
(main): Change handling of errors in opening the database.
|
||||
* login/programs/database.c:
|
||||
(open_database, synchronize_dtatabase, initialize_database):
|
||||
Properly handle errors.
|
||||
(get_mtime): Use fstat instead of stat. All callers changed.
|
||||
|
||||
* login/getutent_r.c: Make setutxent a weak alias for __setutxent.
|
||||
* login/getutent.c: Rename getutent to __getutent and make
|
||||
getutent a weak alias.
|
||||
Make getutxent a weak alias for __getutent.
|
||||
* login/utmpx.h: New file.
|
||||
* sysdeps/gnu/bits/utmp.h: Cleanup. Added comments.
|
||||
* sysdeps/gnu/bits/utmpx.h: New file.
|
||||
|
||||
1997-07-11 03:00 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* inet/inet_ntoa.c: Prevent looking for thread data key if we found
|
||||
|
@ -23,6 +191,9 @@
|
|||
function with return value.
|
||||
Reported by Andreas Jaeger.
|
||||
|
||||
* stdio-common/strops.c: Partialy undo last change. Will need
|
||||
more investigation.
|
||||
|
||||
1997-07-10 Marcus G. Daniels <marcus@cathcart.sysc.pdx.edu>
|
||||
|
||||
* sysdeps/mach/hurd/select.c (__select): Need bit count for
|
||||
|
|
|
@ -344,7 +344,7 @@ endif
|
|||
# build shared libraries in place from the installed *_pic.a files.
|
||||
# $(LDLIBS-%.so) may contain -l switches to generate run-time dependencies
|
||||
# on other shared objects.
|
||||
lib%.so: lib%_pic.a $(load-map-file); $(build-shlib)
|
||||
lib%.so: lib%_pic.a; $(build-shlib)
|
||||
|
||||
ifeq ($(have-no-whole-archive),yes)
|
||||
no-whole-archive = -Wl,--no-whole-archive
|
||||
|
@ -367,7 +367,7 @@ $(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
|
|||
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
|
||||
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
|
||||
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
|
||||
-Wl,--whole-archive $(filter-out $(load-map-file),$^) \
|
||||
-Wl,--whole-archive $(filter-out $($(@F:.so=)-map),$^) \
|
||||
$(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so)
|
||||
endef
|
||||
|
||||
|
@ -385,7 +385,7 @@ libc-map = $(..)libc.map
|
|||
$(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
|
||||
$(common-objpfx)libc_pic.a \
|
||||
$(elfobjdir)/sofini.so $(elfobjdir)/ld.so \
|
||||
$(load-map-file)
|
||||
$(libc-map)
|
||||
$(build-shlib)
|
||||
ifdef libc.so-version
|
||||
$(common-objpfx)libc.so$(libc.so-version): $(common-objpfx)libc.so
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1991, 92, 94, 95, 96 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
|
@ -51,8 +51,6 @@
|
|||
|
||||
#else /* Not NDEBUG. */
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* This prints an "Assertion failed" message and aborts. */
|
||||
|
@ -72,13 +70,13 @@ extern void __assert_perror_fail __P ((int __errnum,
|
|||
__END_DECLS
|
||||
|
||||
# define assert(expr) \
|
||||
((void) ((expr) || \
|
||||
((void) ((expr) ? 0 : \
|
||||
(__assert_fail (__STRING(expr), \
|
||||
__FILE__, __LINE__, __ASSERT_FUNCTION), 0)))
|
||||
|
||||
# ifdef __USE_GNU
|
||||
# define assert_perror(errnum) \
|
||||
((void) ((errnum) && (__assert_perror_fail ((errnum), \
|
||||
((void) ((errnum) ? 0 : (__assert_perror_fail ((errnum), \
|
||||
__FILE__, __LINE__, \
|
||||
__ASSERT_FUNCTION), 0)))
|
||||
# endif
|
||||
|
@ -86,8 +84,8 @@ __END_DECLS
|
|||
/* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
|
||||
which contains the name of the function currently being defined.
|
||||
This is broken in G++ before version 2.6. */
|
||||
#if (!defined (__GNUC__) || __GNUC__ < 2 || \
|
||||
__GNUC_MINOR__ < (defined (__cplusplus) ? 6 : 4))
|
||||
# if (!defined __GNUC__ || __GNUC__ < 2 || \
|
||||
__GNUC_MINOR__ < (defined __cplusplus ? 6 : 4))
|
||||
# define __ASSERT_FUNCTION ((__const char *) 0)
|
||||
# else
|
||||
# define __ASSERT_FUNCTION __PRETTY_FUNCTION__
|
||||
|
|
33
bits/dlfcn.h
Normal file
33
bits/dlfcn.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
/* System dependand definitions for run-time dynamic loading.
|
||||
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_DLFCN_H
|
||||
#define _BITS_DLFCN_H 1
|
||||
|
||||
/* The MODE argument to `dlopen' contains one of the following: */
|
||||
#define RTLD_LAZY 0x001 /* Lazy function call binding. */
|
||||
#define RTLD_NOW 0x002 /* Immediate function call binding. */
|
||||
#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */
|
||||
|
||||
/* If the following bit is set in the MODE argument to `dlopen',
|
||||
the symbols of the loaded object and its dependencies are made
|
||||
visible as if the object were linked directly into the program. */
|
||||
#define RTLD_GLOBAL 0x100
|
||||
|
||||
#endif /* bits/dlfcn.h */
|
|
@ -155,8 +155,8 @@ m680?0) base_machine=m68k machine=m68k/$machine ;;
|
|||
m68k) base_machine=m68k machine=m68k/m68020 ;;
|
||||
m88???) base_machine=m88k machine=m88k/$machine ;;
|
||||
m88k) base_machine=m88k machine=m88k/m88100 ;;
|
||||
mips*) base_machine=mips machine=mips/$machine ;;
|
||||
mips64*) base_machine=mips64 machine=mips/mips64/$machine ;;
|
||||
mips*) base_machine=mips machine=mips/$machine ;;
|
||||
sparc[6789]) base_machine=sparc machine=sparc/$machine ;;
|
||||
supersparc) base_machine=sparc machine=sparc/sparc8 ;;
|
||||
sparc64) base_machine=sparc64 machine=sparc64/$machine ;;
|
||||
|
|
27
elf/Makefile
27
elf/Makefile
|
@ -20,7 +20,7 @@
|
|||
|
||||
subdir := elf
|
||||
|
||||
headers = elf.h bits/elfclass.h link.h dlfcn.h
|
||||
headers = elf.h bits/elfclass.h bits/dlfcn.h link.h dlfcn.h
|
||||
routines = $(dl-routines) dl-open dl-close dl-symbol dl-support \
|
||||
dl-version enbl-secure
|
||||
|
||||
|
@ -88,6 +88,30 @@ $(objpfx)dl-allobjs.so: $(rtld-routines:%=$(objpfx)%.so)
|
|||
$(objpfx)librtld.so: $(objpfx)dl-allobjs.so $(common-objpfx)libc_pic.a
|
||||
$(reloc-link) '-Wl,-(' $^ -lgcc '-Wl,-)'
|
||||
|
||||
# Do we need a linker script?
|
||||
rtld-ldscript-in := $(firstword $(wildcard $(+sysdep_dirs:%=%/rtld-ldscript.in)))
|
||||
ifneq (,$(rtld-ldscript-in))
|
||||
LDFLAGS-rtld = -T $(objpfx)rtld-ldscript
|
||||
|
||||
before-compile += $(objpfx)rtld-ldscript
|
||||
rtld-parms = $(wildcard $(+sysdep_dirs:%=%/rtld-parms))
|
||||
include $(rtld-parms)
|
||||
generated += rtld-ldscript
|
||||
$(objpfx)rtld-ldscript: $(rtld-ldscript-in) $(rtld-parms)
|
||||
sed -e 's#@@rtld-oformat@@#$(rtld-oformat)#' \
|
||||
-e 's#@@rtld-arch@@#$(rtld-arch)#' \
|
||||
-e 's#@@rtld-entry@@#$(rtld-entry)#' \
|
||||
-e 's#@@rtld-base@@#$(rtld-base)#' $< >$@
|
||||
|
||||
$(objpfx)ld.so: $(objpfx)librtld.so $(objpfx)rtld-ldscript
|
||||
$(rtld-link) -Wl,-soname=$(rtld-installed-name)
|
||||
|
||||
define rtld-link
|
||||
$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
|
||||
-Wl,-rpath=$(default-rpath) $(LDFLAGS-rtld) \
|
||||
$(filter-out $(objpfx)rtld-ldscript,$^)
|
||||
endef
|
||||
else
|
||||
$(objpfx)ld.so: $(objpfx)librtld.so
|
||||
$(rtld-link) -Wl,-soname=$(rtld-installed-name)
|
||||
|
||||
|
@ -95,6 +119,7 @@ define rtld-link
|
|||
$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
|
||||
-Wl,-rpath=$(default-rpath) $^
|
||||
endef
|
||||
endif
|
||||
|
||||
# The dl code in the static libc needs a default library path.
|
||||
CFLAGS-dl-support.c = -D'DEFAULT_RPATH="$(default-rpath)"'
|
||||
|
|
|
@ -44,6 +44,15 @@
|
|||
#define MAP_COPY MAP_PRIVATE
|
||||
#endif
|
||||
|
||||
/* Some systems link their relocatable objects for another base address
|
||||
than 0. We want to know the base address for these such that we can
|
||||
subtract this address from the segment addresses during mapping.
|
||||
This results in a more efficient address space usage. Defaults to
|
||||
zero for almost all systems. */
|
||||
#ifndef MAP_BASE_ADDR
|
||||
#define MAP_BASE_ADDR(l) 0
|
||||
#endif
|
||||
|
||||
|
||||
#include <endian.h>
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
|
@ -335,7 +344,8 @@ _dl_map_object_from_fd (char *name, int fd, char *realname,
|
|||
caddr_t mapat;
|
||||
ElfW(Addr) mappref;
|
||||
size_t maplength = loadcmds[nloadcmds - 1].allocend - c->mapstart;
|
||||
mappref = ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart);
|
||||
mappref = (ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart)
|
||||
- MAP_BASE_ADDR (l));
|
||||
mapat = map_segment (mappref, maplength, c->prot, 0, c->mapoff);
|
||||
l->l_addr = (ElfW(Addr)) mapat - c->mapstart;
|
||||
|
||||
|
|
11
elf/dlfcn.h
11
elf/dlfcn.h
|
@ -22,15 +22,8 @@
|
|||
|
||||
#include <features.h>
|
||||
|
||||
/* The MODE argument to `dlopen' contains one of the following: */
|
||||
#define RTLD_LAZY 0x001 /* Lazy function call binding. */
|
||||
#define RTLD_NOW 0x002 /* Immediate function call binding. */
|
||||
#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */
|
||||
|
||||
/* If the following bit is set in the MODE argument to `dlopen',
|
||||
the symbols of the loaded object and its dependencies are made
|
||||
visible as if the object were linked directly into the program. */
|
||||
#define RTLD_GLOBAL 0x100
|
||||
/* Collect various system dependand definitions and declarations. */
|
||||
#include <bits/dlfcn.h>
|
||||
|
||||
/* If the first argument of `dlsym' is set to RTLD_NEXT the run-time
|
||||
address of the symbol called NAME in the next shared object is
|
||||
|
|
|
@ -741,6 +741,8 @@ typedef struct
|
|||
#define E_MIPS_ARCH_1 0x00000000 /* -mips1 code. */
|
||||
#define E_MIPS_ARCH_2 0x10000000 /* -mips2 code. */
|
||||
#define E_MIPS_ARCH_3 0x20000000 /* -mips3 code. */
|
||||
#define E_MIPS_ARCH_4 0x30000000 /* -mips4 code. */
|
||||
#define E_MIPS_ARCH_5 0x40000000 /* -mips5 code. */
|
||||
|
||||
/* Special section indices. */
|
||||
|
||||
|
@ -810,6 +812,8 @@ typedef struct
|
|||
/* Legal values for p_type field of Elf32_Phdr. */
|
||||
|
||||
#define PT_MIPS_REGINFO 0x70000000 /* Register usage information */
|
||||
#define PT_MIPS_RTPROC 0x70000001 /* Runtime procedure table. */
|
||||
#define PT_MIPS_OPTIONS 0x70000002
|
||||
|
||||
/* Legal values for d_tag field of Elf32_Dyn. */
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <sys/mman.h> /* Check if MAP_ANON is defined. */
|
||||
#include <stdio-common/_itoa.h>
|
||||
#include <assert.h>
|
||||
#include <entry.h>
|
||||
#include "dynamic-link.h"
|
||||
|
||||
|
||||
|
@ -137,7 +138,7 @@ _dl_start (void *arg)
|
|||
/* Now life is peachy; we can do all normal operations.
|
||||
On to the real work. */
|
||||
|
||||
void _start (void);
|
||||
void ENTRY_POINT (void);
|
||||
|
||||
/* Some helper functions. */
|
||||
|
||||
|
@ -268,7 +269,7 @@ dl_main (const ElfW(Phdr) *phdr,
|
|||
/* Set up a flag which tells we are just starting. */
|
||||
_dl_starting_up = 1;
|
||||
|
||||
if (*user_entry == (ElfW(Addr)) &_start)
|
||||
if (*user_entry == (ElfW(Addr)) &ENTRY_POINT)
|
||||
{
|
||||
/* Ho ho. We are not the program interpreter! We are the program
|
||||
itself! This means someone ran ld.so as a command. Well, that
|
||||
|
|
|
@ -49,4 +49,7 @@ endef
|
|||
object-suffixes-left = $(object-suffixes-$(lib))
|
||||
include $(patsubst %,$(..)o-iterator.mk,$(object-suffixes-$(lib)))
|
||||
|
||||
# Add the version script to the dependencies of the shared library.
|
||||
$(objpfx)$(lib).so: $($(lib)-map)
|
||||
|
||||
endif
|
||||
|
|
|
@ -72,16 +72,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
struct hostent *_addr2hostname_hosts(const char *, int, int);
|
||||
#endif /* HOSTTABLE */
|
||||
|
||||
#ifndef MAXHOSTNAMELEN
|
||||
#define MAXHOSTNAMELEN 128
|
||||
#endif
|
||||
|
||||
#ifndef min
|
||||
#define min(x,y) (((x) > (y)) ? (y) : (x))
|
||||
#endif /* min */
|
||||
|
||||
static char *domain;
|
||||
static char domainbuffer[MAXHOSTNAMELEN];
|
||||
static const char *domain;
|
||||
|
||||
static char *nrl_domainname(void)
|
||||
{
|
||||
|
@ -114,17 +109,20 @@ static char *nrl_domainname(void)
|
|||
}
|
||||
|
||||
if (h && (c = strchr(h->h_name, '.'))) {
|
||||
strcpy(domain = domainbuffer, ++c);
|
||||
domain = __strdup (++c);
|
||||
goto ret;
|
||||
}
|
||||
|
||||
if (!gethostname(domainbuffer, sizeof(domainbuffer))) {
|
||||
if (c = strchr(domainbuffer, '.')) {
|
||||
domain = ++c;
|
||||
while (gethostname (tmpbuf, tmpbuflen)) {
|
||||
tmpbuflen *= 2;
|
||||
tmpbuf = __alloca (tmpbuflen);
|
||||
}
|
||||
if (c = strchr(tmpbuf, '.')) {
|
||||
domain = __strdup(++c);
|
||||
goto ret;
|
||||
}
|
||||
|
||||
while (__gethostbyname_r(domainbuffer, &th, tmpbuf, tmpbuflen, &h,
|
||||
while (__gethostbyname_r(tmpbuf, &th, tmpbuf, tmpbuflen, &h,
|
||||
&herror)) {
|
||||
if (herror == NETDB_INTERNAL) {
|
||||
if (errno == ERANGE) {
|
||||
|
@ -137,17 +135,18 @@ static char *nrl_domainname(void)
|
|||
}
|
||||
|
||||
if (h && (c = strchr(h->h_name, '.'))) {
|
||||
strcpy(domain = domainbuffer, ++c);
|
||||
domain = __strdup(++c);
|
||||
goto ret;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
struct in_addr in_addr;
|
||||
|
||||
in_addr.s_addr = htonl(0x7f000001);
|
||||
|
||||
while (__gethostbyaddr_r((const char *)&in_addr, sizeof(struct in_addr), AF_INET, &th, tmpbuf, tmpbuflen, &h, &herror)) {
|
||||
while (__gethostbyaddr_r((const char *)&in_addr,
|
||||
sizeof(struct in_addr), AF_INET, &th, tmpbuf,
|
||||
tmpbuflen, &h, &herror)) {
|
||||
if (herror == NETDB_INTERNAL) {
|
||||
if (errno == ERANGE) {
|
||||
tmpbuflen *= 2;
|
||||
|
@ -159,7 +158,7 @@ static char *nrl_domainname(void)
|
|||
}
|
||||
|
||||
if (h && (c = strchr(h->h_name, '.'))) {
|
||||
domain = domainbuffer, ++c;
|
||||
domain = __strdup(++c);
|
||||
goto ret;
|
||||
}
|
||||
}
|
||||
|
@ -168,7 +167,7 @@ static char *nrl_domainname(void)
|
|||
|
||||
ret:
|
||||
__libc_lock_unlock (lock);
|
||||
};
|
||||
}
|
||||
|
||||
return domain;
|
||||
};
|
||||
|
|
17
isomac.c
17
isomac.c
|
@ -185,6 +185,7 @@ char *CC;
|
|||
/* The -I parameters for CC to find all headers. */
|
||||
char *INC;
|
||||
|
||||
static char *xstrndup (const char *, size_t);
|
||||
static const char **get_null_defines (void);
|
||||
static int check_header (const char *, const char **);
|
||||
|
||||
|
@ -222,6 +223,20 @@ main (int argc, char *argv[])
|
|||
}
|
||||
|
||||
|
||||
static char *
|
||||
xstrndup (const char *s, size_t n)
|
||||
{
|
||||
size_t len = n;
|
||||
char *new = malloc (len + 1);
|
||||
|
||||
if (new == NULL)
|
||||
return NULL;
|
||||
|
||||
new[len] = '\0';
|
||||
return memcpy (new, s, len);
|
||||
}
|
||||
|
||||
|
||||
static const char **
|
||||
get_null_defines (void)
|
||||
{
|
||||
|
@ -285,7 +300,7 @@ get_null_defines (void)
|
|||
start = &line[8];
|
||||
for (end = start + 1; !isspace (*end) && *end != '\0'; ++end)
|
||||
;
|
||||
result[result_len++] = strndup (start, end - start);
|
||||
result[result_len++] = xstrndup (start, end - start);
|
||||
|
||||
if (first)
|
||||
{
|
||||
|
|
|
@ -88,7 +88,7 @@ DEFUN(_IO_str_init_static, (fp, ptr, size, pstart),
|
|||
if (pstart)
|
||||
{
|
||||
fp->_IO_write_ptr = pstart;
|
||||
fp->_IO_write_end = pstart;
|
||||
fp->_IO_write_end = ptr + size;
|
||||
fp->_IO_read_end = pstart;
|
||||
}
|
||||
else
|
||||
|
@ -158,7 +158,7 @@ DEFUN(_IO_str_overflow, (fp, c),
|
|||
fp->_IO_write_ptr = new_buf + (fp->_IO_write_ptr - old_buf);
|
||||
|
||||
fp->_IO_write_base = new_buf;
|
||||
fp->_IO_write_end = new_buf + (fp->_IO_write_end - old_buf);
|
||||
fp->_IO_write_end = fp->_IO_buf_end;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
subdir := login
|
||||
|
||||
headers := utmp.h bits/utmp.h lastlog.h pty.h
|
||||
headers := utmp.h bits/utmp.h utmpx.h bits/utmpx.h lastlog.h pty.h
|
||||
|
||||
routines := getutent getutent_r getutid getutline getutid_r getutline_r \
|
||||
utmp_file utmp_daemon utmpname updwtmp
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||
|
||||
|
@ -25,7 +25,7 @@ static struct utmp buffer;
|
|||
|
||||
|
||||
struct utmp *
|
||||
getutent (void)
|
||||
__getutent (void)
|
||||
{
|
||||
struct utmp *result;
|
||||
|
||||
|
@ -34,3 +34,5 @@ getutent (void)
|
|||
|
||||
return result;
|
||||
}
|
||||
weak_alias (__getutent, getutent)
|
||||
weak_alias (__getutent, getutxent)
|
||||
|
|
|
@ -63,6 +63,7 @@ __setutent (void)
|
|||
__libc_lock_unlock (__libc_utmp_lock);
|
||||
}
|
||||
weak_alias (__setutent, setutent)
|
||||
weak_alias (__setutent, setutxent)
|
||||
|
||||
|
||||
static int
|
||||
|
@ -105,6 +106,7 @@ __endutent (void)
|
|||
__libc_lock_unlock (__libc_utmp_lock);
|
||||
}
|
||||
weak_alias (__endutent, endutent)
|
||||
weak_alias (__endutent, endutxent)
|
||||
|
||||
|
||||
static void
|
||||
|
@ -154,6 +156,7 @@ __pututline (const struct utmp *data)
|
|||
return buffer;
|
||||
}
|
||||
weak_alias (__pututline, pututline)
|
||||
weak_alias (__pututline, pututxline)
|
||||
|
||||
|
||||
static struct utmp *
|
||||
|
|
|
@ -43,7 +43,7 @@ tty_name (int fd, char **tty, size_t buf_len)
|
|||
{
|
||||
rv = ttyname_r (fd, buf, buf_len);
|
||||
|
||||
if (rv < 0 || memchr (buf, '\0', buf_len))
|
||||
if (rv != 0 || memchr (buf, '\0', buf_len))
|
||||
/* We either got an error, or we succeeded and the
|
||||
returned name fit in the buffer. */
|
||||
break;
|
||||
|
|
|
@ -42,13 +42,13 @@ static int replace_entry (utmp_database *database, int old_position,
|
|||
int new_position, const struct utmp *entry);
|
||||
static int store_entry (utmp_database *database, int position,
|
||||
const struct utmp *entry);
|
||||
static int get_mtime (const char *file, time_t *timer);
|
||||
static int get_mtime (int filedes, time_t *timer);
|
||||
|
||||
|
||||
/* Open the database specified by FILE and merge it with the
|
||||
contents of the old format file specified by OLD_FILE. Returns a
|
||||
pointer to a newly allocated structure describing the database, or
|
||||
NULL on error. */
|
||||
/* Open the database specified by FILE and merge it with the contents
|
||||
of the old format file specified by OLD_FILE. Returns a pointer to
|
||||
a newly allocated structure describing the database, or NULL on
|
||||
error. */
|
||||
utmp_database *
|
||||
open_database (const char *file, const char *old_file)
|
||||
{
|
||||
|
@ -57,31 +57,54 @@ open_database (const char *file, const char *old_file)
|
|||
/* Allocate memory. */
|
||||
database = (utmp_database *) malloc (sizeof (utmp_database));
|
||||
if (database == NULL)
|
||||
{
|
||||
error (0, 0, _("memory exhausted"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset (database, 0, sizeof (utmp_database));
|
||||
|
||||
/* Open database. */
|
||||
database->fd = open (file, O_RDWR);
|
||||
/* Open database, create it if it doesn't exist already. */
|
||||
database->fd = open (file, O_RDWR | O_CREAT);
|
||||
if (database->fd < 0)
|
||||
goto fail;
|
||||
{
|
||||
error (0, errno, "%s", file);
|
||||
goto return_error;
|
||||
}
|
||||
|
||||
database->file = strdup (file);
|
||||
if (database->file == NULL)
|
||||
{
|
||||
error (0, 0, _("memory exhausted"));
|
||||
goto return_error;
|
||||
}
|
||||
|
||||
if (old_file)
|
||||
{
|
||||
database->old_fd = open (old_file, O_RDWR);
|
||||
if (database->old_fd < 0)
|
||||
goto fail;
|
||||
{
|
||||
error (0, errno, "%s", old_file);
|
||||
goto return_error;
|
||||
}
|
||||
|
||||
if ((file && !(database->file = strdup (file)))
|
||||
|| (old_file && !(database->old_file = strdup (old_file))))
|
||||
goto fail;
|
||||
database->old_file = strdup (old_file);
|
||||
if (database->old_file == NULL)
|
||||
{
|
||||
error (0, 0, _("memory exhausted"));
|
||||
goto return_error;
|
||||
}
|
||||
}
|
||||
|
||||
if (initialize_database (database) < 0
|
||||
|| synchronize_database (database) < 0)
|
||||
goto fail;
|
||||
/* Initialize database. */
|
||||
if (initialize_database (database) < 0)
|
||||
goto return_error;
|
||||
|
||||
return database;
|
||||
|
||||
fail:
|
||||
return_error:
|
||||
close_database (database);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -100,8 +123,12 @@ synchronize_database (utmp_database *database)
|
|||
|
||||
curtime = time (NULL);
|
||||
|
||||
if (get_mtime (database->old_file, &mtime) < 0)
|
||||
if (get_mtime (database->old_fd, &mtime) < 0)
|
||||
{
|
||||
error (0, errno, _("%s: cannot get modification time"),
|
||||
database->old_file);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mtime >= database->mtime)
|
||||
{
|
||||
|
@ -118,8 +145,11 @@ synchronize_database (utmp_database *database)
|
|||
|| !compare_entry (&old_entry, &entry))
|
||||
{
|
||||
if (write_entry (database, position, &old_entry) < 0)
|
||||
{
|
||||
error (0, errno, "%s", database->file);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
position++;
|
||||
}
|
||||
|
@ -325,14 +355,20 @@ initialize_database (utmp_database *database)
|
|||
|| entry.ut_type == OLD_TIME || entry.ut_type == NEW_TIME)
|
||||
{
|
||||
if (store_state_entry (database, position, &entry) < 0)
|
||||
{
|
||||
error (0, errno, "%s", database->file);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if (store_process_entry (database, position, &entry) < 0)
|
||||
{
|
||||
error (0, errno, "%s", database->file);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Update position. */
|
||||
position++;
|
||||
|
@ -344,14 +380,17 @@ initialize_database (utmp_database *database)
|
|||
break;
|
||||
|
||||
if (write_old_entry (database, position, &entry) < 0)
|
||||
{
|
||||
error (0, errno, "%s", database->file);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Update position. */
|
||||
position++;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return synchronize_database (database);
|
||||
}
|
||||
|
||||
|
||||
|
@ -472,14 +511,14 @@ store_entry (utmp_database *database, int position,
|
|||
}
|
||||
|
||||
|
||||
/* Get modification time of FILE and put it in TIMER. returns 0 if
|
||||
successful, -1 if not. */
|
||||
/* Get modification time of the file with file descriptor FILEDES and
|
||||
put it in TIMER. Returns 0 if successful, -1 if not. */
|
||||
static int
|
||||
get_mtime (const char *file, time_t *timer)
|
||||
get_mtime (int filedes, time_t *timer)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (stat (file, &st) < 0)
|
||||
if (fstat (filedes, &st) < 0)
|
||||
return -1;
|
||||
|
||||
*timer = st.st_mtime;
|
||||
|
|
|
@ -88,7 +88,7 @@ read_data (client_connection *connection)
|
|||
}
|
||||
|
||||
if (nbytes < 0)
|
||||
error (0, errno, "cannot read from client");
|
||||
error (0, errno, _("cannot read from client"));
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ write_data (client_connection *connection)
|
|||
}
|
||||
|
||||
if (nbytes < 0)
|
||||
error (0, errno, "cannot write to client");
|
||||
error (0, errno, _("cannot write to client"));
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
@ -164,7 +164,7 @@ send_reply (client_connection *connection, const reply_header *reply)
|
|||
/* Check if the reply fits in the buffer. */
|
||||
if ((size_t) (connection->write_end - connection->write_ptr) < reply->size)
|
||||
{
|
||||
error (0, 0, "buffer overflow");
|
||||
error (0, 0, _("buffer overflow"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -139,12 +139,12 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
|
|||
|
||||
/* Check if we are already running. */
|
||||
if (check_pid (_PATH_UTMPDPID))
|
||||
error (EXIT_FAILURE, 0, "already running");
|
||||
error (EXIT_FAILURE, 0, _("already running"));
|
||||
|
||||
/* Open UTMP database. */
|
||||
utmp_db = open_database (_PATH_UTMP "x", _PATH_UTMP);
|
||||
if (utmp_db == NULL)
|
||||
error (EXIT_FAILURE, errno, "%s", _PATH_UTMP);
|
||||
exit (EXIT_FAILURE);
|
||||
|
||||
/* Create sockets, with the right permissions. */
|
||||
mask = umask (S_IXUSR | S_IXGRP | S_IXOTH);
|
||||
|
@ -156,7 +156,8 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
|
|||
/* Set the sockets up to accept connections. */
|
||||
if (listen (ro_sock, MAX_CONNECTIONS) < 0
|
||||
|| listen (rw_sock, MAX_CONNECTIONS) < 0)
|
||||
error (EXIT_FAILURE, errno, "cannot enable socket to accept connections");
|
||||
error (EXIT_FAILURE, errno,
|
||||
_("cannot enable socket to accept connections"));
|
||||
|
||||
/* Behave like a daemon. */
|
||||
if (!debug)
|
||||
|
@ -164,7 +165,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
|
|||
openlog ("utmpd", LOG_CONS | LOG_ODELAY, LOG_DAEMON);
|
||||
|
||||
if (daemon (0, 0) < 0)
|
||||
error (EXIT_FAILURE, errno, "cannot auto-background");
|
||||
error (EXIT_FAILURE, errno, _("cannot auto-background"));
|
||||
forked = 1;
|
||||
|
||||
if (write_pid (_PATH_UTMPDPID) < 0)
|
||||
|
@ -235,7 +236,7 @@ make_socket (const char *name)
|
|||
/* Create the socket. */
|
||||
sock = socket (PF_UNIX, SOCK_STREAM, 0);
|
||||
if (sock < 0)
|
||||
error (EXIT_FAILURE, errno, "cannot create socket");
|
||||
error (EXIT_FAILURE, errno, _("cannot create socket"));
|
||||
|
||||
/* Bind a name to the socket. */
|
||||
addr.sun_family = AF_UNIX;
|
||||
|
@ -277,7 +278,7 @@ void handle_requests (void)
|
|||
read_fd_set = active_read_fd_set;
|
||||
write_fd_set = active_write_fd_set;
|
||||
if (select (FD_SETSIZE, &read_fd_set, &write_fd_set, NULL, NULL) < 0)
|
||||
error (EXIT_FAILURE, errno, "cannot get input on sockets");
|
||||
error (EXIT_FAILURE, errno, _("cannot get input on sockets"));
|
||||
|
||||
/* Service all the sockets with input pending. */
|
||||
for (fd = 0; fd < FD_SETSIZE; fd++)
|
||||
|
@ -290,7 +291,7 @@ void handle_requests (void)
|
|||
|
||||
connection = accept_connection (fd, access);
|
||||
if (connection == NULL)
|
||||
error (0, errno, "cannot accept connection");
|
||||
error (0, errno, _("cannot accept connection"));
|
||||
|
||||
FD_SET (connection->sock, &active_read_fd_set);
|
||||
}
|
||||
|
@ -298,7 +299,7 @@ void handle_requests (void)
|
|||
{
|
||||
connection = find_connection (fd);
|
||||
if (connection == NULL)
|
||||
error (EXIT_FAILURE, 0, "cannot find connection");
|
||||
error (EXIT_FAILURE, 0, _("cannot find connection"));
|
||||
|
||||
if (read_data (connection) < 0)
|
||||
{
|
||||
|
@ -316,7 +317,7 @@ void handle_requests (void)
|
|||
{
|
||||
connection = find_connection (fd);
|
||||
if (connection == NULL)
|
||||
error (EXIT_FAILURE, 0, "cannot find connection");
|
||||
error (EXIT_FAILURE, 0, _("cannot find connection"));
|
||||
|
||||
if (write_data (connection) < 0)
|
||||
{
|
||||
|
|
|
@ -215,7 +215,7 @@ unlock_return:
|
|||
fl.l_type = F_UNLCK;
|
||||
fcntl (file_fd, F_SETLKW, &fl);
|
||||
|
||||
return ((result == NULL) ? -1 : 0);
|
||||
return ((*result == NULL) ? -1 : 0);
|
||||
}
|
||||
|
||||
|
||||
|
|
50
login/utmpx.h
Normal file
50
login/utmpx.h
Normal file
|
@ -0,0 +1,50 @@
|
|||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _UTMPX_H
|
||||
#define _UTMPX_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Get system dependent values and data structures. */
|
||||
#include <bits/utmpx.h>
|
||||
|
||||
/* Open user accounting database. */
|
||||
extern void *setutxent __P ((void));
|
||||
|
||||
/* Close user accounting database. */
|
||||
extern void endutxent __P ((void));
|
||||
|
||||
/* Get the next entry from the user accounting database. */
|
||||
extern struct utmpx *getutxent __P ((void));
|
||||
|
||||
/* Get the user accounting database entry corresponding to ID. */
|
||||
extern struct utmpx *getutxid __P ((const struct utmpx *__id));
|
||||
|
||||
/* Get the user accounting database entry corresponding to LINE. */
|
||||
extern struct utmpx *getutxline __P ((const struct utmpx *__line));
|
||||
|
||||
/* Write the entry UTMPX into the user accounting database. */
|
||||
extern struct utmpx *pututxline __P ((const struct utmpx *__utmpx));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* utmpx.h */
|
|
@ -59,7 +59,7 @@ ttyslot()
|
|||
|
||||
setttyent();
|
||||
for (cnt = 0; cnt < 3; ++cnt)
|
||||
if (__ttyname_r (cnt, name, buflen) >= 0) {
|
||||
if (__ttyname_r (cnt, name, buflen) == 0) {
|
||||
if (p = rindex(name, '/'))
|
||||
++p;
|
||||
else
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <fcntl.h>
|
||||
#include <bits/libc-lock.h>
|
||||
#include <rpc/rpc.h>
|
||||
#include <rpcsvc/nis.h>
|
||||
#include <rpcsvc/yp.h>
|
||||
#include <rpcsvc/ypclnt.h>
|
||||
#include <rpcsvc/ypupd.h>
|
||||
|
@ -39,7 +40,7 @@ typedef struct dom_binding dom_binding;
|
|||
|
||||
static struct timeval TIMEOUT = {25, 0};
|
||||
static int const MAXTRIES = 5;
|
||||
static char __ypdomainname[MAXHOSTNAMELEN + 1] = "\0";
|
||||
static char __ypdomainname[NIS_MAXNAMELEN + 1] = "\0";
|
||||
__libc_lock_define_initialized (static, ypbindlist_lock)
|
||||
static dom_binding *__ypbindlist = NULL;
|
||||
|
||||
|
@ -305,7 +306,7 @@ yp_get_default_domain (char **outdomain)
|
|||
|
||||
if (__ypdomainname[0] == '\0')
|
||||
{
|
||||
if (getdomainname (__ypdomainname, MAXHOSTNAMELEN))
|
||||
if (getdomainname (__ypdomainname, NIS_MAXNAMELEN))
|
||||
result = YPERR_NODOM;
|
||||
else
|
||||
*outdomain = __ypdomainname;
|
||||
|
|
|
@ -58,7 +58,7 @@ extern int __sigsetjmp __P ((jmp_buf __env, int __savemask));
|
|||
# define setjmp(env) __sigsetjmp ((env), 1)
|
||||
#endif /* Favor BSD. */
|
||||
|
||||
#ifdef __USE_BSD
|
||||
#if defined __USE_BSD || defined __USE_XOPEN
|
||||
/* Set ENV to the current position and return 0, not saving the signal mask.
|
||||
This is the 4.3 BSD name for ISO `setjmp'. */
|
||||
# define _setjmp(env) __sigsetjmp ((env), 0)
|
||||
|
@ -69,13 +69,13 @@ extern int __sigsetjmp __P ((jmp_buf __env, int __savemask));
|
|||
`setjmp' call there return VAL, or 1 if VAL is 0. */
|
||||
extern void longjmp __P ((jmp_buf __env, int __val))
|
||||
__attribute__ ((__noreturn__));
|
||||
#ifdef __USE_BSD
|
||||
#if defined __USE_BSD || defined __USE_XOPEN
|
||||
/* Same. Usually `_longjmp' is used with `_setjmp', which does not save
|
||||
the signal mask. But it is how ENV was saved that determines whether
|
||||
`longjmp' restores the mask; `_longjmp' is just an alias. */
|
||||
extern void _longjmp __P ((jmp_buf __env, int __val))
|
||||
__attribute__ ((__noreturn__));
|
||||
#endif /* Use BSD. */
|
||||
#endif
|
||||
|
||||
/* Internal machine-dependent function to restore context sans signal mask. */
|
||||
extern void __longjmp __P ((__jmp_buf __env, int __val))
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
make_siglist.c signame.c signame.h
|
||||
det_endian.c
|
||||
entry.h
|
||||
|
|
33
sysdeps/generic/bits/dlfcn.h
Normal file
33
sysdeps/generic/bits/dlfcn.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
/* System dependand definitions for run-time dynamic loading.
|
||||
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_DLFCN_H
|
||||
#define _BITS_DLFCN_H 1
|
||||
|
||||
/* The MODE argument to `dlopen' contains one of the following: */
|
||||
#define RTLD_LAZY 0x001 /* Lazy function call binding. */
|
||||
#define RTLD_NOW 0x002 /* Immediate function call binding. */
|
||||
#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */
|
||||
|
||||
/* If the following bit is set in the MODE argument to `dlopen',
|
||||
the symbols of the loaded object and its dependencies are made
|
||||
visible as if the object were linked directly into the program. */
|
||||
#define RTLD_GLOBAL 0x100
|
||||
|
||||
#endif /* bits/dlfcn.h */
|
|
@ -18,6 +18,7 @@
|
|||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <elf.h>
|
||||
#include <entry.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/mman.h>
|
||||
|
@ -52,7 +53,7 @@ _dl_sysdep_start (void **start_argptr,
|
|||
gid_t egid = 0;
|
||||
unsigned int seen;
|
||||
|
||||
user_entry = (ElfW(Addr)) &_start;
|
||||
user_entry = (ElfW(Addr)) &ENTRY_POINT;
|
||||
_dl_argc = *(long *) start_argptr;
|
||||
_dl_argv = (char **) start_argptr + 1;
|
||||
_environ = &_dl_argv[_dl_argc + 1];
|
||||
|
|
1
sysdeps/generic/entry.h
Normal file
1
sysdeps/generic/entry.h
Normal file
|
@ -0,0 +1 @@
|
|||
#define ENTRY_POINT _start
|
|
@ -16,35 +16,22 @@
|
|||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _UTMPBITS_H
|
||||
|
||||
#define _UTMPBITS_H 1
|
||||
#include <features.h>
|
||||
#ifndef _UTMP_H
|
||||
#error "Never use <bits/utmp.h> directly; include <utmpx.h> instead."
|
||||
#endif
|
||||
|
||||
#include <paths.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
#define UT_UNKNOWN 0 /* for ut_type field */
|
||||
|
||||
#define RUN_LVL 1
|
||||
#define BOOT_TIME 2
|
||||
#define NEW_TIME 3
|
||||
#define OLD_TIME 4
|
||||
|
||||
#define INIT_PROCESS 5
|
||||
#define LOGIN_PROCESS 6
|
||||
#define USER_PROCESS 7
|
||||
#define DEAD_PROCESS 8
|
||||
#define ACCOUNTING 9
|
||||
|
||||
#define UT_LINESIZE 32
|
||||
#define UT_NAMESIZE 32
|
||||
#define UT_HOSTSIZE 256
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* The structure describing an entry in the database of
|
||||
previous logins. */
|
||||
struct lastlog
|
||||
{
|
||||
time_t ll_time;
|
||||
|
@ -53,28 +40,8 @@ struct lastlog
|
|||
};
|
||||
|
||||
|
||||
/* XXX We are not ready to use this now. It needs some more research.
|
||||
Simly copying the behaviour of other implementations is no big
|
||||
help. */
|
||||
#if 0
|
||||
/* Which program created the record. */
|
||||
enum utlogin
|
||||
{
|
||||
unknown,
|
||||
X,
|
||||
local,
|
||||
rlogin,
|
||||
telnet,
|
||||
rsh,
|
||||
ftp,
|
||||
screen,
|
||||
splitvt,
|
||||
xterm
|
||||
/* More could be added here. */
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/* The structure describing the status of a terminated process. This
|
||||
type is used in `struct utmp' below. */
|
||||
struct exit_status
|
||||
{
|
||||
short int e_termination; /* Process termination status. */
|
||||
|
@ -82,16 +49,16 @@ struct exit_status
|
|||
};
|
||||
|
||||
|
||||
/* The structure describing an entry in the user accounting database. */
|
||||
struct utmp
|
||||
{
|
||||
short int ut_type; /* Type of login. */
|
||||
pid_t ut_pid; /* Pid of login process. */
|
||||
char ut_line[UT_LINESIZE]; /* NUL-terminated devicename of tty. */
|
||||
char ut_id[4]; /* Inittab id. */
|
||||
char ut_user[UT_NAMESIZE]; /* Username (not NUL terminated). */
|
||||
#define ut_name ut_user /* Compatible field name for same. */
|
||||
pid_t ut_pid; /* Process ID of login process. */
|
||||
char ut_line[UT_LINESIZE]; /* Devicename. */
|
||||
char ut_id[4]; /* Inittab ID. */
|
||||
char ut_user[UT_NAMESIZE]; /* Username. */
|
||||
char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */
|
||||
struct exit_status ut_exit; /* The exit status of a process marked
|
||||
struct exit_status ut_exit; /* Exit status of a process marked
|
||||
as DEAD_PROCESS. */
|
||||
long ut_session; /* Session ID, used for windowing. */
|
||||
struct timeval ut_tv; /* Time entry was made. */
|
||||
|
@ -100,6 +67,7 @@ struct utmp
|
|||
};
|
||||
|
||||
/* Backwards compatibility hacks. */
|
||||
#define ut_name ut_user
|
||||
#ifndef _NO_UT_TIME
|
||||
/* We have a problem here: `ut_time' is also used otherwise. Define
|
||||
_NO_UT_TIME if the compiler complains. */
|
||||
|
@ -108,6 +76,26 @@ struct utmp
|
|||
#define ut_xtime ut_tv.tv_sec
|
||||
#define ut_addr ut_addr_v6[0]
|
||||
|
||||
|
||||
/* Values for the `ut_type' field of a `struct utmp'. */
|
||||
#define EMPTY 0 /* No valid user accounting information. */
|
||||
|
||||
#define RUN_LVL 1 /* The system's runlevel. */
|
||||
#define BOOT_TIME 2 /* Time of system boot. */
|
||||
#define NEW_TIME 3 /* Time after system clock changed. */
|
||||
#define OLD_TIME 4 /* Time when system clock changed. */
|
||||
|
||||
#define INIT_PROCESS 5 /* Process spawned by the init process. */
|
||||
#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */
|
||||
#define USER_PROCESS 7 /* Normal process. */
|
||||
#define DEAD_PROCESS 8 /* Terminated process. */
|
||||
|
||||
#define ACCOUNTING 9
|
||||
|
||||
/* Old Linux name for the EMPTY type. */
|
||||
#define UT_UNKNOWN EMPTY
|
||||
|
||||
|
||||
/* Tell the user that we have a modern system with UT_HOST, UT_PID,
|
||||
UT_TYPE, UT_ID and UT_TV fields. */
|
||||
#define _HAVE_UT_TYPE 1
|
||||
|
@ -115,7 +103,3 @@ struct utmp
|
|||
#define _HAVE_UT_ID 1
|
||||
#define _HAVE_UT_TV 1
|
||||
#define _HAVE_UT_HOST 1
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_UTMP_H_ */
|
||||
|
|
79
sysdeps/gnu/bits/utmpx.h
Normal file
79
sysdeps/gnu/bits/utmpx.h
Normal file
|
@ -0,0 +1,79 @@
|
|||
/* Structures and defenitions for the user accounting database. GNU version.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _UTMPX_H
|
||||
#error "Never use <bits/utmpx.h> directly; include <utmpx.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
|
||||
#define __UT_LINESIZE 32
|
||||
#define __UT_NAMESIZE 32
|
||||
#define __UT_HOSTSIZE 256
|
||||
|
||||
|
||||
/* The structure describing the status of a terminated process. This
|
||||
type is used in `struct utmpx' below. */
|
||||
struct __exit_status
|
||||
{
|
||||
short int e_termination; /* Process termination status. */
|
||||
short int e_exit; /* Process exit status. */
|
||||
};
|
||||
|
||||
|
||||
/* The structure describing an entry in the user accounting database. */
|
||||
struct utmpx
|
||||
{
|
||||
short int ut_type; /* Type of login. */
|
||||
__pid_t ut_pid; /* Process ID of login process. */
|
||||
char ut_line[__UT_LINESIZE]; /* Devicename. */
|
||||
char ut_id[4]; /* Inittab ID. */
|
||||
char ut_user[__UT_NAMESIZE]; /* Username. */
|
||||
char ut_host[__UT_HOSTSIZE]; /* Hostname for remote login. */
|
||||
struct __exit_status ut_exit; /* Exit status of a process marked
|
||||
as DEAD_PROCESS. */
|
||||
long ut_session; /* Session ID, used for windowing. */
|
||||
struct timeval ut_tv; /* Time entry was made. */
|
||||
__int32_t ut_addr_v6[4]; /* Internet address of remote host. */
|
||||
char pad[20]; /* Reserved for future use. */
|
||||
};
|
||||
|
||||
|
||||
/* Values for the `ut_type' field of a `struct utmp'. */
|
||||
#define EMPTY 0 /* No valid user accounting information. */
|
||||
|
||||
#define RUN_LVL 1 /* The system's runlevel. */
|
||||
#define BOOT_TIME 2 /* Time of system boot. */
|
||||
#define NEW_TIME 3 /* Time after system clock changed. */
|
||||
#define OLD_TIME 4 /* Time when system clock changed. */
|
||||
|
||||
#define INIT_PROCESS 5 /* Process spawned by the init process. */
|
||||
#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */
|
||||
#define USER_PROCESS 7 /* Normal process. */
|
||||
#define DEAD_PROCESS 8 /* Terminated process. */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -237,6 +237,8 @@ _dl_start_user:\n\
|
|||
|
||||
#ifdef RESOLVE
|
||||
|
||||
extern char **_dl_argv;
|
||||
|
||||
/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
|
||||
MAP is the object containing the reloc. */
|
||||
|
||||
|
@ -275,6 +277,8 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
|
|||
strtab = ((void *) map->l_addr
|
||||
+ map->l_info[DT_STRTAB]->d_un.d_ptr);
|
||||
_dl_sysdep_error ("Symbol `", strtab + refsym->st_name,
|
||||
"' in `",
|
||||
_dl_argv[0] ?: "<program name unknown>",
|
||||
"' has different size in shared object, "
|
||||
"consider re-linking\n", NULL);
|
||||
}
|
||||
|
|
42
sysdeps/mips/bits/dlfcn.h
Normal file
42
sysdeps/mips/bits/dlfcn.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
/* System dependand definitions for run-time dynamic loading.
|
||||
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_DLFCN_H
|
||||
#define _BITS_DLFCN_H 1
|
||||
|
||||
/* The MODE argument to `dlopen' contains one of the following: */
|
||||
#define RTLD_LAZY 0x001 /* Lazy function call binding. */
|
||||
#define RTLD_NOW 0x002 /* Immediate function call binding. */
|
||||
#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */
|
||||
|
||||
/* If the following bit is set in the MODE argument to `dlopen',
|
||||
the symbols of the loaded object and its dependencies are made
|
||||
visible as if the object were linked directly into the program. */
|
||||
#define RTLD_GLOBAL 0x004
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Some SGI specific calls that aren't implemented yet. */
|
||||
extern void *sgidladd __P ((const char *, int));
|
||||
extern void *sgidlopen_version __P ((const char *, int, const char *, int));
|
||||
extern char *sgigetdsoversion __P ((const char *));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* bits/dlfcn.h */
|
|
@ -23,14 +23,19 @@
|
|||
|
||||
#include <sysdep.h>
|
||||
|
||||
/* XXX Must this be __PIC__ ? --drepper */
|
||||
#ifdef PIC
|
||||
.option pic2
|
||||
#endif
|
||||
ENTRY (_setjmp)
|
||||
.set noreorder
|
||||
#ifdef PIC
|
||||
.cpload t9
|
||||
#endif
|
||||
la t9, C_SYMBOL_NAME (__sigsetjmp)
|
||||
nop
|
||||
jr t9
|
||||
li a1, 0 /* Pass a second argument of zero. */
|
||||
#else
|
||||
j C_SYMBOL_NAME (__sigsetjmp)
|
||||
#endif
|
||||
move a1,zero /* Pass a second argument of zero. */
|
||||
.set reorder
|
||||
.end _setjmp
|
||||
|
|
|
@ -23,14 +23,19 @@
|
|||
|
||||
#include <sysdep.h>
|
||||
|
||||
/* XXX Must this be __PIC__ ? --drepper */
|
||||
#ifdef PIC
|
||||
.option pic2
|
||||
#endif
|
||||
ENTRY (setjmp)
|
||||
.set noreorder
|
||||
#ifdef PIC
|
||||
.cpload t9
|
||||
#endif
|
||||
la t9, C_SYMBOL_NAME (__sigsetjmp)
|
||||
nop
|
||||
jr t9
|
||||
#else
|
||||
j C_SYMBOL_NAME (__sigsetjmp)
|
||||
#endif
|
||||
li a1, 1 /* Pass a second argument of one. */
|
||||
.set reorder
|
||||
.end setjmp
|
||||
|
|
|
@ -24,6 +24,34 @@
|
|||
#define ELF_MACHINE_NAME "MIPS"
|
||||
|
||||
#include <assert.h>
|
||||
#include <entry.h>
|
||||
|
||||
#ifndef ENTRY_POINT
|
||||
#error ENTRY_POINT needs to be defined for MIPS.
|
||||
#endif
|
||||
|
||||
#ifndef _RTLD_PROLOGUE
|
||||
#ifdef __STDC__
|
||||
#define _RTLD_PROLOGUE(entry) "\n\t.globl " #entry \
|
||||
"\n\t.ent " #entry \
|
||||
"\n\t" #entry ":\n\t"
|
||||
#else
|
||||
#define _RTLD_PROLOGUE(entry) "\n\t.globl entry\n\t.ent entry\n\t entry:\n\t"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _RTLD_EPILOGUE
|
||||
#ifdef __STDC__
|
||||
#define _RTLD_EPILOGUE(entry) "\t.end " #entry "\n"
|
||||
#else
|
||||
#define _RTLD_EPILOGUE(entry) "\t.end entry\n"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* I have no idea what I am doing. */
|
||||
#define ELF_MACHINE_RELOC_NOPLT -1
|
||||
#define elf_machine_lookup_noplt_p(type) (1)
|
||||
#define elf_machine_lookup_noexec_p(type) (0)
|
||||
|
||||
/* Translate a processor specific dynamic tag to the index
|
||||
in l_info array. */
|
||||
|
@ -34,6 +62,18 @@
|
|||
#define ELF_MACHINE_ALIGN_MASK 0xffff
|
||||
#endif
|
||||
|
||||
/*
|
||||
* MIPS libraries are usually linked to a non-zero base address. We
|
||||
* subtrace the base address from the address where we map the object
|
||||
* to. This results in more efficient address space usage.
|
||||
*/
|
||||
#if 0
|
||||
#define MAP_BASE_ADDR(l) ((l)->l_info[DT_MIPS(BASE_ADDRESS)] ? \
|
||||
(l)->l_info[DT_MIPS(BASE_ADDRESS)]->d_un.d_ptr : 0)
|
||||
#else
|
||||
#define MAP_BASE_ADDR(l) 0x5ffe0000
|
||||
#endif
|
||||
|
||||
/* If there is a DT_MIPS_RLD_MAP entry in the dynamic section, fill it in
|
||||
with the run-time address of the r_debug structure */
|
||||
#define ELF_MACHINE_DEBUG_SETUP(l,r) \
|
||||
|
@ -43,7 +83,7 @@ do { if ((l)->l_info[DT_MIPS (RLD_MAP)]) \
|
|||
} while (0)
|
||||
|
||||
/* Return nonzero iff E_MACHINE is compatible with the running host. */
|
||||
static inline int
|
||||
static inline int __attribute__ ((unused))
|
||||
elf_machine_matches_host (ElfW(Half) e_machine)
|
||||
{
|
||||
switch (e_machine)
|
||||
|
@ -56,6 +96,16 @@ elf_machine_matches_host (ElfW(Half) e_machine)
|
|||
}
|
||||
}
|
||||
|
||||
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||
+ first element of the GOT. This must be inlined in a function which
|
||||
+ uses global data. */
|
||||
+static inline ElfW(Addr)
|
||||
+elf_machine_dynamic (void)
|
||||
+{
|
||||
+ register ElfW(Addr) gp asm ("$28");
|
||||
+ return * (ElfW(Addr) *) (gp - 0x7ff0);
|
||||
+}
|
||||
+
|
||||
static inline ElfW(Addr) *
|
||||
elf_mips_got_from_gpreg (ElfW(Addr) gpreg)
|
||||
{
|
||||
|
@ -75,6 +125,16 @@ elf_machine_got (void)
|
|||
}
|
||||
|
||||
|
||||
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||
first element of the GOT. This must be inlined in a function which
|
||||
uses global data. */
|
||||
static inline ElfW(Addr)
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
register ElfW(Addr) gp asm ("$28");
|
||||
return * (ElfW(Addr) *) (gp - 0x7ff0);
|
||||
}
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
static inline ElfW(Addr)
|
||||
elf_machine_load_address (void)
|
||||
|
@ -87,7 +147,9 @@ elf_machine_load_address (void)
|
|||
" nop\n"
|
||||
"here: dsubu %0, $31, %0\n"
|
||||
" .set reorder\n"
|
||||
: "=r" (addr));
|
||||
: "=r" (addr)
|
||||
: /* No inputs */
|
||||
: "$31");
|
||||
#else
|
||||
asm (" .set noreorder\n"
|
||||
" la %0, here\n"
|
||||
|
@ -95,7 +157,9 @@ elf_machine_load_address (void)
|
|||
" nop\n"
|
||||
"here: subu %0, $31, %0\n"
|
||||
" .set reorder\n"
|
||||
: "=r" (addr));
|
||||
: "=r" (addr)
|
||||
: /* No inputs */
|
||||
: "$31");
|
||||
#endif
|
||||
return addr;
|
||||
}
|
||||
|
@ -105,7 +169,7 @@ elf_machine_load_address (void)
|
|||
|
||||
/* Relocate GOT. */
|
||||
static inline void
|
||||
elf_machine_got_rel (struct link_map *map)
|
||||
elf_machine_got_rel (struct link_map *map, int lazy)
|
||||
{
|
||||
ElfW(Addr) *got;
|
||||
ElfW(Sym) *sym;
|
||||
|
@ -119,7 +183,7 @@ elf_machine_got_rel (struct link_map *map)
|
|||
const ElfW(Sym) *ref = sym; \
|
||||
ElfW(Addr) sym_loadaddr; \
|
||||
sym_loadaddr = _dl_lookup_symbol (strtab + sym->st_name, &ref, scope, \
|
||||
map->l_name, DL_LOOKUP_NOPLT); \
|
||||
map->l_name, ELF_MACHINE_RELOC_NOPLT);\
|
||||
(ref)? sym_loadaddr + ref->st_value: 0; \
|
||||
})
|
||||
|
||||
|
@ -151,7 +215,7 @@ elf_machine_got_rel (struct link_map *map)
|
|||
{
|
||||
if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC)
|
||||
{
|
||||
if (sym->st_value /* && maybe_stub (sym->st_value) */)
|
||||
if (sym->st_value && lazy)
|
||||
*got = sym->st_value + map->l_addr;
|
||||
else
|
||||
*got = RESOLVE_GOTSYM (sym);
|
||||
|
@ -163,7 +227,7 @@ elf_machine_got_rel (struct link_map *map)
|
|||
*got = RESOLVE_GOTSYM (sym);
|
||||
else if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC
|
||||
&& *got != sym->st_value
|
||||
/* && maybe_stub (*got) */)
|
||||
&& lazy)
|
||||
*got += map->l_addr;
|
||||
else if (ELFW(ST_TYPE) (sym->st_info) == STT_SECTION)
|
||||
{
|
||||
|
@ -193,6 +257,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
|
|||
extern void _dl_runtime_resolve (ElfW(Word));
|
||||
extern int _dl_mips_gnu_objects;
|
||||
|
||||
#ifdef RTLD_BOOTSTRAP
|
||||
{
|
||||
return lazy;
|
||||
}
|
||||
#endif
|
||||
if (lazy)
|
||||
{
|
||||
/* The GOT entries for functions have not yet been filled in.
|
||||
|
@ -216,7 +285,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
|
|||
}
|
||||
|
||||
/* Relocate global offset table. */
|
||||
elf_machine_got_rel (l);
|
||||
elf_machine_got_rel (l, lazy);
|
||||
|
||||
return lazy;
|
||||
}
|
||||
|
@ -282,6 +351,7 @@ elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc)
|
|||
}
|
||||
|
||||
_dl_signal_error (0, NULL, "cannot find runtime link map");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Mips has no PLT but define elf_machine_relplt to be elf_machine_rel. */
|
||||
|
@ -332,7 +402,7 @@ __dl_runtime_resolve (ElfW(Word) sym_index,\
|
|||
definer = &symtab[sym_index]; \
|
||||
\
|
||||
loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer, \
|
||||
scope, l->l_name, DL_LOOKUP_NOPLT);\
|
||||
scope, l->l_name, ELF_MACHINE_RELOC_NOPLT); \
|
||||
\
|
||||
*_dl_global_scope_end = NULL; \
|
||||
\
|
||||
|
@ -425,7 +495,7 @@ __dl_runtime_resolve (ElfW(Word) sym_index,\
|
|||
definer = &symtab[sym_index]; \
|
||||
\
|
||||
loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer, \
|
||||
scope, l->l_name, DL_LOOKUP_NOPLT);\
|
||||
scope, l->l_name, ELF_MACHINE_RELOC_NOPLT); \
|
||||
\
|
||||
*_dl_global_scope_end = NULL; \
|
||||
\
|
||||
|
@ -444,8 +514,8 @@ asm ("\n\
|
|||
.ent _dl_runtime_resolve\n \
|
||||
_dl_runtime_resolve:\n \
|
||||
.set noreorder\n \
|
||||
# Save old GP to $3.\n\
|
||||
move $3,$28\n\
|
||||
# Save slot call pc.\n \
|
||||
move $3, $31\n \
|
||||
# Modify t9 ($25) so as to point .cpload instruction.\n \
|
||||
addu $25,8\n \
|
||||
# Compute GP.\n \
|
||||
|
@ -484,22 +554,31 @@ _dl_runtime_resolve:\n\
|
|||
|
||||
/* Mask identifying addresses reserved for the user program,
|
||||
where the dynamic linker should not map anything. */
|
||||
#define ELF_MACHINE_USER_ADDRESS_MASK 0x00000000UL
|
||||
#define ELF_MACHINE_USER_ADDRESS_MASK 0x80000000UL
|
||||
|
||||
|
||||
|
||||
/* Initial entry point code for the dynamic linker.
|
||||
The C function `_dl_start' is the real entry point;
|
||||
its return value is the user program's entry point. */
|
||||
its return value is the user program's entry point.
|
||||
Note how we have to be careful about two things:
|
||||
|
||||
1) That we allocate a minimal stack of 24 bytes for
|
||||
every function call, the MIPS ABI states that even
|
||||
if all arguments are passed in registers the procedure
|
||||
called can use the 16 byte area pointed to by $sp
|
||||
when it is called to store away the arguments passed
|
||||
to it.
|
||||
|
||||
2) That under Linux the entry is named __start
|
||||
and not just plain _start. */
|
||||
|
||||
#ifdef __mips64
|
||||
#define RTLD_START asm ("\
|
||||
.text\n\
|
||||
.align 3\n\
|
||||
.globl _start\n\
|
||||
.globl _dl_start_user\n\
|
||||
.ent _start\n\
|
||||
_start:\n\
|
||||
.align 3\n"\
|
||||
_RTLD_PROLOGUE (ENTRY_POINT)\
|
||||
" .globl _dl_start_user\n\
|
||||
.set noreorder\n\
|
||||
bltzal $0, 0f\n\
|
||||
nop\n\
|
||||
|
@ -561,16 +640,15 @@ _dl_start_user:\n\
|
|||
ld $5, 1*8($29)\n\
|
||||
ld $6, 2*8$29)\n\
|
||||
ld $7, 3*8($29)\n\
|
||||
jr $25\n\
|
||||
.end _start\n\
|
||||
");
|
||||
jr $25\n"\
|
||||
_RTLD_EPILOGUE(ENTRY_POINT) \
|
||||
);
|
||||
|
||||
#else
|
||||
#define RTLD_START asm ("\
|
||||
.text\n\
|
||||
.globl _start\n\
|
||||
.globl _dl_start_user\n\
|
||||
.ent _start\n\
|
||||
_start:\n\
|
||||
.text\n"\
|
||||
_RTLD_PROLOGUE(ENTRY_POINT)\
|
||||
" .globl _dl_start_user\n\
|
||||
.set noreorder\n\
|
||||
bltzal $0, 0f\n\
|
||||
nop\n\
|
||||
|
@ -582,7 +660,9 @@ _start:\n\
|
|||
la $4, _DYNAMIC\n\
|
||||
sw $4, -0x7ff0($28)\n\
|
||||
move $4, $29\n\
|
||||
subu $29, 16\n\
|
||||
jal _dl_start\n\
|
||||
addiu $29, 16\n\
|
||||
# Get the value of label '_dl_start_user' in t9 ($25).\n\
|
||||
la $25, _dl_start_user\n\
|
||||
_dl_start_user:\n\
|
||||
|
@ -610,7 +690,9 @@ _dl_start_user:\n\
|
|||
lw $4, 8($2)\n\
|
||||
# Call _dl_init_next to return the address of an initializer\n\
|
||||
# function to run.\n\
|
||||
subu $29, 16\n\
|
||||
jal _dl_init_next\n\
|
||||
addiu $29, 16\n\
|
||||
move $28, $16\n\
|
||||
# Check for zero return, when out of initializers.\n\
|
||||
beq $2, $0, 2f\n\
|
||||
|
@ -624,16 +706,18 @@ _dl_start_user:\n\
|
|||
move $28, $16\n\
|
||||
# Loop to call _dl_init_next for the next initializer.\n\
|
||||
b 1b\n\
|
||||
2: # Clear the startup flag. Assumes 32 bit ints.\n\
|
||||
sw $0, _dl_starting_up\n\
|
||||
# Pass our finalizer function to the user in ra.\n\
|
||||
2: la $31, _dl_fini\n\
|
||||
la $31, _dl_fini\n\
|
||||
# Jump to the user entry point.\n\
|
||||
move $25, $17\n\
|
||||
lw $4, 0($29)\n\
|
||||
lw $5, 4($29)\n\
|
||||
lw $6, 8($29)\n\
|
||||
lw $7, 12($29)\n\
|
||||
jr $25\n\
|
||||
.end _start\n\
|
||||
jr $25\n"\
|
||||
_RTLD_EPILOGUE(ENTRY_POINT)\
|
||||
");
|
||||
#endif
|
||||
|
||||
|
|
|
@ -17,6 +17,12 @@
|
|||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <entry.h>
|
||||
|
||||
#ifndef ENTRY_POINT
|
||||
#error ENTRY_POINT needs to be defined for start.S on MIPS/ELF.
|
||||
#endif
|
||||
|
||||
/* This is the canonical entry point, usually the first thing in the text
|
||||
segment. The SVR4/Mips ABI (pages 3-31, 3-32) says that when the entry
|
||||
point runs, most registers' values are unspecified, except for:
|
||||
|
@ -53,8 +59,8 @@
|
|||
#endif
|
||||
|
||||
.text
|
||||
.globl _start
|
||||
_start:
|
||||
.globl ENTRY_POINT
|
||||
ENTRY_POINT:
|
||||
#ifdef PIC
|
||||
SET_GP
|
||||
#endif
|
||||
|
@ -81,20 +87,9 @@ nofini:
|
|||
the prologue of __libc_init_first, we preload them to
|
||||
prevent clobbering the stack tops. In Hurd case, stack pointer
|
||||
($29) may be VM_MAX_ADDRESS here. If so, we must modify it. */
|
||||
#if (__mips64)
|
||||
dli $4, 0x10000000000
|
||||
bne $29, $4, 1f
|
||||
dsubu $29, 32
|
||||
sd $0, 0($29)
|
||||
sd $0, 8($29)
|
||||
sd $0, 16($29)
|
||||
sd $0, 24($29)
|
||||
1:
|
||||
ld $4, 0($29)
|
||||
ld $5, 8($29)
|
||||
ld $6, 16($29)
|
||||
ld $7, 24($29)
|
||||
#else /* __mips64 */
|
||||
#if 0
|
||||
jal mach_host_self
|
||||
#endif
|
||||
li $4, 0x80000000
|
||||
bne $29, $4, 1f
|
||||
subu $29, 16
|
||||
|
@ -107,23 +102,14 @@ nofini:
|
|||
lw $5, 4($29)
|
||||
lw $6, 8($29)
|
||||
lw $7, 12($29)
|
||||
#endif /* __mips64 */
|
||||
|
||||
jal __libc_init_first
|
||||
#ifdef PIC
|
||||
SET_GP
|
||||
#endif
|
||||
#if (__mips64)
|
||||
ld $4, 0($29)
|
||||
ld $5, 8($29)
|
||||
ld $6, 16($29)
|
||||
ld $7, 24($29)
|
||||
#else /* __mips64 */
|
||||
lw $4, 0($29)
|
||||
lw $5, 4($29)
|
||||
lw $6, 8($29)
|
||||
lw $7, 12($29)
|
||||
#endif /* __mips64 */
|
||||
|
||||
/* Call `_init', which is the entry point to our own `.init'
|
||||
section; and register with `atexit' to have `exit' call
|
||||
|
@ -145,19 +131,11 @@ nofini:
|
|||
|
||||
/* Extract the arguments and environment as encoded on the stack
|
||||
and set up the arguments for `main': argc, argv, envp. */
|
||||
#if (__mips64)
|
||||
ld $4, 0($29) /* argc */
|
||||
daddu $5, $29, 8 /* argv */
|
||||
dsll $6, $4, 3
|
||||
daddu $6, $6, 8
|
||||
daddu $6, $5, $6 /* envp = &argv[argc + 1] */
|
||||
#else /* __mips64 */
|
||||
lw $4, 0($29) /* argc */
|
||||
addu $5, $29, 4 /* argv */
|
||||
sll $6, $4, 2
|
||||
addu $6, $6, 4
|
||||
addu $6, $5, $6 /* envp = &argv[argc + 1] */
|
||||
#endif /* __mips64 */
|
||||
|
||||
/* Call the user's main function, and exit with its value. */
|
||||
jal main
|
||||
|
@ -172,10 +150,11 @@ hlt: b hlt /* Crash if somehow it does return. */
|
|||
.data
|
||||
.globl __data_start
|
||||
__data_start:
|
||||
#if (__mips64)
|
||||
.dword 0
|
||||
#else /* __mips64 */
|
||||
.word 0
|
||||
#endif /* __mips64 */
|
||||
.long 0
|
||||
.weak data_start
|
||||
data_start = __data_start
|
||||
|
||||
.comm errno, 4, 4
|
||||
#ifdef __ELF__
|
||||
.type errno, @object
|
||||
#endif
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* FPU control word bits. Mips version.
|
||||
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Olaf Flebbe.
|
||||
Contributed by Olaf Flebbe and Ralf Baechle.
|
||||
|
||||
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
|
||||
|
@ -21,74 +21,84 @@
|
|||
#ifndef _FPU_CONTROL_H
|
||||
#define _FPU_CONTROL_H
|
||||
|
||||
/* FP control/status register bit assignments.
|
||||
/* MIPS FPU floating point control register bits.
|
||||
*
|
||||
* 31-25 24 23 22-18 17-12 11-7 6-2 1-0
|
||||
* (cause) (enables) (flags)
|
||||
* | reserved | FS | C | reserved | E V Z O U I | V Z O U I | V Z O U I | RM
|
||||
* 31-25 -> floating point conditions code bits 7-1. These bits are only
|
||||
* available in MIPS IV.
|
||||
* 24 -> flush denormalized results to zero instead of
|
||||
* causing unimplemented operation exception. This bit is only
|
||||
* available for MIPS III and newer.
|
||||
* 23 -> Condition bit
|
||||
* 22-18 -> reserved (read as 0, write with 0)
|
||||
* 17 -> cause bit for unimplemented operation
|
||||
* 16 -> cause bit for invalid exception
|
||||
* 15 -> cause bit for division by zero exception
|
||||
* 14 -> cause bit for overflow exception
|
||||
* 13 -> cause bit for underflow exception
|
||||
* 12 -> cause bit for inexact exception
|
||||
* 11 -> enable exception for invalid exception
|
||||
* 10 -> enable exception for division by zero exception
|
||||
* 9 -> enable exception for overflow exception
|
||||
* 8 -> enable exception for underflow exception
|
||||
* 7 -> enable exception for inexact exception
|
||||
* 6 -> flag invalid exception
|
||||
* 5 -> flag division by zero exception
|
||||
* 4 -> flag overflow exception
|
||||
* 3 -> flag underflow exception
|
||||
* 2 -> flag inexact exception
|
||||
* 1-0 -> rounding control
|
||||
*
|
||||
* FS: When set, denormalized results are flushed to zero instead of
|
||||
* causing an unimplemented operation exception.
|
||||
* C: Condition bit.
|
||||
* E: Unimplemented Operation.
|
||||
* V: Invalid Operation.
|
||||
* Z: Division by zero.
|
||||
* O: Overflow.
|
||||
* U: Underflow.
|
||||
* I: Inexact Operation
|
||||
* RM: Rounding mode bits
|
||||
* 00 (RN) - rounding to nearest
|
||||
* 01 (RZ) - rounding toward zero
|
||||
* 10 (RP) - rounding down (toward - infinity)
|
||||
* 11 (RM) - rounding up (toward + infinity)
|
||||
*
|
||||
* Rounding Control:
|
||||
* 00 - rounding to nearest (RN)
|
||||
* 01 - rounding toward zero (RZ)
|
||||
* 01 - rounding (up) toward plus infinity (RP)
|
||||
* 11 - rounding (down)toward minus infinity (RM)
|
||||
*/
|
||||
|
||||
#include <features.h>
|
||||
|
||||
/* masking of interrupts */
|
||||
#define _FPU_MASK_IM (1 << 11)
|
||||
#define _FPU_MASK_DM (1 << 24) /* XXX */
|
||||
#define _FPU_MASK_ZM (1 << 10)
|
||||
#define _FPU_MASK_OM (1 << 9)
|
||||
#define _FPU_MASK_UM (1 << 8)
|
||||
#define _FPU_MASK_PM (1 << 7)
|
||||
#define _FPU_MASK_V 0x0800 /* Invalid operation */
|
||||
#define _FPU_MASK_Z 0x0400 /* Division by zero */
|
||||
#define _FPU_MASK_O 0x0200 /* Overflow */
|
||||
#define _FPU_MASK_U 0x0100 /* Underflow */
|
||||
#define _FPU_MASK_I 0x0080 /* Inexact operation */
|
||||
|
||||
/* precision control */
|
||||
#define _FPU_EXTENDED 0
|
||||
#define _FPU_DOUBLE 0
|
||||
#define _FPU_SINGLE 0
|
||||
/* flush denormalized numbers to zero */
|
||||
#define _FPU_FLUSH_TZ 0x1000000
|
||||
|
||||
/* rounding control */
|
||||
#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */
|
||||
#define _FPU_RC_DOWN 0x2
|
||||
#define _FPU_RC_UP 0x3
|
||||
#define _FPU_RC_ZERO 0x1
|
||||
#define _FPU_RC_UP 0x2
|
||||
#define _FPU_RC_DOWN 0x3
|
||||
|
||||
#define _FPU_RESERVED 0xfe7c0000 /* Reserved bits */
|
||||
#define _FPU_RESERVED 0xfe3c0000 /* Reserved bits in cw */
|
||||
|
||||
|
||||
/* The fdlibm code requires strict IEEE double precision arithmetic,
|
||||
and no interrupts for exceptions, rounding to nearest. */
|
||||
|
||||
#define _FPU_DEFAULT 0x0
|
||||
#define _FPU_DEFAULT 0x00000600
|
||||
|
||||
/* IEEE: same as above, but exceptions */
|
||||
#define _FPU_IEEE (0x1f << 7)
|
||||
#define _FPU_IEEE 0x00000F80
|
||||
|
||||
/* Type of the control word. */
|
||||
typedef unsigned int fpu_control_t;
|
||||
typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__)));
|
||||
|
||||
/* Macros for accessing the hardware control word. */
|
||||
#define _FPU_GETCW(cw) __asm__ ("cfc1 %0, $31; nop; nop" : "=r" (cw))
|
||||
#define _FPU_SETCW(cw) __asm__ ("ctc1 %0, $31; nop; nop" : : "r" (cw))
|
||||
#define _FPU_GETCW(cw) __asm__ ("cfc1 %0,$31" : "=r" (cw) : )
|
||||
#define _FPU_SETCW(cw) __asm__ ("ctc1 %0,$31" : : "r" (cw))
|
||||
|
||||
/* Default control word set at startup. */
|
||||
extern fpu_control_t __fpu_control;
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Called at startup. It can be used to manipulate fpu control register. */
|
||||
/* Called at startup. It can be used to manipulate the fpu control
|
||||
register. */
|
||||
extern void __setfpucw __P ((fpu_control_t));
|
||||
|
||||
__END_DECLS
|
||||
|
|
3
sysdeps/mips/mips64/rtld-parms
Normal file
3
sysdeps/mips/mips64/rtld-parms
Normal file
|
@ -0,0 +1,3 @@
|
|||
ifndef rtld-wordsize
|
||||
rtld-wordsize = 64
|
||||
endif
|
3
sysdeps/mips/mipsel/rtld-parms
Normal file
3
sysdeps/mips/mipsel/rtld-parms
Normal file
|
@ -0,0 +1,3 @@
|
|||
ifndef rtld-oformat
|
||||
rtld-oformat = elf32-littlemips
|
||||
endif
|
106
sysdeps/mips/rtld-ldscript.in
Normal file
106
sysdeps/mips/rtld-ldscript.in
Normal file
|
@ -0,0 +1,106 @@
|
|||
OUTPUT_FORMAT("@@rtld-oformat@@")
|
||||
OUTPUT_ARCH(@@rtld-arch@@)
|
||||
ENTRY(@@rtld-entry@@)
|
||||
SECTIONS
|
||||
{
|
||||
/* Read-only sections, merged into text segment: */
|
||||
. = @@rtld-base@@;
|
||||
.reginfo : { *(.reginfo) }
|
||||
.dynamic : { *(.dynamic) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.dynsym : { *(.dynsym) }
|
||||
.hash : { *(.hash) }
|
||||
.rel.text : { *(.rel.text) }
|
||||
.rela.text : { *(.rela.text) }
|
||||
.rel.data : { *(.rel.data) }
|
||||
.rela.data : { *(.rela.data) }
|
||||
.rel.rodata : { *(.rel.rodata) }
|
||||
.rela.rodata : { *(.rela.rodata) }
|
||||
.rel.got : { *(.rel.got) }
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rel.ctors : { *(.rel.ctors) }
|
||||
.rela.ctors : { *(.rela.ctors) }
|
||||
.rel.dtors : { *(.rel.dtors) }
|
||||
.rela.dtors : { *(.rela.dtors) }
|
||||
.rel.init : { *(.rel.init) }
|
||||
.rela.init : { *(.rela.init) }
|
||||
.rel.fini : { *(.rel.fini) }
|
||||
.rela.fini : { *(.rela.fini) }
|
||||
.rel.bss : { *(.rel.bss) }
|
||||
.rela.bss : { *(.rela.bss) }
|
||||
.rel.plt : { *(.rel.plt) }
|
||||
.rela.plt : { *(.rela.plt) }
|
||||
.rodata : { *(.rodata) }
|
||||
.rodata1 : { *(.rodata1) }
|
||||
.init : { *(.init) } =0
|
||||
.text :
|
||||
{
|
||||
*(.text)
|
||||
*(.stub)
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
} =0
|
||||
.fini : { *(.fini) } =0
|
||||
/* Adjust the address for the data segment. We want to adjust up to
|
||||
the same address within the page on the next page up. It would
|
||||
be more correct to do this:
|
||||
. = 0x10000000;
|
||||
The current expression does not correctly handle the case of a
|
||||
text segment ending precisely at the end of a page; it causes the
|
||||
data segment to skip a page. The above expression does not have
|
||||
this problem, but it will currently (2/95) cause BFD to allocate
|
||||
a single segment, combining both text and data, for this case.
|
||||
This will prevent the text segment from being shared among
|
||||
multiple executions of the program; I think that is more
|
||||
important than losing a page of the virtual address space (note
|
||||
that no actual memory is lost; the page which is skipped can not
|
||||
be referenced). */
|
||||
. += 0x10000;
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
CONSTRUCTORS
|
||||
}
|
||||
.data1 : { *(.data1) }
|
||||
.ctors : { *(.ctors) }
|
||||
.dtors : { *(.dtors) }
|
||||
_gp = ALIGN(16) + 0x7ff0;
|
||||
.got :
|
||||
{
|
||||
*(.got.plt) *(.got)
|
||||
}
|
||||
/* We want the small data sections together, so single-instruction offsets
|
||||
can access them all, and initialized data all before uninitialized, so
|
||||
we can shorten the on-disk segment size. */
|
||||
.sdata : { *(.sdata) }
|
||||
.lit8 : { *(.lit8) }
|
||||
.lit4 : { *(.lit4) }
|
||||
.sbss : { *(.sbss) *(.scommon) }
|
||||
.bss :
|
||||
{
|
||||
*(.dynbss)
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
}
|
||||
/* The normal linker scripts created by the binutils doesn't have the
|
||||
symbols end and _end which breaks ld.so's dl-minimal.c. */
|
||||
_end = . ;
|
||||
PROVIDE (end = .);
|
||||
/* These are needed for ELF backends which have not yet been
|
||||
converted to the new style linker. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
/* DWARF debug sections.
|
||||
Symbols in the .debug DWARF section are relative to the beginning of the
|
||||
section so we begin .debug at 0. It's not clear yet what needs to happen
|
||||
for the others. */
|
||||
.debug 0 : { *(.debug) }
|
||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||
.line 0 : { *(.line) }
|
||||
/* These must appear regardless of . */
|
||||
.gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
|
||||
.gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
|
||||
}
|
|
@ -26,10 +26,20 @@
|
|||
#endif
|
||||
ENTRY (__sigsetjmp)
|
||||
#ifdef PIC
|
||||
.set noreorder
|
||||
.cpload t9
|
||||
.set reorder
|
||||
#endif
|
||||
move a2, sp
|
||||
#ifdef fp
|
||||
move a3, fp
|
||||
#else
|
||||
move a3, $fp
|
||||
#endif
|
||||
#ifdef PIC
|
||||
la t9, __sigsetjmp_aux
|
||||
nop
|
||||
jr t9
|
||||
#else
|
||||
j __sigsetjmp_aux
|
||||
#endif
|
||||
.end __sigsetjmp
|
||||
|
|
|
@ -436,10 +436,10 @@ static int gaih_inet(const char *name, const struct gaih_service *service,
|
|||
struct gaih_servtuple *st2;
|
||||
struct gaih_addrtuple *at2 = at;
|
||||
int j;
|
||||
#ifndef MAXHOSTNAMELEN
|
||||
#define MAXHOSTNAMELEN 128
|
||||
#endif /* MAXHOSTNAMELEN */
|
||||
char buffer[MAXHOSTNAMELEN];
|
||||
/*
|
||||
buffer is the size of an unformatted IPv6 address in printable format.
|
||||
*/
|
||||
char buffer[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"];
|
||||
|
||||
while(at2) {
|
||||
if (req->ai_flags & AI_CANONNAME) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1992, 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
|
||||
|
@ -46,7 +46,7 @@ getlogin (void)
|
|||
thing to do. Note that ttyname(open("/dev/tty")) on those
|
||||
systems returns /dev/tty, so that is not a possible solution for
|
||||
getlogin(). */
|
||||
if (__ttyname_r (0, real_tty_path, sizeof (tty_pathname)) < 0)
|
||||
if (__ttyname_r (0, real_tty_path, sizeof (tty_pathname)) != 0)
|
||||
return NULL;
|
||||
|
||||
real_tty_path += 5; /* Remove "/dev/". */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Reentrant function to return the current login name. Unix version.
|
||||
Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991, 1992, 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
|
||||
|
@ -41,19 +41,17 @@ getlogin_r (name, name_len)
|
|||
struct utmp *ut, line, buffer;
|
||||
|
||||
{
|
||||
int err;
|
||||
int d = __open ("/dev/tty", 0);
|
||||
if (d < 0)
|
||||
return errno;
|
||||
|
||||
result = ttyname_r (d, real_tty_path, sizeof (tty_pathname));
|
||||
err = errno;
|
||||
(void) close (d);
|
||||
|
||||
if (result < 0)
|
||||
if (result != 0)
|
||||
{
|
||||
__set_errno (err);
|
||||
return err;
|
||||
__set_errno (result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,46 +24,24 @@
|
|||
#endif
|
||||
|
||||
#ifndef HAVE_GNU_LD
|
||||
#define __end end
|
||||
#define _end end
|
||||
#endif
|
||||
|
||||
.data
|
||||
.sdata
|
||||
ENTRY(__curbrk)
|
||||
.word __end
|
||||
.word 0
|
||||
.end __curbrk
|
||||
|
||||
.text
|
||||
.set noreorder
|
||||
.set noat
|
||||
|
||||
ENTRY(__brk)
|
||||
/* Minimum is one page. */
|
||||
lui v0, 4096
|
||||
lw v0, __end
|
||||
nop
|
||||
|
||||
/* If they ask for less than a page, givvem the whole
|
||||
thing anyway. */
|
||||
sltu AT, a0, v0
|
||||
beq AT, zero, down1
|
||||
nop
|
||||
SYSCALL__(brk, 1)
|
||||
.set reorder
|
||||
/* Handle the query case. */
|
||||
bnez a0, 1f
|
||||
move a0,v0
|
||||
down1:
|
||||
li v0, SYS_brk
|
||||
syscall
|
||||
bne a3, zero, error
|
||||
|
||||
/* Update __curbrk and exit cleanly. */
|
||||
lui AT, 4096
|
||||
1: /* Update __curbrk and exit cleanly. */
|
||||
sw a0, __curbrk
|
||||
j ra
|
||||
move v0, zero
|
||||
|
||||
/* What a horrible way to die. */
|
||||
error: j syscall_error
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
jr ra
|
||||
.end __brk
|
||||
|
||||
weak_alias (__brk, brk)
|
||||
|
|
|
@ -21,10 +21,23 @@
|
|||
#define _ERRNO_H
|
||||
#include <bits/errno.h>
|
||||
|
||||
/* .globl errno */
|
||||
.comm errno, 4
|
||||
#ifdef __ELF__
|
||||
.type errno, @object
|
||||
#endif
|
||||
|
||||
.set noreorder
|
||||
|
||||
ENTRY(syscall_error)
|
||||
ENTRY(__syscall_error)
|
||||
#ifdef __PIC__
|
||||
.set noat
|
||||
move $1, $31
|
||||
bltzal $0, 0f
|
||||
nop
|
||||
0: .cpload $31
|
||||
move $31, $1
|
||||
.set at
|
||||
#endif
|
||||
#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
|
||||
/* We translate the system's EWOULDBLOCK error into EAGAIN.
|
||||
The GNU C library always defines EWOULDBLOCK==EAGAIN.
|
||||
|
@ -40,4 +53,8 @@ skip:
|
|||
/* And just kick back a -1. */
|
||||
j ra
|
||||
li v0, -1
|
||||
.end syscall_error
|
||||
END(__syscall_error)
|
||||
|
||||
/* We provide this alias for compatilility with other Unices
|
||||
like IRIX 5 */
|
||||
weak_alias (__syscall_error, syscall_error)
|
||||
|
|
|
@ -32,19 +32,41 @@
|
|||
/* Note that while it's better structurally, going back to call syscall_error
|
||||
can make things confusing if you're debugging---it looks like it's jumping
|
||||
backwards into the previous fn. */
|
||||
#ifdef __PIC__
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.align 2; \
|
||||
99: la t9,syscall_error; \
|
||||
jr t9; \
|
||||
ENTRY(name) \
|
||||
.set noreorder; \
|
||||
.cpload t9; \
|
||||
li v0, SYS_##syscall_name; \
|
||||
syscall; \
|
||||
.set reorder; \
|
||||
bne a3, zero, 99b; \
|
||||
syse1:
|
||||
#else
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.set noreorder; \
|
||||
.align 2; \
|
||||
99: j syscall_error; \
|
||||
nop; \
|
||||
ENTRY(name) \
|
||||
.set noreorder; \
|
||||
li v0, SYS_##syscall_name; \
|
||||
syscall; \
|
||||
.set reorder; \
|
||||
bne a3, zero, 99b; \
|
||||
nop; \
|
||||
syse1:
|
||||
#endif
|
||||
|
||||
#undef PSEUDO_END
|
||||
#define PSEUDO_END(sym) .end sym
|
||||
|
||||
#define ret j ra ; nop
|
||||
|
||||
#undef END
|
||||
#define END(sym) .end sym
|
||||
|
||||
#define r0 v0
|
||||
#define r1 v1
|
||||
/* The mips move insn is d,s. */
|
||||
|
|
|
@ -28,14 +28,14 @@ ENTRY(__wait)
|
|||
|
||||
li v0, SYS_wait
|
||||
syscall
|
||||
beq a3, zero, noerror
|
||||
beqz a3, noerror
|
||||
nop
|
||||
j syscall_error
|
||||
j __syscall_error
|
||||
nop
|
||||
|
||||
noerror:
|
||||
/* If the arg is not NULL, store v1 there. */
|
||||
beq a0, zero, noarg
|
||||
beqz a0, noarg
|
||||
nop
|
||||
sw v1, 0(a0)
|
||||
nop
|
||||
|
|
|
@ -82,4 +82,4 @@ extern int __ipc __P ((int __call, int __first, int __second, int __third,
|
|||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_IPC_BUF_H */
|
||||
#endif /* bits/ipc_buf.h */
|
||||
|
|
|
@ -75,4 +75,4 @@ struct msginfo
|
|||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_MSQ_BUF_H */
|
||||
#endif /* bits/msq_buf.h */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||
|
||||
|
@ -85,4 +85,4 @@ struct seminfo
|
|||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_SEM_BUF_H */
|
||||
#endif /* bits/sem_buf.h */
|
||||
|
|
|
@ -89,4 +89,4 @@ struct shm_info
|
|||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_SHM_BUF_H */
|
||||
#endif /* bits/shm_buf.h */
|
||||
|
|
3
sysdeps/unix/sysv/linux/mips/Dist
Normal file
3
sysdeps/unix/sysv/linux/mips/Dist
Normal file
|
@ -0,0 +1,3 @@
|
|||
clone.S
|
||||
kernel_sigaction.h
|
||||
kernel_stat.h
|
10
sysdeps/unix/sysv/linux/mips/Makefile
Normal file
10
sysdeps/unix/sysv/linux/mips/Makefile
Normal file
|
@ -0,0 +1,10 @@
|
|||
ifeq ($(subdir),signal)
|
||||
#sysdep_routines += sigsuspend
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),misc)
|
||||
sysdep_routines += cachectl cacheflush sysmips
|
||||
|
||||
headers += regdef.h fpregdef.h sys/asm.h sys/cachectl.h sys/fpregdef.h \
|
||||
sys/regdef.h sys/sysmips.h
|
||||
endif
|
12
sysdeps/unix/sysv/linux/mips/bits/endian.h
Normal file
12
sysdeps/unix/sysv/linux/mips/bits/endian.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* The MIPS architecture has selectable endianness.
|
||||
Linux/MIPS exists in two both little and big endian flavours and we
|
||||
want to be able to share the installed headerfiles between both,
|
||||
so we define __BYTE_ORDER based on GCC's predefines. */
|
||||
|
||||
#ifdef __MIPSEB__
|
||||
#define __BYTE_ORDER __BIG_ENDIAN
|
||||
#else
|
||||
#ifdef __MIPSEL__
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
#endif
|
||||
#endif
|
100
sysdeps/unix/sysv/linux/mips/bits/fcntl.h
Normal file
100
sysdeps/unix/sysv/linux/mips/bits/fcntl.h
Normal file
|
@ -0,0 +1,100 @@
|
|||
/* O_*, F_*, FD_* bit values for Linux.
|
||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _FCNTL_H
|
||||
#error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
/* 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. */
|
||||
#endif
|
||||
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
|
||||
located on an ext2 file system */
|
||||
#define O_ACCMODE 0x0003
|
||||
#define O_RDONLY 0x0000
|
||||
#define O_WRONLY 0x0001
|
||||
#define O_RDWR 0x0002
|
||||
#define O_APPEND 0x0008
|
||||
#define O_SYNC 0x0010
|
||||
#define O_NONBLOCK 0x0080
|
||||
#define O_CREAT 0x0100 /* not fcntl */
|
||||
#define O_TRUNC 0x0200 /* not fcntl */
|
||||
#define O_EXCL 0x0400 /* not fcntl */
|
||||
#define O_NOCTTY 0x0800 /* not fcntl */
|
||||
#define O_FSYNC O_SYNC
|
||||
#define O_ASYNC 020000
|
||||
|
||||
#define O_NDELAY O_NONBLOCK
|
||||
|
||||
#define F_DUPFD 0 /* dup */
|
||||
#define F_GETFD 1 /* get f_flags */
|
||||
#define F_SETFD 2 /* set f_flags */
|
||||
#define F_GETFL 3 /* more flags (cloexec) */
|
||||
#define F_SETFL 4
|
||||
#define F_GETLK 14
|
||||
#define F_SETLK 6
|
||||
#define F_SETLKW 7
|
||||
|
||||
#define F_SETOWN 24 /* for sockets. */
|
||||
#define F_GETOWN 23 /* for sockets. */
|
||||
|
||||
/* for F_[GET|SET]FL */
|
||||
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
|
||||
|
||||
/* for posix fcntl() and lockf() */
|
||||
#define F_RDLCK 0
|
||||
#define F_WRLCK 1
|
||||
#define F_UNLCK 2
|
||||
|
||||
/* for old implementation of bsd flock () */
|
||||
#define F_EXLCK 4 /* or 3 */
|
||||
#define F_SHLCK 8 /* or 4 */
|
||||
|
||||
/* operations for bsd flock(), also used by the kernel implementation */
|
||||
#define LOCK_SH 1 /* shared lock */
|
||||
#define LOCK_EX 2 /* exclusive lock */
|
||||
#define LOCK_NB 4 /* or'd with one of the above to prevent XXXXXXXXXXXXXXXXXX
|
||||
blocking */
|
||||
#define LOCK_UN 8 /* remove lock */
|
||||
|
||||
typedef struct flock {
|
||||
short l_type;
|
||||
short l_whence;
|
||||
__off_t l_start;
|
||||
__off_t l_len;
|
||||
long l_sysid; /* XXX */
|
||||
__pid_t l_pid;
|
||||
long pad[4]; /* XXX */
|
||||
} flock_t;
|
||||
|
||||
|
||||
/* Define some more compatibility macros to be backward compatible with
|
||||
BSD systems which did not managed to hide these kernel macros. */
|
||||
#ifdef __USE_BSD
|
||||
#define FAPPEND O_APPEND
|
||||
#define FFSYNC O_FSYNC
|
||||
#define FASYNC O_ASYNC
|
||||
#define FNONBLOCK O_NONBLOCK
|
||||
#define FNDELAY O_NDELAY
|
||||
#endif /* Use BSD. */
|
71
sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h
Normal file
71
sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h
Normal file
|
@ -0,0 +1,71 @@
|
|||
/* Structure types for pre-termios terminal ioctls. Linux/MIPS version.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/*
|
||||
* Never include this file directly; use <sys/ioctl.h> instead.
|
||||
*/
|
||||
|
||||
#ifndef _BITS_IOCTL_TYPES_H
|
||||
#define _BITS_IOCTL_TYPES_H 1
|
||||
|
||||
/* Get definition of constants for use with `ioctl'. */
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
struct winsize
|
||||
{
|
||||
unsigned short ws_row;
|
||||
unsigned short ws_col;
|
||||
unsigned short ws_xpixel;
|
||||
unsigned short ws_ypixel;
|
||||
};
|
||||
|
||||
#define NCC 8
|
||||
struct termio
|
||||
{
|
||||
unsigned short c_iflag; /* input mode flags */
|
||||
unsigned short c_oflag; /* output mode flags */
|
||||
unsigned short c_cflag; /* control mode flags */
|
||||
unsigned short c_lflag; /* local mode flags */
|
||||
char c_line; /* line discipline */
|
||||
/* Yes, this is really NCCS. */
|
||||
unsigned char c_cc[32 /* NCCS */]; /* control characters */
|
||||
};
|
||||
|
||||
/* modem lines */
|
||||
#define TIOCM_LE 0x001 /* line enable */
|
||||
#define TIOCM_DTR 0x002 /* data terminal ready */
|
||||
#define TIOCM_RTS 0x004 /* request to send */
|
||||
#define TIOCM_ST 0x010 /* secondary transmit */
|
||||
#define TIOCM_SR 0x020 /* secondary receive */
|
||||
#define TIOCM_CTS 0x040 /* clear to send */
|
||||
#define TIOCM_CAR 0x100 /* carrier detect */
|
||||
#define TIOCM_CD TIOCM_CAR
|
||||
#define TIOCM_RNG 0x200 /* ring */
|
||||
#define TIOCM_RI TIOCM_RNG
|
||||
#define TIOCM_DSR 0x400 /* data set ready */
|
||||
|
||||
/* line disciplines */
|
||||
#define N_TTY 0
|
||||
#define N_SLIP 1
|
||||
#define N_MOUSE 2
|
||||
#define N_PPP 3
|
||||
#define N_STRIP 4
|
||||
#define N_AX25 5
|
||||
|
||||
#endif /* bits/ioctl-types.h */
|
85
sysdeps/unix/sysv/linux/mips/bits/ipc.h
Normal file
85
sysdeps/unix/sysv/linux/mips/bits/ipc.h
Normal file
|
@ -0,0 +1,85 @@
|
|||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_IPC_BUF_H
|
||||
|
||||
#define _SYS_IPC_BUF_H 1
|
||||
#include <features.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Mode bits for `msgget', `semget', and `shmget'. */
|
||||
#define IPC_CREAT 01000 /* Create key if key does not exist. */
|
||||
#define IPC_EXCL 02000 /* Fail if key exists. */
|
||||
#define IPC_NOWAIT 04000 /* Return error on wait. */
|
||||
|
||||
/* Control commands for `msgctl', `semctl', and `shmctl'. */
|
||||
#define IPC_RMID 0 /* Remove identifier. */
|
||||
#define IPC_SET 1 /* Set `ipc_perm' options. */
|
||||
#define IPC_STAT 2 /* Get `ipc_perm' options. */
|
||||
#define IPC_INFO 3 /* See ipcs. */
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Special key values. */
|
||||
#define IPC_PRIVATE ((__key_t) 0) /* Private key. */
|
||||
|
||||
|
||||
/* Data structure used to pass permission information to IPC operations. */
|
||||
struct ipc_perm
|
||||
{
|
||||
__key_t __key; /* Key. */
|
||||
long uid; /* Owner's user ID. */
|
||||
long gid; /* Owner's group ID. */
|
||||
long cuid; /* Creator's user ID. */
|
||||
long cgid; /* Creator's group ID. */
|
||||
unsigned long mode; /* Read/write permission. */
|
||||
unsigned short int __seq; /* Sequence number. */
|
||||
};
|
||||
|
||||
|
||||
/* Kludge to work around Linux' restriction of only up to five
|
||||
arguments to a system call. */
|
||||
struct ipc_kludge
|
||||
{
|
||||
void *msgp;
|
||||
long int msgtyp;
|
||||
};
|
||||
|
||||
/* The actual system call: all functions are multiplexed by this. */
|
||||
extern int __ipc __P ((int __call, int __first, int __second, int __third,
|
||||
void *__ptr));
|
||||
|
||||
/* The codes for the functions to use the multiplexer `__ipc'. */
|
||||
#define IPCOP_semop 1
|
||||
#define IPCOP_semget 2
|
||||
#define IPCOP_semctl 3
|
||||
#define IPCOP_msgsnd 11
|
||||
#define IPCOP_msgrcv 12
|
||||
#define IPCOP_msgget 13
|
||||
#define IPCOP_msgctl 14
|
||||
#define IPCOP_shmat 21
|
||||
#define IPCOP_shmdt 22
|
||||
#define IPCOP_shmget 23
|
||||
#define IPCOP_shmctl 24
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* bits/ipc_buf.h */
|
92
sysdeps/unix/sysv/linux/mips/bits/shm.h
Normal file
92
sysdeps/unix/sysv/linux/mips/bits/shm.h
Normal file
|
@ -0,0 +1,92 @@
|
|||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_SHM_BUF_H
|
||||
|
||||
#define _SYS_SHM_BUF_H 1
|
||||
#include <features.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Permission flag for shmget. */
|
||||
#define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */
|
||||
#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */
|
||||
|
||||
/* Flags for `shmat'. */
|
||||
#define SHM_RDONLY 010000 /* attach read-only else read-write */
|
||||
#define SHM_RND 020000 /* round attach address to SHMLBA */
|
||||
#define SHM_REMAP 040000 /* take-over region on attach */
|
||||
|
||||
/* Commands for `shmctl'. */
|
||||
#define SHM_LOCK 11 /* lock segment (root only) */
|
||||
#define SHM_UNLOCK 12 /* unlock segment (root only) */
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Data structure describing a set of semaphores. */
|
||||
struct shmid_ds
|
||||
{
|
||||
struct ipc_perm shm_perm; /* operation permission struct */
|
||||
int shm_segsz; /* size of segment in bytes */
|
||||
__time_t shm_atime; /* time of last shmat() */
|
||||
__time_t shm_dtime; /* time of last shmdt() */
|
||||
__time_t shm_ctime; /* time of last change by shmctl() */
|
||||
long shm_cpid; /* pid of creator */
|
||||
long shm_lpid; /* pid of last shmop */
|
||||
unsigned short int shm_nattch; /* number of current attaches */
|
||||
unsigned short int __shm_npages; /* size of segment (pages) */
|
||||
unsigned long int *__shm_pages; /* array of ptrs to frames -> SHMMAX */
|
||||
struct vm_area_struct *__attaches; /* descriptors for attaches */
|
||||
};
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
/* ipcs ctl commands */
|
||||
#define SHM_STAT 13
|
||||
#define SHM_INFO 14
|
||||
|
||||
/* shm_mode upper byte flags */
|
||||
#define SHM_DEST 01000 /* segment will be destroyed on last detach */
|
||||
#define SHM_LOCKED 02000 /* segment will not be swapped */
|
||||
|
||||
struct shminfo
|
||||
{
|
||||
int shmmax;
|
||||
int shmmin;
|
||||
int shmmni;
|
||||
int shmseg;
|
||||
int shmall;
|
||||
};
|
||||
|
||||
struct shm_info
|
||||
{
|
||||
int used_ids;
|
||||
ulong shm_tot; /* total allocated shm */
|
||||
ulong shm_rss; /* total resident shm */
|
||||
ulong shm_swp; /* total swapped shm */
|
||||
ulong swap_attempts;
|
||||
ulong swap_successes;
|
||||
};
|
||||
|
||||
#endif /* __USE_MISC */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* bits/shm_buf.h */
|
62
sysdeps/unix/sysv/linux/mips/bits/sigaction.h
Normal file
62
sysdeps/unix/sysv/linux/mips/bits/sigaction.h
Normal file
|
@ -0,0 +1,62 @@
|
|||
/* The proper definitions for Linux/MIPS's sigaction.
|
||||
Copyright (C) 1993, 1994, 1995, 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. */
|
||||
|
||||
/* Structure describing the action to be taken when a signal arrives. */
|
||||
struct sigaction
|
||||
{
|
||||
/* Special flags. */
|
||||
unsigned int sa_flags;
|
||||
|
||||
/* Signal handler. */
|
||||
__sighandler_t sa_handler;
|
||||
|
||||
/* Additional set of signals to be blocked. */
|
||||
__sigset_t sa_mask;
|
||||
|
||||
/* The ABI says here are two unused ints following. */
|
||||
/* Restore handler. */
|
||||
void (*sa_restorer) __P ((void));
|
||||
|
||||
#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2)
|
||||
int sa_resv[1];
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Bits in `sa_flags'. */
|
||||
#define SA_NOCLDSTOP 1 /* Don't send SIGCHLD when children stop. */
|
||||
#ifdef __USE_MISC
|
||||
#define SA_STACK 0x08000000 /* Use signal stack by using `sa_restorer'. */
|
||||
#define SA_RESTART 0x10000000 /* Don't restart syscall on signal return. */
|
||||
#define SA_INTERRUPT 0x20000000 /* Historical no-op. */
|
||||
#define SA_NODEFER 0x40000000 /* Don't automatically block the signal when
|
||||
its handler is being executed. */
|
||||
#define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */
|
||||
|
||||
/* Some aliases for the SA_ constants. */
|
||||
#define SA_NOMASK SA_NODEFER
|
||||
#define SA_ONESHOT SA_RESETHAND
|
||||
#endif
|
||||
|
||||
/* Values for the HOW argument to `sigprocmask'. */
|
||||
#define SIG_NOP 0 /* 0 is unused to catch errors */
|
||||
#define SIG_BLOCK 1 /* Block signals. */
|
||||
#define SIG_UNBLOCK 2 /* Unblock signals. */
|
||||
#define SIG_SETMASK 3 /* Set the set of blocked signals. */
|
||||
#define SIG_SETMASK32 256 /* Goodie from SGI for BSD compatibility:
|
||||
set only the low 32 bit of the sigset. */
|
30
sysdeps/unix/sysv/linux/mips/bits/signum.h
Normal file
30
sysdeps/unix/sysv/linux/mips/bits/signum.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* Signal number definitions. Linux version.
|
||||
Copyright (C) 1995, 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 _SIGNAL_H
|
||||
|
||||
/* Take these architecture specific stuff from the kernel header files. */
|
||||
#define __need_fake_sigfuns
|
||||
#define __need_signums
|
||||
#include <asm/signal.h>
|
||||
|
||||
#endif /* <signal.h> included. */
|
||||
|
||||
#define __need__nsig
|
||||
#include <asm/signal.h>
|
178
sysdeps/unix/sysv/linux/mips/bits/socket.h
Normal file
178
sysdeps/unix/sysv/linux/mips/bits/socket.h
Normal file
|
@ -0,0 +1,178 @@
|
|||
/* System-specific socket constants and types. Linux version.
|
||||
Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_SOCKET_H
|
||||
#error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
|
||||
#endif
|
||||
|
||||
|
||||
#include <features.h>
|
||||
|
||||
#define __need_size_t
|
||||
#define __need_NULL
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Supported address families. */
|
||||
#define PF_UNSPEC 0
|
||||
#define PF_UNIX 1 /* Unix domain sockets */
|
||||
#define PF_LOCAL 1 /* POSIX name for AF_UNIX */
|
||||
#define PF_FILE PF_LOCAL /* POSIX name for PF_LOCAL. */
|
||||
#define PF_INET 2 /* Internet IP Protocol */
|
||||
#define PF_AX25 3 /* Amateur Radio AX.25 */
|
||||
#define PF_IPX 4 /* Novell IPX */
|
||||
#define PF_APPLETALK 5 /* Appletalk DDP */
|
||||
#define PF_NETROM 6 /* Amateur Radio NET/ROM */
|
||||
#define PF_BRIDGE 7 /* Multiprotocol bridge */
|
||||
#define PF_AAL5 8 /* Reserved for Werner's ATM */
|
||||
#define PF_X25 9 /* Reserved for X.25 project */
|
||||
#define PF_INET6 10 /* IP version 6 */
|
||||
#define PF_ROSE 11 /* Amateur Radio X.25 PLP */
|
||||
#define PF_DECNET 12 /* Reserved for DECnet project */
|
||||
#define PF_NETBEUI 13 /* Reserved for 802.2LLC project*/
|
||||
#define PF_MAX 32 /* For now.. */
|
||||
|
||||
/* Protocol families, same as address families. */
|
||||
#define AF_UNSPEC PF_UNSPEC
|
||||
#define AF_UNIX PF_UNIX
|
||||
#define AF_LOCAL PF_LOCAL
|
||||
#define AF_FILE PF_FILE
|
||||
#define AF_INET PF_INET
|
||||
#define AF_AX25 PF_AX25
|
||||
#define AF_IPX PF_IPX
|
||||
#define AF_APPLETALK PF_APPLETALK
|
||||
#define AF_NETROM PF_NETROM
|
||||
#define AF_BRIDGE PF_BRIDGE
|
||||
#define AF_AAL5 PF_AAL5
|
||||
#define AF_X25 PF_X25
|
||||
#define AF_INET6 PF_INET6
|
||||
#define AF_ROSE PF_ROSE
|
||||
#define AF_DECNET PF_DECNET
|
||||
#define AF_NETBEUI PF_NETBEUI
|
||||
|
||||
#define AF_MAX PF_MAX
|
||||
|
||||
/* Raw IP packet level. */
|
||||
#define SOL_RAW 255
|
||||
|
||||
/* Maximum queue length specifiable by listen. */
|
||||
#define SOMAXCONN 128
|
||||
|
||||
/* Get the definition of the macro to define the common sockaddr members. */
|
||||
#include <bits/sockaddr.h>
|
||||
|
||||
/* Structure describing a generic socket address. */
|
||||
struct sockaddr
|
||||
{
|
||||
__SOCKADDR_COMMON (sa_); /* Common data: address family and length. */
|
||||
char sa_data[14]; /* Address data. */
|
||||
};
|
||||
|
||||
|
||||
/* Bits in the FLAGS argument to `send', `recv', et al. */
|
||||
enum
|
||||
{
|
||||
MSG_OOB = 0x01, /* Process out-of-band data. */
|
||||
MSG_PEEK = 0x02, /* Peek at incoming messages. */
|
||||
MSG_DONTROUTE = 0x04, /* Don't use local routing. */
|
||||
MSG_CTRUNC = 0x08, /* Control data lost before delivery. */
|
||||
MSG_PROXY = 0x10 /* Supply or ask second address. */
|
||||
};
|
||||
|
||||
|
||||
/* Structure describing messages sent by
|
||||
`sendmsg' and received by `recvmsg'. */
|
||||
struct msghdr
|
||||
{
|
||||
__ptr_t msg_name; /* Address to send to/receive from. */
|
||||
int msg_namelen; /* Length of address data. */
|
||||
/* XXX Should be type `size_t' according to POSIX.1g. */
|
||||
|
||||
struct iovec *msg_iov; /* Vector of data to send/receive into. */
|
||||
int msg_iovlen; /* Number of elements in the vector. */
|
||||
/* XXX Should be type `size_t' according to POSIX.1g. */
|
||||
|
||||
__ptr_t msg_control; /* Ancillary data (eg BSD filedesc passing). */
|
||||
int msg_controllen; /* Ancillary data buffer length. */
|
||||
/* XXX Should be type `size_t' according to POSIX.1g. */
|
||||
int msg_flags; /* Flags on received message. */
|
||||
};
|
||||
|
||||
/* Structure used for storage of ancillary data object information. */
|
||||
struct cmsghdr
|
||||
{
|
||||
int cmsg_len; /* Length of data in cmsg_data plus length
|
||||
of cmsghdr structure. */
|
||||
/* XXX Should be type `size_t' according to POSIX.1g. */
|
||||
int cmsg_level; /* Originating protocol. */
|
||||
int cmsg_type; /* Protocol specific type. */
|
||||
#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
|
||||
unsigned char __cmsg_data[0]; /* Ancillary data. */
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Ancillary data object manipulation macros. */
|
||||
#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
|
||||
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
|
||||
#else
|
||||
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
|
||||
#endif
|
||||
#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
|
||||
#define CMSG_FIRSTHDR(mhdr) \
|
||||
((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \
|
||||
? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
|
||||
|
||||
|
||||
#ifndef _EXTERN_INLINE
|
||||
# define _EXTERN_INLINE extern __inline
|
||||
#endif
|
||||
extern struct cmsghdr *__cmsg_nxthdr __P ((struct msghdr *__mhdr,
|
||||
struct cmsghdr *__cmsg));
|
||||
_EXTERN_INLINE struct cmsghdr *
|
||||
__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)
|
||||
{
|
||||
unsigned char *__p;
|
||||
|
||||
if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
|
||||
/* The kernel header does this so there may be a reason. */
|
||||
return NULL;
|
||||
|
||||
__p = (((unsigned char *) __cmsg)
|
||||
+ ((__cmsg->cmsg_len + sizeof (long int) - 1) & ~sizeof (long int)));
|
||||
if (__p >= (unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)
|
||||
/* No more entries. */
|
||||
return NULL;
|
||||
return (struct cmsghdr *) __p;
|
||||
}
|
||||
|
||||
|
||||
/* Get socket manipulation related informations from kernel headers. */
|
||||
#include <asm/socket.h>
|
||||
|
||||
|
||||
/* Structure used to manipulate the SO_LINGER option. */
|
||||
struct linger
|
||||
{
|
||||
int l_onoff; /* Nonzero to linger on close. */
|
||||
int l_linger; /* Time to linger. */
|
||||
};
|
||||
|
||||
__END_DECLS
|
97
sysdeps/unix/sysv/linux/mips/bits/stat.h
Normal file
97
sysdeps/unix/sysv/linux/mips/bits/stat.h
Normal file
|
@ -0,0 +1,97 @@
|
|||
/* Copyright (C) 1992, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/*
|
||||
* Never include this file directly; use <sys/stat.h> instead.
|
||||
*/
|
||||
|
||||
#ifndef _BITS_STAT_H
|
||||
#define _BITS_STAT_H 1
|
||||
|
||||
/* Versions of the `struct stat' data structure. */
|
||||
#define _STAT_VER_LINUX_OLD 1
|
||||
#define _STAT_VER_SVR4 2
|
||||
#define _STAT_VER_LINUX 3
|
||||
#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */
|
||||
|
||||
/* Versions of the `xmknod' interface. */
|
||||
#define _MKNOD_VER_LINUX 1
|
||||
#define _MKNOD_VER_SVR4 2
|
||||
#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */
|
||||
|
||||
/* Structure describing file characteristics. */
|
||||
struct stat
|
||||
{
|
||||
unsigned long int st_dev;
|
||||
long int st_pad1[3];
|
||||
__ino_t st_ino; /* File serial number. */
|
||||
__mode_t st_mode; /* File mode. */
|
||||
__nlink_t st_nlink; /* Link count. */
|
||||
__uid_t st_uid; /* User ID of the file's owner. */
|
||||
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||
unsigned long int st_rdev; /* Device number, if device. */
|
||||
long int st_pad2[2];
|
||||
__off_t st_size; /* Size of file, in bytes. */
|
||||
/* SVR4 added this extra long to allow for expansion of off_t. */
|
||||
long int st_pad3;
|
||||
/*
|
||||
* Actually this should be timestruc_t st_atime, st_mtime and
|
||||
* st_ctime but we don't have it under Linux.
|
||||
*/
|
||||
__time_t st_atime; /* Time of last access. */
|
||||
long int __reserved0;
|
||||
__time_t st_mtime; /* Time of last modification. */
|
||||
long int __reserved1;
|
||||
__time_t st_ctime; /* Time of last status change. */
|
||||
long int __reserved2;
|
||||
long int st_blksize; /* Optimal block size for I/O. */
|
||||
#define _STATBUF_ST_BLKSIZE /* Tell code we have this member. */
|
||||
long int st_blocks; /* Number of 512-byte blocks allocated. */
|
||||
char st_fstype[16]; /* Filesystem type name */
|
||||
long int st_pad4[8];
|
||||
/* Linux specific fields */
|
||||
unsigned int st_flags;
|
||||
unsigned int st_gen;
|
||||
};
|
||||
|
||||
|
||||
/* 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_IFIFO 0010000 /* FIFO. */
|
||||
|
||||
/* These don't actually exist on System V, but having them doesn't hurt. */
|
||||
#define __S_IFLNK 0120000 /* Symbolic link. */
|
||||
#define __S_IFSOCK 0140000 /* Socket. */
|
||||
|
||||
/* 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 0400 /* Read by owner. */
|
||||
#define __S_IWRITE 0200 /* Write by owner. */
|
||||
#define __S_IEXEC 0100 /* Execute by owner. */
|
||||
|
||||
#endif /* bits/stat.h */
|
44
sysdeps/unix/sysv/linux/mips/bits/statfs.h
Normal file
44
sysdeps/unix/sysv/linux/mips/bits/statfs.h
Normal file
|
@ -0,0 +1,44 @@
|
|||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/*
|
||||
* Never include this file directly; use <sys/statfs.h> instead.
|
||||
*/
|
||||
|
||||
#ifndef _BITS_STATFS_H
|
||||
#define _BITS_STATFS_H
|
||||
|
||||
struct statfs
|
||||
{
|
||||
long int f_type;
|
||||
#define f_fstyp f_type
|
||||
long int f_bsize;
|
||||
long int f_frsize; /* Fragment size - unsupported */
|
||||
long int f_blocks;
|
||||
long int f_bfree;
|
||||
long int f_files;
|
||||
long int f_ffree;
|
||||
|
||||
/* Linux specials */
|
||||
long int f_bavail;
|
||||
__fsid_t f_fsid;
|
||||
long int f_namelen;
|
||||
long int f_spare[6];
|
||||
};
|
||||
|
||||
#endif /* bits/statfs.h */
|
260
sysdeps/unix/sysv/linux/mips/bits/termios.h
Normal file
260
sysdeps/unix/sysv/linux/mips/bits/termios.h
Normal file
|
@ -0,0 +1,260 @@
|
|||
/* termios type and macro definitions. Linux/MIPS version.
|
||||
Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/*
|
||||
* Never include this file directly; use <termios.h> instead.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _BITS_TERMIOS_H
|
||||
#define _BITS_TERMIOS_H 1
|
||||
|
||||
typedef unsigned char cc_t;
|
||||
typedef unsigned int speed_t;
|
||||
typedef unsigned int tcflag_t;
|
||||
|
||||
|
||||
#if defined __USE_BSD
|
||||
|
||||
struct sgttyb
|
||||
{
|
||||
char sg_ispeed;
|
||||
char sg_ospeed;
|
||||
char sg_erase;
|
||||
char sg_kill;
|
||||
int sg_flags; /* SGI special - int, not short */
|
||||
};
|
||||
|
||||
struct tchars
|
||||
{
|
||||
char t_intrc;
|
||||
char t_quitc;
|
||||
char t_startc;
|
||||
char t_stopc;
|
||||
char t_eofc;
|
||||
char t_brkc;
|
||||
};
|
||||
|
||||
struct ltchars
|
||||
{
|
||||
char t_suspc; /* stop process signal */
|
||||
char t_dsuspc; /* delayed stop process signal */
|
||||
char t_rprntc; /* reprint line */
|
||||
char t_flushc; /* flush output (toggles) */
|
||||
char t_werasc; /* word erase */
|
||||
char t_lnextc; /* literal next character */
|
||||
};
|
||||
|
||||
#endif /* defined(__BSD) */
|
||||
|
||||
#define NCCS 32
|
||||
struct termios
|
||||
{
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[NCCS]; /* control characters */
|
||||
speed_t c_ispeed; /* input speed */
|
||||
speed_t c_ospeed; /* output speed */
|
||||
};
|
||||
|
||||
/* c_cc characters */
|
||||
#define VINTR 0 /* Interrupt character [ISIG]. */
|
||||
#define VQUIT 1 /* Quit character [ISIG]. */
|
||||
#define VERASE 2 /* Erase character [ICANON]. */
|
||||
#define VKILL 3 /* Kill-line character [ICANON]. */
|
||||
#define VMIN 4 /* Minimum number of bytes read at once [!ICANON]. */
|
||||
#define VTIME 5 /* Time-out value (tenths of a second) [!ICANON]. */
|
||||
#if defined (__USE_BSD)
|
||||
#define VEOL2 6 /* Second EOL character [ICANON]. */
|
||||
/* The next two are guesses ... */
|
||||
#define VSWTC 7 /* ??? */
|
||||
#endif
|
||||
#define VSWTCH VSWTC
|
||||
#define VSTART 8 /* Start (X-ON) character [IXON, IXOFF]. */
|
||||
#define VSTOP 9 /* Stop (X-OFF) character [IXON, IXOFF]. */
|
||||
#define VSUSP 10 /* Suspend character [ISIG]. */
|
||||
#if 0
|
||||
/*
|
||||
* VDSUSP is not supported
|
||||
*/
|
||||
#if defined (__USE_BSD)
|
||||
#define VDSUSP 11 /* Delayed suspend character [ISIG]. */
|
||||
#endif
|
||||
#endif
|
||||
#if defined (__USE_BSD)
|
||||
#define VREPRINT 12 /* Reprint-line character [ICANON]. */
|
||||
#endif
|
||||
#if defined (__USE_BSD)
|
||||
#define VDISCARD 13 /* Discard character [IEXTEN]. */
|
||||
#define VWERASE 14 /* Word-erase character [ICANON]. */
|
||||
#define VLNEXT 15 /* Literal-next character [IEXTEN]. */
|
||||
#endif
|
||||
#define VEOF 16 /* End-of-file character [ICANON]. */
|
||||
#define VEOL 17 /* End-of-line character [ICANON]. */
|
||||
|
||||
/* c_iflag bits */
|
||||
#define IGNBRK 0000001 /* Ignore break condition. */
|
||||
#define BRKINT 0000002 /* Signal interrupt on break. */
|
||||
#define IGNPAR 0000004 /* Ignore characters with parity errors. */
|
||||
#define PARMRK 0000010 /* Mark parity and framing errors. */
|
||||
#define INPCK 0000020 /* Enable input parity check. */
|
||||
#define ISTRIP 0000040 /* Strip 8th bit off characters. */
|
||||
#define INLCR 0000100 /* Map NL to CR on input. */
|
||||
#define IGNCR 0000200 /* Ignore CR. */
|
||||
#define ICRNL 0000400 /* Map CR to NL on input. */
|
||||
#if defined (__USE_BSD)
|
||||
#define IUCLC 0001000 /* Map upper case to lower case on input. */
|
||||
#endif
|
||||
#define IXON 0002000 /* Enable start/stop output control. */
|
||||
#if defined (__USE_BSD)
|
||||
#define IXANY 0004000 /* Any character will restart after stop. */
|
||||
#endif
|
||||
#define IXOFF 0010000 /* Enable start/stop input control. */
|
||||
#if defined (__USE_BSD)
|
||||
#define IMAXBEL 0020000 /* Ring bell when input queue is full. */
|
||||
#endif
|
||||
|
||||
/* c_oflag bits */
|
||||
#define OPOST 0000001 /* Perform output processing. */
|
||||
#if defined (__USE_BSD)
|
||||
#define OLCUC 0000002 /* Map lower case to upper case on output. */
|
||||
#define ONLCR 0000004 /* Map NL to CR-NL on output. */
|
||||
#define OCRNL 0000010
|
||||
#define ONOCR 0000020
|
||||
#define ONLRET 0000040
|
||||
#define OFILL 0000100
|
||||
#define OFDEL 0000200
|
||||
#define NLDLY 0000400
|
||||
#define NL0 0000000
|
||||
#define NL1 0000400
|
||||
#define CRDLY 0003000
|
||||
#define CR0 0000000
|
||||
#define CR1 0001000
|
||||
#define CR2 0002000
|
||||
#define CR3 0003000
|
||||
#define TABDLY 0014000
|
||||
#define TAB0 0000000
|
||||
#define TAB1 0004000
|
||||
#define TAB2 0010000
|
||||
#define TAB3 0014000
|
||||
#define XTABS 0014000
|
||||
#define BSDLY 0020000
|
||||
#define BS0 0000000
|
||||
#define BS1 0020000
|
||||
#define VTDLY 0040000
|
||||
#define VT0 0000000
|
||||
#define VT1 0040000
|
||||
#define FFDLY 0100000
|
||||
#define FF0 0000000
|
||||
#define FF1 0100000
|
||||
/*
|
||||
#define PAGEOUT ???
|
||||
#define WRAP ???
|
||||
*/
|
||||
#endif
|
||||
|
||||
/* c_cflag bit meaning */
|
||||
#define CBAUD 0010017
|
||||
#define B0 0000000 /* hang up */
|
||||
#define B50 0000001
|
||||
#define B75 0000002
|
||||
#define B110 0000003
|
||||
#define B134 0000004
|
||||
#define B150 0000005
|
||||
#define B200 0000006
|
||||
#define B300 0000007
|
||||
#define B600 0000010
|
||||
#define B1200 0000011
|
||||
#define B1800 0000012
|
||||
#define B2400 0000013
|
||||
#define B4800 0000014
|
||||
#define B9600 0000015
|
||||
#define B19200 0000016
|
||||
#define B38400 0000017
|
||||
#define EXTA B19200
|
||||
#define EXTB B38400
|
||||
#define CSIZE 0000060 /* Number of bits per byte (mask). */
|
||||
#define CS5 0000000 /* 5 bits per byte. */
|
||||
#define CS6 0000020 /* 6 bits per byte. */
|
||||
#define CS7 0000040 /* 7 bits per byte. */
|
||||
#define CS8 0000060 /* 8 bits per byte. */
|
||||
#define CSTOPB 0000100 /* Two stop bits instead of one. */
|
||||
#define CREAD 0000200 /* Enable receiver. */
|
||||
#define PARENB 0000400 /* Parity enable. */
|
||||
#define PARODD 0001000 /* Odd parity instead of even. */
|
||||
#define HUPCL 0002000 /* Hang up on last close. */
|
||||
#define CLOCAL 0004000 /* Ignore modem status lines. */
|
||||
#if defined (__USE_BSD)
|
||||
#define CBAUDEX 0010000
|
||||
#define B57600 0010001
|
||||
#define B115200 0010002
|
||||
#define B230400 0010003
|
||||
#define B460800 0010004
|
||||
#define CIBAUD 002003600000 /* input baud rate (not used) */
|
||||
#define CRTSCTS 020000000000 /* flow control */
|
||||
#endif
|
||||
|
||||
/* c_lflag bits */
|
||||
#define ISIG 0000001 /* Enable signals. */
|
||||
#define ICANON 0000002 /* Do erase and kill processing. */
|
||||
#define XCASE 0000004
|
||||
#define ECHO 0000010 /* Enable echo. */
|
||||
#define ECHOE 0000020 /* Visual erase for ERASE. */
|
||||
#define ECHOK 0000040 /* Echo NL after KILL. */
|
||||
#define ECHONL 0000100 /* Echo NL even if ECHO is off. */
|
||||
#define NOFLSH 0000200 /* Disable flush after interrupt. */
|
||||
#define IEXTEN 0000400 /* Enable DISCARD and LNEXT. */
|
||||
#if defined (__USE_BSD)
|
||||
#define ECHOCTL 0001000 /* Echo control characters as ^X. */
|
||||
#define ECHOPRT 0002000 /* Hardcopy visual erase. */
|
||||
#define ECHOKE 0004000 /* Visual erase for KILL. */
|
||||
#endif
|
||||
#define FLUSHO 0020000
|
||||
#if defined (__USE_BSD)
|
||||
#define PENDIN 0040000 /* Retype pending input (state). */
|
||||
#endif
|
||||
#define TOSTOP 0100000 /* Send SIGTTOU for background output. */
|
||||
#define ITOSTOP TOSTOP
|
||||
|
||||
/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
|
||||
#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
|
||||
|
||||
/* tcflow() and TCXONC use these */
|
||||
#define TCOOFF 0 /* Suspend output. */
|
||||
#define TCOON 1 /* Restart suspended output. */
|
||||
#define TCIOFF 2 /* Send a STOP character. */
|
||||
#define TCION 3 /* Send a START character. */
|
||||
|
||||
/* tcflush() and TCFLSH use these */
|
||||
#define TCIFLUSH 0 /* Discard data received but not yet read. */
|
||||
#define TCOFLUSH 1 /* Discard data written but not yet sent. */
|
||||
#define TCIOFLUSH 2 /* Discard all pending data. */
|
||||
|
||||
/* tcsetattr uses these */
|
||||
#define TCSANOW 0x540e /* Same as TCSETS; change immediately. */
|
||||
#define TCSADRAIN 0x540f /* Same as TCSETSW; change when pending output is written. */
|
||||
#define TCSAFLUSH 0x5410 /* Same as TCSETSF; flush pending input before changing. */
|
||||
|
||||
#define _IOT_termios /* Hurd ioctl type field. */ \
|
||||
_IOT (_IOTS (cflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2)
|
||||
|
||||
#endif /* bits/termios.h */
|
54
sysdeps/unix/sysv/linux/mips/bits/time.h
Normal file
54
sysdeps/unix/sysv/linux/mips/bits/time.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
/* System-dependent timing definitions. Linux/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. */
|
||||
|
||||
/*
|
||||
* Never include this file directly; use <time.h> instead.
|
||||
*/
|
||||
|
||||
#ifdef __need_timeval
|
||||
# undef __need_timeval
|
||||
# ifndef _STRUCT_TIMEVAL
|
||||
# define _STRUCT_TIMEVAL 1
|
||||
/* A time value that is accurate to the nearest
|
||||
microsecond but also has a range of years. */
|
||||
struct timeval
|
||||
{
|
||||
long tv_sec; /* Seconds. */
|
||||
long tv_usec; /* Microseconds. */
|
||||
};
|
||||
# endif /* struct timeval */
|
||||
#endif /* need timeval */
|
||||
|
||||
|
||||
#ifndef _BITS_TIME_H
|
||||
#define _BITS_TIME_H 1
|
||||
|
||||
/* ISO/IEC 9899:1990 7.12.1: <time.h>
|
||||
The macro `CLOCKS_PER_SEC' is the number per second of the value
|
||||
returned by the `clock' function. */
|
||||
/* CAE XSH, Issue 4, Version 2: <time.h>
|
||||
The value of CLOCKS_PER_SEC is required to be 1 million on all
|
||||
XSI-conformant systems. */
|
||||
# define CLOCKS_PER_SEC 1000000
|
||||
|
||||
/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
|
||||
presents the real value for clock ticks per second for the system. */
|
||||
# define CLK_TCK 100 /* XXX not correct for all systems. */
|
||||
|
||||
#endif /* bits/time.h */
|
125
sysdeps/unix/sysv/linux/mips/clone.S
Normal file
125
sysdeps/unix/sysv/linux/mips/clone.S
Normal file
|
@ -0,0 +1,125 @@
|
|||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ralf Baechle <ralf@gnu.ai.mit.edu>, 1996.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* clone() is even more special than fork() as it mucks with stacks
|
||||
and invokes a function in the right context after its all over. */
|
||||
|
||||
#include <sys/asm.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
|
||||
/* int clone(int (*fn)(), void *child_stack, int flags, int nargs, ...) */
|
||||
|
||||
#define FRAMESZ 4*SZREG
|
||||
#if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
#define MAX_REG_ARGS 4
|
||||
#else
|
||||
#define MAX_REG_ARGS 6
|
||||
#endif
|
||||
|
||||
.text
|
||||
NESTED(__clone,4*SZREG,sp)
|
||||
#ifdef __PIC__
|
||||
.set noreorder
|
||||
.cpload $25
|
||||
.set reorder
|
||||
.cprestore 16
|
||||
#endif
|
||||
PTR_SUBIU sp,FRAMESZ
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
move $1,ra
|
||||
jal _mcount
|
||||
.set at
|
||||
#endif
|
||||
|
||||
/* Sanity check arguments. */
|
||||
li v0,EINVAL
|
||||
beqz a0,error /* no NULL function pointers */
|
||||
beqz a1,error /* no NULL stack pointers */
|
||||
bltz a3,error /* no negative argument counts */
|
||||
|
||||
/* Allocate space on the new stack and copy args over */
|
||||
move t0,a3 # save nargs for __thread_start
|
||||
PTR_SLL t1,a3,PTR_SCALESHIFT
|
||||
PTR_ADDU t1,a3,sp
|
||||
1: REG_L t2,-SZREG(t1)
|
||||
PTR_SUBIU t1,SZREG
|
||||
REG_S t2,-SZREG(a1)
|
||||
PTR_SUBIU a3,1
|
||||
PTR_SUBIU a1,SZREG
|
||||
bnez a3,1b
|
||||
|
||||
/* Do the system call */
|
||||
move t9,a0 # get fn ptr out of the way
|
||||
move a0,a2
|
||||
li v0,__NR_clone
|
||||
syscall
|
||||
|
||||
bnez a3,error
|
||||
beqz v0,__thread_start
|
||||
|
||||
/* Successful return from the parent */
|
||||
PTR_ADDIU sp,FRAMESZ
|
||||
ret
|
||||
|
||||
/* Something bad happened -- no child created */
|
||||
error:
|
||||
PTR_ADDIU sp,FRAMESZ
|
||||
#ifdef PIC
|
||||
la t9,__syscall_error
|
||||
jr t9
|
||||
#else
|
||||
j __syscall_error
|
||||
#endif
|
||||
END(__clone)
|
||||
|
||||
/* Load up the arguments to the function. Put this block of code in
|
||||
its own function so that we can terminate the stack trace with our
|
||||
debug info.
|
||||
|
||||
At this point we have t0=nargs, t9=fn, sp=&arg[0]. */
|
||||
|
||||
NESTED(__thread_start,32,sp)
|
||||
/* Stackframe has been created on entry of clone() */
|
||||
/* Calculate address of jump into argument loading code */
|
||||
li t1,MAX_REG_ARGS
|
||||
slt t0,t1,t2 /* max MAX_REG_ARGS args in registers */
|
||||
MOVN (t2,t1,t0)
|
||||
la v0,arg0
|
||||
PTR_SLL t1,t0,PTR_SCALESHIFT
|
||||
PTR_SUBU v0,t1
|
||||
jr v0
|
||||
|
||||
/* Load the integer register arguments */
|
||||
REG_L a0,SZREG(sp)
|
||||
arg0:
|
||||
|
||||
/* Call the user's function */
|
||||
jalr t9
|
||||
|
||||
/* Call _exit rather than doing it inline for breakpoint purposes */
|
||||
move a0,v0
|
||||
jal _exit
|
||||
|
||||
END(__thread_start)
|
||||
|
||||
weak_alias(__clone, clone)
|
1
sysdeps/unix/sysv/linux/mips/entry.h
Normal file
1
sysdeps/unix/sysv/linux/mips/entry.h
Normal file
|
@ -0,0 +1 @@
|
|||
#define ENTRY_POINT __start
|
1
sysdeps/unix/sysv/linux/mips/fpregdef.h
Normal file
1
sysdeps/unix/sysv/linux/mips/fpregdef.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <sys/fpregdef.h>
|
80
sysdeps/unix/sysv/linux/mips/fxstat.c
Normal file
80
sysdeps/unix/sysv/linux/mips/fxstat.c
Normal file
|
@ -0,0 +1,80 @@
|
|||
/* fxstat using old-style Unix fstat system call.
|
||||
Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <kernel_stat.h>
|
||||
|
||||
extern int __syscall_fstat (int, struct kernel_stat *);
|
||||
|
||||
/* Get information about the file descriptor FD in BUF. */
|
||||
int
|
||||
__fxstat (int vers, int fd, struct stat *buf)
|
||||
{
|
||||
struct kernel_stat kbuf;
|
||||
int result;
|
||||
|
||||
switch (vers)
|
||||
{
|
||||
case _STAT_VER_LINUX_OLD:
|
||||
/* Nothing to do. The struct is in the form the kernel expects
|
||||
it to be. */
|
||||
result = __syscall_fstat (fd, (struct kernel_stat *) buf);
|
||||
break;
|
||||
|
||||
case _STAT_VER_LINUX:
|
||||
/* Do the system call. */
|
||||
result = __syscall_fstat (fd, &kbuf);
|
||||
|
||||
/* Convert to current kernel version of `struct stat'. */
|
||||
buf->st_dev = kbuf.st_dev;
|
||||
buf->st_pad1[0] = 0; buf->st_pad1[1] = 0; buf->st_pad1[2] = 0;
|
||||
buf->st_ino = kbuf.st_ino;
|
||||
buf->st_mode = kbuf.st_mode;
|
||||
buf->st_nlink = kbuf.st_nlink;
|
||||
buf->st_uid = kbuf.st_uid;
|
||||
buf->st_gid = kbuf.st_gid;
|
||||
buf->st_rdev = kbuf.st_rdev;
|
||||
buf->st_pad2[0] = 0; buf->st_pad2[1] = 0;
|
||||
buf->st_pad3 = 0;
|
||||
buf->st_size = kbuf.st_size;
|
||||
buf->st_blksize = kbuf.st_blksize;
|
||||
buf->st_blocks = kbuf.st_blocks;
|
||||
|
||||
buf->st_atime = kbuf.st_atime; buf->__reserved0 = 0;
|
||||
buf->st_mtime = kbuf.st_mtime; buf->__reserved1 = 0;
|
||||
buf->st_ctime = kbuf.st_ctime; buf->__reserved2 = 0;
|
||||
|
||||
buf->st_pad4[0] = 0; buf->st_pad4[1] = 0;
|
||||
buf->st_pad4[2] = 0; buf->st_pad4[3] = 0;
|
||||
buf->st_pad4[4] = 0; buf->st_pad4[5] = 0;
|
||||
buf->st_pad4[6] = 0; buf->st_pad4[7] = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
__set_errno (EINVAL);
|
||||
result = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
weak_alias (__fxstat, _fxstat)
|
22
sysdeps/unix/sysv/linux/mips/kernel_sigaction.h
Normal file
22
sysdeps/unix/sysv/linux/mips/kernel_sigaction.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* This is the sigaction structure from the Linux 2.1.24 kernel. */
|
||||
|
||||
#include <sgidefs.h>
|
||||
|
||||
#define HAVE_SA_RESTORER
|
||||
|
||||
struct kernel_sigaction {
|
||||
unsigned int sa_flags;
|
||||
__sighandler_t sa_handler;
|
||||
unsigned long sa_mask;
|
||||
unsigned int __pad0[3]; /* reserved, keep size constant */
|
||||
|
||||
/* Abi says here follows reserved int[2] */
|
||||
void (*sa_restorer)(void);
|
||||
#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2)
|
||||
/*
|
||||
* For 32 bit code we have to pad struct sigaction to get
|
||||
* constant size for the ABI
|
||||
*/
|
||||
int pad1[1]; /* reserved */
|
||||
#endif
|
||||
};
|
28
sysdeps/unix/sysv/linux/mips/kernel_stat.h
Normal file
28
sysdeps/unix/sysv/linux/mips/kernel_stat.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* Definition of `struct stat' used in the kernel.. */
|
||||
struct kernel_stat
|
||||
{
|
||||
unsigned long int st_dev;
|
||||
long int __pad1[3]; /* Reserved for network id */
|
||||
unsigned long int st_ino;
|
||||
unsigned long int st_mode;
|
||||
unsigned long int st_nlink;
|
||||
long int st_uid;
|
||||
long int st_gid;
|
||||
unsigned long int st_rdev;
|
||||
long int __pad2[2];
|
||||
long int st_size;
|
||||
long int __pad3;
|
||||
unsigned int st_atime;
|
||||
unsigned int __unused1;
|
||||
unsigned int st_mtime;
|
||||
unsigned int __unused2;
|
||||
unsigned int st_ctime;
|
||||
unsigned int __unused3;
|
||||
long int st_blksize;
|
||||
long int st_blocks;
|
||||
char st_fstype[16]; /* Filesystem type name, unsupported */
|
||||
long st_pad4[8];
|
||||
/* Linux specific fields */
|
||||
unsigned int st_flags;
|
||||
unsigned int st_gen;
|
||||
};
|
20
sysdeps/unix/sysv/linux/mips/kernel_termios.h
Normal file
20
sysdeps/unix/sysv/linux/mips/kernel_termios.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
#ifndef _SYS_KERNEL_TERMIOS_H
|
||||
#define _SYS_KERNEL_TERMIOS_H 1
|
||||
/* The following corresponds to the values from the Linux 2.1.24 kernel. */
|
||||
|
||||
/* We need the definition of tcflag_t, cc_t, and speed_t. */
|
||||
#include <bits/termios.h>
|
||||
|
||||
#define __KERNEL_NCCS 23
|
||||
|
||||
struct __kernel_termios
|
||||
{
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[__KERNEL_NCCS]; /* control characters */
|
||||
};
|
||||
|
||||
#endif /* kernel_termios.h */
|
80
sysdeps/unix/sysv/linux/mips/lxstat.h
Normal file
80
sysdeps/unix/sysv/linux/mips/lxstat.h
Normal file
|
@ -0,0 +1,80 @@
|
|||
/* lxstat using old-style Unix lstat system call.
|
||||
Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <kernel_stat.h>
|
||||
|
||||
extern int __syscall_lstat (const char *, struct kernel_stat *);
|
||||
|
||||
/* Get information about the file NAME in BUF. */
|
||||
int
|
||||
__lxstat (int vers, const char *name, struct stat *buf)
|
||||
{
|
||||
struct kernel_stat kbuf;
|
||||
int result;
|
||||
|
||||
switch (vers)
|
||||
{
|
||||
case _STAT_VER_LINUX_OLD:
|
||||
/* Nothing to do. The struct is in the form the kernel expects
|
||||
it to be. */
|
||||
result = __syscall_lstat (name, (struct kernel_stat *) buf);
|
||||
break;
|
||||
|
||||
case _STAT_VER_LINUX:
|
||||
/* Do the system call. */
|
||||
result = __syscall_lstat (name, &kbuf);
|
||||
|
||||
/* Convert to current kernel version of `struct stat'. */
|
||||
buf->st_dev = kbuf.st_dev;
|
||||
buf->st_pad1[0] = 0; buf->st_pad1[1] = 0; buf->st_pad1[2] = 0;
|
||||
buf->st_ino = kbuf.st_ino;
|
||||
buf->st_mode = kbuf.st_mode;
|
||||
buf->st_nlink = kbuf.st_nlink;
|
||||
buf->st_uid = kbuf.st_uid;
|
||||
buf->st_gid = kbuf.st_gid;
|
||||
buf->st_rdev = kbuf.st_rdev;
|
||||
buf->st_pad2[0] = 0; buf->st_pad2[1] = 0;
|
||||
buf->st_pad3 = 0;
|
||||
buf->st_size = kbuf.st_size;
|
||||
buf->st_blksize = kbuf.st_blksize;
|
||||
buf->st_blocks = kbuf.st_blocks;
|
||||
|
||||
buf->st_atime = kbuf.st_atime; buf->__reserved0 = 0;
|
||||
buf->st_mtime = kbuf.st_mtime; buf->__reserved1 = 0;
|
||||
buf->st_ctime = kbuf.st_ctime; buf->__reserved2 = 0;
|
||||
|
||||
buf->st_pad4[0] = 0; buf->st_pad4[1] = 0;
|
||||
buf->st_pad4[2] = 0; buf->st_pad4[3] = 0;
|
||||
buf->st_pad4[4] = 0; buf->st_pad4[5] = 0;
|
||||
buf->st_pad4[6] = 0; buf->st_pad4[7] = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
__set_errno (EINVAL);
|
||||
result = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
weak_alias (__lxstat, _lxstat)
|
1
sysdeps/unix/sysv/linux/mips/regdef.h
Normal file
1
sysdeps/unix/sysv/linux/mips/regdef.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <sys/regdef.h>
|
28
sysdeps/unix/sysv/linux/mips/sgidef.h
Normal file
28
sysdeps/unix/sysv/linux/mips/sgidef.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ralf Baechle <ralf@gnu.ai.mit.edu>.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SGIDEFS_H
|
||||
#define _SGIDEFS_H 1
|
||||
|
||||
/*
|
||||
* The real definitions come from the Linux kernel sources
|
||||
*/
|
||||
#include <asm/sgidefs.h>
|
||||
|
||||
#endif /* sgidefs.h */
|
66
sysdeps/unix/sysv/linux/mips/sys/acct.h
Normal file
66
sysdeps/unix/sysv/linux/mips/sys/acct.h
Normal file
|
@ -0,0 +1,66 @@
|
|||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_ACCT_H
|
||||
|
||||
#define _SYS_ACCT_H 1
|
||||
#include <features.h>
|
||||
|
||||
#define __need_time_t
|
||||
#include <time.h>
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#define ACCT_COMM 16
|
||||
|
||||
struct acct
|
||||
{
|
||||
char ac_comm[ACCT_COMM]; /* Accounting command name. */
|
||||
time_t ac_utime; /* Accounting user time. */
|
||||
time_t ac_stime; /* Accounting system time. */
|
||||
time_t ac_etime; /* Accounting elapsed time. */
|
||||
time_t ac_btime; /* Beginning time. */
|
||||
long ac_uid; /* Accounting user ID. */
|
||||
long ac_gid; /* Accounting group ID. */
|
||||
unsigned long int ac_tty; /* Controlling tty. */
|
||||
/* Please note that the value of the `ac_tty' field, a device number,
|
||||
is encoded differently in the kernel and for the libc dev_t type. */
|
||||
char ac_flag; /* Accounting flag. */
|
||||
long int ac_minflt; /* Accounting minor pagefaults. */
|
||||
long int ac_majflt; /* Accounting major pagefaults. */
|
||||
long int ac_exitcode; /* Accounting process exitcode. */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
AFORK = 0001, /* Has executed fork, but no exec. */
|
||||
ASU = 0002, /* Used super-user privileges. */
|
||||
ACORE = 0004, /* Dumped core. */
|
||||
AXSIG = 0010 /* Killed by a signal. */
|
||||
};
|
||||
|
||||
#define AHZ 100
|
||||
|
||||
|
||||
/* Switch process accounting on and off. */
|
||||
extern int acct __P ((__const char *__filename));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/acct.h */
|
28
sysdeps/unix/sysv/linux/mips/sys/asm.h
Normal file
28
sysdeps/unix/sysv/linux/mips/sys/asm.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ralf Baechle <ralf@gnu.ai.mit.edu>.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_ASM_H
|
||||
#define _SYS_ASM_H
|
||||
|
||||
/*
|
||||
* The real definitions come from the Linux kernel sources
|
||||
*/
|
||||
#include <asm/asm.h>
|
||||
|
||||
#endif /* sys/asm.h */
|
42
sysdeps/unix/sysv/linux/mips/sys/cachectl.h
Normal file
42
sysdeps/unix/sysv/linux/mips/sys/cachectl.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_CACHECTL_H
|
||||
#define _SYS_CACHECTL_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
/*
|
||||
* Get the kernel definition for the op bits.
|
||||
*/
|
||||
#include <asm/cachectl.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#ifdef __USE_MISC
|
||||
extern int cachectl __P ((void *addr, __const int nbytes, __const int op));
|
||||
#endif
|
||||
extern int __cachectl __P ((void *addr, __const int nbytes, __const int op));
|
||||
#ifdef __USE_MISC
|
||||
extern int cacheflush __P ((void *addr, __const int nbytes, __const int op));
|
||||
#endif
|
||||
extern int _flush_cache __P ((char *addr, __const int nbytes, __const int op));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/cachectl.h */
|
27
sysdeps/unix/sysv/linux/mips/sys/fpregdef.h
Normal file
27
sysdeps/unix/sysv/linux/mips/sys/fpregdef.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
/* Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_FPREGDEF_H
|
||||
#define _SYS_FPREGDEF_H
|
||||
|
||||
/*
|
||||
* The real definitions come from the Linux kernel sources
|
||||
*/
|
||||
#include <asm/fpregdef.h>
|
||||
|
||||
#endif /* sys/fpregdef.h */
|
109
sysdeps/unix/sysv/linux/mips/sys/procfs.h
Normal file
109
sysdeps/unix/sysv/linux/mips/sys/procfs.h
Normal file
|
@ -0,0 +1,109 @@
|
|||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_PROCFS_H
|
||||
|
||||
#define _SYS_PROCFS_H 1
|
||||
#include <features.h>
|
||||
|
||||
/* This is somehow modelled after the file of the same name on SysVr4
|
||||
systems. It provides a definition of the core file format for ELF
|
||||
used on Linux. */
|
||||
|
||||
#include <signal.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <asm/user.h>
|
||||
#include <asm/elf.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
struct elf_siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_code; /* Extra code. */
|
||||
int si_errno; /* Errno. */
|
||||
};
|
||||
|
||||
typedef elf_greg_t greg_t;
|
||||
typedef elf_gregset_t gregset_t;
|
||||
typedef elf_fpregset_t fpregset_t;
|
||||
#define NGREG ELF_NGREG
|
||||
|
||||
/* Definitions to generate Intel SVR4-like core files. These mostly
|
||||
have the same names as the SVR4 types with "elf_" tacked on the
|
||||
front to prevent clashes with linux definitions, and the typedef
|
||||
forms have been avoided. This is mostly like the SVR4 structure,
|
||||
but more Linuxy, with things that Linux does not support and which
|
||||
gdb doesn't really use excluded. Fields present but not used are
|
||||
marked with "XXX". */
|
||||
struct elf_prstatus
|
||||
{
|
||||
#if 0
|
||||
long int pr_flags; /* XXX Process flags. */
|
||||
short int pr_why; /* XXX Reason for process halt. */
|
||||
short int pr_what; /* XXX More detailed reason. */
|
||||
#endif
|
||||
struct elf_siginfo pr_info; /* Info associated with signal. */
|
||||
short int pr_cursig; /* Current signal. */
|
||||
unsigned long int pr_sigpend; /* Set of pending signals. */
|
||||
unsigned long int pr_sighold; /* Set of held signals. */
|
||||
#if 0
|
||||
struct sigaltstack pr_altstack; /* Alternate stack info. */
|
||||
struct sigaction pr_action; /* Signal action for current sig. */
|
||||
#endif
|
||||
__pid_t pr_pid;
|
||||
__pid_t pr_ppid;
|
||||
__pid_t pr_pgrp;
|
||||
__pid_t pr_sid;
|
||||
struct timeval pr_utime; /* User time. */
|
||||
struct timeval pr_stime; /* System time. */
|
||||
struct timeval pr_cutime; /* Cumulative user time. */
|
||||
struct timeval pr_cstime; /* Cumulative system time. */
|
||||
#if 0
|
||||
long int pr_instr; /* Current instruction. */
|
||||
#endif
|
||||
elf_gregset_t pr_reg; /* GP registers. */
|
||||
int pr_fpvalid; /* True if math copro being used. */
|
||||
};
|
||||
|
||||
|
||||
#define ELF_PRARGSZ (80) /* Number of chars for args */
|
||||
|
||||
struct elf_prpsinfo
|
||||
{
|
||||
char pr_state; /* Numeric process state. */
|
||||
char pr_sname; /* Char for pr_state. */
|
||||
char pr_zomb; /* Zombie. */
|
||||
char pr_nice; /* Nice val. */
|
||||
unsigned long int pr_flag; /* Flags. */
|
||||
long pr_uid;
|
||||
long pr_gid;
|
||||
int pr_pid, pr_ppid, pr_pgrp, pr_sid;
|
||||
/* Lots missing */
|
||||
char pr_fname[16]; /* Filename of executable. */
|
||||
char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
|
||||
};
|
||||
|
||||
|
||||
typedef struct elf_prstatus prstatus_t;
|
||||
typedef struct elf_prpsinfo prpsinfo_t;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/procfs.h */
|
29
sysdeps/unix/sysv/linux/mips/sys/regdef.h
Normal file
29
sysdeps/unix/sysv/linux/mips/sys/regdef.h
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ralf Baechle <ralf@gnu.ai.mit.edu>.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _REGDEF_H
|
||||
#define _REGDEF_H 1
|
||||
|
||||
/*
|
||||
* The real definitions come from the Linux kernel sources
|
||||
*/
|
||||
#include <asm/regdef.h>
|
||||
#include <asm/fpregdef.h>
|
||||
|
||||
#endif /* regdef.h */
|
1187
sysdeps/unix/sysv/linux/mips/sys/syscall.h
Normal file
1187
sysdeps/unix/sysv/linux/mips/sys/syscall.h
Normal file
File diff suppressed because it is too large
Load diff
36
sysdeps/unix/sysv/linux/mips/sys/sysmips.h
Normal file
36
sysdeps/unix/sysv/linux/mips/sys/sysmips.h
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_SYSMIPS_H
|
||||
#define _SYS_SYSMIPS_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
/*
|
||||
* Get the kernel definition for sysmips(2)
|
||||
*/
|
||||
#include <asm/sysmips.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
extern int sysmips __P ((__const int cmd, __const int arg1,
|
||||
__const int arg2, __const int arg3));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/sysmips.h */
|
46
sysdeps/unix/sysv/linux/mips/syscalls.list
Normal file
46
sysdeps/unix/sysv/linux/mips/syscalls.list
Normal file
|
@ -0,0 +1,46 @@
|
|||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
#
|
||||
# Calls for compatibility with existing MIPS OS implementations and
|
||||
# compilers.
|
||||
#
|
||||
cachectl - cachectl 3 __cachectl cachectl
|
||||
cacheflush - cacheflush 3 _flush_cache cacheflush
|
||||
sysmips - sysmips 4 __sysmips sysmips
|
||||
|
||||
# override select.S in parent directory:
|
||||
select - select 5 __select select
|
||||
sigsuspend - sigsuspend 1 __sigsuspend sigsuspend
|
||||
|
||||
#
|
||||
# Socket functions; Linux/MIPS doesn't use the socketcall(2) wrapper;
|
||||
# it's provided for compatibility, though.
|
||||
#
|
||||
accept - accept 3 __accept accept
|
||||
bind - bind 3 __bind bind
|
||||
connect - connect 3 __connect connect
|
||||
getpeername - getpeername 3 __getpeername getpeername
|
||||
getsockname - getsockname 3 __getsockname getsockname
|
||||
getsockopt - getsockopt 5 __getsockopt getsockopt
|
||||
listen - listen 2 __listen listen
|
||||
recv - recv 4 __recv recv
|
||||
recvfrom - recvfrom 6 __recvfrom recvfrom
|
||||
recvmsg - recvmsg 3 __recvmsg recvmsg
|
||||
send - send 4 __send send
|
||||
sendmsg - sendmsg 3 __sendmsg sendmsg
|
||||
sendto - sendto 6 __sendto sendto
|
||||
setsockopt - setsockopt 5 __setsockopt setsockopt
|
||||
shutdown - shutdown 2 __shutdown shutdown
|
||||
socket - socket 3 __socket socket
|
||||
socketpair - socketpair 4 __socketpair socketpair
|
||||
|
||||
#
|
||||
# There are defined locally because the caller is also defined in this dir.
|
||||
#
|
||||
s_llseek llseek _llseek 5 __sys_llseek
|
||||
s_sigaction sigaction sigaction 3 __syscall_sigaction
|
||||
s_ustat ustat ustat 2 __syscall_ustat
|
||||
sys_mknod xmknod mknod 3 __syscall_mknod
|
||||
sys_fstat fxstat fstat 2 __syscall_fstat
|
||||
sys_lstat lxstat lstat 2 __syscall_lstat
|
||||
sys_stat xstat stat 2 __syscall_stat
|
35
sysdeps/unix/sysv/linux/mips/ustat.c
Normal file
35
sysdeps/unix/sysv/linux/mips/ustat.c
Normal file
|
@ -0,0 +1,35 @@
|
|||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <sys/ustat.h>
|
||||
#include <sys/sysmacros.h>
|
||||
|
||||
|
||||
extern int __syscall_ustat (unsigned long dev, struct ustat *ubuf);
|
||||
|
||||
int
|
||||
ustat (dev_t dev, struct ustat *ubuf)
|
||||
{
|
||||
unsigned long k_dev;
|
||||
|
||||
/* We must convert the value to dev_t type used by the kernel. */
|
||||
k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff);
|
||||
|
||||
return __syscall_ustat (k_dev, ubuf);
|
||||
}
|
47
sysdeps/unix/sysv/linux/mips/xmknod.c
Normal file
47
sysdeps/unix/sysv/linux/mips/xmknod.c
Normal file
|
@ -0,0 +1,47 @@
|
|||
/* xmknod call using old-style Unix mknod system call.
|
||||
Copyright (C) 1991, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/sysmacros.h>
|
||||
|
||||
extern int __syscall_mknod (const char *, unsigned long, unsigned int);
|
||||
|
||||
/* Create a device file named PATH, with permission and special bits MODE
|
||||
and device number DEV (which can be constructed from major and minor
|
||||
device numbers with the `makedev' macro above). */
|
||||
int
|
||||
__xmknod (int vers, const char *path, mode_t mode, dev_t *dev)
|
||||
{
|
||||
unsigned long k_dev;
|
||||
|
||||
if (vers != _MKNOD_VER)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* We must convert the value to dev_t type used by the kernel. */
|
||||
k_dev = ((major (*dev) & 0xff) << 8) | (minor (*dev) & 0xff);
|
||||
|
||||
return __syscall_mknod (path, mode, k_dev);
|
||||
}
|
||||
|
||||
weak_alias (__xmknod, _xmknod)
|
80
sysdeps/unix/sysv/linux/mips/xstat.c
Normal file
80
sysdeps/unix/sysv/linux/mips/xstat.c
Normal file
|
@ -0,0 +1,80 @@
|
|||
/* xstat using old-style Unix stat system call.
|
||||
Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <kernel_stat.h>
|
||||
|
||||
extern int __syscall_stat (const char *, struct kernel_stat *);
|
||||
|
||||
/* Get information about the file NAME in BUF. */
|
||||
int
|
||||
__xstat (int vers, const char *name, struct stat *buf)
|
||||
{
|
||||
struct kernel_stat kbuf;
|
||||
int result;
|
||||
|
||||
switch (vers)
|
||||
{
|
||||
case _STAT_VER_LINUX_OLD:
|
||||
/* Nothing to do. The struct is in the form the kernel expects
|
||||
it to be. */
|
||||
result = __syscall_stat (name, (struct kernel_stat *) buf);
|
||||
break;
|
||||
|
||||
case _STAT_VER_LINUX:
|
||||
/* Do the system call. */
|
||||
result = __syscall_stat (name, &kbuf);
|
||||
|
||||
/* Convert to current kernel version of `struct stat'. */
|
||||
buf->st_dev = kbuf.st_dev;
|
||||
buf->st_pad1[0] = 0; buf->st_pad1[1] = 0; buf->st_pad1[2] = 0;
|
||||
buf->st_ino = kbuf.st_ino;
|
||||
buf->st_mode = kbuf.st_mode;
|
||||
buf->st_nlink = kbuf.st_nlink;
|
||||
buf->st_uid = kbuf.st_uid;
|
||||
buf->st_gid = kbuf.st_gid;
|
||||
buf->st_rdev = kbuf.st_rdev;
|
||||
buf->st_pad2[0] = 0; buf->st_pad2[1] = 0;
|
||||
buf->st_pad3 = 0;
|
||||
buf->st_size = kbuf.st_size;
|
||||
buf->st_blksize = kbuf.st_blksize;
|
||||
buf->st_blocks = kbuf.st_blocks;
|
||||
|
||||
buf->st_atime = kbuf.st_atime; buf->__reserved0 = 0;
|
||||
buf->st_mtime = kbuf.st_mtime; buf->__reserved1 = 0;
|
||||
buf->st_ctime = kbuf.st_ctime; buf->__reserved2 = 0;
|
||||
|
||||
buf->st_pad4[0] = 0; buf->st_pad4[1] = 0;
|
||||
buf->st_pad4[2] = 0; buf->st_pad4[3] = 0;
|
||||
buf->st_pad4[4] = 0; buf->st_pad4[5] = 0;
|
||||
buf->st_pad4[6] = 0; buf->st_pad4[7] = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
__set_errno (EINVAL);
|
||||
result = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
weak_alias (__xstat, _xstat)
|
|
@ -67,7 +67,8 @@ sys_readv readv readv 3 __syscall_readv
|
|||
sys_stat xstat stat 2 __syscall_stat
|
||||
sys_writev writev writev 3 __syscall_writev
|
||||
sysinfo EXTRA sysinfo 1 sysinfo
|
||||
swapon - swapon 2 swapon
|
||||
swapon - swapon 2 __swapon swapon
|
||||
swapoff - swapoff 1 __swapoff swapoff
|
||||
umount EXTRA umount 1 __umount umount
|
||||
uselib EXTRA uselib 1 uselib
|
||||
wait4 - wait4 4 __wait4 wait4
|
||||
|
|
|
@ -32,7 +32,7 @@ routines := offtime asctime clock ctime ctime_r difftime \
|
|||
tzfile gettimeofday settimeofday adjtime \
|
||||
getitimer setitimer \
|
||||
stime dysize timegm ftime \
|
||||
strptime
|
||||
strptime getdate
|
||||
|
||||
others := ap zdump zic
|
||||
tests := test_time clocktest test-tz
|
||||
|
|
247
time/getdate.c
Normal file
247
time/getdate.c
Normal file
|
@ -0,0 +1,247 @@
|
|||
/* Convert a string representation of time to a time value.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
static int first_wday (int year, int mon, int wday);
|
||||
static int check_mday (int year, int mon, int mday);
|
||||
|
||||
|
||||
/* Set to one of the following values to indicate an error.
|
||||
1 the DATEMSK environment variable is null or undefined,
|
||||
2 the template file cannot be opened for reading,
|
||||
3 failed to get file status information,
|
||||
4 the template file is not a regular file,
|
||||
5 an error is encountered while reading the template file,
|
||||
6 memory allication failed (not enough memory available),
|
||||
7 there is no line in the template that matches the input,
|
||||
8 invalid input specification Example: February 31 or a time is
|
||||
specified that can not be represented in a time_t (representing
|
||||
the time in seconds since 00:00:00 UTC, January 1, 1970) */
|
||||
int getdate_err = 0;
|
||||
|
||||
|
||||
/* Returns the first weekday WDAY of month MON in the year YEAR. */
|
||||
static int
|
||||
first_wday (int year, int mon, int wday)
|
||||
{
|
||||
struct tm tm;
|
||||
|
||||
if (wday == INT_MIN)
|
||||
return 1;
|
||||
|
||||
memset (&tm, 0, sizeof (struct tm));
|
||||
tm.tm_year = year;
|
||||
tm.tm_mon = mon;
|
||||
tm.tm_mday = 1;
|
||||
mktime (&tm);
|
||||
|
||||
return (1 + (wday - tm.tm_wday + 7) % 7);
|
||||
}
|
||||
|
||||
|
||||
/* Returns 1 if MDAY is a valid day of the month in month MON of year
|
||||
YEAR, and 0 if it is not. */
|
||||
static int
|
||||
check_mday (int year, int mon, int mday)
|
||||
{
|
||||
switch (mon)
|
||||
{
|
||||
case 1:
|
||||
case 3:
|
||||
case 5:
|
||||
case 7:
|
||||
case 8:
|
||||
case 10:
|
||||
case 12:
|
||||
if (mday >= 1 && mday <= 31)
|
||||
return 1;
|
||||
break;
|
||||
case 4:
|
||||
case 6:
|
||||
case 9:
|
||||
case 11:
|
||||
if (mday >= 1 && mday <= 30)
|
||||
return 1;
|
||||
break;
|
||||
case 2:
|
||||
if (mday >= 1 && mday < (__isleap (year) ? 29 : 28))
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
__getdate_r (const char *string, struct tm *tp)
|
||||
{
|
||||
FILE *fp;
|
||||
char *line;
|
||||
size_t len;
|
||||
char *datemsk;
|
||||
char *result = NULL;
|
||||
time_t timer;
|
||||
struct tm tm;
|
||||
struct stat st;
|
||||
int mday_ok = 0;
|
||||
|
||||
datemsk = getenv ("DATEMSK");
|
||||
if (datemsk == NULL || *datemsk == '\0')
|
||||
return 1;
|
||||
|
||||
if (stat (datemsk, &st) < 0)
|
||||
return 3;
|
||||
|
||||
if (!S_ISREG (st.st_mode))
|
||||
return 4;
|
||||
|
||||
/* Open the template file. */
|
||||
fp = fopen (datemsk, "r");
|
||||
if (fp == NULL)
|
||||
return 2;
|
||||
|
||||
line = NULL;
|
||||
len = 0;
|
||||
do
|
||||
{
|
||||
ssize_t n;
|
||||
|
||||
n = __getline (&line, &len, fp);
|
||||
if (n < 0)
|
||||
break;
|
||||
if (line[n - 1] == '\n')
|
||||
line[n - 1] = '\0';
|
||||
|
||||
/* Do the conversion. */
|
||||
tp->tm_year = tp->tm_mon = tp->tm_mday = tp->tm_wday = INT_MIN;
|
||||
tp->tm_hour = tp->tm_sec = tp->tm_min = INT_MIN;
|
||||
result = strptime (string, line, tp);
|
||||
if (result && *result == '\0')
|
||||
break;
|
||||
}
|
||||
while (!feof (fp));
|
||||
|
||||
/* Free the buffer. */
|
||||
free (line);
|
||||
|
||||
/* Check for errors. */
|
||||
if (ferror (fp))
|
||||
{
|
||||
fclose (fp);
|
||||
return 5;
|
||||
}
|
||||
|
||||
/* Close template file. */
|
||||
fclose (fp);
|
||||
|
||||
if (result == NULL)
|
||||
return 7;
|
||||
|
||||
/* Get current time. */
|
||||
time (&timer);
|
||||
__localtime_r (&timer, &tm);
|
||||
|
||||
/* If only the weekday is given, today is assumed if the given day
|
||||
is equal to the current day and next week if it is less. */
|
||||
if (tp->tm_wday >= 0 && tp->tm_wday <= 6 && tp->tm_year == INT_MIN
|
||||
&& tp->tm_mon == INT_MIN && tp->tm_mday == INT_MIN)
|
||||
{
|
||||
tp->tm_year = tm.tm_year;
|
||||
tp->tm_mon = tm.tm_mon;
|
||||
tp->tm_mday = tm.tm_mday + (tp->tm_wday - tm.tm_wday + 7) % 7;
|
||||
mday_ok = 1;
|
||||
}
|
||||
|
||||
/* If only the month is given, the current month is assumed if the
|
||||
given month is equal to the current month and next year if it is
|
||||
less and no year is given (the first day of month is assumed if
|
||||
no day is given. */
|
||||
if (tp->tm_mon >= 0 && tp->tm_mon <= 11 && tp->tm_mday == INT_MIN)
|
||||
{
|
||||
if (tp->tm_year == INT_MIN)
|
||||
tp->tm_year = tm.tm_year + (((tp->tm_mon - tm.tm_mon) < 0) ? 1 : 0);
|
||||
tp->tm_mday = first_wday (tp->tm_year, tp->tm_mon, tp->tm_wday);
|
||||
mday_ok = 1;
|
||||
}
|
||||
|
||||
/* If no hour, minute and second are given the current hour, minute
|
||||
and second are assumed. */
|
||||
if (tp->tm_hour == INT_MIN && tp->tm_min == INT_MIN && tp->tm_sec == INT_MIN)
|
||||
{
|
||||
tp->tm_hour = tm.tm_hour;
|
||||
tp->tm_min = tm.tm_min;
|
||||
tp->tm_sec = tm.tm_sec;
|
||||
}
|
||||
|
||||
/* If no date is given, today is assumed if the given hour is
|
||||
greater than the current hour and tomorrow is assumed if
|
||||
it is less. */
|
||||
if (tp->tm_hour >= 0 && tp->tm_hour <= 23
|
||||
&& tp->tm_year == INT_MIN && tp->tm_mon == INT_MIN
|
||||
&& tp->tm_mday == INT_MIN && tp->tm_wday == INT_MIN)
|
||||
{
|
||||
tp->tm_year = tm.tm_year;
|
||||
tp->tm_mon = tm.tm_mon;
|
||||
tp->tm_mday = tm.tm_mday + ((tp->tm_hour - tm.tm_hour) < 0 ? 1 : 0);
|
||||
mday_ok = 1;
|
||||
}
|
||||
|
||||
/* Fill in the gaps. */
|
||||
if (tp->tm_year == INT_MIN)
|
||||
tp->tm_year = tm.tm_year;
|
||||
if (tp->tm_hour == INT_MIN)
|
||||
tp->tm_hour = 0;
|
||||
if (tp->tm_min == INT_MIN)
|
||||
tp->tm_min = 0;
|
||||
if (tp->tm_sec == INT_MIN)
|
||||
tp->tm_sec = 0;
|
||||
|
||||
/* Check if the day of month is within range, and if the time can be
|
||||
represented in a time_t. We make use of the fact that the mktime
|
||||
call normalizes the struct tm. */
|
||||
if ((!mday_ok && !check_mday (tp->tm_year, tp->tm_mon, tp->tm_mday))
|
||||
|| mktime (tp) == (time_t) -1)
|
||||
return 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#ifdef weak_alias
|
||||
weak_alias (__getdate_r, getdate_r)
|
||||
#endif
|
||||
|
||||
|
||||
struct tm *
|
||||
getdate (const char *string)
|
||||
{
|
||||
/* Buffer returned by getdate. */
|
||||
static struct tm tmbuf;
|
||||
int errval = __getdate_r (string, &tmbuf);
|
||||
|
||||
return errval == 0 ? &tmbuf : NULL;
|
||||
}
|
32
time/time.h
32
time/time.h
|
@ -275,6 +275,38 @@ extern int nanosleep __P ((__const struct timespec *__requested_time,
|
|||
#endif
|
||||
|
||||
|
||||
#ifdef __USE_XOPEN_EXTENDED
|
||||
/* Set to one of the following values to indicate an error.
|
||||
1 the DATEMSK environment variable is null or undefined,
|
||||
2 the template file cannot be opened for reading,
|
||||
3 failed to get file status information,
|
||||
4 the template file is not a regular file,
|
||||
5 an error is encountered while reading the template file,
|
||||
6 memory allication failed (not enough memory available),
|
||||
7 there is no line in the template that matches the input,
|
||||
8 invalid input specification Example: February 31 or a time is
|
||||
specified that can not be represented in a time_t (representing
|
||||
the time in seconds since 00:00:00 UTC, January 1, 1970) */
|
||||
extern int getdate_err;
|
||||
|
||||
/* Parse the given string as a date specification and return a value
|
||||
representing the value. The templates from the file identified by
|
||||
the environment variable DATEMSK are used. In case of an error
|
||||
`getdate_err' is set. */
|
||||
extern struct tm *getdate __P ((__const char *__string));
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Since `getdate' is not reentrant because of the use of `getdate_err'
|
||||
and the static buffer to return the result in, we provide a thread-safe
|
||||
variant. The functionality is the same. The result is returned in
|
||||
the buffer pointed to by RESBUFP and in case of an error the return
|
||||
value is != 0 with the same values as given above for `getdate_err'. */
|
||||
extern int __getdate_r __P ((__const char *__string, struct tm *__resbufp));
|
||||
extern int getdate_r __P ((__const char *__string, struct tm *__resbufp));
|
||||
#endif
|
||||
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* <time.h> included. */
|
||||
|
|
Loading…
Add table
Reference in a new issue