summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@oarcorp.com>2012-10-22 10:50:36 -0500
committerJoel Sherrill <joel.sherrill@oarcorp.com>2012-10-23 11:13:57 -0500
commit44ee0428229e1f89217545af2c468a25e3ea7ab2 (patch)
treeeec5ca0ad8c36ee25430d47686d94dba5db06212
parentnetshell01: Add netstat command (diff)
downloadrtems-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/Makefile7
-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.3120
-rw-r--r--freebsd-userspace/lib/libkvm/kvm.h94
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_ */