From b1dbc7254ac748216e30bbc6054e6603f1634eb2 Mon Sep 17 00:00:00 2001 From: Franck Bui-Huu Date: Fri, 18 Aug 2006 16:18:08 +0200 Subject: [PATCH] --- yaml --- r: 36050 b: refs/heads/master c: 29b376ff10aaea69ee4d93b70d0fbb2ebfd80f4e h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/mips/kernel/process.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index b9e9a1579e6e..c8857b172f19 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1fd6909802b837ed5510603846c0ce5938d296a1 +refs/heads/master: 29b376ff10aaea69ee4d93b70d0fbb2ebfd80f4e diff --git a/trunk/arch/mips/kernel/process.c b/trunk/arch/mips/kernel/process.c index e7b0b385fb2b..b160ea30de0f 100644 --- a/trunk/arch/mips/kernel/process.c +++ b/trunk/arch/mips/kernel/process.c @@ -311,12 +311,19 @@ static inline int is_sp_move_ins(union mips_instruction *ip) static int get_frame_info(struct mips_frame_info *info) { union mips_instruction *ip = info->func; - int i, max_insns = - min(128UL, info->func_size / sizeof(union mips_instruction)); + unsigned max_insns = info->func_size / sizeof(union mips_instruction); + unsigned i; info->pc_offset = -1; info->frame_size = 0; + if (!ip) + goto err; + + if (max_insns == 0) + max_insns = 128U; /* unknown function size */ + max_insns = min(128U, max_insns); + for (i = 0; i < max_insns; i++, ip++) { if (is_jal_jalr_jr_ins(ip)) @@ -337,6 +344,7 @@ static int get_frame_info(struct mips_frame_info *info) if (info->pc_offset < 0) /* leaf */ return 1; /* prologue seems boggus... */ +err: return -1; }