Revisión | cad324ad2b83fa4ad90a684919d9f1b5262e620c (tree) |
---|---|
Tiempo | 2023-01-06 18:39:37 |
Autor | Yoshinori Sato <ysato@user...> |
Commiter | Yoshinori Sato |
RX: update frame analyzer
Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
@@ -187,6 +187,7 @@ rx_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, | ||
187 | 187 | int rn; |
188 | 188 | pv_t reg[RX_NUM_REGS]; |
189 | 189 | CORE_ADDR after_last_frame_setup_insn = start_pc; |
190 | + bool has_frame = false; | |
190 | 191 | |
191 | 192 | memset (result, 0, sizeof (*result)); |
192 | 193 |
@@ -292,6 +293,11 @@ rx_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, | ||
292 | 293 | are (most likely) part of the prologue. */ |
293 | 294 | if ((rdst == RX_SP_REGNUM || rdst == RX_FP_REGNUM) && addend < 0) |
294 | 295 | after_last_frame_setup_insn = next_pc; |
296 | + else if (rdst == RX_FP_REGNUM && rsrc == RX_SP_REGNUM) | |
297 | + { | |
298 | + has_frame = true; | |
299 | + after_last_frame_setup_insn = next_pc; | |
300 | + } | |
295 | 301 | } |
296 | 302 | else if (opc.id == RXO_mov |
297 | 303 | && opc.op[0].type == RX_Operand_Indirect |
@@ -345,7 +351,7 @@ rx_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, | ||
345 | 351 | result->frame_size = reg[RX_SP_REGNUM].k; |
346 | 352 | |
347 | 353 | /* Was the frame pointer initialized? */ |
348 | - if (pv_is_register (reg[RX_FP_REGNUM], RX_SP_REGNUM)) | |
354 | + if (pv_is_register (reg[RX_FP_REGNUM], RX_SP_REGNUM) || has_frame) | |
349 | 355 | { |
350 | 356 | result->has_frame_ptr = 1; |
351 | 357 | result->frame_ptr_offset = reg[RX_FP_REGNUM].k; |