X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Farm-tdep.c;h=84a350af8c152449aa287dc8cf6f1665f4dcc535;hb=43841e9116d121fa81a351b66ec9e0821a1b4be8;hp=edacf985ace3e401bb7e0becb53fc55d293ce585;hpb=72ec28b8afa357cdde70c612b4e0e9f37a34f8e4;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index edacf985ac..84a350af8c 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -28,6 +28,7 @@ #include "gdb_string.h" #include "coff/internal.h" /* Internal format of COFF symbols in BFD */ #include "dis-asm.h" /* For register flavors. */ +#include /* for isupper () */ extern void _initialize_arm_tdep (void); @@ -327,7 +328,7 @@ arm_frameless_function_invocation (struct frame_info *fi) */ static CORE_ADDR -thumb_skip_prologue (CORE_ADDR pc) +thumb_skip_prologue (CORE_ADDR pc, CORE_ADDR func_end) { CORE_ADDR current_pc; int findmask = 0; /* findmask: @@ -336,7 +337,7 @@ thumb_skip_prologue (CORE_ADDR pc) bit 2 - sub sp, #simm OR add sp, #simm (adjusting of sp) */ - for (current_pc = pc; current_pc < pc + 40; current_pc += 2) + for (current_pc = pc; current_pc + 2 < func_end && current_pc < pc + 40; current_pc += 2) { unsigned short insn = read_memory_unsigned_integer (current_pc, 2); @@ -398,7 +399,7 @@ arm_skip_prologue (CORE_ADDR pc) /* Check if this is Thumb code. */ if (arm_pc_is_thumb (pc)) - return thumb_skip_prologue (pc); + return thumb_skip_prologue (pc, func_end); /* Can't find the prologue end in the symbol table, try it the hard way by disassembling the instructions. */ @@ -2082,7 +2083,7 @@ The valid values are:\n"); /* Add the disassembly-flavor command */ new_cmd = add_set_enum_cmd ("disassembly-flavor", no_class, valid_flavors, - (char *) &disassembly_flavor, + &disassembly_flavor, helptext, &setlist); new_cmd->function.sfunc = set_disassembly_flavor_sfunc;