S390: Recognize special jumps in prologue parser
Functions compiled with the gcc option `-mhotpatch' may start with a branch-never BRCL instruction as a 6-byte NOP. And functions compiled with `-mstack-size' contain a BRC instruction in their prologue that is actually a conditional trap. Both of these special jumps cause the prologue parser to stop and yield bad unwinding results. This change makes the prologue analyzer recognize such special jumps and ignore them. gdb/ChangeLog: * s390-linux-tdep.c (s390_analyze_prologue): Ignore BRC and BRCL instructions that do nothing or are conditional traps.
This commit is contained in:
parent
6d53bec88f
commit
bc0e3f49c8
2 changed files with 19 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
2016-03-09 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
||||
|
||||
* s390-linux-tdep.c (s390_analyze_prologue): Ignore BRC and BRCL
|
||||
instructions that do nothing or are conditional traps.
|
||||
|
||||
2016-03-09 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
||||
|
||||
* s390-linux-tdep.c (s390_prologue_frame_unwind_cache): Store
|
||||
|
|
|
@ -1567,13 +1567,25 @@ s390_analyze_prologue (struct gdbarch *gdbarch,
|
|||
break;
|
||||
}
|
||||
|
||||
/* BRC/BRCL -- branch relative on condition. Ignore "branch
|
||||
never", branch to following instruction, and "conditional
|
||||
trap" (BRC +2). Otherwise terminate search. */
|
||||
else if (is_ri (insn, op1_brc, op2_brc, &r1, &i2))
|
||||
{
|
||||
if (r1 != 0 && i2 != 1 && i2 != 2)
|
||||
break;
|
||||
}
|
||||
else if (is_ril (insn, op1_brcl, op2_brcl, &r1, &i2))
|
||||
{
|
||||
if (r1 != 0 && i2 != 3)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Terminate search when hitting any other branch instruction. */
|
||||
else if (is_rr (insn, op_basr, &r1, &r2)
|
||||
|| is_rx (insn, op_bas, &r1, &d2, &x2, &b2)
|
||||
|| is_rr (insn, op_bcr, &r1, &r2)
|
||||
|| is_rx (insn, op_bc, &r1, &d2, &x2, &b2)
|
||||
|| is_ri (insn, op1_brc, op2_brc, &r1, &i2)
|
||||
|| is_ril (insn, op1_brcl, op2_brcl, &r1, &i2)
|
||||
|| is_ril (insn, op1_brasl, op2_brasl, &r2, &i2))
|
||||
break;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue