From 8a7a65717a62ac8606b9cb342bfba4a4cdfcaa77 Mon Sep 17 00:00:00 2001 From: Ryan Libby Date: Tue, 17 Oct 2017 01:12:17 +0000 Subject: [PATCH] gdb kernel server: fixup Search:memory style This is a NFC patch to move around the Search:memory implementation so that it doesn't exceed the standard column width and doesn't take so much vertical space in gdb_trap. Submitted by: Daniel O'Connor Reviewed by: cem, jhb Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D12684 --- sys/gdb/gdb_main.c | 49 ++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/sys/gdb/gdb_main.c b/sys/gdb/gdb_main.c index f8f3836f66eb..7c10b3b2b5a9 100644 --- a/sys/gdb/gdb_main.c +++ b/sys/gdb/gdb_main.c @@ -94,6 +94,33 @@ gdb_init(void) return (cur_pri); } +static void +gdb_do_mem_search(void) +{ + size_t patlen; + intmax_t addr, size; + const unsigned char *found; + + if (gdb_rx_varhex(&addr) || gdb_rx_char() != ';' || + gdb_rx_varhex(&size) || gdb_rx_char() != ';' || + gdb_rx_bindata(gdb_bindata, sizeof(gdb_bindata), &patlen)) { + gdb_tx_err(EINVAL); + return; + } + if (gdb_search_mem((char *)(uintptr_t)addr, size, gdb_bindata, + patlen, &found)) { + if (found == 0ULL) + gdb_tx_begin('0'); + else { + gdb_tx_begin('1'); + gdb_tx_char(','); + gdb_tx_hex((intmax_t)(uintptr_t)found, 8); + } + gdb_tx_end(); + } else + gdb_tx_err(EIO); +} + static int gdb_trap(int type, int code) { @@ -257,27 +284,7 @@ gdb_trap(int type, int code) gdb_tx_end(); } } else if (gdb_rx_equal("Search:memory:")) { - size_t patlen; - intmax_t addr, size; - const unsigned char *found; - if (gdb_rx_varhex(&addr) || gdb_rx_char() != ';' || - gdb_rx_varhex(&size) || gdb_rx_char() != ';' || - gdb_rx_bindata(gdb_bindata, sizeof(gdb_bindata), &patlen)) { - gdb_tx_err(EINVAL); - break; - } - if (gdb_search_mem((char *)(uintptr_t)addr, size, gdb_bindata, patlen, &found)) { - if (found == 0ULL) - gdb_tx_begin('0'); - else { - gdb_tx_begin('1'); - gdb_tx_char(','); - gdb_tx_hex((intmax_t)(uintptr_t)found, 8); - } - gdb_tx_end(); - } else - gdb_tx_err(EIO); - break; + gdb_do_mem_search(); } else if (!gdb_cpu_query()) gdb_tx_empty(); break;