summaryrefslogtreecommitdiffstats
path: root/lib/libkvm
Commit message (Collapse)AuthorAgeFilesLines
* Revamp of the syscall path, exception and context handling. Themarcel2003-05-161-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | prime objectives are: o Implement a syscall path based on the epc inststruction (see sys/ia64/ia64/syscall.s). o Revisit the places were we need to save and restore registers and define those contexts in terms of the register sets (see sys/ia64/include/_regset.h). Secundairy objectives: o Remove the requirement to use contigmalloc for kernel stacks. o Better handling of the high FP registers for SMP systems. o Switch to the new cpu_switch() and cpu_throw() semantics. o Add a good unwinder to reconstruct contexts for the rare cases we need to (see sys/contrib/ia64/libuwx) Many files are affected by this change. Functionally it boils down to: o The EPC syscall doesn't preserve registers it does not need to preserve and places the arguments differently on the stack. This affects libc and truss. o The address of the kernel page directory (kptdir) had to be unstaticized for use by the nested TLB fault handler. The name has been changed to ia64_kptdir to avoid conflicts. The renaming affects libkvm. o The trapframe only contains the special registers and the scratch registers. For syscalls using the EPC syscall path no scratch registers are saved. This affects all places where the trapframe is accessed. Most notably the unaligned access handler, the signal delivery code and the debugger. o Context switching only partly saves the special registers and the preserved registers. This affects cpu_switch() and triggered the move to the new semantics, which additionally affects cpu_throw(). o The high FP registers are either in the PCB or on some CPU. context switching for them is done lazily. This affects trap(). o The mcontext has room for all registers, but not all of them have to be defined in all cases. This mostly affects signal delivery code now. The *context syscalls are as of yet still unimplemented. Many details went into the removal of the requirement to use contigmalloc for kernel stacks. The details are mostly CPU specific and limited to exception_save() and exception_restore(). The few places where we create, destroy or switch stacks were mostly simplified by not having to construct physical addresses and additionally saving the virtual addresses for later use. Besides more efficient context saving and restoring, which of course yields a noticable speedup, this also fixes the dreaded SMP bootup problem as a side-effect. The details of which are still not fully understood. This change includes all the necessary backward compatibility code to have it handle older userland binaries that use the break instruction for syscalls. Support for break-based syscalls has been pessimized in favor of a clean implementation. Due to the overall better performance of the kernel, this will still be notived as an improvement if it's noticed at all. Approved by: re@ (jhb)
* s/procsig/sigacts/ to catch up to procsig and sigacts changes in the kernel.jhb2003-05-141-10/+6
| | | | Approved by: re (scottl)
* Bandaid for world. jhb gets the pointy hat here and he needs to look atpeter2003-05-141-0/+4
| | | | | | this. Approved by: re (scottl)
* AMD64 support; repocopied from i386peter2003-04-301-3/+3
|
* Add sys/user.h to the list of includes. Without it you lack a definition oftrhodes2003-04-261-0/+1
| | | | | | 'struct kinfo_proc' for calls to kvm_getargv() and kvm_getenvv(). PR: 51322
* Catch up with the kernel. Move the current cpu indicator to the thread.julian2003-04-101-3/+1
|
* - Spell SIGSETOR correctly.jeff2003-04-011-1/+1
|
* - Catch up with kernel signal changes.jeff2003-03-311-1/+2
|
* The .Fn functioncharnier2003-03-245-13/+23
| | | | The .Fa argument
* Catch up to p_tracep -> p_tracevp rename to unbreak world.jhb2003-03-131-1/+1
| | | | Pointy hat to: jhb
* Change the process flags P_KSES to be P_THREADED.julian2003-02-271-2/+2
| | | | This is just a cosmetic change but I've been meaning to do it for about a year.
* Remove all use of the LOG2() macro/inline, undoing some non-optimal cruftdillon2003-01-111-2/+2
| | | | | | | that crept in recently. GCC will optimize the divides and multiplies for us. Submitted by: David Schultz <dschultz@uclink.Berkeley.EDU> MFC after: 1 day
* Make struct swblock kernel only, to make vm/swap_pager.h userland includable.phk2003-01-031-1/+1
| | | | | Move struct swdevt from sys/conf.h to the more appropriate vm/swap_pager.h. Adjust #include use in libkvm and pstat(8) to match.
* Teach libkvm to deal with direct mapped addresses.jake2002-12-271-9/+14
|
* mdoc(7) police: Deal with self-xrefs.ru2002-12-241-1/+1
|
* Consistently mark std(in|out|err) with .Dv, because that's how theyru2002-12-042-2/+6
| | | | | | | are marked up in stdio(3), and because they are defined expressions of type "FILE *". Approved by: re
* Implement working on ELF corefiles. Use kvm_read() when readingmarcel2002-10-211-122/+135
| | | | | | | memory while mapping a virtual address to a physical address. This allows us to work with virtual addresses for page tables, provided it doesn't cause infinite recursion. Currently all page tables are direct mapped.
* Adapt to handle the new sparc64 core dump format correctly.tmm2002-10-201-32/+95
| | | | Reviewed by: jake
* Catch up to SMTX -> SLOCK changes.jhb2002-10-021-7/+7
|
* Ressurect libkvm use of the bitmasked signal list in the kernel, now thatjmallett2002-10-011-7/+1
| | | | reliable signal queues are gone.
* Fix typo, should zero the kinfo_proc's siglist, not the real one's - the realjmallett2002-10-011-1/+1
| | | | | | | one doesn't have one. Submitted by: jake, scottl Big pointed hat that lands one in the badcommitters box to: jmallett
* The list of queued signals is not, can not, and will not be exported to thejmallett2002-09-301-1/+7
| | | | | | userland. If someone wants to implement a backup p_siglist in the kernel for compatability and to export one could. For now, just tell KVM to hand an empty signal set off to the userland.
* Fixed messes involving $FreeBSD$ starting with one left in the copyrightbde2002-09-161-21/+5
| | | | | | | | after adding __FBSDID(). Garbage-collected kvm_readswap(). This was once used by kvm_uread(), but kvm_uread() now just reads /proc/<pid>/mem and procfs hopefully handles swapped out pages.
* Allocate KSEs and KSEGRPs separatly and remove them from the proc structure.julian2002-09-151-12/+45
| | | | | | | | | next step is to allow > 1 to be allocated per process. This would give multi-processor threads. (when the rest of the infrastructure is in place) While doing this I noticed libkvm and sys/kern/kern_proc.c:fill_kinfo_proc are diverging more than they should.. corrective action needed soon.
* In kvm_openfiles/kvm_open, mark the file descriptors as close-on-exec.nectar2002-09-111-0/+12
| | | | | Applications can not do this themselves, as the descriptors are hidden behind the opaque `kvm_t' type.
* Completely redo thread states.julian2002-09-111-21/+24
| | | | Reviewed by: davidxu@freebsd.org
* Hopefully unbreak world. ke_slptime is gone. It should really have beenpeter2002-08-301-1/+1
| | | | looking at p_ksegrp.kg_slptime anyway.
* Allow one to grab the definition of struct ucred by defining _WANT_UCREDalfred2002-08-281-2/+1
| | | | | | | instead of forcing _KERNEL. Move the include of sys/_label.h in ucred.h under the _KERNEL || _WANT_UCRED case.
* &x is not a format stringkris2002-08-241-1/+1
|
* o Merge <machine/ansi.h> and <machine/types.h> into a new headermike2002-08-211-7/+7
| | | | | | | | | | | | | | | | | | | | | called <machine/_types.h>. o <machine/ansi.h> will continue to live so it can define MD clock macros, which are only MD because of gratuitous differences between architectures. o Change all headers to make use of this. This mainly involves changing: #ifdef _BSD_FOO_T_ typedef _BSD_FOO_T_ foo_t; #undef _BSD_FOO_T_ #endif to: #ifndef _FOO_T_DECLARED typedef __foo_t foo_t; #define _FOO_T_DECLARED #endif Concept by: bde Reviewed by: jake, obrien
* Hide 'struct ucred' behind '#ifdef _KERNEL', this should stop userlandalfred2002-08-161-0/+3
| | | | | | | from attempting to use it for good. There is a catch, kvm_proc.c needs to '#define _KERNEL' to get at the ucred. Requested by: rwatson
* Auto size available kernel virtual address space based on phsyical memoryjake2002-08-101-4/+11
| | | | | | | size. This avoids blowing out kva in kmeminit() on large memory machines (4 gigs or more). Reviewed by: tmm
* Don't even read in the thread if it is a zombie process.julian2002-06-301-7/+10
|
* grow a brain and do this right.julian2002-06-301-5/+7
|
* Don't follow non existant thread pointers (e.g. for zombies)julian2002-06-301-33/+35
|
* Part 1 of KSE-IIIjulian2002-06-291-2/+19
| | | | | | | | | | | | | The ability to schedule multiple threads per process (one one cpu) by making ALL system calls optionally asynchronous. to come: ia64 and power-pc patches, patches for gdb, test program (in tools) Reviewed by: Almost everyone who counts (at various times, peter, jhb, matt, alfred, mini, bernd, and a cast of thousands) NOTE: this is still Beta code, and contains lots of debugging stuff. expect slight instability in signals..
* Assume __STDC__, remove non-__STDC__ code.alfred2002-05-281-26/+0
| | | | Submitted by: keramida
* Catch up to tte.h changes.jake2002-05-211-2/+2
|
* Stub out _kvm_mdopen, we don't the same constants as NetBSDobrien2002-05-151-0/+2
|
* Add a PowerPC machdep for kvm.obrien2002-05-151-0/+101
| | | | Obtained from: NetBSD (rev 1.4, pre-UVM)
* Fix (for the second time) kvm_getprocs() for the case where nodd2002-04-071-0/+26
| | | | | | | | | | | | processes match the given criteria. Since revision 1.60 of malloc.c, malloc() and friends return an invalid pointer when given a size of 0. kvm_getprocs() uses sysctl() with a NULL oldp argument to get an initial size, but does not check whether it's 0 before passing it to realloc() (via _kvm_realloc()). Before the aforementioned malloc() change, this resulted in a minimal allocation made and a valid poitner returned, but now results in an invalid, but non-NULL, pointer being returned. When this is passed to sysctl(), the latter returns EFAULT (as it should).
* Remove multi-line __P() usage.obrien2002-03-221-3/+4
|
* Remove __P() usage.obrien2002-03-213-22/+22
|
* Remove 'register' keyword.obrien2002-03-214-46/+46
|
* Also blindly attempt to fix broken world with respect to proc.p_runtimegreen2002-02-221-1/+3
| | | | changes.
* I THINK this fixes 'make world'julian2002-02-131-1/+4
| | | | | | I'll know as soon as I re-import it and compile it.. :-) There is no longer a 'pri' strict in the proc struct. the fields are scattered between the ksegrp and thread in question.
* pre-emptively fix a KSE/M3 problem.julian2002-02-071-7/+14
| | | | | | | Make a slight change so that libkvm reaches the main thread via the linked list, rather than assuming it is in the proc structure. Both conditions are true in -current but only the first will be true in the KSE M3 world.
* Finish cleanup in kvm.c revisions 1.10 and 1.11 -- mark sf (swapfile)ru2002-01-222-6/+4
| | | | | | | | | argument to kvm_open() and kvm_openfiles() as unused. BSD didn't read swap since kvm.c CSRG revision 5.21 (u-area is pageable under new VM. no need to read from swap.) The old !NEWVM code was removed in CSRG revision 5.23 (~ten years ago).
* Adapt to new kernel tsb structure.jake2001-12-291-16/+9
|
* s/processes/files/ inherited from kvm_getprocs(3).ru2001-11-241-1/+1
| | | | | PR: docs/32252 Submitted by: tobez
OpenPOWER on IntegriCloud