| To: | anemo@mba.ocn.ne.jp |
|---|---|
| Subject: | [PATCH 2/3] get_frame_info(): null function size means size is unknown |
| From: | Franck Bui-Huu <vagabon.xyz@gmail.com> |
| Date: | Fri, 18 Aug 2006 16:18:08 +0200 |
| Cc: | ralf@linux-mips.org, linux-mips@linux-mips.org, Franck Bui-Huu <vagabon.xyz@gmail.com> |
| Domainkey-signature: | a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=Ekjc+sc8B1UjcKOjn7GvnohBWQqjtV8FqGs05jeNIZNufCAqe0UpGMxr0CHqlN0xa2UTOxX+RctqduH0Ee0WS4YLtB1CWsJHWQ08ko778No3hRNQdLt+RxIP9+GXb5zzqZzoL4J/3NSla8lY30pleXtyseLbGOO3GyjTCc4R1jA= |
| In-reply-to: | <11559106892428-git-send-email-vagabon.xyz@gmail.com> |
| Original-recipient: | rfc822;linux-mips@linux-mips.org |
| References: | <11559106892428-git-send-email-vagabon.xyz@gmail.com> |
| Sender: | linux-mips-bounce@linux-mips.org |
This patch adds 2 sanity checks.
The first one test that the start address of the function to analyze has been
set by the caller. If not return an error since nothing usefull can be done
without.
The second one checks that the function's size has been set. A null size can
happen if CONFIG_KALLSYMS is not set and it means that we don't know the size
of the function to analyze. In this case, we make it equal to 128 instructions
by default.
Signed-off-by: Franck Bui-Huu <vagabon.xyz@gmail.com>
---
arch/mips/kernel/process.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index e7b0b38..cc67bf7 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -311,12 +311,19 @@ static inline int is_sp_move_ins(union m
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_fr
if (info->pc_offset < 0) /* leaf */
return 1;
/* prologue seems boggus... */
+err:
return -1;
}
--
1.4.2.rc4
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | Re: [PATCH] Remove mfinfo[64] used by get_wchan(), Franck Bui-Huu |
|---|---|
| Next by Date: | [PATCH 1/3] unwind_stack(): return ra if an exception occured at the first instruction, Franck Bui-Huu |
| Previous by Thread: | [PATCH 1/3] unwind_stack(): return ra if an exception occured at the first instruction, Franck Bui-Huu |
| Next by Thread: | [PATCH 3/3] get_wchan(): remove uses of mfinfo[64], Franck Bui-Huu |
| Indexes: | [Date] [Thread] [Top] [All Lists] |