diff options
author | Jim Blandy <jimb@codesourcery.com> | 2004-03-29 03:41:56 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2004-03-29 03:41:56 +0000 |
commit | e802b915719da6e31b5cef489d5abfc3c8c914ff (patch) | |
tree | deea6c9c79af9cbd9c0c80c5738474c976e2275a | |
parent | 72c8f5e39152c0773788f2902dac16c09f2b2c58 (diff) | |
download | gdb-e802b915719da6e31b5cef489d5abfc3c8c914ff.zip gdb-e802b915719da6e31b5cef489d5abfc3c8c914ff.tar.gz gdb-e802b915719da6e31b5cef489d5abfc3c8c914ff.tar.bz2 |
* rs6000-tdep.c (skip_prologue): Recognize moves from argument
registers to temp register r0 and byte stores as prologue
instructions.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/rs6000-tdep.c | 17 |
2 files changed, 19 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1a85941..77ad9cb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2004-03-28 Jim Blandy <jimb@redhat.com> + + * rs6000-tdep.c (skip_prologue): Recognize moves from argument + registers to temp register r0 and byte stores as prologue + instructions. + 2004-03-28 Andrew Cagney <cagney@redhat.com> * PROBLEMS (Stack backtraces): Rewrite. Remove reference to diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index f19f120..00062da 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -700,6 +700,14 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata) /* store parameters in stack */ } + /* Move parameters from argument registers to temporary register. */ + else if ((op & 0xfc0007fe) == 0x7c000378 && /* mr(.) Rx,Ry */ + (((op >> 21) & 31) >= 3) && /* R3 >= Ry >= R10 */ + (((op >> 21) & 31) <= 10) && + (((op >> 16) & 31) == 0)) /* Rx: scratch register r0 */ + { + continue; + } else if ((op & 0xfc1f0003) == 0xf8010000 || /* std rx,NUM(r1) */ (op & 0xfc1f0000) == 0xd8010000 || /* stfd Rx,NUM(r1) */ (op & 0xfc1f0000) == 0xfc010000) /* frsp, fp?,NUM(r1) */ @@ -709,10 +717,11 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata) /* store parameters in stack via frame pointer */ } else if (framep && - ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r1) */ - (op & 0xfc1f0000) == 0xd81f0000 || /* stfd Rx,NUM(r1) */ - (op & 0xfc1f0000) == 0xfc1f0000)) - { /* frsp, fp?,NUM(r1) */ + ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r31) */ + (op & 0xfc1f0000) == 0x981f0000 || /* stb Rx,NUM(r31) */ + (op & 0xfc1f0000) == 0xd81f0000 || /* stfd Rx,NUM(r31) */ + (op & 0xfc1f0000) == 0xfc1f0000)) /* frsp, fp?,NUM(r31) */ + { continue; /* Set up frame pointer */ |