117680Spst/*- 217680Spst * Copyright (c) 2004 Marcel Moolenaar 317680Spst * All rights reserved. 417680Spst * 517680Spst * Redistribution and use in source and binary forms, with or without 617680Spst * modification, are permitted provided that the following conditions 717680Spst * are met: 817680Spst * 917680Spst * 1. Redistributions of source code must retain the above copyright 1017680Spst * notice, this list of conditions and the following disclaimer. 1117680Spst * 2. Redistributions in binary form must reproduce the above copyright 1217680Spst * notice, this list of conditions and the following disclaimer in the 1317680Spst * documentation and/or other materials provided with the distribution. 1417680Spst * 1517680Spst * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1617680Spst * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1717680Spst * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1817680Spst * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1917680Spst * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2056896Sfenner * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2156896Sfenner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2217680Spst * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2317680Spst * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2417680Spst * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25127675Sbms * 26190207Srpaulo * $FreeBSD$ 2717680Spst */ 2817680Spst 2956896Sfenner#ifndef _GDB_GDB_INT_H_ 3056896Sfenner#define _GDB_GDB_INT_H_ 3156896Sfenner 3256896Sfennerextern struct gdb_dbgport *gdb_cur; 33127675Sbms 3417680Spstextern int gdb_listening; 3517680Spstvoid gdb_consinit(void); 3617680Spst 3717680Spstextern char *gdb_rxp; 3817680Spstextern size_t gdb_rxsz; 3917680Spstextern char *gdb_txp; 4017680Spst 4117680Spstint gdb_rx_begin(void); 4275118Sfennerint gdb_rx_equal(const char *); 4375118Sfennerint gdb_rx_mem(unsigned char *, size_t); 44127675Sbmsint gdb_rx_varhex(uintmax_t *); 45146778Ssam 4675118Sfennerstatic __inline int 4775118Sfennergdb_rx_char(void) 4875118Sfenner{ 4975118Sfenner int c; 5075118Sfenner 5175118Sfenner if (gdb_rxsz > 0) { 5275118Sfenner c = *gdb_rxp++; 5375118Sfenner gdb_rxsz--; 5475118Sfenner } else 5575118Sfenner c = -1; 5675118Sfenner return (c); 5775118Sfenner} 5875118Sfenner 5975118Sfennervoid gdb_tx_begin(char); 6075118Sfennerint gdb_tx_end(void); 6175118Sfennerint gdb_tx_mem(const unsigned char *, size_t); 6275118Sfennervoid gdb_tx_reg(int); 6375118Sfenner 6475118Sfennerstatic __inline void 6575118Sfennergdb_tx_char(char c) 6675118Sfenner{ 6775118Sfenner *gdb_txp++ = c; 6875118Sfenner} 6975118Sfenner 7075118Sfennerstatic __inline int 7175118Sfennergdb_tx_empty(void) 7275118Sfenner{ 7375118Sfenner gdb_tx_begin('\0'); 7475118Sfenner return (gdb_tx_end()); 7575118Sfenner} 7675118Sfenner 7775118Sfennerstatic __inline void 7875118Sfennergdb_tx_hex(uintmax_t n, int sz) 7975118Sfenner{ 8075118Sfenner gdb_txp += sprintf(gdb_txp, "%0*jx", sz, n); 8175118Sfenner} 8275118Sfenner 8375118Sfennerstatic __inline int 8475118Sfennergdb_tx_err(int err) 8575118Sfenner{ 8675118Sfenner gdb_tx_begin('E'); 8775118Sfenner gdb_tx_hex(err, 2); 8875118Sfenner return (gdb_tx_end()); 8975118Sfenner} 9075118Sfenner 9175118Sfennerstatic __inline int 9275118Sfennergdb_tx_ok(void) 9375118Sfenner{ 94146778Ssam gdb_tx_begin('O'); 95146778Ssam gdb_tx_char('K'); 96146778Ssam return (gdb_tx_end()); 9775118Sfenner} 9875118Sfenner 9975118Sfennerstatic __inline void 10075118Sfennergdb_tx_str(const char *s) 10175118Sfenner{ 10275118Sfenner while (*s) 10375118Sfenner *gdb_txp++ = *s++; 10475118Sfenner} 10575118Sfenner 106172686Smlaierstatic __inline void 10775118Sfennergdb_tx_varhex(uintmax_t n) 10875118Sfenner{ 10975118Sfenner gdb_txp += sprintf(gdb_txp, "%jx", n); 11075118Sfenner} 11175118Sfenner 11275118Sfenner#endif /* !_GDB_GDB_INT_H_ */ 11375118Sfenner