about summary refs log tree commit diff stats
path: root/README.md
Commit message (Collapse)AuthorAgeFilesLines
* 6499Kartik Agaram2020-06-071-2/+2
|
* 6498Kartik Agaram2020-06-061-108/+108
| | | | | Switch bullet lists in Markdown files away from `*`; it's ambiguous with emphasis.
* 6403Kartik Agaram2020-05-241-1/+1
|
* 6402Kartik Agaram2020-05-241-1/+1
|
* 6386 - documentation on editor setupKartik Agaram2020-05-231-0/+16
|
* 6218 - link to Mu's first forkKartik Agaram2020-05-101-0/+9
|
* 6200 - --dump is not needed for incremental tracesKartik Agaram2020-04-091-1/+1
| | | | | | | | This undoes commit 5764, which was ill-considered. We already had incremental prints at that point to 'last_run'. As long as we don't run out of RAM on large traces, there doesn't seem any need to print to stderr. Now '--dump' is only needed when juggling multiple traces.
* 6174Kartik Agaram2020-03-271-1/+1
|
* 6171Kartik Agaram2020-03-251-2/+2
|
* 6168Kartik Agaram2020-03-251-1/+1
|
* 6167Kartik Agaram2020-03-251-1/+1
|
* 6166Kartik Agaram2020-03-251-2/+2
|
* 6165Kartik Agaram2020-03-251-10/+10
|
* 6154 - include link to the Mu paperKartik Agaram2020-03-161-1/+1
|
* 6151Kartik Agaram2020-03-151-2/+6
|
* 6142Kartik Agaram2020-03-141-6/+9
|
* 6141Kartik Agaram2020-03-141-0/+12
|
* 6140Kartik Agaram2020-03-141-2/+1
|
* 6127Kartik Agaram2020-03-111-0/+11
|
* 5968Kartik Agaram2020-02-011-8/+10
|
* 5966 - document all supported Mu instructionsKartik Agaram2020-01-311-2/+3
|
* 5965Kartik Agaram2020-01-311-10/+1
|
* 5886Kartik Agaram2020-01-121-3/+4
|
* 5874Kartik Agaram2020-01-021-7/+1
|
* 5873Kartik Agaram2020-01-021-25/+20
|
* 5872Kartik Agaram2020-01-021-7/+7
|
* 5871Kartik Agaram2020-01-021-2/+2
|
* 5869Kartik Agaram2020-01-021-7/+8
|
* 5868Kartik Agaram2020-01-021-0/+791
Follow stupid GNU convention, because why not: https://www.gnu.org/prep/standards/html_node/Releases.html
05-24 22:43:18 -0700 committer Kartik Agaram <vc@akkartik.com> 2020-05-24 22:43:18 -0700 6397' href='/akkartik/mu/commit/html/039debug.cc.html?h=hlt&id=fcc161e70502caf34bc0206d2c428e8341e97fa6'>fcc161e7 ^
c504ca56 ^


fcc161e7 ^
c504ca56 ^

fcc161e7 ^
c504ca56 ^

fcc161e7 ^
c504ca56 ^



fcc161e7 ^
c504ca56 ^

















fcc161e7 ^
c504ca56 ^





fcc161e7 ^

c504ca56 ^

fcc161e7 ^
c504ca56 ^






fcc161e7 ^

c504ca56 ^

fcc161e7 ^
c504ca56 ^

fcc161e7 ^
c504ca56 ^
52daf072 ^
c504ca56 ^







































