diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2003-08-26 22:24:40 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2003-08-26 22:24:40 +0000 |
commit | 102d615a7c09e7c91c8e44c0850806e6d854138d (patch) | |
tree | 99a4e66c3762af9a7df7933d1f480ba5cc919664 | |
parent | cc7ad3eab346356ca03eab6d987401d12fbffd45 (diff) | |
download | gdb-102d615a7c09e7c91c8e44c0850806e6d854138d.zip gdb-102d615a7c09e7c91c8e44c0850806e6d854138d.tar.gz gdb-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.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/ia64-tdep.c | 15 |
2 files changed, 16 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2ea6ae5..25bd8a1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +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. + 2003-08-26 Andrew Cagney <cagney@redhat.com> * i386-linux-nat.c (ps_get_thread_area): Make "desc" four "int"s 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; |