mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
kgdb: Remove first_entry for kgdb
There are two ways to run into handle_exception, run command 'kgdb' and encounter a breakpoint which triggers exception handling. The origin source code only saves regs when first run command 'kgdb'. Take the following for example, When run 'kgdb', regs is saved to entry_regs. When run 'bootz', regs is not saved. However, if we set a breakpoint, then continue. When breakpoint is reached, run `quit`, and Now return to the instruction which follows kgdb, but not bootz.This may cause errors. So, save regs for each handle_exception call to return to the correct place. Example: Target | Host =>kgdb | (gdb)b bootz | (gdb)c =>bootz | | (gdb)Here stop because of breakpoint | (gdb)q Signed-off-by: Peng Fan <van.freenix@gmail.com>
This commit is contained in:
parent
f6c8f38ec6
commit
f9f040b215
1 changed files with 2 additions and 12 deletions
|
@ -103,7 +103,7 @@ static char remcomOutBuffer[BUFMAX];
|
|||
static char remcomRegBuffer[BUFMAX];
|
||||
|
||||
static int initialized = 0;
|
||||
static int kgdb_active = 0, first_entry = 1;
|
||||
static int kgdb_active;
|
||||
static struct pt_regs entry_regs;
|
||||
static long error_jmp_buf[BUFMAX/2];
|
||||
static int longjmp_on_fault = 0;
|
||||
|
@ -348,16 +348,7 @@ handle_exception (struct pt_regs *regs)
|
|||
|
||||
kgdb_enter(regs, &kd);
|
||||
|
||||
if (first_entry) {
|
||||
/*
|
||||
* the first time we enter kgdb, we save the processor
|
||||
* state so that we can return to the monitor if the
|
||||
* remote end quits gdb (or at least, tells us to quit
|
||||
* with the 'k' packet)
|
||||
*/
|
||||
entry_regs = *regs;
|
||||
first_entry = 0;
|
||||
}
|
||||
|
||||
ptr = remcomOutBuffer;
|
||||
|
||||
|
@ -459,7 +450,6 @@ handle_exception (struct pt_regs *regs)
|
|||
case 'k': /* kill the program, actually return to monitor */
|
||||
kd.extype = KGDBEXIT_KILL;
|
||||
*regs = entry_regs;
|
||||
first_entry = 1;
|
||||
goto doexit;
|
||||
|
||||
case 'C': /* CSS continue with signal SS */
|
||||
|
|
Loading…
Reference in a new issue