aboutsummaryrefslogtreecommitdiff
path: root/gdb/ia64-tdep.c
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2003-08-26 22:24:40 +0000
committerJeff Johnston <jjohnstn@redhat.com>2003-08-26 22:24:40 +0000
commit102d615a7c09e7c91c8e44c0850806e6d854138d (patch)
tree99a4e66c3762af9a7df7933d1f480ba5cc919664 /gdb/ia64-tdep.c
parentcc7ad3eab346356ca03eab6d987401d12fbffd45 (diff)
downloadbinutils-102d615a7c09e7c91c8e44c0850806e6d854138d.zip
binutils-102d615a7c09e7c91c8e44c0850806e6d854138d.tar.gz
binutils-102d615a7c09e7c91c8e44c0850806e6d854138d.tar.bz2
2003-08-26 Jeff Johnston <jjohnstn@redhat.com>
* ia64-tdep.c (examine_prologue): Only stop at predicated insns if we are frameless or the return address register is already known.
Diffstat (limited to 'gdb/ia64-tdep.c')
-rw-r--r--gdb/ia64-tdep.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c
index 1f1eb0e..323bf1c 100644
--- a/gdb/ia64-tdep.c
+++ b/gdb/ia64-tdep.c
@@ -1143,11 +1143,18 @@ examine_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct frame_info *next_frame,
if (next_pc == 0)
break;
- if ((it == B && ((instr & 0x1e1f800003f) != 0x04000000000))
- || ((instr & 0x3fLL) != 0LL))
+ if (it == B && ((instr & 0x1e1f800003f) != 0x04000000000))
{
- /* Exit loop upon hitting a non-nop branch instruction
- or a predicated instruction. */
+ /* Exit loop upon hitting a non-nop branch instruction. */
+ if (trust_limit)
+ lim_pc = pc;
+ break;
+ }
+ else if (((instr & 0x3fLL) != 0LL) &&
+ (frameless || ret_reg != 0))
+ {
+ /* Exit loop upon hitting a predicated instruction if
+ we already have the return register or if we are frameless. */
if (trust_limit)
lim_pc = pc;
break;