diff options
author | rsc <devnull@localhost> | 2006-02-10 05:32:42 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2006-02-10 05:32:42 +0000 |
commit | 0c7c441e9033e523b96b474cdbee6b63410805f9 (patch) | |
tree | aa112efa7cc9915944dcd9a03af83841b7ccbb48 /src/libthread/Linux-sparc64-context.S | |
parent | 3f8c36d6dc30334bbff4f90e182812e9bd94153c (diff) | |
download | plan9port-0c7c441e9033e523b96b474cdbee6b63410805f9.tar.gz plan9port-0c7c441e9033e523b96b474cdbee6b63410805f9.tar.bz2 plan9port-0c7c441e9033e523b96b474cdbee6b63410805f9.zip |
sparc64 attempt
Diffstat (limited to 'src/libthread/Linux-sparc64-context.S')
-rw-r--r-- | src/libthread/Linux-sparc64-context.S | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/libthread/Linux-sparc64-context.S b/src/libthread/Linux-sparc64-context.S new file mode 100644 index 00000000..f138e462 --- /dev/null +++ b/src/libthread/Linux-sparc64-context.S @@ -0,0 +1,133 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek <jakub@redhat.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* Constants shared between setcontext() and getcontext(). Don't + install this header file. */ + +#define UC_LINK 0 +#define __UC_SIGMASK 16 +#define UC_M_PC 40 +#define UC_M_NPC 48 +#define UC_SIGMASK 536 +#define SIGMASK_WORDS 16 + +/* Copyright (C) 1997, 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@tamu.edu). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <sysdep.h> +/*#include "ucontext_i.h" (up above) */ + +/* int getcontext(ucontext_t *); */ + +ENTRY(__getcontext) + + ldx [%o0 + UC_LINK], %o1 /* Preserve uc_link field, the + trap clears it. */ + ta 0x6e +1: + ldx [%o0 + UC_M_PC], %o2 + ldx [%o0 + UC_M_NPC], %o3 + ldx [%o0 + __UC_SIGMASK], %o4 + stx %o1, [%o0 + UC_LINK] + add %o2, 2f - 1b, %o2 + stx %o2, [%o0 + UC_M_PC] + add %o3, 2f - 1b, %o3 + stx %o3, [%o0 + UC_M_NPC] +#if SIGMASK_WORDS == 16 + stx %o4, [%o0 + UC_SIGMASK] + stx %g0, [%o0 + UC_SIGMASK + 8] + stx %g0, [%o0 + UC_SIGMASK + 16] + stx %g0, [%o0 + UC_SIGMASK + 24] + stx %g0, [%o0 + UC_SIGMASK + 32] + stx %g0, [%o0 + UC_SIGMASK + 40] + stx %g0, [%o0 + UC_SIGMASK + 48] + stx %g0, [%o0 + UC_SIGMASK + 56] + stx %g0, [%o0 + UC_SIGMASK + 64] + stx %g0, [%o0 + UC_SIGMASK + 72] + stx %g0, [%o0 + UC_SIGMASK + 80] + stx %g0, [%o0 + UC_SIGMASK + 88] + stx %g0, [%o0 + UC_SIGMASK + 96] + stx %g0, [%o0 + UC_SIGMASK + 104] + stx %g0, [%o0 + UC_SIGMASK + 112] + stx %g0, [%o0 + UC_SIGMASK + 120] +#else +# error Adjust __getcontext +#endif +2: + retl + clr %o0 + +END(__getcontext) + +weak_alias(__getcontext, getcontext) + +/* Copyright (C) 1997, 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@tamu.edu). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* +#include <sysdep.h> +#include "ucontext_i.h" +*/ + +/* int setcontext(ucontext_t *ctx); */ +.weak setcontext +ENTRY(setcontext) + + mov 1, %o1 + +/* int __setcontext(ucontext_t *ctx, int restoremask); */ +ENTRY(__setcontext) + + ldx [%o0 + UC_SIGMASK], %o2 + stx %o2, [%o0 + __UC_SIGMASK] + ta 0x6f + +END(__setcontext) |