arm/asm: add loglvl to c_backtrace()
[linux-2.6-microblaze.git] / arch / arm / lib / backtrace.S
index 5829252..872f658 100644 (file)
@@ -18,6 +18,7 @@
 #define sv_pc  r6
 #define mask   r7
 #define offset r8
+#define loglvl r9
 
 ENTRY(c_backtrace)
 
@@ -25,9 +26,10 @@ ENTRY(c_backtrace)
                ret     lr
 ENDPROC(c_backtrace)
 #else
-               stmfd   sp!, {r4 - r8, lr}      @ Save an extra register so we have a location...
+               stmfd   sp!, {r4 - r9, lr}      @ Save an extra register so we have a location...
                movs    frame, r0               @ if frame pointer is zero
                beq     no_frame                @ we have no stack frames
+               mov     loglvl, r2
 
                tst     r1, #0x10               @ 26 or 32-bit mode?
  ARM(          moveq   mask, #0xfc000003       )
@@ -73,6 +75,7 @@ for_each_frame:       tst     frame, mask             @ Check for address exceptions
                ldr     r1, [frame, #-4]        @ get saved lr
                mov     r2, frame
                bic     r1, r1, mask            @ mask PC/LR for the mode
+               mov     r3, loglvl
                bl      dump_backtrace_entry
 
                ldr     r1, [sv_pc, #-4]        @ if stmfd sp!, {args} exists,
@@ -80,12 +83,14 @@ for_each_frame:     tst     frame, mask             @ Check for address exceptions
                teq     r3, r1, lsr #11
                ldreq   r0, [frame, #-8]        @ get sp
                subeq   r0, r0, #4              @ point at the last arg
+               mov     r2, loglvl
                bleq    dump_backtrace_stm      @ dump saved registers
 
 1004:          ldr     r1, [sv_pc, #0]         @ if stmfd sp!, {..., fp, ip, lr, pc}
                ldr     r3, .Ldsi               @ instruction exists,
                teq     r3, r1, lsr #11
                subeq   r0, frame, #16
+               mov     r2, loglvl
                bleq    dump_backtrace_stm      @ dump saved registers
 
                teq     sv_fp, #0               @ zero saved fp means
@@ -96,9 +101,10 @@ for_each_frame:     tst     frame, mask             @ Check for address exceptions
                bhi     for_each_frame
 
 1006:          adr     r0, .Lbad
-               mov     r1, frame
+               mov     r1, loglvl
+               mov     r2, frame
                bl      printk
-no_frame:      ldmfd   sp!, {r4 - r8, pc}
+no_frame:      ldmfd   sp!, {r4 - r9, pc}
 ENDPROC(c_backtrace)
                
                .pushsection __ex_table,"a"
@@ -109,7 +115,7 @@ ENDPROC(c_backtrace)
                .long   1004b, 1006b
                .popsection
 
-.Lbad:         .asciz  "Backtrace aborted due to bad frame pointer <%p>\n"
+.Lbad:         .asciz  "%sBacktrace aborted due to bad frame pointer <%p>\n"
                .align
 .Ldsi:         .word   0xe92dd800 >> 11        @ stmfd sp!, {... fp, ip, lr, pc}
                .word   0xe92d0000 >> 11        @ stmfd sp!, {}