about summary refs log tree commit diff stats
path: root/src
Commit message (Expand)AuthorAgeFilesLines
* Mention clipboard in version outputMichael Vetter2021-04-161-2/+2
* Goodbye beautiful IDsMichael Vetter2021-04-143-30/+18
* Msg sending: don't write to chatwin nor to log if sending failedMaximilian Wuttke2021-04-081-12/+18
* OMEMO: Fail if message keys couldn't be encrypted for any recipient deviceMaximilian Wuttke2021-04-082-8/+27
* OMEMO: Remove duplicate session initalisationMaximilian Wuttke2021-04-082-18/+20
* Get rid of asprintf and _GNU_SOURCE defineMichael Vetter2021-03-3012-104/+97
* Fix segfault in cmd_autoaway()Michael Vetter2021-03-291-9/+12
* Add config.h in files were it was missingMichael Vetter2021-03-2642-0/+84
* Include config.h in omemo filesMichael Vetter2021-03-262-0/+4
* iq: use define for 'cancel'Michael Vetter2021-03-261-2/+2
* message: parse stanzaid in MUC caseMichael Vetter2021-03-251-1/+9
* ox: fix memleak in ox_announce_public_keyMichael Vetter2021-03-251-1/+3
* message: make _handle_error saferMichael Vetter2021-03-251-2/+4
* event: make log_database_get_previous_chat saferMichael Vetter2021-03-251-2/+4
* database: make log_database_get_previous_chat saferMichael Vetter2021-03-251-0/+2
* database: simplify _log_database_add_outgoingMichael Vetter2021-03-251-2/+1
* database: simplify log_database_add_incomingMichael Vetter2021-03-251-2/+1
* avatar: make _avatar_request_item_result_handler saferMichael Vetter2021-03-251-0/+4
* avatar: make _avatar_metadata_handler saferMichael Vetter2021-03-251-11/+20
* ox: make _ox_public_key_result saferMichael Vetter2021-03-251-5/+15
* ox: guard printing of fingerprintMichael Vetter2021-03-251-1/+3
* ox: improve error log in _ox_metadata_resultMichael Vetter2021-03-251-1/+1
* ox: add logging prefixMichael Vetter2021-03-251-15/+15
* stanza: guard mallocsMichael Vetter2021-03-251-70/+88
* stanza: simplify stanza_get_muc_destroy_alternative_roomMichael Vetter2021-03-251-4/+1
* stanza: replae strcmp with g_strcmp0Michael Vetter2021-03-251-17/+17
* message: simplify _handle_headlineMichael Vetter2021-03-251-4/+2
* message: make _receipt_request_handler saferMichael Vetter2021-03-251-1/+1
* message: make _handle_receipt_received saferMichael Vetter2021-03-251-1/+5
* message: make _handle_groupchat saferMichael Vetter2021-03-251-0/+6
* message: simplify _handle_conferenceMichael Vetter2021-03-251-7/+5
* message: make _handle_form saferMichael Vetter2021-03-251-0/+3
* message: make _message_handler saferMichael Vetter2021-03-251-7/+9
* mesage: make _handle_ox_chat saferMichael Vetter2021-03-251-11/+27
* message: make _handle_chat saferMichael Vetter2021-03-251-0/+3
* message: make _handle_muc_private_message saferMichael Vetter2021-03-251-0/+7
* message: fix potential segfault in _receipt_request_handlerMichael Vetter2021-03-251-3/+7
* message: safeguard _handle_receipt_receivedMichael Vetter2021-03-251-15/+17
* message: reorder _handle_groupchatMichael Vetter2021-03-251-12/+9
* message: fix possible segfault in _handle_conferenceMichael Vetter2021-03-251-19/+23
* message: fix possible segfault in _handle_muc_userMichael Vetter2021-03-251-0/+4
* message: fix possible segfault in _message_handlerMichael Vetter2021-03-251-3/+3
* Add support to register with a roomMichael Vetter2021-03-257-6/+154
* Merge pull request #1511 from mwuttke97/doc_bookmark_joinMichael Vetter2021-03-241-6/+13
|\
| * Command doc: Improve description and examples of `/bookmark` and `/join`Maximilian Wuttke2021-03-211-6/+13
* | form.c: fix memleak in form_tag_existsMichael Vetter2021-03-171-0/+1
* | Add support to approve MUC voice requestsMichael Vetter2021-03-173-2/+52
* | profanity.c: move var into functionMichael Vetter2021-03-161-1/+2
* | MUC: Add voice requestThorben Günther2021-03-127-3/+87
* | Completion: Split up role and affiliation completionThorben Günther2021-03-121-8/+15
|/
k/mu/blame/html/subx/032check_operand_bounds.cc.html?h=main&id=d689ac180ad47222aa59944d42c1e26e7b2423c6'>^
52daf072 ^
9c1056f5 ^


