* Read bytes from kernel address space for debugger. */
(addr, size, data)
| 180 | * Read bytes from kernel address space for debugger. |
| 181 | */ |
| 182 | int |
| 183 | db_read_bytes(addr, size, data) |
| 184 | vm_offset_t addr; |
| 185 | size_t size; |
| 186 | char *data; |
| 187 | { |
| 188 | char *src = (char *)addr; |
| 189 | |
| 190 | if (db_validate_address((u_int)src)) { |
| 191 | db_printf("address %p is invalid\n", src); |
| 192 | return (-1); |
| 193 | } |
| 194 | |
| 195 | if (size == 4 && (addr & 3) == 0 && ((uintptr_t)data & 3) == 0) { |
| 196 | *((int*)data) = *((int*)src); |
| 197 | return (0); |
| 198 | } |
| 199 | |
| 200 | if (size == 2 && (addr & 1) == 0 && ((uintptr_t)data & 1) == 0) { |
| 201 | *((short*)data) = *((short*)src); |
| 202 | return (0); |
| 203 | } |
| 204 | |
| 205 | while (size-- > 0) { |
| 206 | if (db_validate_address((u_int)src)) { |
| 207 | db_printf("address %p is invalid\n", src); |
| 208 | return (-1); |
| 209 | } |
| 210 | *data++ = *src++; |
| 211 | } |
| 212 | return (0); |
| 213 | } |
| 214 | |
| 215 | /* |
| 216 | * Write bytes to kernel address space for debugger. |
no test coverage detected