diff options
author | Michael Meissner <gnu@the-meissners.org> | 1995-03-03 17:39:37 +0000 |
---|---|---|
committer | Michael Meissner <gnu@the-meissners.org> | 1995-03-03 17:39:37 +0000 |
commit | 629b6214ad3a5514e0267b09c59312936c9306e7 (patch) | |
tree | 04d1af48606faf1826e0bf9b528be71c72f0e86a /gdb/rs6000-tdep.c | |
parent | 8b0f5a9df9bd20b51eb9e088350330fdbc96a9dc (diff) | |
download | gdb-629b6214ad3a5514e0267b09c59312936c9306e7.zip gdb-629b6214ad3a5514e0267b09c59312936c9306e7.tar.gz gdb-629b6214ad3a5514e0267b09c59312936c9306e7.tar.bz2 |
Support saving saved regs with multiple stores in addition to store multiple instructions in prologue.
Diffstat (limited to 'gdb/rs6000-tdep.c')
-rw-r--r-- | gdb/rs6000-tdep.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 6b1353a..8a21d54 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -209,25 +209,28 @@ CORE_ADDR pc; If the next is not a nop, this branch was part of the function prologue. */ - if (op == 0x4def7b82 || /* crorc 15, 15, 15 */ + if (op == 0x4def7b82 || /* crorc 15, 15, 15 */ op == 0x0) - return pc - 4; /* don't skip over this branch */ + return pc - 4; /* don't skip over this branch */ } - if ((op & 0xfc1f0000) == 0xd8010000) { /* stfd Rx,NUM(r1) */ - pc += 4; /* store floating register double */ + if ((op & 0xfc1f0000) == 0xd8010000) { /* stfd Rx,NUM(r1) */ + pc += 4; /* store floating register double */ op = read_memory_integer (pc, 4); } - if ((op & 0xfc1f0000) == 0xbc010000) { /* stm Rx, NUM(r1) */ + if ((op & 0xfc1f0000) == 0xbc010000) { /* stm Rx, NUM(r1) */ pc += 4; op = read_memory_integer (pc, 4); } - while (((tmp = op >> 16) == 0x9001) || /* st r0, NUM(r1) */ - (tmp == 0x9421) || /* stu r1, NUM(r1) */ - (tmp == 0x93e1)) /* st r31,NUM(r1) */ - { + while ((op & 0xfc1f0000) == 0x9001 && /* st rx,NUM(r1), rx >= r13 */ + (op & 0x03e00000) >= 0x01a00000) { + pc += 4; + op = read_memory_integer (pc, 4); + } + + if ((op & 0xfc1f0000) == 0x94210000) { /* stu r1,NUM(r1) */ pc += 4; op = read_memory_integer (pc, 4); } |