52daf072 ^
9c1056f5 ^


52daf072 ^
9c1056f5 ^




52daf072 ^
9c1056f5 ^




52daf072 ^

9c1056f5 ^






52daf072 ^

9c1056f5 ^

52daf072 ^
9c1056f5 ^




52daf072 ^

9c1056f5 ^






52daf072 ^

9c1056f5 ^

52daf072 ^
9c1056f5 ^






52daf072 ^
9c1056f5 ^






52daf072 ^

9c1056f5 ^

52daf072 ^
9c1056f5 ^






52daf072 ^
9c1056f5 ^






52daf072 ^

9c1056f5 ^

52daf072 ^
9c1056f5 ^


5fe060d5 ^



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



                                                                                          
                                                   
                                         


                                                                                                               
                                                 

                       

                                                                                                 
                    
                                     
                             

                             



                                                                           
                            
                                   
































                                                                                 
                                                                                                                                                                   
                         



                                                                                                                                                                                                                     

                                                                                                              

                                                                                                                                                                   
                                                                                                                                  






                                                                                                                                                                                                                                                            








                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                      



                                                                                                                                  
                                                                                                                                                                                                                                                                          


                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                        






                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                      


                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                                                                                             


                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                                                                                      




                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                    




                                                                                                                                                                                                                                

                                                                                                               






                                                                                                                                                                                                                                      

                                                                                                               

                                                                                                                                                                                                 
                                                                                                                                   




                                                                                                                                                                                                                                         

                                                                                                               






                                                                                                                                                                                                                                               

                                                                                                               

                                                                                                                                                                                                 
                                                                                                                                    






                                                                                                                                                                                                                                   
                                                                                                       






                                                                                                                                                                                                                                         

                                                                                                                

                                                                                                                                                                                                
                                                                                                                                    






                                                                                                                                                                                                                                            
                                                                                                       






                                                                                                                                                                                                                                                  

                                                                                                                

                                                                                                                                                                                                 
                                                                                                                                    


                                                                                                                                                   



                                     
