History log of /src/sys/arch/amd64/include/mcontext.h |
Revision | | Date | Author | Comments |
1.24 |
| 30-Nov-2024 |
christos | Create a new header lwp_private.h to contain _lwp_getprivate_fast, _lwp_gettcb_fast, _lwp_settcb and remove them from mcontext.h, so that: 1. we don't need special hacks to hide them 2. we can include <lwp.h> where needed to get the necessary prototypes without redefining them locally.
|
1.23 |
| 04-Nov-2024 |
christos | Undo previous lwp.h change.
|
1.22 |
| 03-Nov-2024 |
christos | Split __lwp_getprivate_fast and __lwp_*tcb from mcontext.h into a separate lwp.h file.
|
1.21 |
| 18-May-2024 |
thorpej | branches: 1.21.2; 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.20 |
| 27-Dec-2019 |
kamil | Harmonize the namespace of fast TLS base pointer getter functions
Protect __lwp_getprivate_fast() with _RTLD_SOURCE, _LIBC_SOURCE and __LIBPTHREAD_SOURCE__.
Include in this namespace <sys/tcl.h> and use __BEGIN_DECLS/__END_DECLS for the sake of consistency.
|
1.19 |
| 15-Feb-2018 |
kamil | branches: 1.19.4; 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>
|
1.18 |
| 12-May-2014 |
uebayasi | branches: 1.18.20; Comments.
|
1.17 |
| 15-Feb-2014 |
dsl | branches: 1.17.2; Load and save the fpu registers (for copies to/from userspace) using helper functions in arch/x86/x86/fpu.c They (hopefully) ensure that we write to the entire buffer and don't load values that might cause faults in kernel. Also zero out the 'pad' field of the i386 mcontext fp area that I think once contained the registers of any Weitek fpu. Dunno why it wasn't pasrt of the union. Some of these copies could be removed if the code directly copied the save area to/from userspace addresses.
|
1.16 |
| 15-Dec-2012 |
dsl | branches: 1.16.2; Remove the incorrect comment about a (now deleted) pad field added to make __fpregs be 16-byte aligned within ucontext_t. I doubt that has been true for years! Since the __fpregs field isn't accessed by fxsave it doesn't matter. There is a lot of type fubar here, at leat mark the char[] __aligned(8).
|
1.15 |
| 21-May-2012 |
martin | branches: 1.15.2; Calling _lwp_create() with a bogus ucontext could trigger a kernel assertion failure (and thus a crash in DIAGNOSTIC kernels). Independently discovered by YAMAMOTO Takashi and Joel Sing.
To avoid this, introduce a cpu_mcontext_validate() function and move all sanity checks from cpu_setmcontext() there. Also untangle the netbsd32 compat mess slightly and add a cpu_mcontext32_validate() cousin there.
Add an exhaustive atf test case, based partly on code from Joel Sing.
Should finally fix the remaining open part of PR kern/43903.
|
1.14 |
| 25-Feb-2011 |
joerg | branches: 1.14.4; 1.14.8; 1.14.10; Be nicer to software that insists on -ansi and use __inline.
|
1.13 |
| 24-Feb-2011 |
joerg | Allow storing and receiving the LWP private pointer via ucontext_t on all platforms except VAX and IA64. Add fast access via register for AMD64, i386 and SH3 ports. Use this fast access in libpthread to replace the stack based pthread_self(). Implement skeleton support for Alpha, HPPA, PowerPC, SPARC and SPARC64, but leave it disabled.
Ports that support this feature provide __HAVE____LWP_GETPRIVATE_FAST in machine/types.h and a corresponding __lwp_getprivate_fast in machine/mcontext.h.
This material is based upon work partially supported by The NetBSD Foundation under a contract with Joerg Sonnenberger.
|
1.12 |
| 23-Feb-2011 |
joerg | Fix ucontext32_t on AMD64. Add optional compile time assertions for ucontext_t and ucontext32_t to ensure that they don't change. Provide the constants for AMD64, ARM, i386, and M68K.
|
1.11 |
| 26-Oct-2008 |
mrg | branches: 1.11.8; 1.11.16; 1.11.22; 1.11.24; put the contents of these header files around #ifdef __x86_64__, and #include the <i386/foo.h> in the #else clause, making these files largely bit-size independant.
|
1.10 |
| 28-Apr-2008 |
martin | branches: 1.10.6; Remove clause 3 and 4 from TNF licenses
|
1.9 |
| 04-Jan-2008 |
dsl | branches: 1.9.6; 1.9.8; 1.9.10; Change the way that the trap/intr/syscall frames and the __gregset_t[] indexes are defined so that only a single list of the registers is used. The code no longer relies on the two structures matching. There should be no binary change.
|
1.8 |
| 29-Mar-2006 |
cube | branches: 1.8.38; 1.8.44; 1.8.52; Add the netbsd32 MD bits for sparc64 and amd64 to support SA.
Many thanks to all who helped for that little project, notably Martin Husemann for teaching me a bit about the very special sparc64 world.
|
1.7 |
| 11-Dec-2005 |
christos | branches: 1.7.4; 1.7.6; 1.7.8; 1.7.10; 1.7.12; merge ktrace-lwp.
|
1.6 |
| 15-May-2005 |
fvdl | branches: 1.6.2; Optionally include saving and restoring the 64bit %gs and %fs base register values in the PCB. Do this in pmap_activate for now (XXX not a good place for it, but a convenient one).
|
1.5 |
| 21-Oct-2004 |
fvdl | Fix thread context switching to take the stack ABI into account. From Wolfgang Solfrank.
|
1.4 |
| 13-Oct-2003 |
fvdl | branches: 1.4.2; Define mcontext32_t (if COMPAT_NETBSD32).
|
1.3 |
| 08-Oct-2003 |
thorpej | Add some accessor macros for the ucontext: * _UC_MACHINE_PC() - access the program counter * _UC_MACHINE_INTRV() - access the integer return value register * _UC_MACHINE_SET_PC() - set the program counter (this requires special handling on some platforms).
|
1.2 |
| 06-Oct-2003 |
fvdl | SIGINFO support. Todo: 32bit compat support (COMPAT_NETBSD32 will not compile right now, as it won't on other platforms).
|
1.1 |
| 26-Apr-2003 |
fvdl | branches: 1.1.2; Rename the x86_64 port to amd64, as this is the actual name used for the processor family now. x86_64 is kept as the MACHINE_ARCH value, since it's already widely used (by e.g. the toolchain, etc), and by other operating systems.
|
1.1.2.5 |
| 10-Nov-2005 |
skrll | Sync with HEAD. Here we go again...
|
1.1.2.4 |
| 02-Nov-2004 |
skrll | Sync with HEAD.
|
1.1.2.3 |
| 21-Sep-2004 |
skrll | Fix the sync with head I botched.
|
1.1.2.2 |
| 18-Sep-2004 |
skrll | Sync with HEAD.
|
1.1.2.1 |
| 03-Aug-2004 |
skrll | Sync with HEAD
|
1.4.2.1 |
| 12-Nov-2004 |
jmc | Pullup rev 1.5 (requested by fvdl in ticket #956)
Fix thread context switching to take the stack ABI into account.
|
1.6.2.2 |
| 21-Jan-2008 |
yamt | sync with head
|
1.6.2.1 |
| 21-Jun-2006 |
yamt | sync with head.
|
1.7.12.1 |
| 31-Mar-2006 |
tron | Merge 2006-03-31 NetBSD-current into the "peter-altq" branch.
|
1.7.10.1 |
| 19-Apr-2006 |
elad | sync with head - hopefully this will work
|
1.7.8.1 |
| 01-Apr-2006 |
yamt | sync with head.
|
1.7.6.1 |
| 22-Apr-2006 |
simonb | Sync with head.
|
1.7.4.1 |
| 09-Sep-2006 |
rpaulo | sync with head
|
1.8.52.1 |
| 08-Jan-2008 |
bouyer | Sync with HEAD
|
1.8.44.1 |
| 18-Feb-2008 |
mjf | Sync with HEAD.
|
1.8.38.1 |
| 09-Jan-2008 |
matt | sync with HEAD
|
1.9.10.2 |
| 04-May-2009 |
yamt | sync with head.
|
1.9.10.1 |
| 16-May-2008 |
yamt | sync with head.
|
1.9.8.1 |
| 18-May-2008 |
yamt | sync with head.
|
1.9.6.2 |
| 17-Jan-2009 |
mjf | Sync with HEAD.
|
1.9.6.1 |
| 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.10.6.1 |
| 13-Dec-2008 |
haad | Update haad-dm branch to haad-dm-base2.
|
1.11.24.1 |
| 05-Mar-2011 |
bouyer | Sync with HEAD
|
1.11.22.1 |
| 06-Jun-2011 |
jruoho | Sync with HEAD.
|
1.11.16.1 |
| 05-Mar-2011 |
rmind | sync with head
|
1.11.8.1 |
| 28-Mar-2011 |
jym | Sync with HEAD. TODO before merge: - shortcut for suspend code in sysmon, when powerd(8) is not running. Borrow ``xs_watch'' thread context? - bug hunting in xbd + xennet resume. Rings are currently thrashed upon resume, so current implementation force flush them on suspend. It's not really needed.
|
1.14.10.1 |
| 21-May-2012 |
riz | Pull up following revision(s) (requested by martin in ticket #274): sys/arch/amd64/amd64/process_machdep.c: revision 1.20 sys/kern/sys_lwp.c: revision 1.54 sys/arch/sparc64/sparc64/machdep.c: revision 1.267 sys/arch/mips/mips/cpu_subr.c: revision 1.16 sys/arch/vax/vax/machdep.c: revision 1.188 sys/sys/lwp.h: revision 1.161 sys/arch/sparc64/sparc64/netbsd32_machdep.c: revision 1.98 sys/arch/alpha/alpha/machdep.c: revision 1.339 sys/compat/sys/ucontext.h: revision 1.6 sys/arch/hppa/hppa/hppa_machdep.c: revision 1.28 distrib/sets/lists/tests/mi: revision 1.469 sys/arch/powerpc/powerpc/sig_machdep.c: revision 1.42 tests/lib/libc/sys/t_lwp_create.c: revision 1.1 tests/lib/libc/sys/Makefile: revision 1.23 sys/arch/arm/arm/sig_machdep.c: revision 1.42 sys/arch/amd64/include/mcontext.h: revision 1.15 sys/arch/amd64/amd64/machdep.c: revision 1.183 sys/arch/sh3/sh3/sh3_machdep.c: revision 1.99 sys/arch/i386/i386/machdep.c: revision 1.727 sys/compat/netbsd32/netbsd32_lwp.c: revision 1.13 sys/arch/sparc/sparc/machdep.c: revision 1.319 sys/arch/amd64/amd64/netbsd32_machdep.c: revision 1.76 sys/arch/m68k/m68k/sig_machdep.c: revision 1.49 sys/sys/ucontext.h: revision 1.16 sys/arch/mips/mips/netbsd32_machdep.c: revision 1.9 lib/libc/sys/_lwp_create.2: revision 1.5 Calling _lwp_create() with a bogus ucontext could trigger a kernel assertion failure (and thus a crash in DIAGNOSTIC kernels). Independently discovered by YAMAMOTO Takashi and Joel Sing. To avoid this, introduce a cpu_mcontext_validate() function and move all sanity checks from cpu_setmcontext() there. Also untangle the netbsd32 compat mess slightly and add a cpu_mcontext32_validate() cousin there. Add an exhaustive atf test case, based partly on code from Joel Sing. Should finally fix the remaining open part of PR kern/43903.
|
1.14.8.1 |
| 02-Jun-2012 |
mrg | sync to latest -current.
|
1.14.4.3 |
| 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.14.4.2 |
| 23-Jan-2013 |
yamt | sync with head
|
1.14.4.1 |
| 23-May-2012 |
yamt | sync with head.
|
1.15.2.2 |
| 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.15.2.1 |
| 25-Feb-2013 |
tls | resync with head
|
1.16.2.1 |
| 18-May-2014 |
rmind | sync with head
|
1.17.2.1 |
| 10-Aug-2014 |
tls | Rebase.
|
1.18.20.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.18.20.2 |
| 26-Feb-2018 |
snj | revert ticket 552, which broke the build
|
1.18.20.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>
|
1.19.4.1 |
| 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.21.2.1 |
| 02-Aug-2025 |
perseant | Sync with HEAD
|