Skip to content

Commit

Permalink
[MIPS] get_frame_info(): null function size means size is unknown
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Ralf Baechle <[email protected]>
  • Loading branch information
Franck Bui-Huu authored and ralfbaechle committed Sep 27, 2006
1 parent 1fd6909 commit 29b376f
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions arch/mips/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand All @@ -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;
}

Expand Down

0 comments on commit 29b376f

Please sign in to comment.