<!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 - subx/032check_operand_bounds.cc</title>
<meta name="Generator" content="Vim/8.0">
<meta name="plugin-version" content="vim7.4_v2">
<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; }
.cSpecial { color: #008000; }
.LineNr { }
.Constant { color: #008787; }
.Delimiter { color: #c000c0; }
.Special { color: #d70000; }
.Identifier { color: #af5f00; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Comment { color: #005faf; }
.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;
  }
  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/subx/032check_operand_bounds.cc'>https://github.com/akkartik/mu/blob/master/subx/032check_operand_bounds.cc</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">  1 </span><span class="SalientComment">//:: Check that the different operands of an instruction aren't too large for their bitfields.</span>
<span id="L2" class="LineNr">  2 </span>
<span id="L3" class="LineNr">  3 </span><span class="Normal">void</span> <a href='032check_operand_bounds.cc.html#L3'>test_check_bitfield_sizes</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L4" class="LineNr">  4 </span>  <span class="Special">Hide_errors</span> = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L5" class="LineNr">  5 </span>  <a href='011run.cc.html#L85'>run</a><span class="Delimiter">(</span>
<span id="L6" class="LineNr">  6 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L7" class="LineNr">  7 </span>      <span class="Constant">&quot;01/add 4/mod 3/rm32 1/r32\n&quot;</span>  <span class="Comment">// add ECX to EBX</span>
<span id="L8" class="LineNr">  8 </span>  <span class="Delimiter">);</span>
<span id="L9" class="LineNr">  9 </span>  <a href='003trace.cc.html#L281'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L10" class="LineNr"> 10 </span>      <span class="Constant">&quot;error: '4/mod' too large to fit in bitfield mod\n&quot;</span>
<span id="L11" class="LineNr"> 11 </span>  <span class="Delimiter">);</span>
<span id="L12" class="LineNr"> 12 </span><span class="Delimiter">}</span>
<span id="L13" class="LineNr"> 13 </span>
<span id="L14" class="LineNr"> 14 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L15" class="LineNr"> 15 </span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">uint32_t</span>&gt; <span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">;</span>
<span id="L16" class="LineNr"> 16 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
<span id="L17" class="LineNr"> 17 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;subop&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
<span id="L18" class="LineNr"> 18 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;mod&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L19" class="LineNr"> 19 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;rm32&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
<span id="L20" class="LineNr"> 20 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;base&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
<span id="L21" class="LineNr"> 21 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;index&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
<span id="L22" class="LineNr"> 22 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;scale&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L23" class="LineNr"> 23 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;r32&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
<span id="L24" class="LineNr"> 24 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;disp8&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">8</span><span class="Delimiter">);</span>
<span id="L25" class="LineNr"> 25 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;disp16&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">16</span><span class="Delimiter">);</span>
<span id="L26" class="LineNr"> 26 </span><span class="Comment">// no bound needed for disp32</span>
<span id="L27" class="LineNr"> 27 </span><a href='001help.cc.html#L261'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;imm8&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">8</span><span class="Delimiter">);</span>
<span id="L28" class="LineNr"> 28 </span><span class="Comment">// no bound needed for imm32</span>
<span id="L29" class="LineNr"> 29 </span>
<span id="L30" class="LineNr"> 30 </span><span class="Delimiter">:(before &quot;Pack Operands(segment code)&quot;)</span>
<span id="L31" class="LineNr"> 31 </span>check_operand_bounds<span class="Delimiter">(</span>code<span class="Delimiter">);</span>
<span id="L32" class="LineNr"> 32 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L253'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L33" class="LineNr"> 33 </span><span class="Delimiter">:(code)</span>
<span id="L34" class="LineNr"> 34 </span><span class="Normal">void</span> check_operand_bounds<span class="Delimiter">(</span><span class="Normal">const</span> segment&amp; code<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L35" class="LineNr"> 35 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- check operand bounds&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L36" class="LineNr"> 36 </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; <a href='001help.cc.html#L165'>SIZE</a><span class="Delimiter">(</span>code<span class="Delimiter">.</span><a href='011run.cc.html#L112'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L37" class="LineNr"> 37 </span>    <span class="Normal">const</span> line&amp; inst = code<span class="Delimiter">.</span><a href='011run.cc.html#L112'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L38" class="LineNr"> 38 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <a href='031check_operands.cc.html#L311'>first_operand</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>  j &lt; <a href='001help.cc.html#L165'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L121'>words</a><span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
<span id="L39" class="LineNr"> 39 </span>      check_operand_bounds<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L121'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">));</span>
<span id="L40" class="LineNr"> 40 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L253'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// stop at the first mal-formed instruction</span>
<span id="L41" class="LineNr"> 41 </span>  <span class="Delimiter">}</span>
<span id="L42" class="LineNr"> 42 </span><span class="Delimiter">}</span>
<span id="L43" class="LineNr"> 43 </span>
<span id="L44" class="LineNr"> 44 </span><span class="Normal">void</span> check_operand_bounds<span class="Delimiter">(</span><span class="Normal">const</span> word&amp; w<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L45" class="LineNr"> 45 </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='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <span class="Special"><a href='032check_operand_bounds.cc.html#L15'>Operand_bound</a></span><span class="Delimiter">.</span>end<span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L46" class="LineNr"> 46 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_operand_metadata<span class="Delimiter">(</span>w<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L47" class="LineNr"> 47 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!looks_like_hex_int<span class="Delimiter">(</span>w<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// later transforms are on their own to do their own bounds checking</span>
<span id="L48" class="LineNr"> 48 </span>    <span class="Normal">int32_t</span> x = <a href='011run.cc.html#L448'>parse_int</a><span class="Delimiter">(</span>w<span class="Delimiter">.</span>data<span class="Delimiter">);</span>
<span id="L49" class="LineNr"> 49 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>x &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L50" class="LineNr"> 50 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first == <span class="Constant">&quot;disp8&quot;</span> || p<span class="Delimiter">-&gt;</span>first == <span class="Constant">&quot;disp16&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L51" class="LineNr"> 51 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span>x<span class="Delimiter">)</span> &gt;= p<span class="Delimiter">-&gt;</span>second/<span class="Constant">2</span><span class="Delimiter">)</span>
<span id="L52" class="LineNr"> 52 </span>          <a href='003trace.cc.html#L217'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; w<span class="Delimiter">.</span>original &lt;&lt; <span class="Constant">&quot;' too large to fit in signed bitfield &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L53" class="LineNr"> 53 </span>      <span class="Delimiter">}</span>
<span id="L54" class="LineNr"> 54 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L55" class="LineNr"> 55 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span>x<span class="Delimiter">)</span> &gt;= p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">)</span>
<span id="L56" class="LineNr"> 56 </span>          <a href='003trace.cc.html#L217'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; w<span class="Delimiter">.</span>original &lt;&lt; <span class="Constant">&quot;' too large to fit in bitfield &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L57" class="LineNr"> 57 </span>      <span class="Delimiter">}</span>
<span id="L58" class="LineNr"> 58 </span>    <span class="Delimiter">}</span>
<span id="L59" class="LineNr"> 59 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L60" class="LineNr"> 60 </span>      <span class="Comment">// hacky? assuming bound is a power of 2</span>
<span id="L61" class="LineNr"> 61 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>x &lt; -<span class="Constant">1</span>*<span class="Normal">static_cast</span>&lt;<span class="Normal">int32_t</span>&gt;<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second/<span class="Constant">2</span><span class="Delimiter">))</span>
<span id="L62" class="LineNr"> 62 </span>        <a href='003trace.cc.html#L217'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; w<span class="Delimiter">.</span>original &lt;&lt; <span class="Constant">&quot;' too large to fit in bitfield &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L63" class="LineNr"> 63 </span>    <span class="Delimiter">}</span>
<span id="L64" class="LineNr"> 64 </span>  <span class="Delimiter">}</span>
<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">}</span>
<span id="L66" class="LineNr"> 66 </span>
<span id="L67" class="LineNr"> 67 </span><span class="Normal">void</span> <a href='032check_operand_bounds.cc.html#L67'>test_check_bitfield_sizes_for_imm8</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L68" class="LineNr"> 68 </span>  <a href='011run.cc.html#L85'>run</a><span class="Delimiter">(</span>
<span id="L69" class="LineNr"> 69 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L70" class="LineNr"> 70 </span>      <span class="Constant">&quot;c1/shift 4/subop/left 3/mod/direct 1/rm32/ECX 0xff/imm8&quot;</span>  <span class="Comment">// shift EBX left</span>
<span id="L71" class="LineNr"> 71 </span>  <span class="Delimiter">);</span>
<span id="L72" class="LineNr"> 72 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!trace_contains_errors<span class="Delimiter">());</span>
<span id="L73" class="LineNr"> 73 </span><span class="Delimiter">}</span>
<span id="L74" class="LineNr"> 74 </span>
<span id="L75" class="LineNr"> 75 </span><span class="Normal">void</span> <a href='032check_operand_bounds.cc.html#L75'>test_check_bitfield_sizes_for_imm8_error</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L76" class="LineNr"> 76 </span>  <span class="Special">Hide_errors</span> = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L77" class="LineNr"> 77 </span>  <a href='011run.cc.html#L85'>run</a><span class="Delimiter">(</span>
<span id="L78" class="LineNr"> 78 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L79" class="LineNr"> 79 </span>      <span class="Constant">&quot;c1/shift 4/subop/left 3/mod/direct 1/rm32/ECX 0x100/imm8&quot;</span>  <span class="Comment">// shift EBX left</span>
<span id="L80" class="LineNr"> 80 </span>  <span class="Delimiter">);</span>
<span id="L81" class="LineNr"> 81 </span>  <a href='003trace.cc.html#L281'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L82" class="LineNr"> 82 </span>      <span class="Constant">&quot;error: '0x100/imm8' too large to fit in bitfield imm8\n&quot;</span>
<span id="L83" class="LineNr"> 83 </span>  <span class="Delimiter">);</span>
<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">}</span>
<span id="L85" class="LineNr"> 85 </span>
<span id="L86" class="LineNr"> 86 </span><span class="Normal">void</span> <a href='032check_operand_bounds.cc.html#L86'>test_check_bitfield_sizes_for_negative_imm8</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L87" class="LineNr"> 87 </span>  <a href='011run.cc.html#L85'>run</a><span class="Delimiter">(</span>
<span id="L88" class="LineNr"> 88 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L89" class="LineNr"> 89 </span>      <span class="Constant">&quot;c1/shift 4/subop/left 3/mod/direct 1/rm32/ECX -0x80/imm8&quot;</span>  <span class="Comment">// shift EBX left</span>
<span id="L90" class="LineNr"> 90 </span>  <span class="Delimiter">);</span>
<span id="L91" class="LineNr"> 91 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!trace_contains_errors<span class="Delimiter">());</span>
<span id="L92" class="LineNr"> 92 </span><span class="Delimiter">}</span>
<span id="L93" class="LineNr"> 93 </span>
<span id="L94" class="LineNr"> 94 </span><span class="Normal">void</span> <a href='032check_operand_bounds.cc.html#L94'>test_check_bitfield_sizes_for_negative_imm8_error</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L95" class="LineNr"> 95 </span>  <span class="Special">Hide_errors</span> = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L96" class="LineNr"> 96 </span>  <a href='011run.cc.html#L85'>run</a><span class="Delimiter">(</span>
<span id="L97" class="LineNr"> 97 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L98" class="LineNr"> 98 </span>      <span class="Constant">&quot;c1/shift 4/subop/left 3/mod/direct 1/rm32/ECX -0x81/imm8&quot;</span>  <span class="Comment">// shift EBX left</span>
<span id="L99" class="LineNr"> 99 </span>  <span class="Delimiter">);</span>
<span id="L100" class="LineNr">100 </span>  <a href='003trace.cc.html#L281'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L101" class="LineNr">101 </span>      <span class="Constant">&quot;error: '-0x81/imm8' too large to fit in bitfield imm8\n&quot;</span>
<span id="L102" class="LineNr">102 </span>  <span class="Delimiter">);</span>
<span id="L103" class="LineNr">103 </span><span class="Delimiter">}</span>
<span id="L104" class="LineNr">104 </span>
<span id="L105" class="LineNr">105 </span><span class="Normal">void</span> <a href='032check_operand_bounds.cc.html#L105'>test_check_bitfield_sizes_for_disp8</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L106" class="LineNr">106 </span>  <span class="Comment">// not bothering to run</span>
<span id="L107" class="LineNr">107 </span>  transform<span class="Delimiter">(</span>
<span id="L108" class="LineNr">108 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L109" class="LineNr">109 </span>      <span class="Constant">&quot;01/add 1/mod/*+disp8 3/rm32 1/r32 0x7f/disp8\n&quot;</span>  <span class="Comment">// add ECX to *(EBX+0x7f)</span>
<span id="L110" class="LineNr">110 </span>  <span class="Delimiter">);</span>
<span id="L111" class="LineNr">111 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!trace_contains_errors<span class="Delimiter">());</span>
<span id="L112" class="LineNr">112 </span><span class="Delimiter">}</span>
<span id="L113" class="LineNr">113 </span>
<span id="L114" class="LineNr">114 </span><span class="Normal">void</span> <a href='032check_operand_bounds.cc.html#L114'>test_check_bitfield_sizes_for_disp8_error</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L115" class="LineNr">115 </span>  <span class="Special">Hide_errors</span> = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L116" class="LineNr">116 </span>  <a href='011run.cc.html#L85'>run</a><span class="Delimiter">(</span>
<span id="L117" class="LineNr">117 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L118" class="LineNr">118 </span>      <span class="Constant">&quot;01/add 1/mod/*+disp8 3/rm32 1/r32 0x80/disp8\n&quot;</span>  <span class="Comment">// add ECX to *(EBX+0x80)</span>
<span id="L119" class="LineNr">119 </span>  <span class="Delimiter">);</span>
<span id="L120" class="LineNr">120 </span>  <a href='003trace.cc.html#L281'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L121" class="LineNr">121 </span>      <span class="Constant">&quot;error: '0x80/disp8' too large to fit in signed bitfield disp8\n&quot;</span>
<span id="L122" class="LineNr">122 </span>  <span class="Delimiter">);</span>
<span id="L123" class="LineNr">123 </span><span class="Delimiter">}</span>
<span id="L124" class="LineNr">124 </span>
<span id="L125" class="LineNr">125 </span><span class="Normal">void</span> <a href='032check_operand_bounds.cc.html#L125'>test_check_bitfield_sizes_for_negative_disp8</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L126" class="LineNr">126 </span>  <span class="Comment">// not bothering to run</span>
<span id="L127" class="LineNr">127 </span>  transform<span class="Delimiter">(</span>
<span id="L128" class="LineNr">128 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L129" class="LineNr">129 </span>      <span class="Constant">&quot;01/add 1/mod/*+disp8 3/rm32 1/r32 -0x80/disp8\n&quot;</span>  <span class="Comment">// add ECX to *(EBX-0x80)</span>
<span id="L130" class="LineNr">130 </span>  <span class="Delimiter">);</span>
<span id="L131" class="LineNr">131 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!trace_contains_errors<span class="Delimiter">());</span>
<span id="L132" class="LineNr">132 </span><span class="Delimiter">}</span>
<span id="L133" class="LineNr">133 </span>
<span id="L134" class="LineNr">134 </span><span class="Normal">void</span> <a href='032check_operand_bounds.cc.html#L134'>test_check_bitfield_sizes_for_negative_disp8_error</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L135" class="LineNr">135 </span>  <span class="Special">Hide_errors</span> = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L136" class="LineNr">136 </span>  <a href='011run.cc.html#L85'>run</a><span class="Delimiter">(</span>
<span id="L137" class="LineNr">137 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L138" class="LineNr">138 </span>      <span class="Constant">&quot;01/add 1/mod/*+disp8 3/rm32 1/r32 -0x81/disp8\n&quot;</span>  <span class="Comment">// add ECX to *(EBX-0x81)</span>
<span id="L139" class="LineNr">139 </span>  <span class="Delimiter">);</span>
<span id="L140" class="LineNr">140 </span>  <a href='003trace.cc.html#L281'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L141" class="LineNr">141 </span>      <span class="Constant">&quot;error: '-0x81/disp8' too large to fit in bitfield disp8\n&quot;</span>
<span id="L142" class="LineNr">142 </span>  <span class="Delimiter">);</span>
<span id="L143" class="LineNr">143 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->