* spu-tdep.c (spu_analyze_prologue): Track instruction to

store backchain as part of prologue.
This commit is contained in:
Ulrich Weigand 2010-03-02 20:21:08 +00:00
parent 7e9af34afe
commit ce50d78b10
2 changed files with 16 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2010-03-02 Ulrich Weigand <uweigand@de.ibm.com>
* spu-tdep.c (spu_analyze_prologue): Track instruction to
store backchain as part of prologue.
2010-03-02 Daniel Jacobowitz <dan@codesourcery.com>
* progspace.c (update_address_spaces): Update inferior address spaces

View File

@ -633,6 +633,7 @@ spu_analyze_prologue (struct gdbarch *gdbarch,
int found_sp = 0;
int found_fp = 0;
int found_lr = 0;
int found_bc = 0;
int reg_immed[SPU_NUM_GPRS];
gdb_byte buf[16];
CORE_ADDR prolog_pc = start_pc;
@ -661,8 +662,9 @@ spu_analyze_prologue (struct gdbarch *gdbarch,
- The first instruction to set up the stack pointer.
- The first instruction to set up the frame pointer.
- The first instruction to save the link register.
- The first instruction to save the backchain.
We return the instruction after the latest of these three,
We return the instruction after the latest of these four,
or the incoming PC if none is found. The first instruction
to set up the stack pointer also defines the frame size.
@ -771,6 +773,14 @@ spu_analyze_prologue (struct gdbarch *gdbarch,
found_lr = 1;
prolog_pc = pc + 4;
}
if (ra == SPU_RAW_SP_REGNUM
&& (found_sp? immed == 0 : rt == SPU_RAW_SP_REGNUM)
&& !found_bc)
{
found_bc = 1;
prolog_pc = pc + 4;
}
}
/* _start uses SELB to set up the stack pointer. */