1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-11-30 08:19:09 +00:00

- Add a function db_alt_break which recognizes the character sequence used to

implement ALT_BREAK_TO_DEBUGGER.  The caller provides a pointer to a state
  variable to allow different state to be maintained for separate instances of
  a device.
- Use struct vm_map * instead of vm_map_t in db_break.h to avoid its users
  needing to include vm headers.

Requested by:	njl
This commit is contained in:
Jake Burkholder 2002-12-31 06:51:19 +00:00
parent 4dadad5ee1
commit edb333eef8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=108488
2 changed files with 51 additions and 1 deletions

View File

@ -33,6 +33,8 @@
/*
* Breakpoints.
*/
#include "opt_comconsole.h"
#include <sys/param.h>
#include <vm/vm.h>
@ -363,3 +365,45 @@ db_map_addr(addr)
#endif
return kernel_map;
}
#ifdef ALT_BREAK_TO_DEBUGGER
/*
* Solaris implements a new BREAK which is initiated by a character sequence
* CR ~ ^b which is similar to a familiar pattern used on Sun servers by the
* Remote Console.
*
* Note that this function may be called from almost anywhere, with interrupts
* disabled and with unknown locks held, so it must not access data other than
* its arguments. Its up to the caller to ensure that the state variable is
* consistent.
*/
#define KEY_CR 13 /* CR '\r' */
#define KEY_TILDE 126 /* ~ */
#define KEY_CRTLB 2 /* ^B */
int
db_alt_break(int data, int *state)
{
int brk = 0;
switch (data) {
case KEY_CR:
*state = KEY_TILDE;
break;
case KEY_TILDE:
if (*state == KEY_TILDE)
*state = KEY_CRTLB;
else
*state = 0;
break;
case KEY_CRTLB:
if (*state == KEY_CRTLB)
brk = 1;
default:
*state = 0;
break;
}
return (brk);
}
#endif

View File

@ -41,8 +41,10 @@
#define BKPT_INST_TYPE int
#endif
struct vm_map;
struct db_breakpoint {
vm_map_t map; /* in this map */
struct vm_map *map; /* in this map */
db_addr_t address; /* set here */
int init_count; /* number of times to skip bkpt */
int count; /* current count */
@ -64,4 +66,8 @@ void db_set_breakpoints(void);
db_breakpoint_t db_set_temp_breakpoint(db_addr_t);
#endif
#ifdef ALT_BREAK_TO_DEBUGGER
int db_alt_break(int, int *);
#endif
#endif /* !_DDB_DB_BREAK_H_ */