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