History log of /src/sys/arch/sparc64/include/mcontext.h |
Revision | | Date | Author | Comments |
1.11 |
| 18-May-2024 |
thorpej | Clean up the <sys/ucontext.h> <-> <machine/mcontext.h> interface up a little: - Define _UC_MD_BIT* constants for the available machine-dependent bits, and use those constants to define the machine-dependent bits as well as the machine-independent bits that have machine-dependent values. - Explicitly generate an error if _UC_TLSBASE, _UC_SETSTACK, or _UC_CLRSTACK are not defined by <machine/mcontext.h>.
|
1.10 |
| 19-Feb-2018 |
mrg | fix _UC_MACHINE32_FP() -- use 32 bit pointer value so that [15] is the right offset. do this by using __greg32_t, which is only in the sparc64 version, and these are only useful there, so move them.
|
1.9 |
| 12-Sep-2012 |
manu | branches: 1.9.32; setcontext() used to be incompatible with -lpthread since it affected the TLS pointer, therefore wrecking the pthread environement.
Some ports had _UC_TLSBASE flag or equivalent (_UC_UNIQUE on alpha) that controlled whether setcontext() would change the TLS pointer. This change let libpthread override setcontext() with its own version that unsets _UC_TLSBASE, enabling safe usage of setcontext() with -lpthread.
We also have the following required changes here: - rename alpha's _UC_UNIQUE into _UC_TLSBASE - add _UC_TLSBASE definition in header file for all ports (powerpc, sh3, sparc and sparc64 lack the implementation for now) - introduce a libc stub that can be overriden for setcontext() - modify MD libcs swapcontext() implementations so that they use the setcontext() libc stub instead of doing a plain system call.
While we are there: - document various MD _UC_* flags in header file - add libc and libpthread tests for swapcontext() behavior (hopefully helpful to spot MD problems introduced with this change)
Future work: - Deciding whether kernel support or _UC_TLSBASE should be added for powerpc, sh3, sparc and sparc64 is left to portmasters sparc64
Approved by core@
|
1.8 |
| 16-Mar-2006 |
cube | branches: 1.8.102; s/uint32_t/unsigned int/ because we don't always have the former defined.
Reported by Juergen Hannken-Illjes.
XXX I prefer uint32_t, but there might be some namespace issues so for now it will do.
|
1.7 |
| 14-Mar-2006 |
cube | Under COMPAT_NETBSD32 emulation, pointers are not the same size as the native ones... netbsd32_pointer_t can't be used here though, so uint32_t is used instead, which is of course the same thing.
|
1.6 |
| 11-Dec-2005 |
christos | branches: 1.6.4; 1.6.6; 1.6.8; 1.6.10; merge ktrace-lwp.
|
1.5 |
| 10-Jul-2005 |
martin | Fix COMPAT_NETBSD32 ucontext padding and move the definition next to the (sparc) original.
|
1.4 |
| 26-Oct-2003 |
christos | branches: 1.4.14; 1.4.16; more siginfo glue
|
1.3 |
| 13-Oct-2003 |
christos | Add mcontext32_t and friends. This is WIP.
|
1.2 |
| 18-Jan-2003 |
thorpej | branches: 1.2.2; Merge the nathanw_sa branch.
|
1.1 |
| 17-Nov-2001 |
martin | branches: 1.1.2; file mcontext.h was initially added on branch nathanw_sa.
|
1.1.2.4 |
| 17-Dec-2002 |
thorpej | Just include <sparc/mcontext.h>
|
1.1.2.3 |
| 04-Jan-2002 |
eeh | Cleanup.
|
1.1.2.2 |
| 03-Jan-2002 |
petrov | define _UC_MACHINE_SP
|
1.1.2.1 |
| 17-Nov-2001 |
martin | Sparc64 *context routines, from Klaus Klein.
|
1.2.2.4 |
| 10-Nov-2005 |
skrll | Sync with HEAD. Here we go again...
|
1.2.2.3 |
| 21-Sep-2004 |
skrll | Fix the sync with head I botched.
|
1.2.2.2 |
| 18-Sep-2004 |
skrll | Sync with HEAD.
|
1.2.2.1 |
| 03-Aug-2004 |
skrll | Sync with HEAD
|
1.4.16.1 |
| 21-Jun-2006 |
yamt | sync with head.
|
1.4.14.1 |
| 11-Jul-2005 |
tron | Pull up revision 1.5 (requested by martin in ticket #570): Fix COMPAT_NETBSD32 ucontext padding and move the definition next to the (sparc) original.
|
1.6.10.1 |
| 19-Apr-2006 |
elad | sync with head - hopefully this will work
|
1.6.8.1 |
| 01-Apr-2006 |
yamt | sync with head.
|
1.6.6.1 |
| 22-Apr-2006 |
simonb | Sync with head.
|
1.6.4.1 |
| 09-Sep-2006 |
rpaulo | sync with head
|
1.8.102.1 |
| 30-Oct-2012 |
yamt | sync with head
|
1.9.32.3 |
| 21-Mar-2018 |
martin | Pull up the following, requested by kamil in ticket #552:
external/gpl3/gcc{.old}/dist/libsanitizer/asan/asan_linux.cc 1.4 sys/arch/aarch64/include/mcontext.h 1.2 sys/arch/alpha/include/mcontext.h 1.9 sys/arch/amd64/include/mcontext.h 1.19 sys/arch/arm/include/mcontext.h 1.19 sys/arch/hppa/include/mcontext.h 1.9 sys/arch/i386/include/mcontext.h 1.14 sys/arch/ia64/include/mcontext.h 1.6 sys/arch/m68k/include/mcontext.h 1.10 sys/arch/mips/include/mcontext.h 1.22 sys/arch/or1k/include/mcontext.h 1.2 sys/arch/powerpc/include/mcontext.h 1.18 sys/arch/riscv/include/mcontext.h 1.5 sys/arch/sh3/include/mcontext.h 1.11 sys/arch/sparc/include/mcontext.h 1.14-1.17 sys/arch/sparc64/include/mcontext.h 1.10 sys/arch/vax/include/mcontext.h 1.9 tests/lib/libc/sys/Makefile 1.50 tests/lib/libc/sys/t_ucontext.c 1.2-1.5 sys/arch/hppa/include/mcontext.h 1.10 sys/arch/ia64/include/mcontext.h 1.7
- Introduce _UC_MACHINE_FP(). _UC_MACHINE_FP() is a helper macro to extract from mcontext a frame pointer. - Add new tests in lib/libc/sys/t_ucontext: * ucontext_sp (testing _UC_MACHINE_SP) * ucontext_fp (testing _UC_MACHINE_FP) * ucontext_pc (testing _UC_MACHINE_PC) * ucontext_intrv (testing _UC_MACHINE_INTRV)
Add a dummy implementation of _UC_MACHINE_INTRV() for ia64.
Implement _UC_MACHINE_INTRV() for hppa.
Make the t_ucontext.c test more portable.
We now have _UC_MACHINE_FP.
|
1.9.32.2 |
| 26-Feb-2018 |
snj | revert ticket 552, which broke the build
|
1.9.32.1 |
| 25-Feb-2018 |
snj | Pull up following revision(s) (requested by kamil in ticket #552): sys/arch/aarch64/include/mcontext.h: 1.2 sys/arch/alpha/include/mcontext.h: 1.9 sys/arch/amd64/include/mcontext.h: 1.19 sys/arch/arm/include/mcontext.h: 1.19 sys/arch/hppa/include/mcontext.h: 1.9 sys/arch/i386/include/mcontext.h: 1.14 sys/arch/ia64/include/mcontext.h: 1.6 sys/arch/m68k/include/mcontext.h: 1.10 sys/arch/mips/include/mcontext.h: 1.22 sys/arch/or1k/include/mcontext.h: 1.2 sys/arch/powerpc/include/mcontext.h: 1.18 sys/arch/riscv/include/mcontext.h: 1.5 sys/arch/sh3/include/mcontext.h: 1.11 sys/arch/sparc/include/mcontext.h: 1.14-1.17 sys/arch/sparc64/include/mcontext.h: 1.10 sys/arch/vax/include/mcontext.h: 1.9 tests/lib/libc/sys/Makefile: 1.50 tests/lib/libc/sys/t_ucontext.c: 1.2 Introduce _UC_MACHINE_FP() as a macro _UC_MACHINE_FP() is a helper macro to extract from mcontext a frame pointer. Don't rely on this interface as a compiler might strip frame pointer or optimize it making this interface unreliable. For hppa assume a small frame context, for larger frames FP might be located in a different register (4 instead of 3). For ia64 there is no strict frame pointer, and registers might rotate. Reuse 79 following: ./gcc/config/ia64/ia64.h:#define HARD_FRAME_POINTER_REGNUM LOC_REG (79) Once ia64 will mature, this should be revisited. A macro can encapsulate a real function for extracting Frame Pointer on more complex CPUs / ABIs. For the remaining CPUs, reuse standard register as defined in appropriate ABI. The direct users of this macro are LLVM and GCC with Sanitizers. Proposed on tech-userlevel@. Sponsored by <The NetBSD Foundation> -- Improve _UC_MACHINE_FP() for SPARC/SPARC64 Introduce a static inline function _uc_machine_fp() that contains improved caluclation of a frame pointer. Algorithm: uptr *stk_ptr; # if defined (__arch64__) stk_ptr = (uptr *) (*sp + 2047); # else stk_ptr = (uptr *) *sp; # endif *bp = stk_ptr[15]; Noted by <mrg> -- Make _UC_MACHINE_FP() compile again and fix it so that it does not add the offset twice. -- fix _UC_MACHINE32_FP() -- use 32 bit pointer value so that [15] is the right offset. do this by using __greg32_t, which is only in the sparc64 version, and these are only useful there, so move them. -- Add new tests in lib/libc/sys/t_ucontext New tests: - ucontext_sp - ucontext_fp - ucontext_pc - ucontext_intrv They test respectively: - _UC_MACHINE_SP - _UC_MACHINE_FP - _UC_MACHINE_PC - _UC_MACHINE_INTRV These tests attempt to access and print the values from ucontext, without interpreting the values. This is a follow up of the _UC_MACHINE_FP() introduction. These tests use PRIxREGISTER, and require to be built with -D_KERNTYPES. Sponsored by <The NetBSD Foundation>
|