diff options
author | Joel Sherrill <joel.sherrill@oarcorp.com> | 2012-10-22 10:50:36 -0500 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@oarcorp.com> | 2012-10-23 11:13:57 -0500 |
commit | 44ee0428229e1f89217545af2c468a25e3ea7ab2 (patch) | |
tree | eec5ca0ad8c36ee25430d47686d94dba5db06212 | |
parent | netshell01: Add netstat command (diff) | |
download | rtems-libbsd-44ee0428229e1f89217545af2c468a25e3ea7ab2.tar.bz2 |
Add kvm header file - stubbed for RTEMS
This is only used to read dumps with a symbol table. We can use
sysctlbyname().
-rw-r--r-- | freebsd-userspace/Makefile | 7 | ||||
-rw-r--r-- | freebsd-userspace/commands/usr.bin/netstat/netstat_route.c (renamed from freebsd-userspace/commands/usr.bin/netstat/route.c) | 0 | ||||
-rw-r--r-- | freebsd-userspace/lib/libkvm/kvm.3 | 120 | ||||
-rw-r--r-- | freebsd-userspace/lib/libkvm/kvm.h | 94 |
4 files changed, 218 insertions, 3 deletions
diff --git a/freebsd-userspace/Makefile b/freebsd-userspace/Makefile index 5cdc7ab1..a51e98ba 100644 --- a/freebsd-userspace/Makefile +++ b/freebsd-userspace/Makefile @@ -11,6 +11,7 @@ CFLAGS += -Ilib/libc/resolv CFLAGS += -Ilib/netgraph CFLAGS += -Ilib/libmemstat CFLAGS += -Ilib/libutil +CFLAGS += -Ilib/libkvm CFLAGS += -Isys CFLAGS += -Ilocal # XXX hack to find rpc @@ -164,7 +165,6 @@ C_FILES += rtems/rtems-uthread_kevent.c C_FILES += rtems/rtems-uthread_kqueue.c C_FILES += rtems/rtems-shell.c - # ping command sources C_FILES += commands/sbin/ping/ping.c C_FILES += commands/sbin/ping6/ping6.c @@ -231,13 +231,14 @@ C_FILES += commands/usr.bin/netstat/ipsec.c # C_FILES += commands/usr.bin/netstat/ipx.c C_FILES += commands/usr.bin/netstat/main.c # XXX does not compile yet -# C_FILES += commands/usr.bin/netstat/mbuf.c +C_FILES += commands/usr.bin/netstat/mbuf.c C_FILES += commands/usr.bin/netstat/mroute6.c C_FILES += commands/usr.bin/netstat/mroute.c # Disable netgraph support - this is a long thread to pull # C_FILES += commands/usr.bin/netstat/netgraph.c C_FILES += commands/usr.bin/netstat/pfkey.c -C_FILES += commands/usr.bin/netstat/route.c +# Actually just route.c in FreeBSD +C_FILES += commands/usr.bin/netstat/netstat_route.c C_FILES += commands/usr.bin/netstat/sctp.c C_FILES += commands/usr.bin/netstat/unix.c diff --git a/freebsd-userspace/commands/usr.bin/netstat/route.c b/freebsd-userspace/commands/usr.bin/netstat/netstat_route.c index af60527d..af60527d 100644 --- a/freebsd-userspace/commands/usr.bin/netstat/route.c +++ b/freebsd-userspace/commands/usr.bin/netstat/netstat_route.c diff --git a/freebsd-userspace/lib/libkvm/kvm.3 b/freebsd-userspace/lib/libkvm/kvm.3 new file mode 100644 index 00000000..9dcd772d --- /dev/null +++ b/freebsd-userspace/lib/libkvm/kvm.3 @@ -0,0 +1,120 @@ +.\" Copyright (c) 1992, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" This code is derived from software developed by the Computer Systems +.\" Engineering group at Lawrence Berkeley Laboratory under DARPA contract +.\" BG 91-66 and contributed to Berkeley. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)kvm.3 8.1 (Berkeley) 6/4/93 +.\" $FreeBSD$ +.\" +.Dd April 25, 2010 +.Dt KVM 3 +.Os +.Sh NAME +.Nm kvm +.Nd kernel memory interface +.Sh LIBRARY +.Lb libkvm +.Sh DESCRIPTION +The +.Nm +library provides a uniform interface for accessing kernel virtual memory +images, including live systems and crash dumps. +Access to live systems is via +.Xr sysctl 3 +for some functions, and +.Xr mem 4 +and +.Xr kmem 4 +for other functions, +while crash dumps can be examined via the core file generated by +.Xr savecore 8 . +The interface behaves similarly in both cases. +Memory can be read and written, kernel symbol addresses can be +looked up efficiently, and information about user processes can +be gathered. +.Pp +The +.Fn kvm_open +function is first called to obtain a descriptor for all subsequent calls. +.Sh COMPATIBILITY +The kvm interface was first introduced in SunOS. +A considerable +number of programs have been developed that use this interface, +making backward compatibility highly desirable. +In most respects, the Sun kvm interface is consistent and clean. +Accordingly, the generic portion of the interface (i.e., +.Fn kvm_open , +.Fn kvm_close , +.Fn kvm_read , +.Fn kvm_write , +and +.Fn kvm_nlist ) +has been incorporated into the +.Bx +interface. +Indeed, many kvm +applications (i.e., debuggers and statistical monitors) use only +this subset of the interface. +.Pp +The process interface was not kept. +This is not a portability +issue since any code that manipulates processes is inherently +machine dependent. +.Pp +Finally, the Sun kvm error reporting semantics are poorly defined. +The library can be configured either to print errors to +.Dv stderr +automatically, +or to print no error messages at all. +In the latter case, the nature of the error cannot be determined. +To overcome this, the +.Bx +interface includes a +routine, +.Xr kvm_geterr 3 , +to return (not print out) the error message +corresponding to the most recent error condition on the +given descriptor. +.Sh SEE ALSO +.Xr kvm_close 3 , +.Xr kvm_getargv 3 , +.Xr kvm_getenvv 3 , +.Xr kvm_geterr 3 , +.Xr kvm_getfiles 3 , +.Xr kvm_getloadavg 3 , +.Xr kvm_getprocs 3 , +.Xr kvm_getswapinfo 3 , +.Xr kvm_nlist 3 , +.Xr kvm_open 3 , +.Xr kvm_openfiles 3 , +.Xr kvm_read 3 , +.Xr kvm_write 3 , +.Xr sysctl 3 , +.Xr kmem 4 , +.Xr mem 4 diff --git a/freebsd-userspace/lib/libkvm/kvm.h b/freebsd-userspace/lib/libkvm/kvm.h new file mode 100644 index 00000000..0427bd1c --- /dev/null +++ b/freebsd-userspace/lib/libkvm/kvm.h @@ -0,0 +1,94 @@ +/*- + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)kvm.h 8.1 (Berkeley) 6/2/93 + * $FreeBSD$ + */ + +#ifndef _KVM_H_ +#define _KVM_H_ + +#include <sys/cdefs.h> +#include <sys/_types.h> +#include <nlist.h> + +/* Default version symbol. */ +#define VRS_SYM "_version" +#define VRS_KEY "VERSION" + +#ifndef _SIZE_T_DECLARED +typedef __size_t size_t; +#define _SIZE_T_DECLARED +#endif + +#ifndef _SSIZE_T_DECLARED +typedef __ssize_t ssize_t; +#define _SSIZE_T_DECLARED +#endif + +typedef struct __kvm kvm_t; + +struct kinfo_proc; +struct proc; + +struct kvm_swap { + char ksw_devname[32]; + int ksw_used; + int ksw_total; + int ksw_flags; + int ksw_reserved1; + int ksw_reserved2; +}; + +#define SWIF_DEV_PREFIX 0x0002 + +__BEGIN_DECLS +int kvm_close(kvm_t *); +char **kvm_getargv(kvm_t *, const struct kinfo_proc *, int); +int kvm_getcptime(kvm_t *, long *); +char **kvm_getenvv(kvm_t *, const struct kinfo_proc *, int); +char *kvm_geterr(kvm_t *); +char *kvm_getfiles(kvm_t *, int, int, int *); +int kvm_getloadavg(kvm_t *, double [], int); +int kvm_getmaxcpu(kvm_t *); +void *kvm_getpcpu(kvm_t *, int); +struct kinfo_proc * + kvm_getprocs(kvm_t *, int, int, int *); +int kvm_getswapinfo(kvm_t *, struct kvm_swap *, int, int); +int kvm_nlist(kvm_t *, struct nlist *); +kvm_t *kvm_open + (const char *, const char *, const char *, int, const char *); +kvm_t *kvm_openfiles + (const char *, const char *, const char *, int, char *); +ssize_t kvm_read(kvm_t *, unsigned long, void *, size_t); +ssize_t kvm_uread + (kvm_t *, struct kinfo_proc *, unsigned long, char *, size_t); +ssize_t kvm_write(kvm_t *, unsigned long, const void *, size_t); +__END_DECLS + +#endif /* !_KVM_H_ */ |