svn commit: r231981 - in stable/9: lib/libc/amd64/gen
lib/libc/arm/gen lib/libc/gen lib/libc/i386/gen
lib/libc/ia64/gen lib/libc/mips/gen lib/libc/powerpc/gen
lib/libc/powerpc64/gen lib/libc/sparc6...
Konstantin Belousov
kib at FreeBSD.org
Tue Feb 21 21:19:00 UTC 2012
Author: kib
Date: Tue Feb 21 21:18:59 2012
New Revision: 231981
URL: http://svn.freebsd.org/changeset/base/231981
Log:
MFC r230429:
Add API for obtaining extended machine context states that cannot be
fit into existing mcontext_t.
On i386 and amd64 do return the extended FPU states using
getcontextx(3). For other architectures, getcontextx(3) returns the
same information as getcontext(2).
MFC r230864:
Make the sys/ucontext.h self-contained by changing the return type
of __getcontextx_size(3) from size_t to int.
Added:
stable/9/lib/libc/amd64/gen/getcontextx.c
- copied, changed from r230429, head/lib/libc/amd64/gen/getcontextx.c
stable/9/lib/libc/arm/gen/getcontextx.c
- copied, changed from r230429, head/lib/libc/arm/gen/getcontextx.c
stable/9/lib/libc/i386/gen/getcontextx.c
- copied, changed from r230429, head/lib/libc/i386/gen/getcontextx.c
stable/9/lib/libc/ia64/gen/getcontextx.c
- copied, changed from r230429, head/lib/libc/ia64/gen/getcontextx.c
stable/9/lib/libc/mips/gen/getcontextx.c
- copied, changed from r230429, head/lib/libc/mips/gen/getcontextx.c
stable/9/lib/libc/powerpc/gen/getcontextx.c
- copied, changed from r230429, head/lib/libc/powerpc/gen/getcontextx.c
stable/9/lib/libc/powerpc64/gen/getcontextx.c
- copied, changed from r230429, head/lib/libc/powerpc64/gen/getcontextx.c
stable/9/lib/libc/sparc64/gen/getcontextx.c
- copied, changed from r230429, head/lib/libc/sparc64/gen/getcontextx.c
Modified:
stable/9/lib/libc/amd64/gen/Makefile.inc
stable/9/lib/libc/arm/gen/Makefile.inc
stable/9/lib/libc/gen/Symbol.map
stable/9/lib/libc/gen/getcontext.3
stable/9/lib/libc/gen/ucontext.3
stable/9/lib/libc/i386/gen/Makefile.inc
stable/9/lib/libc/ia64/gen/Makefile.inc
stable/9/lib/libc/mips/gen/Makefile.inc
stable/9/lib/libc/powerpc/gen/Makefile.inc
stable/9/lib/libc/powerpc64/gen/Makefile.inc
stable/9/lib/libc/sparc64/gen/Makefile.inc
stable/9/sys/sys/ucontext.h
Directory Properties:
stable/9/lib/libc/ (props changed)
stable/9/sys/ (props changed)
Modified: stable/9/lib/libc/amd64/gen/Makefile.inc
==============================================================================
--- stable/9/lib/libc/amd64/gen/Makefile.inc Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/amd64/gen/Makefile.inc Tue Feb 21 21:18:59 2012 (r231981)
@@ -2,7 +2,7 @@
# $FreeBSD$
SRCS+= _setjmp.S _set_tp.c rfork_thread.S setjmp.S sigsetjmp.S \
- fabs.S modf.S \
+ fabs.S getcontextx.c modf.S \
infinity.c ldexp.c makecontext.c signalcontext.c \
flt_rounds.c fpgetmask.c fpsetmask.c fpgetprec.c fpsetprec.c \
fpgetround.c fpsetround.c fpgetsticky.c
Copied and modified: stable/9/lib/libc/amd64/gen/getcontextx.c (from r230429, head/lib/libc/amd64/gen/getcontextx.c)
==============================================================================
--- head/lib/libc/amd64/gen/getcontextx.c Sat Jan 21 18:00:28 2012 (r230429, copy source)
+++ stable/9/lib/libc/amd64/gen/getcontextx.c Tue Feb 21 21:18:59 2012 (r231981)
@@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$");
static int xstate_sz = -1;
-size_t
+int
__getcontextx_size(void)
{
u_int p[4];
Modified: stable/9/lib/libc/arm/gen/Makefile.inc
==============================================================================
--- stable/9/lib/libc/arm/gen/Makefile.inc Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/arm/gen/Makefile.inc Tue Feb 21 21:18:59 2012 (r231981)
@@ -2,5 +2,5 @@
# $FreeBSD$
SRCS+= _ctx_start.S _setjmp.S _set_tp.c alloca.S fabs.c \
- infinity.c ldexp.c makecontext.c modf.c \
+ getcontextx.c infinity.c ldexp.c makecontext.c modf.c \
setjmp.S signalcontext.c sigsetjmp.S divsi3.S
Copied and modified: stable/9/lib/libc/arm/gen/getcontextx.c (from r230429, head/lib/libc/arm/gen/getcontextx.c)
==============================================================================
--- head/lib/libc/arm/gen/getcontextx.c Sat Jan 21 18:00:28 2012 (r230429, copy source)
+++ stable/9/lib/libc/arm/gen/getcontextx.c Tue Feb 21 21:18:59 2012 (r231981)
@@ -32,7 +32,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
-size_t
+int
__getcontextx_size(void)
{
Modified: stable/9/lib/libc/gen/Symbol.map
==============================================================================
--- stable/9/lib/libc/gen/Symbol.map Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/gen/Symbol.map Tue Feb 21 21:18:59 2012 (r231981)
@@ -383,6 +383,7 @@ FBSD_1.2 {
FBSD_1.3 {
fdlopen;
__FreeBSD_libc_enter_restricted_mode;
+ getcontextx;
};
FBSDprivate_1.0 {
@@ -506,4 +507,6 @@ FBSDprivate_1.0 {
__elf_aux_vector;
__pthread_map_stacks_exec;
+ __fillcontextx;
+ __getcontextx_size;
};
Modified: stable/9/lib/libc/gen/getcontext.3
==============================================================================
--- stable/9/lib/libc/gen/getcontext.3 Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/gen/getcontext.3 Tue Feb 21 21:18:59 2012 (r231981)
@@ -35,11 +35,11 @@
.\"
.\" $FreeBSD$
.\"
-.Dd September 10, 2002
+.Dd December 26, 2011
.Dt GETCONTEXT 3
.Os
.Sh NAME
-.Nm getcontext , setcontext
+.Nm getcontext , getcontextx , setcontext
.Nd get and set user thread context
.Sh LIBRARY
.Lb libc
@@ -59,6 +59,20 @@ This saved context may then later be res
.Fn setcontext .
.Pp
The
+.Fn getcontextx
+function saves the current execution context in the newly allocated structure
+.Vt ucontext_t ,
+which is returned on success.
+If architecture defines additional CPU states that can be stored in extended
+blocks referenced from the
+.Vt ucontext_t ,
+the memory for them may be allocated and their context also stored.
+Memory returned by
+.Fn getcontextx
+function shall be freed using
+.Fn free 3 .
+.Pp
+The
.Fn setcontext
function
makes a previously saved thread context the current thread context, i.e.,
@@ -109,11 +123,24 @@ If successful,
returns zero and
.Fn setcontext
does not return; otherwise \-1 is returned.
+The
+.Fn getcontextx
+returns pointer to the allocated and initialized context on success, and
+.Va NULL
+on failure.
.Sh ERRORS
No errors are defined for
.Fn getcontext
or
.Fn setcontext .
+The
+.Fn getcontextx
+may return the following errors in
+.Va errno :
+.Bl -tag -width Er
+.It Bq Er ENOMEM
+No memory was available to allocate for the context or some extended state.
+.El
.Sh SEE ALSO
.Xr sigaction 2 ,
.Xr sigaltstack 2 ,
Modified: stable/9/lib/libc/gen/ucontext.3
==============================================================================
--- stable/9/lib/libc/gen/ucontext.3 Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/gen/ucontext.3 Tue Feb 21 21:18:59 2012 (r231981)
@@ -92,6 +92,9 @@ structures:
.Ft int
.Fn getcontext "ucontext_t *" ;
.It
+.Ft "ucontext_t *"
+.Fn getcontextx "void" ;
+.It
.Ft int
.Fn setcontext "const ucontext_t *" ;
.It
@@ -104,4 +107,5 @@ structures:
.Sh SEE ALSO
.Xr sigaltstack 2 ,
.Xr getcontext 3 ,
+.Xr getcontextx 3 ,
.Xr makecontext 3
Modified: stable/9/lib/libc/i386/gen/Makefile.inc
==============================================================================
--- stable/9/lib/libc/i386/gen/Makefile.inc Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/i386/gen/Makefile.inc Tue Feb 21 21:18:59 2012 (r231981)
@@ -2,5 +2,5 @@
# $FreeBSD$
SRCS+= _ctx_start.S _setjmp.S _set_tp.c fabs.S \
- flt_rounds.c infinity.c ldexp.c makecontext.c modf.S \
+ flt_rounds.c getcontextx.c infinity.c ldexp.c makecontext.c modf.S \
rfork_thread.S setjmp.S signalcontext.c sigsetjmp.S
Copied and modified: stable/9/lib/libc/i386/gen/getcontextx.c (from r230429, head/lib/libc/i386/gen/getcontextx.c)
==============================================================================
--- head/lib/libc/i386/gen/getcontextx.c Sat Jan 21 18:00:28 2012 (r230429, copy source)
+++ stable/9/lib/libc/i386/gen/getcontextx.c Tue Feb 21 21:18:59 2012 (r231981)
@@ -38,7 +38,7 @@ __FBSDID("$FreeBSD$");
static int xstate_sz = -1;
-size_t
+int
__getcontextx_size(void)
{
u_int p[4];
Modified: stable/9/lib/libc/ia64/gen/Makefile.inc
==============================================================================
--- stable/9/lib/libc/ia64/gen/Makefile.inc Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/ia64/gen/Makefile.inc Tue Feb 21 21:18:59 2012 (r231981)
@@ -3,7 +3,7 @@
SRCS+= __divdf3.S __divdi3.S __divsf3.S __divsi3.S __moddi3.S __modsi3.S \
__udivdi3.S __udivsi3.S __umoddi3.S __umodsi3.S _mcount.S _set_tp.c \
_setjmp.S fabs.S flt_rounds.c fpgetmask.c fpgetround.c fpsetmask.c \
- fpsetround.c infinity.c ldexp.c makecontext.c modf.c setjmp.S \
+ fpsetround.c getcontextx.c infinity.c ldexp.c makecontext.c modf.c setjmp.S \
signalcontext.c sigsetjmp.S
# The following may go away if function _Unwind_FindTableEntry()
Copied and modified: stable/9/lib/libc/ia64/gen/getcontextx.c (from r230429, head/lib/libc/ia64/gen/getcontextx.c)
==============================================================================
--- head/lib/libc/ia64/gen/getcontextx.c Sat Jan 21 18:00:28 2012 (r230429, copy source)
+++ stable/9/lib/libc/ia64/gen/getcontextx.c Tue Feb 21 21:18:59 2012 (r231981)
@@ -32,7 +32,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
-size_t
+int
__getcontextx_size(void)
{
Modified: stable/9/lib/libc/mips/gen/Makefile.inc
==============================================================================
--- stable/9/lib/libc/mips/gen/Makefile.inc Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/mips/gen/Makefile.inc Tue Feb 21 21:18:59 2012 (r231981)
@@ -6,4 +6,5 @@ SRCS+= infinity.c fabs.c ldexp.c modf.c
# SRCS+= flt_rounds.c fpgetmask.c fpgetround.c fpgetsticky.c fpsetmask.c \
# fpsetround.c fpsetsticky.c
-SRCS+= _ctx_start.S _set_tp.c _setjmp.S makecontext.c setjmp.S signalcontext.c sigsetjmp.S
+SRCS+= _ctx_start.S _set_tp.c _setjmp.S getcontextx.c makecontext.c \
+ setjmp.S signalcontext.c sigsetjmp.S
Copied and modified: stable/9/lib/libc/mips/gen/getcontextx.c (from r230429, head/lib/libc/mips/gen/getcontextx.c)
==============================================================================
--- head/lib/libc/mips/gen/getcontextx.c Sat Jan 21 18:00:28 2012 (r230429, copy source)
+++ stable/9/lib/libc/mips/gen/getcontextx.c Tue Feb 21 21:18:59 2012 (r231981)
@@ -32,7 +32,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
-size_t
+int
__getcontextx_size(void)
{
Modified: stable/9/lib/libc/powerpc/gen/Makefile.inc
==============================================================================
--- stable/9/lib/libc/powerpc/gen/Makefile.inc Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/powerpc/gen/Makefile.inc Tue Feb 21 21:18:59 2012 (r231981)
@@ -1,7 +1,7 @@
# $FreeBSD$
SRCS += _ctx_start.S fabs.S flt_rounds.c fpgetmask.c fpgetround.c \
- fpgetsticky.c fpsetmask.c fpsetround.c \
+ fpgetsticky.c fpsetmask.c fpsetround.c getcontextx.c \
infinity.c ldexp.c makecontext.c modf.c _setjmp.S \
setjmp.S sigsetjmp.S signalcontext.c syncicache.c \
_set_tp.c
Copied and modified: stable/9/lib/libc/powerpc/gen/getcontextx.c (from r230429, head/lib/libc/powerpc/gen/getcontextx.c)
==============================================================================
--- head/lib/libc/powerpc/gen/getcontextx.c Sat Jan 21 18:00:28 2012 (r230429, copy source)
+++ stable/9/lib/libc/powerpc/gen/getcontextx.c Tue Feb 21 21:18:59 2012 (r231981)
@@ -32,7 +32,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
-size_t
+int
__getcontextx_size(void)
{
Modified: stable/9/lib/libc/powerpc64/gen/Makefile.inc
==============================================================================
--- stable/9/lib/libc/powerpc64/gen/Makefile.inc Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/powerpc64/gen/Makefile.inc Tue Feb 21 21:18:59 2012 (r231981)
@@ -1,7 +1,7 @@
# $FreeBSD$
SRCS += _ctx_start.S fabs.S flt_rounds.c fpgetmask.c fpgetround.c \
- fpgetsticky.c fpsetmask.c fpsetround.c \
+ fpgetsticky.c fpsetmask.c fpsetround.c getcontextx.c \
infinity.c ldexp.c makecontext.c modf.c _setjmp.S \
setjmp.S sigsetjmp.S signalcontext.c syncicache.c \
_set_tp.c
Copied and modified: stable/9/lib/libc/powerpc64/gen/getcontextx.c (from r230429, head/lib/libc/powerpc64/gen/getcontextx.c)
==============================================================================
--- head/lib/libc/powerpc64/gen/getcontextx.c Sat Jan 21 18:00:28 2012 (r230429, copy source)
+++ stable/9/lib/libc/powerpc64/gen/getcontextx.c Tue Feb 21 21:18:59 2012 (r231981)
@@ -32,7 +32,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
-size_t
+int
__getcontextx_size(void)
{
Modified: stable/9/lib/libc/sparc64/gen/Makefile.inc
==============================================================================
--- stable/9/lib/libc/sparc64/gen/Makefile.inc Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/lib/libc/sparc64/gen/Makefile.inc Tue Feb 21 21:18:59 2012 (r231981)
@@ -2,5 +2,5 @@
SRCS+= _ctx_start.S _setjmp.S fabs.S fixunsdfsi.S flt_rounds.c fpgetmask.c \
fpgetround.c fpgetsticky.c fpsetmask.c fpsetround.c \
- infinity.c ldexp.c makecontext.c modf.S \
+ getcontextx.c infinity.c ldexp.c makecontext.c modf.S \
signalcontext.c setjmp.S sigsetjmp.S _set_tp.c
Copied and modified: stable/9/lib/libc/sparc64/gen/getcontextx.c (from r230429, head/lib/libc/sparc64/gen/getcontextx.c)
==============================================================================
--- head/lib/libc/sparc64/gen/getcontextx.c Sat Jan 21 18:00:28 2012 (r230429, copy source)
+++ stable/9/lib/libc/sparc64/gen/getcontextx.c Tue Feb 21 21:18:59 2012 (r231981)
@@ -32,7 +32,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
-size_t
+int
__getcontextx_size(void)
{
Modified: stable/9/sys/sys/ucontext.h
==============================================================================
--- stable/9/sys/sys/ucontext.h Tue Feb 21 20:59:49 2012 (r231980)
+++ stable/9/sys/sys/ucontext.h Tue Feb 21 21:18:59 2012 (r231981)
@@ -72,11 +72,17 @@ struct ucontext4 {
__BEGIN_DECLS
int getcontext(ucontext_t *);
+ucontext_t *getcontextx(void);
int setcontext(const ucontext_t *);
void makecontext(ucontext_t *, void (*)(void), int, ...);
int signalcontext(ucontext_t *, int, __sighandler_t *);
int swapcontext(ucontext_t *, const ucontext_t *);
+#if __BSD_VISIBLE
+int __getcontextx_size(void);
+int __fillcontextx(char *ctx);
+#endif
+
__END_DECLS
#else /* _KERNEL */
More information about the svn-src-stable
mailing list