Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(562)

Side by Side Diff: docs/arm_debugging_with_the_simulator.md

Issue 1347153006: [Docs] Add wiki content to Markdown docs (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | docs/becoming_v8_committer.md » ('j') | docs/building_with_gyp.md » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # ARM debugging with the simulator
2
3 The simulator and debugger can be very helpful when working with v8 code generat ion.
4
5 * It is convenient as it allows you to test code generation without access to actual hardware.
6 * No cross or native compilation is needed.
7 * The simulator fully supports the debugging of generated code.
8
9 Please note that this simulator is designed for v8 purposes. Only the features u sed by v8 are implemented, and you might encounter unimplemented features or ins tructions. In this case, feel free to implement them and submit the code!
10
11
12 ## Details on the ARM Debugger
13
14 Compile the ARM simulator shell with:
15 ```
16 make arm.debug
17 ```
18 on an x86 host using your regular compiler.
19
20 ### Starting the Debugger
21 There are different ways of starting the debugger:
22
23 ```
24 $ out/arm.debug/d8 --stop_sim_at <n>
25 ```
26 The simulator will start the debugger after executing n instructions.
27
28 ```
29 $ out/arm.debug/d8 --stop_at <function name>
30 ```
31
32 The simulator will stop at the given JavaScript function.
33
34 Also you can directly generate 'stop' instructions in the ARM code. Stops are ge nerated with
35
36 ```
37 Assembler::stop(const char* msg, Condition cond, int32_t code)
38 ```
39
40 When the Simulator hits a stop, it will print msg and start the debugger.
41
42
43 ### Debugging commands.
44
45 **Usual commands:**
46
47 Enter `help` in the debugger prompt to get details on available commands. These include usual gdb-like commands, such as stepi, cont, disasm, etc. If the Simula tor is run under gdb, the “gdb” debugger command will give control to gdb. You c an then use cont from gdb to go back to the debugger.
48
49
50 **Debugger specific commands:**
51
52 Here's a list of the ARM debugger specific commands, along with examples.
53 The JavaScript file “func.js” used below contains:
54
55 ```
56 function test() {
57 print(“In function test.”);
58 }
59 test();
60 ```
61
62 * **printobject** `<`register`>` (alias po), will describe an object held in a register.
63
64 ```
65 $ out/arm.debug/d8 func.js --stop_at test
66
67 Simulator hit stop-at
68 0xb544d6a8 e92d4902 stmdb sp!, {r1, r8, fp, lr}
69 sim> print r0
70 r0: 0xb547ec15 -1253577707
71 sim> printobject r0
72 r0:
73 0xb547ec15: [Function]
74 - map = 0x0xb540ff01
75 - initial_map =
76 - shared_info = 0xb547eb2d <SharedFunctionInfo>
77 - name = #test
78 - context = 0xb60083f1 <FixedArray[52]>
79 - code = 0xb544d681 <Code>
80 #arguments: 0xb545a15d <Proxy> (callback)
81 #length: 0xb545a14d <Proxy> (callback)
82 #name: 0xb545a155 <Proxy> (callback)
83 #prototype: 0xb545a145 <Proxy> (callback)
84 #caller: 0xb545a165 <Proxy> (callback)
85 ```
86
87 * **break** `<`address`>`, will insert a breakpoint at the specified address.
88
89 * **del**, will delete the current breakpoint.
90
91 You can have only one such breakpoint. This is useful if you want to insert a br eakpoint at runtime.
92 ```
93 $ out/arm.debug/d8 func.js --stop_at test
94
95 Simulator hit stop-at
96 0xb53a1ee8 e92d4902 stmdb sp!, {r1, r8, fp, lr}
97 sim> disasm 5
98 0xb53a1ee8 e92d4902 stmdb sp!, {r1, r8, fp, lr}
99 0xb53a1eec e28db008 add fp, sp, #8
100 0xb53a1ef0 e59a200c ldr r2, [r10, #+12]
101 0xb53a1ef4 e28fe004 add lr, pc, #4
102 0xb53a1ef8 e15d0002 cmp sp, r2
103 sim> break 0xb53a1ef8
104 sim> cont
105 0xb53a1ef8 e15d0002 cmp sp, r2
106 sim> disasm 5
107 0xb53a1ef8 e15d0002 cmp sp, r2
108 0xb53a1efc 359ff034 ldrcc pc, [pc, #+52]
109 0xb53a1f00 e5980017 ldr r0, [r8, #+23]
110 0xb53a1f04 e59f1030 ldr r1, [pc, #+48]
111 0xb53a1f08 e52d0004 str r0, [sp, #-4]!
112 sim> break 0xb53a1f08
113 setting breakpoint failed
114 sim> del
115 sim> break 0xb53a1f08
116 sim> cont
117 0xb53a1f08 e52d0004 str r0, [sp, #-4]!
118 sim> del
119 sim> cont
120 In function test.
121 ```
122
123 * Generated `stop` instuctions, will work as breakpoints with a few additional features.
124
125 The first argument is a help message, the second is the condition, and the third is the stop code. If a code is specified, and is less than 256, the stop is sai d to be “watched”, and can be disabled/enabled; a counter also keeps track of ho w many times the Simulator hits this code.
126
127 If we are working on this v8 C++ code, which is reached when running our JavaScr ipt file.
128
129 ```
130 __ stop("My stop.", al, 123);
131 __ mov(r0, r0);
132 __ mov(r0, r0);
133 __ mov(r0, r0);
134 __ mov(r0, r0);
135 __ mov(r0, r0);
136 __ stop("My second stop.", al, 0x1);
137 __ mov(r1, r1);
138 __ mov(r1, r1);
139 __ mov(r1, r1);
140 __ mov(r1, r1);
141 __ mov(r1, r1);
142 ```
143
144 Here's a sample debugging session:
145
146 We hit the first stop.
147
148 ```
149 Simulator hit My stop.
150 0xb53559e8 e1a00000 mov r0, r0
151 ```
152
153 We can see the following stop using disasm. The address of the message string is inlined in the code after the svc stop instruction.
154
155 ```
156 sim> disasm
157 0xb53559e8 e1a00000 mov r0, r0
158 0xb53559ec e1a00000 mov r0, r0
159 0xb53559f0 e1a00000 mov r0, r0
160 0xb53559f4 e1a00000 mov r0, r0
161 0xb53559f8 e1a00000 mov r0, r0
162 0xb53559fc ef800001 stop 1 - 0x1
163 0xb5355a00 08338a97 stop message: My second stop
164 0xb5355a04 e1a00000 mov r1, r1
165 0xb5355a08 e1a00000 mov r1, r1
166 0xb5355a0c e1a00000 mov r1, r1
167 ```
168
169 Information can be printed for all (watched) stops which were hit at least once.
170
171 ```
172 sim> stop info all
173 Stop information:
174 stop 123 - 0x7b: Enabled, counter = 1, My stop.
175 sim> cont
176 Simulator hit My second stop
177 0xb5355a04 e1a00000 mov r1, r1
178 sim> stop info all
179 Stop information:
180 stop 1 - 0x1: Enabled, counter = 1, My second stop
181 stop 123 - 0x7b: Enabled, counter = 1, My stop.
182 ```
183
184 Stops can be disabled or enabled. (Only available for watched stops.)
185
186 ```
187 sim> stop disable 1
188 sim> cont
189 Simulator hit My stop.
190 0xb5356808 e1a00000 mov r0, r0
191 sim> cont
192 Simulator hit My stop.
193 0xb5356c28 e1a00000 mov r0, r0
194 sim> stop info all
195 Stop information:
196 stop 1 - 0x1: Disabled, counter = 2, My second stop
197 stop 123 - 0x7b: Enabled, counter = 3, My stop.
198 sim> stop enable 1
199 sim> cont
200 Simulator hit My second stop
201 0xb5356c44 e1a00000 mov r1, r1
202 sim> stop disable all
203 sim> con
204 In function test.
205 ```
OLDNEW
« no previous file with comments | « no previous file | docs/becoming_v8_committer.md » ('j') | docs/building_with_gyp.md » ('J')

Powered by Google App Engine
This is Rietveld 408576698