lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAFLxGvzcaGjNAWzCjdQdnOQjGPOqPg_VY2UBpp7Q6pGVBvAa_A@mail.gmail.com>
Date: Mon, 18 Aug 2025 10:41:28 +0200
From: Richard Weinberger <richard.weinberger@...il.com>
To: "Russell King (Oracle)" <linux@...linux.org.uk>
Cc: Steven Rostedt <rostedt@...dmis.org>, Linus Torvalds <torvalds@...ux-foundation.org>, 
	LKML <linux-kernel@...r.kernel.org>, Gabriele Monaco <gmonaco@...hat.com>, 
	Nam Cao <namcao@...utronix.de>, John Kacur <jkacur@...hat.com>, 
	Tomas Glozar <tglozar@...hat.com>, linux-arm-kernel@...ts.infradead.org
Subject: Re: [GIT PULL] runtime verification: Updates for 6.17

On Sat, Aug 16, 2025 at 9:26 PM Richard Weinberger
<richard.weinberger@...il.com> wrote:
> > Also please check whether you're using frame pointers or the unwinder
> > (CONFIG_UNWINDER_FRAME_POINTER or CONFIG_ARM_UNWIND).
>
> With CONFIG_UNWINDER_FRAME_POINTER the stack trace is sane,
> so only CONFIG_ARM_UNWIND is broken.
> I kind of expected it the other way around...

I found time to gather more details, maybe it rings a bell...

The problem is related to va_list. As soon as va_list is passed as
function argument the
unwinder is no longer able to unwind correctly.
Unwinding vpanic() does not lead to a correct frame anymore.
Maybe because of va_list the function arguments are passed via stack?

The unwind table entries for panic() and vpanic() are:
0xc0302e20 <vpanic>: 0x808489b0
 Compact model index: 0
 0x84 0x89 pop {r4, r7, r11, r14}
 0xb0      finish

0xc0303190 <panic>: @0xc1c63ebc
 Compact model index: 1
 0x02      vsp = vsp + 12
 0x84 0x00 pop {r14}
 0xb1 0x0f pop {r0, r1, r2, r3}
 0xb0      finish

Disassembly of vpanic and panic:

