From bceabc95c1c85d793200446fa85f1ddc6313ea29 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 9 Oct 2013 22:42:09 +0200 Subject: Move files to match FreeBSD layout --- rtemsbsd/rtems/rtems-kvm.c | 107 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 rtemsbsd/rtems/rtems-kvm.c (limited to 'rtemsbsd/rtems/rtems-kvm.c') diff --git a/rtemsbsd/rtems/rtems-kvm.c b/rtemsbsd/rtems/rtems-kvm.c new file mode 100644 index 00000000..945c6952 --- /dev/null +++ b/rtemsbsd/rtems/rtems-kvm.c @@ -0,0 +1,107 @@ +#include "port_before.h" +#include +#include +#include +#include + +#include "kvm_private.h" + +char * +kvm_geterr( + kvm_t *kd +) +{ + return "KVM error"; + // return (kd->errbuf); +} + +kvm_t * +kvm_openfiles( + const char *uf, + const char *mf, + const char *sf __unused, + int flag, + char *errout +) +{ + return (kvm_t *)kvm_openfiles; +} + +int +kvm_nlist(kvm_t *kd, struct nlist *nl) +{ + struct nlist *p; + int nvalid; + int error; + kvm_symval_t *kvm; + + assert( kd != NULL ); + assert( nl != NULL ); + + nvalid = 0; +again: + for (p = nl; p->n_name && p->n_name[0]; ++p) { + if (p->n_type != N_UNDF) + continue; + if (p->n_name[0] != '_') + continue; + + for (kvm=rtems_kvm_symbols; kvm->symbol[0]; ++kvm) { + if (!strcmp(p->n_name, kvm->symbol)) { + p->n_type = N_TEXT; + p->n_other = 0; + p->n_desc = 0; + p->n_value = kvm->value; + if (kvm->value) { + ++nvalid; + // printf("kvm: %s = %p\n", p->n_name, (void*)kvm->value); + } + break; + } + } + if (! kvm->symbol[0]) { + printf("kvm: did not know about %s\n", p->n_name); + } + } + + error = ((p - nl) - nvalid); + return (error); + +} + + +ssize_t +kvm_read(kd, kva, buf, len) + kvm_t *kd; + u_long kva; + void *buf; + size_t len; +{ + assert( kd != NULL ); + assert( buf != NULL ); + + if ( kva == 0 ) + return (-1); + +#ifdef __rtems__ + // printf( "%d from %p to %p\n", len, (void*)kva, buf); +#endif +#if 0 + /* + * Use a byte-wide copy to avoid alignment issues. + */ + { + unsigned char *s; + unsigned char *d; + size_t c; + + s = (void *)kva; + d = buf; + for (c=0; c