104e521c ^



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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213



                                                                                          
                               

                                                

                                                                                                               
                                                 

                       

                                                                                                 
                    
                                     

                             
                            

                              
                               
                                                                           
                                                                         
                                   















                                                                                 
                                                  















                                                                              
                                                                                                                           
                         

                                                                                                            

                                                                                                                                                        


                                                                                                        


                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                         
                                                                                                                               


                                                                                                                                                                                          
























                                                                                                                                                                                                                                                                                                                                                                                                                                           



                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                


                                                                                                                                                                                                                                               
                                                                                                                                                                                                             

                                                                                                                                                                                                                   
                                                                                                                                                                                                                   

                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                    



                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                

















                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    





                                                                                                                                                                               

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                              






                                                                                                                                                                                                                                                                                                                                                             

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                            

                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                          
                                          







































                                                                                                                                                                                                                                                                                                                                      



                                     
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 039debug.cc</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="cpp">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.LineNr { }
.Constant { color: #008787; }
.Comment { color: #005faf; }
.Delimiter { color: #c000c0; }
.Special { color: #d70000; }
.Identifier { color: #af5f00; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Todo { color: #000000; background-color: #ffff00; padding-bottom: 1px; }
.SalientComment { color: #0000af; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  var lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/039debug.cc'>https://github.com/akkartik/mu/blob/master/039debug.cc</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">  1 </span><span class="SalientComment">//:: Some helpers for debugging.</span>
<span id="L2" class="LineNr">  2 </span>
<span id="L3" class="LineNr">  3 </span><span class="Comment">//: Load the 'map' file generated during 'bootstrap --debug translate' when running</span>
<span id="L4" class="LineNr">  4 </span><span class="Comment">//: 'bootstrap --trace run'.</span>
<span id="L5" class="LineNr">  5 </span><span class="Comment">//: (It'll only affect the trace.)</span>
<span id="L6" class="LineNr">  6 </span>
<span id="L7" class="LineNr">  7 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L8" class="LineNr">  8 </span>map&lt;<span class="Comment">/*</span><span class="Comment">address</span><span class="Comment">*/</span><span class="Normal">uint32_t</span><span class="Delimiter">,</span> string&gt; <span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">;</span>  <span class="Comment">// used only by 'bootstrap run'</span>
<span id="L9" class="LineNr">  9 </span>map&lt;<span class="Comment">/*</span><span class="Comment">address</span><span class="Comment">*/</span><span class="Normal">uint32_t</span><span class="Delimiter">,</span> string&gt; <span class="Special"><a href='039debug.cc.html#L9'>Source_line</a></span><span class="Delimiter">;</span>  <span class="Comment">// used only by 'bootstrap run'</span>
<span id="L10" class="LineNr"> 10 </span><span class="Delimiter">:(before &quot;End --trace Settings&quot;)</span>
<span id="L11" class="LineNr"> 11 </span><a href='039debug.cc.html#L14'>load_labels</a><span class="Delimiter">();</span>
<span id="L12" class="LineNr"> 12 </span><a href='039debug.cc.html#L27'>load_source_lines</a><span class="Delimiter">();</span>
<span id="L13" class="LineNr"> 13 </span><span class="Delimiter">:(code)</span>
<span id="L14" class="LineNr"> 14 </span><span class="Normal">void</span> <a href='039debug.cc.html#L14'>load_labels</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L15" class="LineNr"> 15 </span>  ifstream fin<span class="Delimiter">(</span><span class="Constant">&quot;labels&quot;</span><span class="Delimiter">);</span>
<span id="L16" class="LineNr"> 16 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>fin<span class="Delimiter">.</span>fail<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L17" class="LineNr"> 17 </span>  fin &gt;&gt; std::hex<span class="Delimiter">;</span>
<span id="L18" class="LineNr"> 18 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L251'>has_data</a><span class="Delimiter">(</span>fin<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L19" class="LineNr"> 19 </span>    <span class="Normal">uint32_t</span> addr = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L20" class="LineNr"> 20 </span>    fin &gt;&gt; addr<span class="Delimiter">;</span>
<span id="L21" class="LineNr"> 21 </span>    string <a href='011run.cc.html#L111'>name</a><span class="Delimiter">;</span>
<span id="L22" class="LineNr"> 22 </span>    fin &gt;&gt; <a href='011run.cc.html#L111'>name</a><span class="Delimiter">;</span>
<span id="L23" class="LineNr"> 23 </span>    <a href='001help.cc.html#L229'>put</a><span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> addr<span class="Delimiter">,</span> <a href='011run.cc.html#L111'>name</a><span class="Delimiter">);</span>
<span id="L24" class="LineNr"> 24 </span>  <span class="Delimiter">}</span>
<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">}</span>
<span id="L26" class="LineNr"> 26 </span>
<span id="L27" class="LineNr"> 27 </span><span class="Normal">void</span> <a href='039debug.cc.html#L27'>load_source_lines</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L28" class="LineNr"> 28 </span>  ifstream fin<span class="Delimiter">(</span><span class="Constant">&quot;source_lines&quot;</span><span class="Delimiter">);</span>
<span id="L29" class="LineNr"> 29 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>fin<span class="Delimiter">.</span>fail<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L30" class="LineNr"> 30 </span>  fin &gt;&gt; std::hex<span class="Delimiter">;</span>
<span id="L31" class="LineNr"> 31 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L251'>has_data</a><span class="Delimiter">(</span>fin<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L32" class="LineNr"> 32 </span>    <span class="Normal">uint32_t</span> addr = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L33" class="LineNr"> 33 </span>    fin &gt;&gt; addr<span class="Delimiter">;</span>
<span id="L34" class="LineNr"> 34 </span>    string <a href='011run.cc.html#L121'>line</a><span class="Delimiter">;</span>
<span id="L35" class="LineNr"> 35 </span>    getline<span class="Delimiter">(</span>fin<span class="Delimiter">,</span> <a href='011run.cc.html#L121'>line</a><span class="Delimiter">);</span>
<span id="L36" class="LineNr"> 36 </span>    <a href='001help.cc.html#L229'>put</a><span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L9'>Source_line</a></span><span class="Delimiter">,</span> addr<span class="Delimiter">,</span> <a href='039debug.cc.html#L113'>hacky_squeeze_out_whitespace</a><span class="Delimiter">(</span><a href='011run.cc.html#L121'>line</a><span class="Delimiter">));</span>
<span id="L37" class="LineNr"> 37 </span>  <span class="Delimiter">}</span>
<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">}</span>
<span id="L39" class="LineNr"> 39 </span>
<span id="L40" class="LineNr"> 40 </span><span class="Delimiter">:(after &quot;Run One Instruction&quot;)</span>
<span id="L41" class="LineNr"> 41 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L233'>contains_key</a><span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> <a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">))</span>
<span id="L42" class="LineNr"> 42 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;== label &quot;</span> &lt;&lt; get<span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> <a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L43" class="LineNr"> 43 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L233'>contains_key</a><span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L9'>Source_line</a></span><span class="Delimiter">,</span> <a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">))</span>
<span id="L44" class="LineNr"> 44 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;inst: &quot;</span> &lt;&lt; get<span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L9'>Source_line</a></span><span class="Delimiter">,</span> <a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L45" class="LineNr"> 45 </span><span class="Normal">else</span>
<span id="L46" class="LineNr"> 46 </span>  <span class="Comment">// no source line info; do what you can</span>
<span id="L47" class="LineNr"> 47 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;inst: &quot;</span> &lt;&lt; <a href='039debug.cc.html#L50'>debug_info</a><span class="Delimiter">(</span><a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L48" class="LineNr"> 48 </span>
<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">:(code)</span>
<span id="L50" class="LineNr"> 50 </span>string <a href='039debug.cc.html#L50'>debug_info</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> inst_address<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L51" class="LineNr"> 51 </span>  <span class="Normal">uint8_t</span> op = <a href='010vm.cc.html#L165'>read_mem_u8</a><span class="Delimiter">(</span>inst_address<span class="Delimiter">);</span>
<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>op != <span class="Constant">0xe8</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L53" class="LineNr"> 53 </span>    ostringstream out<span class="Delimiter">;</span>
<span id="L54" class="LineNr"> 54 </span>    out &lt;&lt; <a href='010vm.cc.html#L394'>HEXBYTE</a> &lt;&lt; <a href='010vm.cc.html#L397'>NUM</a><span class="Delimiter">(</span>op<span class="Delimiter">);</span>
<span id="L55" class="LineNr"> 55 </span>    <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L56" class="LineNr"> 56 </span>  <span class="Delimiter">}</span>
<span id="L57" class="LineNr"> 57 </span>  <span class="Normal">int32_t</span> offset = <a href='010vm.cc.html#L176'>read_mem_i32</a><span class="Delimiter">(</span>inst_address+<span class="Comment">/*</span><span class="Comment">skip op</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L58" class="LineNr"> 58 </span>  <span class="Normal">uint32_t</span> next_eip = inst_address+<span class="Comment">/*</span><span class="Comment">inst length</span><span class="Comment">*/</span><span class="Constant">5</span>+offset<span class="Delimiter">;</span>
<span id="L59" class="LineNr"> 59 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L233'>contains_key</a><span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> next_eip<span class="Delimiter">))</span>
<span id="L60" class="LineNr"> 60 </span>    <span class="Identifier">return</span> <span class="Constant">&quot;e8/call &quot;</span>+get<span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> next_eip<span class="Delimiter">);</span>
<span id="L61" class="LineNr"> 61 </span>  ostringstream out<span class="Delimiter">;</span>
<span id="L62" class="LineNr"> 62 </span>  out &lt;&lt; <span class="Constant">&quot;e8/call 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L395'>HEXWORD</a> &lt;&lt; next_eip<span class="Delimiter">;</span>
<span id="L63" class="LineNr"> 63 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L64" class="LineNr"> 64 </span><span class="Delimiter">}</span>
<span id="L65" class="LineNr"> 65 </span>
<span id="L66" class="LineNr"> 66 </span><span class="Comment">//: If a label starts with '$watch-', make a note of the effective address</span>
<span id="L67" class="LineNr"> 67 </span><span class="Comment">//: computed by the next instruction. Start dumping out its contents to the</span>
<span id="L68" class="LineNr"> 68 </span><span class="Comment">//: trace after every subsequent instruction.</span>
<span id="L69" class="LineNr"> 69 </span>
<span id="L70" class="LineNr"> 70 </span><span class="Delimiter">:(after &quot;Run One Instruction&quot;)</span>
<span id="L71" class="LineNr"> 71 </span><a href='039debug.cc.html#L77'>dump_watch_points</a><span class="Delimiter">();</span>
<span id="L72" class="LineNr"> 72 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L73" class="LineNr"> 73 </span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">uint32_t</span>&gt; <span class="Special"><a href='039debug.cc.html#L73'>Watch_points</a></span><span class="Delimiter">;</span>
<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
<span id="L75" class="LineNr"> 75 </span><span class="Special"><a href='039debug.cc.html#L73'>Watch_points</a></span><span class="Delimiter">.</span>clear<span class="Delimiter">();</span>
<span id="L76" class="LineNr"> 76 </span><span class="Delimiter">:(code)</span>
<span id="L77" class="LineNr"> 77 </span><span class="Normal">void</span> <a href='039debug.cc.html#L77'>dump_watch_points</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L78" class="LineNr"> 78 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L73'>Watch_points</a></span><span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L79" class="LineNr"> 79 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span><span class="Delimiter">,</span> <span class="Constant">&quot;dbg&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;watch points:&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L80" class="LineNr"> 80 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">uint32_t</span>&gt;::iterator p = <span class="Special"><a href='039debug.cc.html#L73'>Watch_points</a></span><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <span class="Special"><a href='039debug.cc.html#L73'>Watch_points</a></span><span class="Delimiter">.</span>end<span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
<span id="L81" class="LineNr"> 81 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span><span class="Delimiter">,</span> <span class="Constant">&quot;dbg&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='010vm.cc.html#L395'>HEXWORD</a> &lt;&lt; p<span class="Delimiter">-&gt;</span>second &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; <a href='010vm.cc.html#L395'>HEXWORD</a> &lt;&lt; <a href='010vm.cc.html#L172'>read_mem_u32</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">}</span>
<span id="L83" class="LineNr"> 83 </span>
<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L85" class="LineNr"> 85 </span>string <span class="Special">Watch_this_effective_address</span><span class="Delimiter">;</span>
<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">:(after &quot;Run One Instruction&quot;)</span>
<span id="L87" class="LineNr"> 87 </span><span class="Special">Watch_this_effective_address</span> = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
<span id="L88" class="LineNr"> 88 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L233'>contains_key</a><span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> <a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">)</span> &amp;&amp; <a href='001help.cc.html#L106'>starts_with</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> <a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">),</span> <span class="Constant">&quot;$watch-&quot;</span><span class="Delimiter">))</span>
<span id="L89" class="LineNr"> 89 </span>  <span class="Special">Watch_this_effective_address</span> = get<span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> <a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">);</span>
<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(after &quot;Found <a href='013direct_addressing.cc.html#L101'>effective_address</a>(addr)&quot;)</span>
<span id="L91" class="LineNr"> 91 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!<span class="Special">Watch_this_effective_address</span><span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L92" class="LineNr"> 92 </span>  <a href='003trace.cc.html#L441'>dbg</a> &lt;&lt; <span class="Constant">&quot;now watching &quot;</span> &lt;&lt; <a href='010vm.cc.html#L395'>HEXWORD</a> &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; for &quot;</span> &lt;&lt; <span class="Special">Watch_this_effective_address</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L93" class="LineNr"> 93 </span>  <a href='001help.cc.html#L229'>put</a><span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L73'>Watch_points</a></span><span class="Delimiter">,</span> <span class="Special">Watch_this_effective_address</span><span class="Delimiter">,</span> addr<span class="Delimiter">);</span>
<span id="L94" class="LineNr"> 94 </span><span class="Delimiter">}</span>
<span id="L95" class="LineNr"> 95 </span>
<span id="L96" class="LineNr"> 96 </span><span class="Comment">//: Special label that dumps regions of memory.</span>
<span id="L97" class="LineNr"> 97 </span><span class="Comment">//: Not a general mechanism; by the time you get here you're willing to hack</span>
<span id="L98" class="LineNr"> 98 </span><span class="Comment">//: on the emulator.</span>
<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">:(after &quot;Run One Instruction&quot;)</span>
<span id="L100" class="LineNr">100 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L233'>contains_key</a><span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> <a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">)</span> &amp;&amp; get<span class="Delimiter">(</span><span class="Special"><a href='039debug.cc.html#L8'>Symbol_name</a></span><span class="Delimiter">,</span> <a href='010vm.cc.html#L26'>EIP</a><span class="Delimiter">)</span> == <span class="Constant">&quot;$dump-stream-at-EAX&quot;</span><span class="Delimiter">)</span>
<span id="L101" class="LineNr">101 </span>  <a href='039debug.cc.html#L103'>dump_stream_at</a><span class="Delimiter">(</span><span class="Special"><a href='010vm.cc.html#L25'>Reg</a></span>[EAX]<span class="Delimiter">.</span>u<span class="Delimiter">);</span>
<span id="L102" class="LineNr">102 </span><span class="Delimiter">:(code)</span>
<span id="L103" class="LineNr">103 </span><span class="Normal">void</span> <a href='039debug.cc.html#L103'>dump_stream_at</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> stream_start<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L104" class="LineNr">104 </span>  <span class="Normal">int32_t</span> stream_length = <a href='010vm.cc.html#L176'>read_mem_i32</a><span class="Delimiter">(</span>stream_start + <span class="Constant">8</span><span class="Delimiter">);</span>
<span id="L105" class="LineNr">105 </span>  <a href='003trace.cc.html#L441'>dbg</a> &lt;&lt; <span class="Constant">&quot;stream length: &quot;</span> &lt;&lt; std::dec &lt;&lt; stream_length &lt;&lt; end<span class="Delimiter">();</span>
<span id="L106" class="LineNr">106 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; stream_length + <span class="Constant">12</span><span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span>
<span id="L107" class="LineNr">107 </span>    <a href='003trace.cc.html#L441'>dbg</a> &lt;&lt; <span class="Constant">&quot;0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L395'>HEXWORD</a> &lt;&lt; <span class="Delimiter">(</span>stream_start+i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='010vm.cc.html#L394'>HEXBYTE</a> &lt;&lt; <a href='010vm.cc.html#L397'>NUM</a><span class="Delimiter">(</span><a href='010vm.cc.html#L165'>read_mem_u8</a><span class="Delimiter">(</span>stream_start+i<span class="Delimiter">))</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L108" class="LineNr">108 </span><span class="Delimiter">}</span>
<span id="L109" class="LineNr">109 </span>
<span id="L110" class="LineNr">110 </span><span class="Comment">//: helpers</span>
<span id="L111" class="LineNr">111 </span>
<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(code)</span>
<span id="L113" class="LineNr">113 </span>string <a href='039debug.cc.html#L113'>hacky_squeeze_out_whitespace</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L114" class="LineNr">114 </span>  <span class="Comment">// strip whitespace at start</span>
<span id="L115" class="LineNr">115 </span>  string::const_iterator first = s<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
<span id="L116" class="LineNr">116 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>first != s<span class="Delimiter">.</span>end<span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*first<span class="Delimiter">))</span>
<span id="L117" class="LineNr">117 </span>    ++first<span class="Delimiter">;</span>
<span id="L118" class="LineNr">118 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>first == s<span class="Delimiter">.</span>end<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
<span id="L119" class="LineNr">119 </span>
<span id="L120" class="LineNr">120 </span>  <span class="Comment">// strip whitespace at end</span>
<span id="L121" class="LineNr">121 </span>  string::const_iterator last = --s<span class="Delimiter">.</span>end<span class="Delimiter">();</span>
<span id="L122" class="LineNr">122 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>last != s<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*last<span class="Delimiter">))</span>
<span id="L123" class="LineNr">123 </span>    --last<span class="Delimiter">;</span>
<span id="L124" class="LineNr">124 </span>  ++last<span class="Delimiter">;</span>
<span id="L125" class="LineNr">125 </span>
<span id="L126" class="LineNr">126 </span>  <span class="Comment">// replace runs of spaces/dots with single space until comment or string</span>
<span id="L127" class="LineNr">127 </span>  <span class="Comment">// </span><span class="Todo">TODO</span><span class="Comment">:</span>
<span id="L128" class="LineNr">128 </span>  <span class="Comment">//   leave alone dots not surrounded by whitespace</span>
<span id="L129" class="LineNr">129 </span>  <span class="Comment">//   leave alone '#' within word</span>
<span id="L130" class="LineNr">130 </span>  <span class="Comment">//   leave alone '&quot;' within word</span>
<span id="L131" class="LineNr">131 </span>  <span class="Comment">//   squeeze spaces after end of string</span>
<span id="L132" class="LineNr">132 </span>  ostringstream out<span class="Delimiter">;</span>
<span id="L133" class="LineNr">133 </span>  <span class="Normal">bool</span> previous_was_space = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L134" class="LineNr">134 </span>  <span class="Normal">bool</span> in_comment_or_string = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L135" class="LineNr">135 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>string::const_iterator curr = first<span class="Delimiter">;</span>  curr != last<span class="Delimiter">;</span>  ++curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L136" class="LineNr">136 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in_comment_or_string<span class="Delimiter">)</span>
<span id="L137" class="LineNr">137 </span>      out &lt;&lt; *curr<span class="Delimiter">;</span>
<span id="L138" class="LineNr">138 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>*curr<span class="Delimiter">)</span> || *curr == <span class="Constant">'.'</span><span class="Delimiter">)</span>
<span id="L139" class="LineNr">139 </span>      previous_was_space = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L140" class="LineNr">140 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L141" class="LineNr">141 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>previous_was_space<span class="Delimiter">)</span>
<span id="L142" class="LineNr">142 </span>        out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
<span id="L143" class="LineNr">143 </span>      out &lt;&lt; *curr<span class="Delimiter">;</span>
<span id="L144" class="LineNr">144 </span>      previous_was_space = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L145" class="LineNr">145 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>*curr == <span class="Constant">'#'</span> || *curr == <span class="Constant">'&quot;'</span><span class="Delimiter">)</span> in_comment_or_string = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L146" class="LineNr">146 </span>    <span class="Delimiter">}</span>
<span id="L147" class="LineNr">147 </span>  <span class="Delimiter">}</span>
<span id="L148" class="LineNr">148 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L149" class="LineNr">149 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->