c0303558 <vpanic>:
* @args: Arguments for the format string
*
* Display a message, then perform cleanups. This function never returns.
*/
void vpanic(const char *fmt, va_list args)
{
c0303558:       e92d4890        push    {r4, r7, fp, lr}
c030355c:       e52de004        push    {lr}            @ (str lr, [sp, #-4]!)
c0303560:       eb00a54f        bl      c032caa4 <__gnu_mcount_nc>
       static char buf[1024];
       long i, i_next = 0, len;
       int state = 0;
       int old_cpu, this_cpu;
       bool _crash_kexec_post_notifiers = crash_kexec_post_notifiers;
c0303564:       e3084464        movw    r4, #33892      @ 0x8464
c0303568:       e34c4222        movt    r4, #49698      @ 0xc222
{
c030356c:       e1a05000        mov     r5, r0
c0303570:       e1a07001        mov     r7, r1
       bool _crash_kexec_post_notifiers = crash_kexec_post_notifiers;
c0303574:       e5d4602c        ldrb    r6, [r4, #44]   @ 0x2c
c0303578:       e3560001        cmp     r6, #1
c030357c:       9a000002        bls     c030358c <vpanic+0x34>
c0303580:       e59f0324        ldr     r0, [pc, #804]  @ c03038ac
<vpanic+0x354>
c0303584:       e1a01006        mov     r1, r6
c0303588:       eb17f5b4        bl      c0900c60
<__ubsan_handle_load_invalid_value>

       if (panic_on_warn) {
c030358c:       e3043f08        movw    r3, #20232      @ 0x4f08
c0303590:       e34c31f0        movt    r3, #49648      @ 0xc1f0
c0303594:       e5932000        ldr     r2, [r3]
c0303598:       e3520000        cmp     r2, #0
                * This thread may hit another WARN() in the panic path.
                * Resetting this prevents additional WARN() from panicking the
                * system on this thread.  Other threads are blocked by the
                * panic_mutex in panic().
                */
               panic_on_warn = 0;
c030359c:       13a02000        movne   r2, #0
c03035a0:       15832000        strne   r2, [r3]
}

#define arch_local_irq_disable arch_local_irq_disable
static inline void arch_local_irq_disable(void)
{
       asm volatile(
c03035a4:       f10c0080        cpsid   i
        * Use the __builtin helper when available - this results in better
        * code, especially when using GCC in combination with the per-task
        * stack protector, as the compiler will recognize that it needs to
        * load the TLS register only once in every function.
        */
       cur = __builtin_thread_pointer();
c03035a8:       ee1d3f70        mrc     15, 0, r3, cr13, cr0, {3}
        * so go ahead.
        * `old_cpu == this_cpu' means we came from nmi_panic() which sets
        * panic_cpu to this CPU.  In this case, this is also the 1st CPU.
        */
       old_cpu = PANIC_CPU_INVALID;
       this_cpu = raw_smp_processor_id();
c03035ac:       e5932008        ldr     r2, [r3, #8]
{
#if defined(arch_atomic_cmpxchg)
       return arch_atomic_cmpxchg(v, old, new);
#elif defined(arch_atomic_cmpxchg_relaxed)
       int ret;
       __atomic_pre_full_fence();
c03035b0:       f57ff05b        dmb     ish

#if __LINUX_ARM_ARCH__ >= 7 && defined(CONFIG_SMP)
#define ARCH_HAS_PREFETCHW
static inline void prefetchw(const void *ptr)
{
       __asm__ __volatile__(
c03035b4:       e59f32f4        ldr     r3, [pc, #756]  @ c03038b0
<vpanic+0x358>
c03035b8:       f593f000        pldw    [r3]
       unsigned long res;

       prefetchw(&ptr->counter);

       do {
               __asm__ __volatile__("@ atomic_cmpxchg\n"
c03035bc:       e3e01000        mvn     r1, #0
c03035c0:       e1930f9f        ldrex   r0, [r3]
c03035c4:       e3a0c000        mov     ip, #0
c03035c8:       e1300001        teq     r0, r1
c03035cc:       0183cf92        strexeq ip, r2, [r3]
               "teq    %1, %4\n"
               "strexeq %0, %5, [%3]\n"
                   : "=&r" (res), "=&r" (oldval), "+Qo" (ptr->counter)
                   : "r" (&ptr->counter), "Ir" (old), "r" (new)
                   : "cc");
       } while (res);
c03035d0:       e35c0000        cmp     ip, #0
c03035d4:       1afffff9        bne     c03035c0 <vpanic+0x68>
       ret = arch_atomic_cmpxchg_relaxed(v, old, new);
       __atomic_post_full_fence();
c03035d8:       f57ff05b        dmb     ish

       /* atomic_try_cmpxchg updates old_cpu on failure */
       if (atomic_try_cmpxchg(&panic_cpu, &old_cpu, this_cpu)) {
               /* go ahead */
       } else if (old_cpu != this_cpu)
c03035dc:       e1520000        cmp     r2, r0
c03035e0:       13700001        cmnne   r0, #1
c03035e4:       0a000000        beq     c03035ec <vpanic+0x94>
               panic_smp_self_stop();
c03035e8:       eb00a127        bl      c032ba8c <panic_smp_self_stop>

       console_verbose();
c03035ec:       eb034d54        bl      c03d6b44 <console_verbose>
       bust_spinlocks(1);
c03035f0:       e3a00001        mov     r0, #1
c03035f4:       eb15167b        bl      c0848fe8 <bust_spinlocks>
       len = vscnprintf(buf, sizeof(buf), fmt, args);
c03035f8:       e59f02b4        ldr     r0, [pc, #692]  @ c03038b4
<vpanic+0x35c>
c03035fc:       e1a03007        mov     r3, r7
c0303600:       e1a02005        mov     r2, r5
c0303604:       e3a01b01        mov     r1, #1024       @ 0x400
       bool _crash_kexec_post_notifiers = crash_kexec_post_notifiers;
c0303608:       e2066001        and     r6, r6, #1
       len = vscnprintf(buf, sizeof(buf), fmt, args);
c030360c:       eb45cce9        bl      c14769b8 <vscnprintf>

       if (len && buf[len - 1] == '\n')
c0303610:       e3500000        cmp     r0, #0
c0303614:       0a000011        beq     c0303660 <vpanic+0x108>
c0303618:       e2405001        sub     r5, r0, #1
c030361c:       e3550b01        cmp     r5, #1024       @ 0x400
c0303620:       3a000002        bcc     c0303630 <vpanic+0xd8>
c0303624:       e59f028c        ldr     r0, [pc, #652]  @ c03038b8
<vpanic+0x360>
c0303628:       e1a01005        mov     r1, r5
c030362c:       eb17f56c        bl      c0900be4 <__ubsan_handle_out_of_bounds>
c0303630:       e0843005        add     r3, r4, r5
c0303634:       e5d33030        ldrb    r3, [r3, #48]   @ 0x30
c0303638:       e353000a        cmp     r3, #10
c030363c:       1a000007        bne     c0303660 <vpanic+0x108>
               buf[len - 1] = '\0';
c0303640:       e3550b01        cmp     r5, #1024       @ 0x400
c0303644:       3a000002        bcc     c0303654 <vpanic+0xfc>
c0303648:       e59f026c        ldr     r0, [pc, #620]  @ c03038bc
<vpanic+0x364>
c030364c:       e1a01005        mov     r1, r5
c0303650:       eb17f563        bl      c0900be4 <__ubsan_handle_out_of_bounds>
c0303654:       e0845005        add     r5, r4, r5
c0303658:       e3a03000        mov     r3, #0
c030365c:       e5c53030        strb    r3, [r5, #48]   @ 0x30

       pr_emerg("Kernel panic - not syncing: %s\n", buf);
c0303660:       e59f124c        ldr     r1, [pc, #588]  @ c03038b4
<vpanic+0x35c>
c0303664:       e30e07b4        movw    r0, #59316      @ 0xe7b4
c0303668:       e34c019d        movt    r0, #49565      @ 0xc19d
c030366c:       eb0003c7        bl      c0304590 <_printk>
       /*
        * Unlike the bitops with the '__' prefix above, this one *is* atomic,
        * so `volatile` must always stay here with no cast-aways. See
        * `Documentation/atomic_bitops.txt` for the details.
        */
       return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
c0303670:       e5943008        ldr     r3, [r4, #8]
#ifdef CONFIG_DEBUG_BUGVERBOSE
       /*
        * Avoid nested stack-dumping if a panic occurs during oops processing
        */
       if (!test_taint(TAINT_DIE) && oops_in_progress <= 1)
c0303674:       e3130080        tst     r3, #128        @ 0x80
c0303678:       1a000005        bne     c0303694 <vpanic+0x13c>
c030367c:       e30a3284        movw    r3, #41604      @ 0xa284
c0303680:       e34c3222        movt    r3, #49698      @ 0xc222
c0303684:       e5933000        ldr     r3, [r3]
c0303688:       e3530001        cmp     r3, #1
c030368c:       ca000000        bgt     c0303694 <vpanic+0x13c>
               dump_stack();
c0303690:       eb006216        bl      c031bef0 <dump_stack>
        * If we want to run this after calling panic_notifiers, pass
        * the "crash_kexec_post_notifiers" option to the kernel.
        *
        * Bypass the panic_cpu check and call __crash_kexec directly.
        */
       if (!_crash_kexec_post_notifiers)
c0303694:       e3560000        cmp     r6, #0
c0303698:       1a000001        bne     c03036a4 <vpanic+0x14c>
               __crash_kexec(NULL);
c030369c:       e1a00006        mov     r0, r6
c03036a0:       eb050e94        bl      c04470f8 <__crash_kexec>
       if (panic_print & SYS_INFO_ALL_CPU_BT) {
c03036a4:       e5943000        ldr     r3, [r4]
c03036a8:       e3130040        tst     r3, #64 @ 0x40
c03036ac:       0a000007        beq     c03036d0 <vpanic+0x178>
* to allow calling code to fall back to some other mechanism:
*/
#ifdef arch_trigger_cpumask_backtrace
static inline bool trigger_all_cpu_backtrace(void)
{
       arch_trigger_cpumask_backtrace(cpu_online_mask, -1);
c03036b0:       e3e01000        mvn     r1, #0
c03036b4:       e3040f14        movw    r0, #20244      @ 0x4f14
c03036b8:       e34c01f0        movt    r0, #49648      @ 0xc1f0
               panic_triggering_all_cpu_backtrace = true;
c03036bc:       e3a03001        mov     r3, #1
c03036c0:       e5c43430        strb    r3, [r4, #1072] @ 0x430
c03036c4:       eb00a103        bl      c032bad8
<arch_trigger_cpumask_backtrace>
               panic_triggering_all_cpu_backtrace = false;
c03036c8:       e3a03000        mov     r3, #0
c03036cc:       e5c43430        strb    r3, [r4, #1072] @ 0x430
       if (!crash_kexec)
c03036d0:       e3560000        cmp     r6, #0
c03036d4:       1a000001        bne     c03036e0 <vpanic+0x188>
               smp_send_stop();
c03036d8:       eb00a0b0        bl      c032b9a0 <smp_send_stop>
c03036dc:       ea000000        b       c03036e4 <vpanic+0x18c>
               crash_smp_send_stop();
c03036e0:       eb00a7e6        bl      c032d680 <crash_smp_send_stop>

       panic_other_cpus_shutdown(_crash_kexec_post_notifiers);

       printk_legacy_allow_panic_sync();
c03036e4:       eb035931        bl      c03d9bb0
<printk_legacy_allow_panic_sync>

       /*
        * Run any panic handlers, including those that might need to
        * add information to the kmsg dump output.
        */
       atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
c03036e8:       e59f21c4        ldr     r2, [pc, #452]  @ c03038b4
<vpanic+0x35c>
c03036ec:       e3a01000        mov     r1, #0
c03036f0:       e59f01c8        ldr     r0, [pc, #456]  @ c03038c0
<vpanic+0x368>
c03036f4:       eb024681        bl      c0395100 <atomic_notifier_call_chain>

       sys_info(panic_print);
c03036f8:       e5940000        ldr     r0, [r4]
c03036fc:       eb45b2ff        bl      c1470300 <sys_info>

       kmsg_dump_desc(KMSG_DUMP_PANIC, buf);
c0303700:       e59f11ac        ldr     r1, [pc, #428]  @ c03038b4
<vpanic+0x35c>
c0303704:       e3a00001        mov     r0, #1
c0303708:       eb036048        bl      c03db830 <kmsg_dump_desc>
        * Note: since some panic_notifiers can make crashed kernel
        * more unstable, it can increase risks of the kdump failure too.
        *
        * Bypass the panic_cpu check and call __crash_kexec directly.
        */
       if (_crash_kexec_post_notifiers)
c030370c:       e3560000        cmp     r6, #0
c0303710:       0a000001        beq     c030371c <vpanic+0x1c4>
               __crash_kexec(NULL);
c0303714:       e3a00000        mov     r0, #0
c0303718:       eb050e76        bl      c04470f8 <__crash_kexec>

       console_unblank();
c030371c:       eb035ede        bl      c03db29c <console_unblank>
        * buffer.  Try to acquire the lock then release it regardless of the
        * result.  The release will also print the buffers out.  Locks debug
        * should be disabled to avoid reporting bad unlock balance when
        * panic() is not being callled from OOPS.
        */
       debug_locks_off();
c0303720:       eb151570        bl      c0848ce8 <debug_locks_off>
       console_flush_on_panic(CONSOLE_FLUSH_PENDING);
c0303724:       e3a00000        mov     r0, #0
c0303728:       eb035f7a        bl      c03db518 <console_flush_on_panic>

       if ((panic_print & SYS_INFO_PANIC_CONSOLE_REPLAY) ||
c030372c:       e5943000        ldr     r3, [r4]
c0303730:       e3130020        tst     r3, #32
c0303734:       0a000002        beq     c0303744 <vpanic+0x1ec>
               panic_console_replay)
               console_flush_on_panic(CONSOLE_REPLAY_ALL);
c0303738:       e3a00001        mov     r0, #1
c030373c:       eb035f75        bl      c03db518 <console_flush_on_panic>
c0303740:       ea000007        b       c0303764 <vpanic+0x20c>
       if ((panic_print & SYS_INFO_PANIC_CONSOLE_REPLAY) ||
c0303744:       e5d4543c        ldrb    r5, [r4, #1084] @ 0x43c
c0303748:       e3550001        cmp     r5, #1
c030374c:       9a000002        bls     c030375c <vpanic+0x204>
c0303750:       e59f016c        ldr     r0, [pc, #364]  @ c03038c4
<vpanic+0x36c>
c0303754:       e1a01005        mov     r1, r5
c0303758:       eb17f540        bl      c0900c60
<__ubsan_handle_load_invalid_value>
c030375c:       e3150001        tst     r5, #1
c0303760:       1afffff4        bne     c0303738 <vpanic+0x1e0>

       if (!panic_blink)
c0303764:       e5943440        ldr     r3, [r4, #1088] @ 0x440
c0303768:       e30e8b08        movw    r8, #60168      @ 0xeb08
c030376c:       e34c81b7        movt    r8, #49591      @ 0xc1b7
               panic_blink = no_blink;

       if (panic_timeout > 0) {
c0303770:       e5941444        ldr     r1, [r4, #1092] @ 0x444
       if (!panic_blink)
c0303774:       e3530000        cmp     r3, #0
               panic_blink = no_blink;
c0303778:       03053010        movweq  r3, #20496      @ 0x5010
c030377c:       034c3036        movteq  r3, #49206      @ 0xc036
c0303780:       05843440        streq   r3, [r4, #1088] @ 0x440
       if (panic_timeout > 0) {
c0303784:       e3510000        cmp     r1, #0
       int state = 0;
c0303788:       d3a05000        movle   r5, #0
       long i, i_next = 0, len;
c030378c:       d1a07005        movle   r7, r5
       if (panic_timeout > 0) {
c0303790:       da00001c        ble     c0303808 <vpanic+0x2b0>
       int state = 0;
c0303794:       e3a05000        mov     r5, #0
                       touch_nmi_watchdog();
                       if (i >= i_next) {
                               i += panic_blink(state ^= 1);
                               i_next = i + 3600 / PANIC_BLINK_SPD;
                       }
                       mdelay(PANIC_TIMER_STEP);
c0303798:       e30cbb60        movw    fp, #52064      @ 0xcb60
c030379c:       e340bccc        movt    fp, #3276       @ 0xccc
       long i, i_next = 0, len;
c03037a0:       e1a07005        mov     r7, r5
               for (i = 0; i < panic_timeout * 1000; i += PANIC_TIMER_STEP) {
c03037a4:       e1a06005        mov     r6, r5
c03037a8:       e3a0affa        mov     sl, #1000       @ 0x3e8
               pr_emerg("Rebooting in %d seconds..\n", panic_timeout);
c03037ac:       e30e07d8        movw    r0, #59352      @ 0xe7d8
c03037b0:       e34c019d        movt    r0, #49565      @ 0xc19d
c03037b4:       eb000375        bl      c0304590 <_printk>
               for (i = 0; i < panic_timeout * 1000; i += PANIC_TIMER_STEP) {
c03037b8:       e5941444        ldr     r1, [r4, #1092] @ 0x444
c03037bc:       e003019a        mul     r3, sl, r1
c03037c0:       e1530006        cmp     r3, r6
c03037c4:       da00000f        ble     c0303808 <vpanic+0x2b0>
                       if (i >= i_next) {
c03037c8:       e1560007        cmp     r6, r7
c03037cc:       ba000005        blt     c03037e8 <vpanic+0x290>
                               i += panic_blink(state ^= 1);
c03037d0:       e2255001        eor     r5, r5, #1
c03037d4:       e5943440        ldr     r3, [r4, #1088] @ 0x440
c03037d8:       e1a00005        mov     r0, r5
c03037dc:       e12fff33        blx     r3
c03037e0:       e0866000        add     r6, r6, r0
                               i_next = i + 3600 / PANIC_BLINK_SPD;
c03037e4:       e28670c8        add     r7, r6, #200    @ 0xc8
{
c03037e8:       e3a09064        mov     r9, #100        @ 0x64
                       mdelay(PANIC_TIMER_STEP);
c03037ec:       e5983004        ldr     r3, [r8, #4]
c03037f0:       e1a0000b        mov     r0, fp
c03037f4:       e12fff33        blx     r3
c03037f8:       e2599001        subs    r9, r9, #1
c03037fc:       1afffffa        bne     c03037ec <vpanic+0x294>
               for (i = 0; i < panic_timeout * 1000; i += PANIC_TIMER_STEP) {
c0303800:       e2866064        add     r6, r6, #100    @ 0x64
c0303804:       eaffffeb        b       c03037b8 <vpanic+0x260>
               }
       }
       if (panic_timeout != 0) {
c0303808:       e3510000        cmp     r1, #0
c030380c:       0a000007        beq     c0303830 <vpanic+0x2d8>
               /*
                * This will not be a clean reboot, with everything
                * shutting down.  But if there is a chance of
                * rebooting the system it will be rebooted.
                */
               if (panic_reboot_mode != REBOOT_UNDEFINED)
c0303810:       e3083194        movw    r3, #33172      @ 0x8194
c0303814:       e34c31f2        movt    r3, #49650      @ 0xc1f2
c0303818:       e5932000        ldr     r2, [r3]
c030381c:       e3720001        cmn     r2, #1
                       reboot_mode = panic_reboot_mode;
c0303820:       13083198        movwne  r3, #33176      @ 0x8198
c0303824:       134c31f2        movtne  r3, #49650      @ 0xc1f2
c0303828:       15832000        strne   r2, [r3]
               emergency_restart();
c030382c:       eb024cbd        bl      c0396b28 <emergency_restart>
       }
#endif
#if defined(CONFIG_S390)
       disabled_wait();
#endif
       pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf);
c0303830:       e59f107c        ldr     r1, [pc, #124]  @ c03038b4
<vpanic+0x35c>
c0303834:       e30e07f8        movw    r0, #59384      @ 0xe7f8
c0303838:       e34c019d        movt    r0, #49565      @ 0xc19d
c030383c:       eb000353        bl      c0304590 <_printk>

       /* Do not scroll important messages printed above */
       suppress_printk = 1;
c0303840:       e3043f70        movw    r3, #20336      @ 0x4f70
c0303844:       e34c31f0        movt    r3, #49648      @ 0xc1f0
       /*
        * The final messages may not have been printed if in a context that
        * defers printing (such as NMI) and irq_work is not available.
        * Explicitly flush the kernel log buffer one last time.
        */
       console_flush_on_panic(CONSOLE_FLUSH_PENDING);
c0303848:       e3a00000        mov     r0, #0
       suppress_printk = 1;
c030384c:       e3a02001        mov     r2, #1
c0303850:       e5832000        str     r2, [r3]
       console_flush_on_panic(CONSOLE_FLUSH_PENDING);
c0303854:       eb035f2f        bl      c03db518 <console_flush_on_panic>
       nbcon_atomic_flush_unsafe();
c0303858:       eb03684e        bl      c03dd998 <nbcon_atomic_flush_unsafe>
       asm volatile(
c030385c:       f1080080        cpsie   i
               touch_softlockup_watchdog();
               if (i >= i_next) {
                       i += panic_blink(state ^= 1);
                       i_next = i + 3600 / PANIC_BLINK_SPD;
               }
               mdelay(PANIC_TIMER_STEP);
c0303860:       e30cab60        movw    sl, #52064      @ 0xcb60
c0303864:       e340accc        movt    sl, #3276       @ 0xccc
       for (i = 0; ; i += PANIC_TIMER_STEP) {
c0303868:       e3a06000        mov     r6, #0
               if (i >= i_next) {
c030386c:       e1560007        cmp     r6, r7
c0303870:       ba000005        blt     c030388c <vpanic+0x334>
                       i += panic_blink(state ^= 1);
c0303874:       e2255001        eor     r5, r5, #1
c0303878:       e5943440        ldr     r3, [r4, #1088] @ 0x440
c030387c:       e1a00005        mov     r0, r5
c0303880:       e12fff33        blx     r3
c0303884:       e0866000        add     r6, r6, r0
                       i_next = i + 3600 / PANIC_BLINK_SPD;
c0303888:       e28670c8        add     r7, r6, #200    @ 0xc8
       for (i = 0; ; i += PANIC_TIMER_STEP) {
c030388c:       e3a09064        mov     r9, #100        @ 0x64
               mdelay(PANIC_TIMER_STEP);
c0303890:       e5983004        ldr     r3, [r8, #4]
c0303894:       e1a0000a        mov     r0, sl
c0303898:       e12fff33        blx     r3
c030389c:       e2599001        subs    r9, r9, #1
c03038a0:       1afffffa        bne     c0303890 <vpanic+0x338>
       for (i = 0; ; i += PANIC_TIMER_STEP) {
c03038a4:       e2866064        add     r6, r6, #100    @ 0x64
               touch_softlockup_watchdog();
c03038a8:       eaffffef        b       c030386c <vpanic+0x314>
c03038ac:       c1f231bc        .word   0xc1f231bc
c03038b0:       c1f231cc        .word   0xc1f231cc
c03038b4:       c2228494        .word   0xc2228494
c03038b8:       c1f231d0        .word   0xc1f231d0
c03038bc:       c1f231e4        .word   0xc1f231e4
c03038c0:       c2228898        .word   0xc2228898
c03038c4:       c1f231f8        .word   0xc1f231f8

c03038c8 <panic>:
}
EXPORT_SYMBOL(vpanic);

/* Identical to vpanic(), except it takes variadic arguments instead
of va_list */
void panic(const char *fmt, ...)
{
c03038c8:       e92d000f        push    {r0, r1, r2, r3}
c03038cc:       e52de004        push    {lr}            @ (str lr, [sp, #-4]!)
c03038d0:       e24dd00c        sub     sp, sp, #12
c03038d4:       e52de004        push    {lr}            @ (str lr, [sp, #-4]!)
c03038d8:       eb00a471        bl      c032caa4 <__gnu_mcount_nc>
c03038dc:       ee1d3f70        mrc     15, 0, r3, cr13, cr0, {3}
       va_list args;

       va_start(args, fmt);
c03038e0:       e28d1014        add     r1, sp, #20
       vpanic(fmt, args);
c03038e4:       e59d0010        ldr     r0, [sp, #16]
{
c03038e8:       e5932508        ldr     r2, [r3, #1288] @ 0x508
c03038ec:       e58d2004        str     r2, [sp, #4]
c03038f0:       e3a02000        mov     r2, #0
       va_start(args, fmt);
c03038f4:       e58d1000        str     r1, [sp]
       vpanic(fmt, args);
c03038f8:       ebffff16        bl      c0303558 <vpanic>

-- 
Thanks,
//richard

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