diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/arm-tdep.c | 42 |
2 files changed, 24 insertions, 24 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c7ccb41..b6d8469 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2014-08-28 Yao Qi <yao@codesourcery.com> + * arm-tdep.c (thumb_in_function_epilogue_p): Don't set + found_stack_adjust in forward scan. Remove condition check + on found_stack_adjust which is always true. Indent the code. + +2014-08-28 Yao Qi <yao@codesourcery.com> + * dwarf2read.c (dwarf_decode_lines): Update declaration. (handle_DW_AT_stmt_list): Remove comment about WANT_LINE_INFO. (dwarf_decode_lines): Remove argument diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 9bc6507..f9feb52 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -3273,7 +3273,6 @@ thumb_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) found_return = 1; else if (thumb_instruction_restores_sp (insn)) { - found_stack_adjust = 1; if ((insn & 0xfe00) == 0xbd00) /* pop <registers, PC> */ found_return = 1; } @@ -3287,20 +3286,18 @@ thumb_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) if (insn == 0xe8bd) /* ldm.w sp!, <registers> */ { - found_stack_adjust = 1; if (insn2 & 0x8000) /* <registers> include PC. */ found_return = 1; } else if (insn == 0xf85d /* ldr.w <Rt>, [sp], #4 */ && (insn2 & 0x0fff) == 0x0b04) { - found_stack_adjust = 1; if ((insn2 & 0xf000) == 0xf000) /* <Rt> is PC. */ found_return = 1; } else if ((insn & 0xffbf) == 0xecbd /* vldm sp!, <list> */ && (insn2 & 0x0e00) == 0x0a00) - found_stack_adjust = 1; + ; else break; } @@ -3317,27 +3314,24 @@ thumb_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) a 32-bit instruction. This is just a heuristic, so we do not worry too much about false positives. */ - if (!found_stack_adjust) - { - if (pc - 4 < func_start) - return 0; - if (target_read_memory (pc - 4, buf, 4)) - return 0; - - insn = extract_unsigned_integer (buf, 2, byte_order_for_code); - insn2 = extract_unsigned_integer (buf + 2, 2, byte_order_for_code); + if (pc - 4 < func_start) + return 0; + if (target_read_memory (pc - 4, buf, 4)) + return 0; - if (thumb_instruction_restores_sp (insn2)) - found_stack_adjust = 1; - else if (insn == 0xe8bd) /* ldm.w sp!, <registers> */ - found_stack_adjust = 1; - else if (insn == 0xf85d /* ldr.w <Rt>, [sp], #4 */ - && (insn2 & 0x0fff) == 0x0b04) - found_stack_adjust = 1; - else if ((insn & 0xffbf) == 0xecbd /* vldm sp!, <list> */ - && (insn2 & 0x0e00) == 0x0a00) - found_stack_adjust = 1; - } + insn = extract_unsigned_integer (buf, 2, byte_order_for_code); + insn2 = extract_unsigned_integer (buf + 2, 2, byte_order_for_code); + + if (thumb_instruction_restores_sp (insn2)) + found_stack_adjust = 1; + else if (insn == 0xe8bd) /* ldm.w sp!, <registers> */ + found_stack_adjust = 1; + else if (insn == 0xf85d /* ldr.w <Rt>, [sp], #4 */ + && (insn2 & 0x0fff) == 0x0b04) + found_stack_adjust = 1; + else if ((insn & 0xffbf) == 0xecbd /* vldm sp!, <list> */ + && (insn2 & 0x0e00) == 0x0a00) + found_stack_adjust = 1; return found_stack_adjust; } |