• David Howells's avatar
    MN10300: die_if_no_fixup() shouldn't use get_user() as it doesn't call set_fs() · db1c9dfa
    David Howells authored
    die_if_no_fixup() shouldn't use get_user() as it doesn't call set_fs() to
    indicate that it wants to probe a kernel address.  Instead it should use
    probe_kernel_read().
    
    This fixes the problem of gdb seeing SIGILL rather than SIGTRAP when hitting
    the KGDB special breakpoint upon SysRq+g being seen.  The problem was that
    die_if_no_fixup() was failing to read the opcode of the instruction that caused
    the exception, and thus not fixing up the exception.
    
    This caused gdb to get a S04 response to the $? request in its remote protocol
    rather than S05 - which would then cause it to continue with $C04 rather than
    $c in an attempt to pass the signal onto the inferior process.  The kernel,
    however, does not support $Cnn, and so objects by returning an E22 response,
    indicating an error.  gdb does not expect this and prints:
    
    	warning: Remote failure reply: E22
    
    and then returns to the gdb command prompt unable to continue.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    db1c9dfa
traps.c 17 KB