All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Simek <monstr@monstr.eu>
To: steve@digidescorp.com
Cc: linux-kernel@vger.kernel.org, microblaze-uclinux@itee.uq.edu.au
Subject: Re: [microblaze-uclinux] Re: [PATCH 1/2] microblaze: add stack unwinder
Date: Mon, 26 Apr 2010 17:34:35 +0200	[thread overview]
Message-ID: <4BD5B28B.4000401@monstr.eu> (raw)
In-Reply-To: <1271428410.3366.23.camel@iscandar.digidescorp.com>

Steven J. Magnani wrote:
> On Fri, 2010-04-16 at 10:32 +0200, Michal Simek wrote:
>> Please apply this patch and do the same testing as I did.
>>
>> diff --git a/arch/microblaze/kernel/reset.c b/arch/microblaze/kernel/reset.c
>> index a1721a3..76f6587 100644
>> --- a/arch/microblaze/kernel/reset.c
>> +++ b/arch/microblaze/kernel/reset.c
>> @@ -112,8 +112,8 @@ void of_platform_reset_gpio_probe(void)
>>   void machine_restart(char *cmd)
>>   {
>>          printk(KERN_NOTICE "Machine restart...\n");
>> +       machine_shutdown();
>>          gpio_system_reset();
>> -       dump_stack();
>>          while (1)
>>                  ;
>>   }
>> @@ -121,6 +121,7 @@ void machine_restart(char *cmd)
>>   void machine_shutdown(void)
>>   {
>>          printk(KERN_NOTICE "Machine shutdown...\n");
>> +       dump_stack();
>>          while (1)
>>                  ;
>>   }
> 
> I get this:
> 
> Call Trace:
> [<20003008>] microblaze_unwind+0x68/0x94
> [<20002c24>] show_stack+0x134/0x174
> [<20002c80>] dump_stack+0x1c/0x3c
> [<20001d84>] machine_shutdown+0x30/0x40
> [<20001dc0>] machine_restart+0x2c/0x48
> [<2002a540>] kernel_restart+0x5c/0x80
> [<2002a6b8>] sys_reboot+0x11c/0x218
> SYSCALL
> [<2d5c0248>] PID 118 [reboot]
> 
> Is your problem on a MMU or noMMU system?
> 
> If the unwinder stops early, it found a return address outside the
> kernel text, or couldn't find the addik that creates a stack frame - but
> there's not enough information here to tell what happened. In your case
> the backtrace goes off the rails before getting to the frame for
> dump_stack(), which is where the stack dump begins. We'd need to see the
> 21 words preceding the dump (show_stack's frame is 13 words, and
> microblaze_unwind's is 8) to know why.
> 
> Can you uncomment the #define DEBUG in unwind.c and try it again?

I finally looked at it and here is what I found.

# ./reboot
Restarting system.
Machine restart...
Machine shutdown...
Stack:
4f3ffdc8: 48004aec 00000008
4f3ffdd0: 00000000 00000001 4f3e0150 00000001 4f3ffdec 48004b14 481dc68c 
48241318
4f3ffdf0: ffffffff 00001099 00003fff 482f49cc 4801f518 481dc6a4 48241318 
ffffffff
4f3ffe10: 00001083 00003fff 482f49cc 48020150 481e3048 00000000 000001a2 
00000000
4f3ffe30: 00000000 00000000 28121969 48006b38 48240dc0 481d549c 481d53a8 
481d549c
4f3ffe50: 00aa4812 481d523c 0000c350 00000035 48029618 4f3ffe70 000001a2 
4f96c04c
4f3ffe70: 481d6390 0000c350 4f3fff58 4f3ffee0 481d639c 481d6370 00000009 
4f3ffee0
4f3ffe90: 00000000 00000000 00000000 4f3ffee0 48029df4 00000001 4f3e0150 
00000001
4f3ffeb0: 00000001 00000001 00000000 00000001 00000001 48029f34 4801b2a8 
4800c5e0
4f3ffed0: 00000020 00000000 0000c350 00000000 00000001 00000000 00000000 
00000035
4f3ffef0: 00ab0b62 00000035 00aa4812 480294e0 482425c0 00000000 00000000 
00000000
4f3fff10: 0000c350 00000001 0000c350 4f3ead40 4f3fff58 00000001 00000000 
00000000
4f3fff30: 00000001 4f3e0150 00000001 48006b38 00000000 4f3eaf68 00000000 
00010000
4f3fff50: 00000000 00000000 00000000 fee1dead 01234567 00000000 00000000 
4f3eaebc
4f3fff70: 00000000 00000000 00000000 fee1dead 28121969 01234567 00000008 
00000000
4f3fff90: 00000000 28121969 00000058 00000000 4f3e0320 4f3e0274 00000000 
00000000
4f3fffb0: 7fffff82 00000000 00000000 00000000 fee1dead 01234567 00000000 
00000000
4f3fffd0: 00000001 4f3e0150 00000001 00000000 00000000 4f96c04c 4f3e0324 
000001a0
4f3ffff0: 00000000 00000000 000001a0 00000000


Call Trace:
     Unwinding with PC=480050d4, FP=4f3ffd74
[<480050d4>] microblaze_unwind+0xa8/0xc4
pc 0x480050ac instr 0x30210024
     Invalid frame size -36 at 0x480050ac
     Failed to find previous stack frame

Below is the dump - then you can see that 36 is correct.
That could be due to different toolchain behavior.

Thanks,
Michal


4800502c <microblaze_unwind>:
4800502c:       b000482f        imm     18479
48005030:       e86043a8        lwi     r3, r0, 17320   // 482f43a8 <mbc>
48005034:       3021ffdc        addik   r1, r1, -36
48005038:       fa61001c        swi     r19, r1, 28
4800503c:       fac10020        swi     r22, r1, 32
48005040:       f9e10000        swi     r15, r1, 0
48005044:       e8830020        lwi     r4, r3, 32
48005048:       12650000        addk    r19, r5, r0
4800504c:       99fc2000        brald   r15, r4
48005050:       12c60000        addk    r22, r6, r0
48005054:       b000482f        imm     18479
48005058:       e86043a8        lwi     r3, r0, 17320   // 482f43a8 <mbc>
4800505c:       e8830008        lwi     r4, r3, 8
48005060:       99fc2000        brald   r15, r4
48005064:       80000000        or      r0, r0, r0
48005068:       be130068        beqid   r19, 104                // 480050d0
4800506c:       10b30000        addk    r5, r19, r0
48005070:       b0004800        imm     18432
48005074:       30c069e0        addik   r6, r0, 27104   // 480069e0 
<_switch_to>
48005078:       165f9800        rsubk   r18, r31, r19
4800507c:       be120034        beqid   r18, 52         // 480050b0
48005080:       11360000        addk    r9, r22, r0
48005084:       e8730004        lwi     r3, r19, 4
48005088:       10b30000        addk    r5, r19, r0
4800508c:       e903004c        lwi     r8, r3, 76
48005090:       e8e3003c        lwi     r7, r3, 60
48005094:       b9f4fc7c        brlid   r15, -900       // 48004d10 
<microblaze_unwind_inner>
48005098:       11360000        addk    r9, r22, r0
4800509c:       e9e10000        lwi     r15, r1, 0
480050a0:       ea61001c        lwi     r19, r1, 28
480050a4:       eac10020        lwi     r22, r1, 32
480050a8:       b60f0008        rtsd    r15, 8
480050ac:       30210024        addik   r1, r1, 36
480050b0:       e8730004        lwi     r3, r19, 4
480050b4:       30631f68        addik   r3, r3, 8040
480050b8:       e903003c        lwi     r8, r3, 60
480050bc:       e8c30080        lwi     r6, r3, 128
480050c0:       e8e30004        lwi     r7, r3, 4
480050c4:       b9f4fc4c        brlid   r15, -948       // 48004d10 
<microblaze_unwind_inner>
480050c8:       80000000        or      r0, r0, r0
480050cc:       b800ffd0        bri     -48             // 4800509c
480050d0:       80e10000        or      r7, r1, r0
480050d4:       b8d40008        brlid   r6, 8
480050d8:       80000000        or      r0, r0, r0
480050dc:       11130000        addk    r8, r19, r0
480050e0:       11360000        addk    r9, r22, r0
480050e4:       b9f4fc2c        brlid   r15, -980       // 48004d10 
<microblaze_unwind_inner>
480050e8:       10bf0000        addk    r5, r31, r0
480050ec:       b800ffb0        bri     -80             // 4800509c






> 
> Thanks,
> ------------------------------------------------------------------------
>  Steven J. Magnani               "I claim this network for MARS!
>  www.digidescorp.com              Earthling, return my space modulator!"
> 
>  #include <standard.disclaimer>
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


-- 
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian

  parent reply	other threads:[~2010-04-26 15:35 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-14  4:55 [PATCH 1/2] microblaze: add stack unwinder Steven J. Magnani
2010-04-14  6:34 ` Michal Simek
2010-04-14 16:45 ` Michal Simek
2010-04-27  3:31   ` Steven J. Magnani
2010-04-27  7:54     ` Michal Simek
2010-04-16  8:32 ` Michal Simek
2010-04-16 14:33   ` [microblaze-uclinux] " Steven J. Magnani
2010-04-16 15:03     ` Michal Simek
2010-04-26 15:34     ` Michal Simek [this message]
2010-04-27  3:36       ` Steven J. Magnani
2010-04-27  7:57         ` Michal Simek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BD5B28B.4000401@monstr.eu \
    --to=monstr@monstr.eu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=microblaze-uclinux@itee.uq.edu.au \
    --cc=steve@digidescorp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.