Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * linux/arch/arm/kernel/debug.S | |
3 | * | |
4 | * Copyright (C) 1994-1999 Russell King | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License version 2 as | |
8 | * published by the Free Software Foundation. | |
9 | * | |
10 | * 32-bit debugging code | |
11 | */ | |
1da177e4 | 12 | #include <linux/linkage.h> |
6f6f6a70 | 13 | #include <asm/assembler.h> |
1da177e4 LT |
14 | |
15 | .text | |
16 | ||
17 | /* | |
18 | * Some debugging routines (useful if you've got MM problems and | |
19 | * printk isn't working). For DEBUGGING ONLY!!! Do not leave | |
20 | * references to these in a production kernel! | |
21 | */ | |
22 | ||
91a9fec0 RH |
23 | #if !defined(CONFIG_DEBUG_SEMIHOSTING) |
24 | #include CONFIG_DEBUG_LL_INCLUDE | |
25 | #endif | |
1da177e4 | 26 | |
0ea12930 JK |
27 | #ifdef CONFIG_MMU |
28 | .macro addruart_current, rx, tmp1, tmp2 | |
639da5ee | 29 | addruart \tmp1, \tmp2, \rx |
0ea12930 JK |
30 | mrc p15, 0, \rx, c1, c0 |
31 | tst \rx, #1 | |
32 | moveq \rx, \tmp1 | |
33 | movne \rx, \tmp2 | |
34 | .endm | |
35 | ||
36 | #else /* !CONFIG_MMU */ | |
37 | .macro addruart_current, rx, tmp1, tmp2 | |
38 | addruart \rx, \tmp1 | |
39 | .endm | |
40 | ||
41 | #endif /* CONFIG_MMU */ | |
42 | ||
1da177e4 LT |
43 | /* |
44 | * Useful debugging routines | |
45 | */ | |
46 | ENTRY(printhex8) | |
47 | mov r1, #8 | |
48 | b printhex | |
93ed3970 | 49 | ENDPROC(printhex8) |
1da177e4 LT |
50 | |
51 | ENTRY(printhex4) | |
52 | mov r1, #4 | |
53 | b printhex | |
93ed3970 | 54 | ENDPROC(printhex4) |
1da177e4 LT |
55 | |
56 | ENTRY(printhex2) | |
57 | mov r1, #2 | |
58 | printhex: adr r2, hexbuf | |
59 | add r3, r2, r1 | |
60 | mov r1, #0 | |
61 | strb r1, [r3] | |
62 | 1: and r1, r0, #15 | |
63 | mov r0, r0, lsr #4 | |
64 | cmp r1, #10 | |
65 | addlt r1, r1, #'0' | |
66 | addge r1, r1, #'a' - 10 | |
67 | strb r1, [r3, #-1]! | |
68 | teq r3, r2 | |
69 | bne 1b | |
70 | mov r0, r2 | |
71 | b printascii | |
93ed3970 | 72 | ENDPROC(printhex2) |
1da177e4 | 73 | |
b55fa188 AM |
74 | hexbuf: .space 16 |
75 | ||
1da177e4 LT |
76 | .ltorg |
77 | ||
9b5a146a NP |
78 | #ifndef CONFIG_DEBUG_SEMIHOSTING |
79 | ||
1da177e4 | 80 | ENTRY(printascii) |
0ea12930 | 81 | addruart_current r3, r1, r2 |
1da177e4 LT |
82 | b 2f |
83 | 1: waituart r2, r3 | |
84 | senduart r1, r3 | |
85 | busyuart r2, r3 | |
86 | teq r1, #'\n' | |
87 | moveq r1, #'\r' | |
88 | beq 1b | |
89 | 2: teq r0, #0 | |
90 | ldrneb r1, [r0], #1 | |
91 | teqne r1, #0 | |
92 | bne 1b | |
93 | mov pc, lr | |
93ed3970 | 94 | ENDPROC(printascii) |
1da177e4 LT |
95 | |
96 | ENTRY(printch) | |
0ea12930 | 97 | addruart_current r3, r1, r2 |
1da177e4 LT |
98 | mov r1, r0 |
99 | mov r0, #0 | |
100 | b 1b | |
93ed3970 | 101 | ENDPROC(printch) |
9b5a146a | 102 | |
a73b59c5 | 103 | #ifdef CONFIG_MMU |
e5c5f2ad RH |
104 | ENTRY(debug_ll_addr) |
105 | addruart r2, r3, ip | |
106 | str r2, [r0] | |
107 | str r3, [r1] | |
108 | mov pc, lr | |
109 | ENDPROC(debug_ll_addr) | |
a73b59c5 | 110 | #endif |
e5c5f2ad | 111 | |
9b5a146a NP |
112 | #else |
113 | ||
114 | ENTRY(printascii) | |
115 | mov r1, r0 | |
116 | mov r0, #0x04 @ SYS_WRITE0 | |
117 | ARM( svc #0x123456 ) | |
118 | THUMB( svc #0xab ) | |
119 | mov pc, lr | |
120 | ENDPROC(printascii) | |
121 | ||
122 | ENTRY(printch) | |
123 | adr r1, hexbuf | |
124 | strb r0, [r1] | |
125 | mov r0, #0x03 @ SYS_WRITEC | |
126 | ARM( svc #0x123456 ) | |
127 | THUMB( svc #0xab ) | |
128 | mov pc, lr | |
129 | ENDPROC(printch) | |
130 | ||
e5c5f2ad RH |
131 | ENTRY(debug_ll_addr) |
132 | mov r2, #0 | |
133 | str r2, [r0] | |
134 | str r2, [r1] | |
135 | mov pc, lr | |
136 | ENDPROC(debug_ll_addr) | |
137 | ||
9b5a146a | 138 | #endif |