[rtems-libbsd commit] Add kvm header file - stubbed for RTEMS

Joel Sherrill joel at rtems.org
Tue Oct 23 16:09:59 UTC 2012


Module:    rtems-libbsd
Branch:    master
Commit:    44ee0428229e1f89217545af2c468a25e3ea7ab2
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=44ee0428229e1f89217545af2c468a25e3ea7ab2

Author:    Joel Sherrill <joel.sherrill at oarcorp.com>
Date:      Mon Oct 22 10:50:36 2012 -0500

Add kvm header file - stubbed for RTEMS

This is only used to read dumps with a symbol table. We can use
sysctlbyname().

---

 freebsd-userspace/Makefile                         |    7 +-
 .../usr.bin/netstat/{route.c => netstat_route.c}   |    0
 freebsd-userspace/lib/libkvm/kvm.3                 |  120 ++++++++++++++++++++
 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 5cdc7ab..a51e98b 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
similarity index 100%
rename from freebsd-userspace/commands/usr.bin/netstat/route.c
rename to 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 0000000..9dcd772
--- /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 0000000..0427bd1
--- /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_ */




More information about the vc mailing list