extern void __init early_signal_init(void);
 
 extern asmlinkage void __backtrace(void);
-extern asmlinkage void c_backtrace(unsigned long fp);
+extern asmlinkage void c_backtrace(unsigned long fp, const char *loglvl);
 
 extern void __show_regs(struct pt_regs *);
 
 
 #define sv_fp  v5
 #define sv_pc  v6
 #define offset v8
+#define loglvl v9
 
 ENTRY(__backtrace)
                mov     r0, fp
 ENDPROC(__backtrace)
 ENDPROC(c_backtrace)
 #else
-               stm.w   (v4 - v8, lr), [sp-]    @ Save an extra register
+               stm.w   (v4 - v10, lr), [sp-]   @ Save an extra register
                                                @ so we have a location...
                mov.a   frame, r0               @ if frame pointer is zero
                beq     no_frame                @ we have no stack frames
+               mov     loglvl, r1
 
 1:             stm.w   (pc), [sp-]             @ calculate offset of PC stored
                ldw.w   r0, [sp]+, #4           @ by stmfd for this CPU
                bua     for_each_frame
 
 1006:          adr     r0, .Lbad
-               mov     r1, frame
+               mov     r1, loglvl
+               mov     r2, frame
                b.l     printk
-no_frame:      ldm.w   (v4 - v8, pc), [sp]+
+no_frame:      ldm.w   (v4 - v10, pc), [sp]+
 ENDPROC(__backtrace)
 ENDPROC(c_backtrace)
 
                add     v7, v7, #1
                cxor.a  v7, #6
                cmoveq  v7, #1
-               cmoveq  r1, #'\n'
-               cmovne  r1, #' '
+               bne     201f
+               adr     r0, .Lcr
+               mov     r1, loglvl
+               b.l     printk
+201:
                ldw.w   r3, [stack]+, #-4
                mov     r2, reg
                csub.a  r2, #8
                add     r2, r2, #0x10           @ so r2 need add 16
 201:
                adr     r0, .Lfp
+               mov     r1, loglvl
                b.l     printk
 2:             sub.a   reg, reg, #1
                bns     1b
                cxor.a  v7, #0
                beq     201f
                adr     r0, .Lcr
+               mov     r1, loglvl
                b.l     printk
 201:           ldm.w   (instr, reg, stack, v7, pc), [sp]+
 
-.Lfp:          .asciz  "%cr%d:%08x"
-.Lcr:          .asciz  "\n"
-.Lbad:         .asciz  "Backtrace aborted due to bad frame pointer <%p>\n"
+.Lfp:          .asciz  "%sr%d:%08x "
+.Lcr:          .asciz  "%s\n"
+.Lbad:         .asciz  "%sBacktrace aborted due to bad frame pointer <%p>\n"
                .align
 .Ldsi:         .word   0x92eec000 >> 14        @ stm.w sp, (... fp, ip, lr, pc)
                .word   0x92e10000 >> 14        @ stm.w sp, ()