Skip to content
  • Giancarlo Frix's avatar
    s390: Fix BC instruction breakpoint handling · 296cfb88
    Giancarlo Frix authored
    This fixes a long-lived bug in the s390 port.
    
    When trying to step over a breakpoint set on a BC (branch on condition)
    instruction with displaced stepping on IBM Z, gdb would incorrectly
    adjust the pc regardless of whether or not the branch was taken. Since
    the branch target is an absolute address, this would cause the inferior
    to jump around wildly whenever the branch was taken, either crashing it
    or causing it to behave unpredictably.
    
    It turns out that the logic to handle BC instructions correctly was in
    the code, but that the enum value representing its opcode has always
    been incorrect.
    
    This patch corrects the enum value to the actual opcode, fixing the
    stepping problem. The enum value is also used in the prologue analysis
    code, so this also fixes a minor bug where more of the prologue would
    be read than was necessary.
    
    gdb/ChangeLog:
    
            PR breakpoints/27009
            * s390-tdep.h (op_bc): Correct BC opcode value.
    296cfb88