12
#include <debug/gdbstub.h>
14
static const char *hexchars = "0123456789abcdef";
16
void gdb_pack_str(struct gdb_packet *pkt, const char *str) {
19
while ((ch = *str++)) {
21
pkt->buf[pkt->size++] = ch;
25
void gdb_pack_mem(struct gdb_packet *pkt, const void *mem, size_t nbyte) {
31
ptr = (const uint8_t *)mem;
36
ch = hexchars[byte >> 4];
38
pkt->buf[pkt->size++] = ch;
39
ch = hexchars[byte & 0xf];
41
pkt->buf[pkt->size++] = ch;
45
void gdb_pack_begin(struct gdb_packet *pkt) {
51
void gdb_pack_end(struct gdb_packet *pkt) {
52
pkt->buf[pkt->size++] = '#';
53
pkt->buf[pkt->size++] = hexchars[pkt->checksum >> 4];
54
pkt->buf[pkt->size++] = hexchars[pkt->checksum & 0xf];
57
bool gdb_check_mem(uintptr_t addr) {
58
extern char _text_vma, _rodata_vma, _data_vma, _bss_vma;
59
extern char _text_len, _rodata_len, _data_len, _bss_len_with_reserve;
65
{(uintptr_t)&_bss_vma, (uintptr_t)&_bss_len_with_reserve},
66
{(uintptr_t)&_text_vma, (uintptr_t)&_text_len},
67
{(uintptr_t)&_data_vma, (uintptr_t)&_data_len},
68
{(uintptr_t)&_rodata_vma, (uintptr_t)&_rodata_len},
75
for (i = 0; i < 4; i++) {
76
if ((sect[i].base <= addr) && (addr < sect[i].base + sect[i].len)) {
87
#include <lib/libds/dlist.h>
88
#include <kernel/task/kernel_task.h>
89
#include <kernel/task/resource/mmap.h>
91
bool gdb_check_mem(uintptr_t addr) {
97
emmap = task_resource_mmap(task_kernel_task());
99
dlist_foreach_entry(marea, &emmap->marea_list, mmap_link) {
100
if (addr && (marea->start <= addr) &&
101
(addr < marea->start + marea->size)) {