This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
RFA: recognize new instructions in rs6000 prologues
- From: Jim Blandy <jimb at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: 24 Mar 2004 10:10:04 -0500
- Subject: RFA: recognize new instructions in rs6000 prologues
These prologues are generated by a not-yet-released compiler, but the
test suite does catch the problem.
2004-02-25 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.
*** gdb/rs6000-tdep.c.~2~ 2004-02-25 15:14:13.000000000 -0500
--- gdb/rs6000-tdep.c 2004-02-25 15:15:43.000000000 -0500
***************
*** 772,777 ****
--- 772,785 ----
/* 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) */
***************
*** 781,790 ****
/* 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) */
continue;
/* Set up frame pointer */
--- 789,799 ----
/* store parameters in stack via frame pointer */
}
else if (framep &&
! ((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 */