4.1155-freebsd-126-freebsd-12freebsd-9.3
Last change
on this file since 34e1fb2 was
34e1fb2,
checked in by Joel Sherrill <joel.sherrill@…>, on 10/24/12 at 20:38:22
|
Add support for kvm.h in RTEMS terms
The implementation uses an array of strings and variable names. The
names are weak symbolic references to the items we have seen calls
to kvm services with.
|
-
Property mode set to
100644
|
File size:
1.6 KB
|
Line | |
---|
1 | #include "port_before.h" |
---|
2 | #include <sys/cdefs.h> |
---|
3 | #include <kvm.h> |
---|
4 | #include <nlist.h> |
---|
5 | #include <assert.h> |
---|
6 | |
---|
7 | #include "kvm_private.h" |
---|
8 | |
---|
9 | char * |
---|
10 | kvm_geterr( |
---|
11 | kvm_t *kd |
---|
12 | ) |
---|
13 | { |
---|
14 | return "KVM error"; |
---|
15 | // return (kd->errbuf); |
---|
16 | } |
---|
17 | |
---|
18 | kvm_t * |
---|
19 | kvm_openfiles( |
---|
20 | const char *uf, |
---|
21 | const char *mf, |
---|
22 | const char *sf __unused, |
---|
23 | int flag, |
---|
24 | char *errout |
---|
25 | ) |
---|
26 | { |
---|
27 | return (kvm_t *)kvm_openfiles; |
---|
28 | } |
---|
29 | |
---|
30 | int |
---|
31 | kvm_nlist(kvm_t *kd, struct nlist *nl) |
---|
32 | { |
---|
33 | struct nlist *p; |
---|
34 | int nvalid; |
---|
35 | int error; |
---|
36 | kvm_symval_t *kvm; |
---|
37 | |
---|
38 | assert( kd != NULL ); |
---|
39 | assert( nl != NULL ); |
---|
40 | |
---|
41 | nvalid = 0; |
---|
42 | again: |
---|
43 | for (p = nl; p->n_name && p->n_name[0]; ++p) { |
---|
44 | if (p->n_type != N_UNDF) |
---|
45 | continue; |
---|
46 | if (p->n_name[0] != '_') |
---|
47 | continue; |
---|
48 | |
---|
49 | for (kvm=rtems_kvm_symbols; kvm->symbol[0]; ++kvm) { |
---|
50 | if (!strcmp(p->n_name, kvm->symbol)) { |
---|
51 | p->n_type = N_TEXT; |
---|
52 | p->n_other = 0; |
---|
53 | p->n_desc = 0; |
---|
54 | p->n_value = kvm->value; |
---|
55 | if (kvm->value) { |
---|
56 | ++nvalid; |
---|
57 | printf("kvm: %s = %p\n", p->n_name, (void*)kvm->value); |
---|
58 | } |
---|
59 | break; |
---|
60 | } |
---|
61 | } |
---|
62 | if (! kvm->symbol[0]) { |
---|
63 | printf("kvm: did not know about %s\n", p->n_name); |
---|
64 | } |
---|
65 | } |
---|
66 | |
---|
67 | error = ((p - nl) - nvalid); |
---|
68 | return (error); |
---|
69 | |
---|
70 | } |
---|
71 | |
---|
72 | |
---|
73 | ssize_t |
---|
74 | kvm_read(kd, kva, buf, len) |
---|
75 | kvm_t *kd; |
---|
76 | u_long kva; |
---|
77 | void *buf; |
---|
78 | size_t len; |
---|
79 | { |
---|
80 | assert( kd != NULL ); |
---|
81 | assert( buf != NULL ); |
---|
82 | |
---|
83 | if ( kva == 0 ) |
---|
84 | return (-1); |
---|
85 | |
---|
86 | #ifdef __rtems__ |
---|
87 | // printf( "%d from %p to %p\n", len, (void*)kva, buf); |
---|
88 | #endif |
---|
89 | #if 0 |
---|
90 | /* |
---|
91 | * Use a byte-wide copy to avoid alignment issues. |
---|
92 | */ |
---|
93 | { |
---|
94 | unsigned char *s; |
---|
95 | unsigned char *d; |
---|
96 | size_t c; |
---|
97 | |
---|
98 | s = (void *)kva; |
---|
99 | d = buf; |
---|
100 | for (c=0; c<len ; c++) |
---|
101 | *d++ = *s++; |
---|
102 | } |
---|
103 | #else |
---|
104 | memcpy(buf, (void *)kva, len); |
---|
105 | #endif |
---|
106 | return len; |
---|
107 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.