2002-04-22 Michael Snyder * arm-tdep.c (arm_skip_prologue): Better handling for frameless functions. Treat "mov ip, sp" as optional. Recognize "str lr, [sp, #-4]". Index: arm-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/arm-tdep.c,v retrieving revision 1.51 diff -p -r1.51 arm-tdep.c *** arm-tdep.c 22 Apr 2002 23:22:04 -0000 1.51 --- arm-tdep.c 23 Apr 2002 00:00:30 -0000 *************** arm_skip_prologue (CORE_ADDR pc) *** 446,467 **** by disassembling the instructions. */ skip_pc = pc; inst = read_memory_integer (skip_pc, 4); ! if (inst != 0xe1a0c00d) /* mov ip, sp */ ! return pc; ! skip_pc += 4; ! inst = read_memory_integer (skip_pc, 4); ! if ((inst & 0xfffffff0) == 0xe92d0000) /* stmfd sp!,{a1,a2,a3,a4} */ { skip_pc += 4; inst = read_memory_integer (skip_pc, 4); } ! if ((inst & 0xfffff800) != 0xe92dd800) /* stmfd sp!,{...,fp,ip,lr,pc} */ ! return pc; ! skip_pc += 4; ! inst = read_memory_integer (skip_pc, 4); /* Any insns after this point may float into the code, if it makes for better instruction scheduling, so we skip them only if we --- 446,475 ---- by disassembling the instructions. */ skip_pc = pc; inst = read_memory_integer (skip_pc, 4); ! if (inst == 0xe1a0c00d) /* mov ip, sp */ ! { ! skip_pc += 4; ! inst = read_memory_integer (skip_pc, 4); ! } ! /* Some prologues begin with "str lr, [sp, #-4]!". */ ! if (inst == 0xe52de004) /* str lr, [sp, #-nn]! */ { skip_pc += 4; inst = read_memory_integer (skip_pc, 4); } ! if ((inst & 0xfffffff0) == 0xe92d0000) /* stmfd sp!,{a1,a2,a3,a4} */ ! { ! skip_pc += 4; ! inst = read_memory_integer (skip_pc, 4); ! } ! if ((inst & 0xfffff800) == 0xe92dd800) /* stmfd sp!,{fp,ip,lr,pc} */ ! { ! skip_pc += 4; ! inst = read_memory_integer (skip_pc, 4); ! } /* Any insns after this point may float into the code, if it makes for better instruction scheduling, so we skip them only if we