diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-11-26 12:02:23 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-11-26 12:02:23 +0000 |
commit | cb0509a8d5a3569117babe0a24dc4946cf6c06c1 (patch) | |
tree | 85cc83f80f4dff0f7a7b2580865f6341ad3e79ae | |
parent | 0155a7737f5653e07015421b962b70fd8831c4ad (diff) | |
download | glibc-cb0509a8d5a3569117babe0a24dc4946cf6c06c1.tar glibc-cb0509a8d5a3569117babe0a24dc4946cf6c06c1.tar.gz glibc-cb0509a8d5a3569117babe0a24dc4946cf6c06c1.tar.bz2 glibc-cb0509a8d5a3569117babe0a24dc4946cf6c06c1.zip |
Update.
1998-11-26 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/mips/dl-machine.h (ELF_MACHINE_NO_PLT): New defined macro.
(elf_machine_got_rel): Remove scope variable. Use scope from the map.
Don't modify _dl_global_scope_end in the end.
(__dl_runtime_resolv): Also use scope from the map.
* sysdeps/mips/mips64/dl-machine.h: Likewise.
* elf/dl-runtime.c: Don't define fixup and profile_fixup if
ELF_MACHINE_NO_PLT is defined.
* sysdeps/mips/sys/ucontext.h: New file.
Patches by kaz Kojima <kkojima@rr.iij4u.or.jp>.
1998-11-26 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/generic/pselect.c (__pselect): Change interface,
set/restore sigmask.
* misc/sys/select.h: Change declaration according to Stevens' Unix
Network Programming.
* include/sys/select.h (__pselect): Likewise.
Reported by <bwelling@anomaly.munge.com> [PR libc/872].
* include/fpu_control.h: New file, contains __setfpucw
declaration.
* sysdeps/generic/fpu_control.h: Remove __setfpucw declaration,
it's an internal symbol.
* sysdeps/alpha/fpu/fpu_control.h: Likewise.
* sysdeps/arm/fpu/fpu_control.h: Likewise.
* sysdeps/i386/fpu_control.h: Likewise.
* sysdeps/m68k/fpu_control.h: Likewise.
* sysdeps/powerpc/fpu_control.h: Likewise.
* sysdeps/sparc/sparc32/fpu/fpu_control.h: Likewise.
* sysdeps/sparc/sparc64/fpu/fpu_control.h: Likewise.
-rw-r--r-- | ChangeLog | 35 | ||||
-rw-r--r-- | FAQ.in | 30 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | elf/dl-runtime.c | 13 | ||||
-rw-r--r-- | include/fpu_control.h | 4 | ||||
-rw-r--r-- | include/sys/select.h | 3 | ||||
-rw-r--r-- | misc/sys/select.h | 9 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/fpu_control.h | 9 | ||||
-rw-r--r-- | sysdeps/arm/fpu/fpu_control.h | 7 | ||||
-rw-r--r-- | sysdeps/generic/fpu_control.h | 9 | ||||
-rw-r--r-- | sysdeps/generic/pselect.c | 24 | ||||
-rw-r--r-- | sysdeps/i386/fpu_control.h | 9 | ||||
-rw-r--r-- | sysdeps/m68k/fpu_control.h | 9 | ||||
-rw-r--r-- | sysdeps/mips/dl-machine.h | 17 | ||||
-rw-r--r-- | sysdeps/mips/mips64/dl-machine.h | 17 | ||||
-rw-r--r-- | sysdeps/mips/sys/ucontext.h | 144 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu_control.h | 9 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/fpu/fpu_control.h | 9 | ||||
-rw-r--r-- | sysdeps/sparc/sparc64/fpu/fpu_control.h | 9 |
19 files changed, 260 insertions, 110 deletions
@@ -1,3 +1,38 @@ +1998-11-26 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/mips/dl-machine.h (ELF_MACHINE_NO_PLT): New defined macro. + (elf_machine_got_rel): Remove scope variable. Use scope from the map. + Don't modify _dl_global_scope_end in the end. + (__dl_runtime_resolv): Also use scope from the map. + * sysdeps/mips/mips64/dl-machine.h: Likewise. + * elf/dl-runtime.c: Don't define fixup and profile_fixup if + ELF_MACHINE_NO_PLT is defined. + * sysdeps/mips/sys/ucontext.h: New file. + Patches by kaz Kojima <kkojima@rr.iij4u.or.jp>. + +1998-11-26 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * sysdeps/generic/pselect.c (__pselect): Change interface, + set/restore sigmask. + + * misc/sys/select.h: Change declaration according to Stevens' Unix + Network Programming. + * include/sys/select.h (__pselect): Likewise. + Reported by <bwelling@anomaly.munge.com> [PR libc/872]. + + * include/fpu_control.h: New file, contains __setfpucw + declaration. + + * sysdeps/generic/fpu_control.h: Remove __setfpucw declaration, + it's an internal symbol. + * sysdeps/alpha/fpu/fpu_control.h: Likewise. + * sysdeps/arm/fpu/fpu_control.h: Likewise. + * sysdeps/i386/fpu_control.h: Likewise. + * sysdeps/m68k/fpu_control.h: Likewise. + * sysdeps/powerpc/fpu_control.h: Likewise. + * sysdeps/sparc/sparc32/fpu/fpu_control.h: Likewise. + * sysdeps/sparc/sparc64/fpu/fpu_control.h: Likewise. + 1998-11-25 Ulrich Drepper <drepper@cygnus.com> * version.h (VERSION): Bump to 2.0.104. @@ -33,6 +33,7 @@ in the future, are: sparc-*-linux-gnu Linux-2.x on SPARC sparc64-*-linux-gnu Linux-2.x on UltraSPARC arm-*-none ARM standalone systems + arm-*-linux Linux-2.x on ARM arm-*-linuxaout Linux-2.x on ARM using a.out binaries Ports to other Linux platforms are in development, and may in fact work @@ -60,7 +61,7 @@ a local mirror first. You should always try to use the latest official release. Older versions may not have all the features GNU libc requires. The current releases of egcs (1.0.3 and 1.1) and GNU CC (2.8.1) should work with the GNU C library -(for powerpc see question ?powerpc). +(for powerpc see question ?powerpc; for ARM see question ?arm). {ZW} You may have problems if you try to mix code compiled with EGCS and with GCC 2.8.1. See ?exception for details. @@ -105,6 +106,16 @@ variables. There is a temporary patch at: Later versions of egcs may fix this problem. +??arm Which tools should I use for ARM? + +{PB} You should use egcs 1.1 or a later version. For ELF systems some +changes are needed to the compiler; a patch against egcs-1.1.x can be found +at: + +<ftp://ftp.netwinder.org/users/p/philb/egcs-1.1.1pre2-diff-981126> + +Binutils 2.9.1.0.16 or later is also required. + ?? Do I need some more things to compile the GNU C Library? {UD} Yes, there are some more :-). @@ -1146,9 +1157,20 @@ from your favorite mirror of ftp.gnu.org. where the headers are stable. There are still lots of incompatible changes made and the libc headers have to follow. -Also, make sure you have a suitably recent kernel. As of the 970401 -snapshot, according to Philip Blundell <Philip.Blundell@pobox.com>, the -required kernel version is at least 2.1.30. +{PB} The 2.1 release of GNU libc aims to comply with the current versions of +all the relevant standards. The IPv6 support libraries for older Linux +systems used a different naming convention and so code written to work with +them may need to be modified. If the standards make incompatible changes in +the future then the libc may need to change again. + +IPv6 will not work with a 2.0.x kernel. When kernel 2.2 is released it +should contain all the necessary support; until then you should use the +latest 2.1.x release you can find. As of 98/11/26 the currently recommended +kernel for IPv6 is 2.1.129. + +Also, as of the 2.1 release the IPv6 API provided by GNU libc is not +100% complete. In particular the getipnodebyname and getipnodebyaddr +functions are not implemented. ?? When I set the timezone by setting the TZ environment variable to EST5EDT things go wrong since glibc computes the wrong time @@ -1,4 +1,4 @@ -This directory contains the version 2.0.103 test release of the GNU C Library. +This directory contains the version 2.0.104 test release of the GNU C Library. Many bugs have been fixed since the last release. Some bugs surely remain. @@ -53,7 +53,7 @@ provides the Unix `crypt' function, plus some other entry points. Because of the United States export restriction on DES implementations, we are distributing this code separately from the rest of the C library. There is an extra distribution tar file just for crypt; it is -called `glibc-crypt-2.0.103.tar.gz'. You can just unpack the crypt +called `glibc-crypt-2.0.104.tar.gz'. You can just unpack the crypt distribution along with the rest of the C library and build; you can also build the library without getting crypt. Users outside the USA can get the crypt distribution via anonymous FTP from ftp.ifi.uio.no diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c index 38ecf96525..91700c2764 100644 --- a/elf/dl-runtime.c +++ b/elf/dl-runtime.c @@ -39,11 +39,12 @@ to that address. Future calls will bounce directly from the PLT to the function. */ +#ifndef ELF_MACHINE_NO_PLT static ElfW(Addr) __attribute__ ((unused)) fixup ( -#ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS - ELF_MACHINE_RUNTIME_FIXUP_ARGS, -#endif +# ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS + ELF_MACHINE_RUNTIME_FIXUP_ARGS, +# endif struct link_map *l, ElfW(Word) reloc_offset) { const ElfW(Sym) *const symtab @@ -96,9 +97,9 @@ fixup ( return value; } +#endif - -#ifndef PROF +#if !defined PROF && !defined ELF_MACHINE_NO_PLT static ElfW(Addr) __attribute__ ((unused)) profile_fixup ( @@ -172,7 +173,7 @@ profile_fixup ( return value; } -#endif /* PROF */ +#endif /* PROF && ELF_MACHINE_NO_PLT */ /* This macro is defined in dl-machine.h to define the entry point called diff --git a/include/fpu_control.h b/include/fpu_control.h new file mode 100644 index 0000000000..a0a4febf9e --- /dev/null +++ b/include/fpu_control.h @@ -0,0 +1,4 @@ +#include_next <fpu_control.h> + +/* Called at startup. It can be used to manipulate fpu control register. */ +extern void __setfpucw __P ((fpu_control_t)); diff --git a/include/sys/select.h b/include/sys/select.h index be98aa2eb4..5c722e9df6 100644 --- a/include/sys/select.h +++ b/include/sys/select.h @@ -4,5 +4,6 @@ /* Now define the internal interfaces. */ extern int __pselect __P ((int __nfds, __fd_set *__readfds, __fd_set *__writefds, __fd_set *__exceptfds, - struct timespec *__timeout)); + const struct timespec *__timeout, + const __sigset_t *__sigmask)); #endif diff --git a/misc/sys/select.h b/misc/sys/select.h index 179e1ec59f..0972560b97 100644 --- a/misc/sys/select.h +++ b/misc/sys/select.h @@ -30,6 +30,9 @@ /* Get __FD_* definitions. */ #include <bits/select.h> +/* Get __sigset_t. */ +#include <bits/sigset.h> + /* Get definition of timer specification structures. */ #define __need_timespec #include <time.h> @@ -79,10 +82,12 @@ extern int select __P ((int __nfds, __fd_set *__readfds, /* XXX Once/if POSIX.1g gets official this prototype will be available when defining __USE_POSIX. */ /* Same as above only that the TIMEOUT value is given with higher - resolution. This version should be used. */ + resolution and a sigmask which is been set temporarily. This version + should be used. */ extern int pselect __P ((int __nfds, __fd_set *__readfds, __fd_set *__writefds, __fd_set *__exceptfds, - struct timespec *__timeout)); + const struct timespec *__timeout, + const __sigset_t *__sigmask)); #endif __END_DECLS diff --git a/sysdeps/alpha/fpu/fpu_control.h b/sysdeps/alpha/fpu/fpu_control.h index bcf73e857e..dfca373c3d 100644 --- a/sysdeps/alpha/fpu/fpu_control.h +++ b/sysdeps/alpha/fpu/fpu_control.h @@ -1,5 +1,5 @@ /* FPU control word bits. Alpha-maped-to-Intel version. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Olaf Flebbe. @@ -103,11 +103,4 @@ typedef unsigned int fpu_control_t; /* Default control word set at startup. */ extern fpu_control_t __fpu_control; -__BEGIN_DECLS - -/* called by start.o. It can be used to manipulate fpu control word. */ -extern void __setfpucw __P ((unsigned short)); - -__END_DECLS - #endif /* _ALPHA_FPU_CONTROL */ diff --git a/sysdeps/arm/fpu/fpu_control.h b/sysdeps/arm/fpu/fpu_control.h index 8a2d338c49..27b8dda972 100644 --- a/sysdeps/arm/fpu/fpu_control.h +++ b/sysdeps/arm/fpu/fpu_control.h @@ -83,11 +83,4 @@ typedef unsigned int fpu_control_t; /* Default control word set at startup. */ extern fpu_control_t __fpu_control; -__BEGIN_DECLS - -/* Called at startup. It can be used to manipulate fpu control register. */ -extern void __setfpucw __P ((fpu_control_t)); - -__END_DECLS - #endif /* _FPU_CONTROL_H */ diff --git a/sysdeps/generic/fpu_control.h b/sysdeps/generic/fpu_control.h index 4d3d978426..8d50901300 100644 --- a/sysdeps/generic/fpu_control.h +++ b/sysdeps/generic/fpu_control.h @@ -1,5 +1,5 @@ /* FPU control word definitions. Stub version. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -36,11 +36,4 @@ typedef unsigned int fpu_control_t; /* Default control word set at startup. */ extern fpu_control_t __fpu_control; -__BEGIN_DECLS - -/* Called at startup. It can be used to manipulate fpu control register. */ -extern void __setfpucw __P ((fpu_control_t)); - -__END_DECLS - #endif /* _FPU_CONTROL_H */ diff --git a/sysdeps/generic/pselect.c b/sysdeps/generic/pselect.c index 3a93f997f5..dab4d754f2 100644 --- a/sysdeps/generic/pselect.c +++ b/sysdeps/generic/pselect.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -18,24 +18,28 @@ Boston, MA 02111-1307, USA. */ #include <errno.h> +#include <signal.h> #include <sys/time.h> #include <sys/select.h> /* Check the first NFDS descriptors each in READFDS (if not NULL) for read readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS (if not NULL) for exceptional conditions. If TIMEOUT is not NULL, time out - after waiting the interval specified therein. Returns the number of ready - descriptors, or -1 for errors. */ + after waiting the interval specified therein. Additionally set the sigmask + SIGMASK for this call. Returns the number of ready descriptors, or -1 for + errors. */ int -__pselect (nfds, readfds, writefds, exceptfds, timeout) +__pselect (nfds, readfds, writefds, exceptfds, timeout, sigmask) int nfds; fd_set *readfds; fd_set *writefds; fd_set *exceptfds; - struct timespec *timeout; + const struct timespec *timeout; + const sigset_t *sigmask; { struct timeval tval; int retval; + sigset_t savemask; /* Change nanosecond number to microseconds. This may loose precision and therefore the `pselect` should be available. But @@ -43,13 +47,13 @@ __pselect (nfds, readfds, writefds, exceptfds, timeout) if (timeout != NULL) TIMESPEC_TO_TIMEVAL (&tval, timeout); + /* The setting and restoring of the signal mask and the select call + should be an atomic operation. This can't be done without kernel + help. */ + __sigprocmask (SIG_SETMASK, sigmask, &savemask); retval = __select (nfds, readfds, writefds, exceptfds, timeout != NULL ? &tval : NULL); - - /* Change the result back. The remaining time must be made - available to the caller. */ - if (timeout != NULL) - TIMEVAL_TO_TIMESPEC (&tval, timeout); + __sigprocmask (SIG_SETMASK, &savemask, NULL); return retval; } diff --git a/sysdeps/i386/fpu_control.h b/sysdeps/i386/fpu_control.h index 8474f7199b..b957010904 100644 --- a/sysdeps/i386/fpu_control.h +++ b/sysdeps/i386/fpu_control.h @@ -1,5 +1,5 @@ /* FPU control word bits. i387 version. - Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Olaf Flebbe. @@ -95,11 +95,4 @@ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__))); /* Default control word set at startup. */ extern fpu_control_t __fpu_control; -__BEGIN_DECLS - -/* Called at startup. It can be used to manipulate fpu control register. */ -extern void __setfpucw __P ((fpu_control_t)); - -__END_DECLS - #endif /* fpu_control.h */ diff --git a/sysdeps/m68k/fpu_control.h b/sysdeps/m68k/fpu_control.h index 12ea1336c3..28405b6a3b 100644 --- a/sysdeps/m68k/fpu_control.h +++ b/sysdeps/m68k/fpu_control.h @@ -1,5 +1,5 @@ /* 68k FPU control word definitions. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -98,11 +98,4 @@ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); /* Default control word set at startup. */ extern fpu_control_t __fpu_control; -__BEGIN_DECLS - -/* Called at startup. It can be used to manipulate fpu control register. */ -extern void __setfpucw __P ((fpu_control_t)); - -__END_DECLS - #endif /* _M68K_FPU_CONTROL_H */ diff --git a/sysdeps/mips/dl-machine.h b/sysdeps/mips/dl-machine.h index bbd22d8777..5f6e12752e 100644 --- a/sysdeps/mips/dl-machine.h +++ b/sysdeps/mips/dl-machine.h @@ -23,6 +23,8 @@ #define ELF_MACHINE_NAME "MIPS" +#define ELF_MACHINE_NO_PLT + #include <assert.h> #include <entry.h> @@ -142,7 +144,6 @@ elf_machine_got_rel (struct link_map *map, int lazy) ElfW(Addr) *got; ElfW(Sym) *sym; int i, n; - struct link_map **scope; const char *strtab = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr); @@ -150,7 +151,8 @@ elf_machine_got_rel (struct link_map *map, int lazy) ({ \ const ElfW(Sym) *ref = sym; \ ElfW(Addr) sym_loadaddr; \ - sym_loadaddr = _dl_lookup_symbol (strtab + sym->st_name, &ref, scope, \ + sym_loadaddr = _dl_lookup_symbol (strtab + sym->st_name, &ref, \ + map->l_scope, \ map->l_name, ELF_MACHINE_RELOC_NOPLT);\ (ref)? sym_loadaddr + ref->st_value: 0; \ }) @@ -166,9 +168,6 @@ elf_machine_got_rel (struct link_map *map, int lazy) while (i < n) got[i++] += map->l_addr; - /* Set scope. */ - scope = _dl_object_relocation_scope (map); - /* Handle global got entries. */ got += n; sym = (ElfW(Sym) *) ((void *) map->l_addr @@ -210,7 +209,6 @@ elf_machine_got_rel (struct link_map *map, int lazy) } #undef RESOLVE_GOTSYM - *_dl_global_scope_end = NULL; return; } @@ -362,16 +360,13 @@ __dl_runtime_resolve (ElfW(Word) sym_index, \ const ElfW(Sym) *definer; \ ElfW(Addr) loadbase; \ ElfW(Addr) funcaddr; \ - struct link_map **scope; \ \ /* Look up the symbol's run-time value. */ \ - scope = _dl_object_relocation_scope (l); \ definer = &symtab[sym_index]; \ \ loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer, \ - scope, l->l_name, ELF_MACHINE_RELOC_NOPLT); \ - \ - *_dl_global_scope_end = NULL; \ + l->l_scope, l->l_name, \ + ELF_MACHINE_RELOC_NOPLT); \ \ /* Apply the relocation with that value. */ \ funcaddr = loadbase + definer->st_value; \ diff --git a/sysdeps/mips/mips64/dl-machine.h b/sysdeps/mips/mips64/dl-machine.h index 76981a6a9b..1045da15b6 100644 --- a/sysdeps/mips/mips64/dl-machine.h +++ b/sysdeps/mips/mips64/dl-machine.h @@ -23,6 +23,8 @@ #define ELF_MACHINE_NAME "MIPS" +#define ELF_MACHINE_NO_PLT + #include <assert.h> #include <entry.h> @@ -142,7 +144,6 @@ elf_machine_got_rel (struct link_map *map, int lazy) ElfW(Addr) *got; ElfW(Sym) *sym; int i, n; - struct link_map **scope; const char *strtab = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr); @@ -150,7 +151,8 @@ elf_machine_got_rel (struct link_map *map, int lazy) ({ \ const ElfW(Sym) *ref = sym; \ ElfW(Addr) sym_loadaddr; \ - sym_loadaddr = _dl_lookup_symbol (strtab + sym->st_name, &ref, scope, \ + sym_loadaddr = _dl_lookup_symbol (strtab + sym->st_name, &ref, \ + map->l_scope, \ map->l_name, ELF_MACHINE_RELOC_NOPLT);\ (ref)? sym_loadaddr + ref->st_value: 0; \ }) @@ -166,9 +168,6 @@ elf_machine_got_rel (struct link_map *map, int lazy) while (i < n) got[i++] += map->l_addr; - /* Set scope. */ - scope = _dl_object_relocation_scope (map); - /* Handle global got entries. */ got += n; sym = (ElfW(Sym) *) ((void *) map->l_addr @@ -210,7 +209,6 @@ elf_machine_got_rel (struct link_map *map, int lazy) } #undef RESOLVE_GOTSYM - *_dl_global_scope_end = NULL; return; } @@ -362,16 +360,13 @@ __dl_runtime_resolve (ElfW(Word) sym_index, \ const ElfW(Sym) *definer; \ ElfW(Addr) loadbase; \ ElfW(Addr) funcaddr; \ - struct link_map **scope; \ \ /* Look up the symbol's run-time value. */ \ - scope = _dl_object_relocation_scope (l); \ definer = &symtab[sym_index]; \ \ loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer, \ - scope, l->l_name, ELF_MACHINE_RELOC_NOPLT); \ - \ - *_dl_global_scope_end = NULL; \ + l->l_scope, l->l_name, \ + ELF_MACHINE_RELOC_NOPLT); \ \ /* Apply the relocation with that value. */ \ funcaddr = loadbase + definer->st_value; \ diff --git a/sysdeps/mips/sys/ucontext.h b/sysdeps/mips/sys/ucontext.h new file mode 100644 index 0000000000..f177cad121 --- /dev/null +++ b/sysdeps/mips/sys/ucontext.h @@ -0,0 +1,144 @@ +/* Copyright (C) 1998 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* System V/mips ABI compliant context switching support. */ + +#ifndef _SYS_UCONTEXT_H +#define _SYS_UCONTEXT_H 1 + +#include <features.h> +#include <signal.h> + +/* Type for general register. */ +typedef unsigned int greg_t; + +/* Number of general registers. */ +#define NGREG 36 + +/* Container for all general registers. */ +typedef greg_t gregset_t[NGREG]; + +/* Number of each register is the `gregset_t' array. */ +enum +{ + CTX_R0 = 0, +#define CTX_R0 CTX_R0 + CTX_AT = 1, +#define CTX_AT CTX_AT + CTX_V0 = 2, +#define CTX_V0 CTX_V0 + CTX_V1 = 3, +#define CTX_V1 CTX_V1 + CTX_A0 = 4, +#define CTX_A0 CTX_A0 + CTX_A1 = 5, +#define CTX_A1 CTX_A1 + CTX_A2 = 6, +#define CTX_A2 CTX_A2 + CTX_A3 = 7, +#define CTX_A3 CTX_A3 + CTX_T0 = 8, +#define CTX_T0 CTX_T0 + CTX_T1 = 9, +#define CTX_T1 CTX_T1 + CTX_T2 = 10, +#define CTX_T2 CTX_T2 + CTX_T3 = 11, +#define CTX_T3 CTX_T3 + CTX_T4 = 12, +#define CTX_T4 CTX_T4 + CTX_T5 = 13, +#define CTX_T5 CTX_T5 + CTX_T6 = 14, +#define CTX_T6 CTX_T6 + CTX_T7 = 15, +#define CTX_T7 CTX_T7 + CTX_S0 = 16, +#define CTX_S0 CTX_S0 + CTX_S1 = 17, +#define CTX_S1 CTX_S1 + CTX_S2 = 18, +#define CTX_S2 CTX_S2 + CTX_S3 = 19, +#define CTX_S3 CTX_S3 + CTX_S4 = 20, +#define CTX_S4 CTX_S4 + CTX_S5 = 21, +#define CTX_S5 CTX_S5 + CTX_S6 = 22, +#define CTX_S6 CTX_S6 + CTX_S7 = 23, +#define CTX_S7 CTX_S7 + CTX_T8 = 24, +#define CTX_T8 CTX_T8 + CTX_T9 = 25, +#define CTX_T9 CTX_T9 + CTX_K0 = 26, +#define CTX_K0 CTX_K0 + CTX_K1 = 27, +#define CTX_K1 CTX_K1 + CTX_GP = 28, +#define CTX_GP CTX_GP + CTX_SP = 29, +#define CTX_SP CTX_SP + CTX_S8 = 30, +#define CTX_S8 CTX_S8 + CTX_RA = 31, +#define CTX_RA CTX_RA + CTX_MDLO = 32, +#define CTX_MDLO CTX_MDLO + CTX_MDHI = 33, +#define CTX_MDHI CTX_MDHI + CTX_CAUSE = 34, +#define CTX_CAUSE CTX_CAUSE + CTX_EPC = 35, +#define CTX_EPC CTX_EPC +}; + +/* Structure to describe FPU registers. */ +typedef struct fpregset +{ + union + { + double fp_dregs[16]; + float fp_fregs[32]; + unsigned int fp_regs[32]; + } fp_r; + unsigned int fp_csr; + unsigned int fp_pad; +} fpregset_t; + +/* Context to describe whole processor state. */ +typedef struct +{ + gregset_t gpregs; + fpregset_t fpregs; +} mcontext_t; + +/* Userlevel context. */ +typedef struct ucontext +{ + unsigned long int uc_flags; + struct ucontext *uc_links; + __sigset_t uc_sigmask; + stack_t uc_stack; + mcontext_t uc_mcontext; + long int uc_filler[48]; +} ucontext_t; + +#endif /* sys/ucontext.h */ diff --git a/sysdeps/powerpc/fpu_control.h b/sysdeps/powerpc/fpu_control.h index c4c478672b..ed54ecba99 100644 --- a/sysdeps/powerpc/fpu_control.h +++ b/sysdeps/powerpc/fpu_control.h @@ -1,5 +1,5 @@ /* FPU control word definitions. PowerPC version. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -64,11 +64,4 @@ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); /* Default control word set at startup. */ extern fpu_control_t __fpu_control; -__BEGIN_DECLS - -/* Called at startup. It can be used to manipulate fpu control register. */ -extern void __setfpucw __P ((fpu_control_t)); - -__END_DECLS - #endif /* _FPU_CONTROL_H */ diff --git a/sysdeps/sparc/sparc32/fpu/fpu_control.h b/sysdeps/sparc/sparc32/fpu/fpu_control.h index c069318970..127f13b54c 100644 --- a/sysdeps/sparc/sparc32/fpu/fpu_control.h +++ b/sysdeps/sparc/sparc32/fpu/fpu_control.h @@ -1,5 +1,5 @@ /* FPU control word bits. SPARC version. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Miguel de Icaza @@ -57,11 +57,4 @@ typedef unsigned int fpu_control_t; /* Default control word set at startup. */ extern fpu_control_t __fpu_control; -__BEGIN_DECLS - -/* Called at startup. It can be used to manipulate fpu control register. */ -extern void __setfpucw __P ((fpu_control_t)); - -__END_DECLS - #endif /* fpu_control.h */ diff --git a/sysdeps/sparc/sparc64/fpu/fpu_control.h b/sysdeps/sparc/sparc64/fpu/fpu_control.h index bedc034eaa..82571fc7a7 100644 --- a/sysdeps/sparc/sparc64/fpu/fpu_control.h +++ b/sysdeps/sparc/sparc64/fpu/fpu_control.h @@ -1,5 +1,5 @@ /* FPU control word bits. SPARC v9 version. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Miguel de Icaza @@ -57,11 +57,4 @@ typedef unsigned long fpu_control_t; /* Default control word set at startup. */ extern fpu_control_t __fpu_control; -__BEGIN_DECLS - -/* Called at startup. It can be used to manipulate fpu control register. */ -extern void __setfpucw __P ((fpu_control_t)); - -__END_DECLS - #endif /* fpu_control.h */ |