summaryrefslogtreecommitdiffstats
path: root/lib/libkse/arch/ia64/include/pthread_md.h
Commit message (Collapse)AuthorAgeFilesLines
* For un-prototyped static inline functions declared in pthread_md.h onrwatson2007-12-011-1/+1
| | | | | | ia64, powerpc, and sparc64, use ANSI function headers and specifically indicate the lack of arguments with 'void'. Otherwise, warnings are generated at WARNS=3, leading to a compile failure with -Werror.
* Stylize:marcel2006-09-011-33/+49
| | | | | | | o avoid using a global register variable. o redefine struct ia64_tp as a union. We don't have to get to the fields themselves. We just need it to be of the right size with the right alignment.
* Implement TLS.marcel2006-09-011-10/+10
|
* Fix compile, s/tp_dtv/tp_tdv/g.davidxu2004-08-161-1/+1
|
* 1. Add macro DTV_OFFSET to calculate dtv offset in tcb.davidxu2004-08-161-0/+1
| | | | 2. Export symbols needed by debugger.
* Add TLS support for i386 and amd64.dfr2004-08-151-1/+1
|
* kse_switchin ABI was changed in kernel.davidxu2004-07-121-3/+2
|
* Simplify the contexts created by the kernel and remove the relatedmarcel2003-12-071-0/+6
| | | | | | | | | flags. We now create asynchronous contexts or syscall contexts only. Syscall contexts differ from the minimal ABI dictated contexts by having the scratch registers saved and restored because that's where we keep the syscall arguments and syscall return values. Since this change affects KSE, have it use kse_switchin(2) for the "new" syscall context.
* Make KSE_STACKSIZE machine dependent by moving it from thr_kern.c tomarcel2003-09-191-0/+2
| | | | | | pthread_md.h. This commit only moves the definition; it does not change it for any of the platforms. This more easily allows 64-bit architectures (in particular) to pick a slightly larger stack size.
* _ia64_break_setcontext() now takes a mcontext_t. While here, definemarcel2003-09-191-10/+3
| | | | | | | | | | | | THR_SETCONTEXT as PANIC(). The THR_SETCONTEXT macro is currently not used, which means that the definition we had could be wrong, overly pessimistic or unknowingly right. I don't like the odds... The new _ia64_break_setcontext() and corresponding kernel fixes make KSE mostly usable. There's still a case where we don't properly restore a context and end up with a NaT consumption fault (typically an indication for not handling NaT collection points correctly), but at least now mutex_d works...
* Grok async contexts. When a thread is interrupted and an upcallmarcel2003-08-071-9/+27
| | | | | | | | | | | | | | | | | | | | | happens, the context of the interrupted thread is exported to userland. Unlike most contexts, it will be an async context and we cannot easily use our existing functions to set such a context. To avoid a lot of complexity that may possibly interfere with the common case, we simply let the kernel deal with it. However, we don't use the EPC based syscall path to invoke setcontext(2). No, we use the break-based syscall path. That way the trapframe will be compatible with the context we're trying to restore and we save the kernel a lot of trouble. The kind of trouble we did not want to go though ourselves... However, we also need to set the threads mailbox and there's no syscall to help us out. To avoid creating a new syscall, we use the context itself to pass the information to the kernel so that the kernel can update the mailbox. This involves setting a flag (_MC_FLAGS_KSE_SET_MBOX) and setting ifa (the address) and isr (the value).
* Fix a typo. s/Line/Like/deischen2003-08-061-1/+1
|
* Avoid a level of indirection to get from the thread pointer to themarcel2003-08-061-37/+27
| | | | | | | | | | | TCB. We know that the thread pointer points to &tcb->tcb_tp, so all we have to do is subtract offsetof(struct tcb, tcb_tp) from the thread pointer to get to the TCB. Any reasonably smart compiler will translate accesses to fields in the TCB as negative offsets from TP. In _tcb_set() make sure the fake TCB gets a pointer to the current KCB, just like any other TCB. This fixes a NULL-pointer dereference in _thr_ref_add() when it tried to get the current KSE.
* Define the static TLS as an array of long double. This will guaranteemarcel2003-08-061-2/+6
| | | | | | | that the TLS is 16-byte aligned, as well as guarantee that the thread pointer is 16-byte aligned as it points to struct ia64_tp. Likewise, struct tcb and struct ksd are also guaranteed to be 16-byte aligned (if they weren't already).
* Rethink the MD interfaces for libpthread to account fordeischen2003-08-051-17/+181
| | | | | | | | | archs that can (or are required to) have per-thread registers. Tested on i386, amd64; marcel is testing on ia64 and will have some follow-up commits. Reviewed by: davidxu
* Define THR_GETCONTEXT and THR_SETCONTEXT in terms of the userlandmarcel2003-08-051-4/+5
| | | | | | | | | context functions. We don't need to enter the kernel anymore. The contexts are compatible (ie a context created by getcontext() can be restored by _ia64_restore_context()). While here, make the use of THR_ALIGNBYTES and THR_ALIGN a no-op. They are going to be removed anyway.
* Implement _thr_enter_uts() and _thr_switch() as inline functions tomarcel2003-06-261-0/+30
| | | | | | | | | | | minimize the amount and complexity of assembly code that needs to be written. This way the core functionality is spread over 3 elementary functions that don't have to do anything that can more easily and more safely be done in C. As such, assembly code will only have to know about the definition of mcontext_t. The runtime cost of not having these functions being inlined is less important than the cleanliness and maintainability of the code at this stage of the implementation.
* Untangle the inter-dependency of kse types and ksd types/functionsmarcel2003-06-231-0/+6
| | | | | | | | | | | | | | | | | | | by moving the definition of struct ksd to pthread_md.h and removing the inclusion of ksd.h from thr_private.h (which has the definition of struct kse and kse_critical_t). This allows ksd.h to have inline functions that use struct kse and kse_critical_t and generally yields a cleaner implementation at the cost of not having all ksd related types/definitions in one header. Implement the ksd functionality on ia64 by using inline functions and permanently remove ksd.c from the ia64 specific makefile. This change does not clean up the i386 specific version of ksd.h. NOTE: The ksd code on ia64 abuses the tp register in the same way as it is abused in libthr in that it is incompatible with the runtime specification. This will be address when support for TLS hits the tree.
* Define THR_{G|S}ETCONTEXT to expand to {g|s}etcontext(2).marcel2003-06-231-0/+38
Define THR_ALIGN to align at 16-byte boundaries.
OpenPOWER on IntegriCloud