linux-mips
[Top] [All Lists]

Re: [PATCH] dump_stack() based on prologue code analysis

To: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Subject: Re: [PATCH] dump_stack() based on prologue code analysis
From: Franck Bui-Huu <vagabon.xyz@gmail.com>
Date: Mon, 31 Jul 2006 16:32:52 +0200
Cc: vagabon.xyz@gmail.com, linux-mips@linux-mips.org, ralf@linux-mips.org
Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:reply-to:user-agent:mime-version:to:cc:subject:references:in-reply-to:content-type:content-transfer-encoding:from; b=pdV3PF9u7xgH8hajhChmgndSGjjU29y9Dg5f9gg7gAHOKcDekvwmDmFCs2KmVRVpohTP1gb39wEojRl+ffGZvMNNZsrS1u9xwy5KsHhljNev39zN6cbJWaBmS57cLhBo5HQw8RriVsum6GhCoDilza0B7E3xCE/ew4gD2EJZL3k=
In-reply-to: <20060731.223923.115609520.anemo@mba.ocn.ne.jp>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <cda58cb80607271203u70b26e23o65b71d3d0c900f94@mail.gmail.com> <20060729.010137.36922349.anemo@mba.ocn.ne.jp> <44CDCA46.3030707@innova-card.com> <20060731.223923.115609520.anemo@mba.ocn.ne.jp>
Reply-to: Franck <vagabon.xyz@gmail.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Thunderbird 1.5.0.4 (X11/20060614)
Atsushi Nemoto wrote:
> On Mon, 31 Jul 2006 11:15:50 +0200, Franck Bui-Huu <vagabon.xyz@gmail.com> 
> wrote:
>>> Yes, that is what I wanted.  Imagine if a exception happened on first
>>> place on non-leaf function.  In this case, we must assume the function
>>> is leaf since RA is not saved to the stack.
>> The only case I can imagine is when sp is corrupted which is unlikely.
> 
> Modern gcc somtimes do amazing optimization ;-)
> 
>> However an exception can occure just after a prologue of a nested
>> function which is more likely. In that case you will assume wrongly
>> that the function was a leaf one.
> 
> Why?  get_frame_info() should detect frame_size and pc_offset for that
> case.
> 
> Is your objection against "info->func_size / 4" part?  the "4" comes
> from size of a instruction.
>

OK. I missed that, sorry.

> Well, using "4" instead of "sizeof(union mips_instruction)" or
> "sizeof(*ip)" was my old fault...

Well could we use "sizeof(union mips_instruction)" so nobody won't
make the same mistake ?

                if (i >= info->func_size / sizeof(union mips_instruction))
                        break;

BTW I omit the first condition "info->func_size != 0" because
normally a func has a no null size. If it has we should stop
right now.

We should also test this condition _before_ testing that "*ip" is
a jal instruction, shouldn't we ?

                Franck

<Prev in Thread] Current Thread [Next in Thread>