1<?xml version="1.0" encoding='UTF-8'?>
2<template
3  __format__="1"
4  name="POSIX/gcc multithreaded standalone"
5  prefix="art_"
6  errlogmode="tracefile.err"
7  trap_on_io_err="true"
8  remote_mode="false"
9  force_flush="true"
10  fork_enabled="false"
11  multithreaded="true"
12  threading="posix"
13  compiler_type="gcc"
14  trace_target="tracefile.out">
15
16  <!-- domain names have to be spaces-free -->
17
18  <domain
19    name="heap-memory"
20    float_handle="true"
21    handle="void*"
22    includesGlobal="true"
23    >
24    <!-- bad_handle -->
25    <expr
26      oper="=="
27      type="void*"
28      value="NULL"
29    />
30    <includes>stdlib.h</includes>
31    <tor
32       __type__="allocator"
33       name="malloc"
34       float_arg_n1="1"
35       float_arg_n2="0"
36       is_handle_arg_out="true"
37       handle_arg_out="0"
38       cpp_alias=""
39       >
40      <validateDom_before></validateDom_before>
41      <args
42        type="void*"
43        name=""
44      />
45      <args
46        type="size_t"
47        name="size"
48      />
49      <!-- badRetCode -->
50      <expr
51        oper="=="
52        type="void*"
53        value="NULL"
54      />
55    </tor>
56
57    <tor
58       __type__="allocator"
59      name="calloc"
60      float_arg_n1="1"
61      float_arg_n2="2"
62      is_handle_arg_out="true"
63      handle_arg_out="0"
64      cpp_alias=""
65      >
66      <validateDom_before></validateDom_before>
67      <args
68        type="void*"
69        name=""
70        />
71      <args
72        type="size_t"
73        name="nmemb"
74        />
75      <args
76        type="size_t"
77        name="size"
78        />
79
80      <!-- badRetCode -->
81      <expr
82        oper="=="
83        type="void*"
84        value="NULL"
85      />
86    </tor>
87
88    <!-- FIXME
89    т.к. is_handle_arg_out="false", то handle_arg_out может быть пустым или
90    нужна какая-то фиктивная цифра для разборщика? -->
91    <tor
92      __type__="deallocator"
93      name="free"
94      float_arg_n1="0"
95      float_arg_n2="0"
96      is_handle_arg_out="false"
97      handle_arg_out=""
98      cpp_alias=""
99      >
100      <validateDom_before>-</validateDom_before>
101      <validateDom_before>heap-memory</validateDom_before>
102      <args
103        type="void"
104        name=""
105        />
106      <args
107        type="void *"
108        name="ptr"
109        />
110
111      <!-- badRetCode -->
112      <expr
113        oper=""
114        type="void"
115        value=""
116      />
117
118    </tor>
119
120    <!-- torspec:reallocator -->
121    <tor
122      __type__="reallocator"
123      name="realloc"
124      float_arg_n1="2"
125      float_arg_n2="0"
126      is_handle_arg_out="true"
127      handle_arg_out="0"
128      cpp_alias=""
129      >
130      <validateDom_before>-</validateDom_before>
131      <validateDom_before>heap-memory</validateDom_before>
132      <args
133        type="void*"
134        name=""
135        />
136      <args
137        type="void*"
138        name="ptr"
139        />
140      <args
141        type="size_t"
142        name="size"
143        />
144      <!-- badRetCode -->
145      <expr
146        oper="=="
147        type="void*"
148        value="NULL"
149      />
150    </tor>
151  </domain>
152
153  <!--
154  <specialTors>
155  </specialTors>
156  -->
157
158  <domain
159    name="stream-io"
160    float_handle="false"
161    handle="FILE*"
162    includesGlobal="true"
163    >
164
165    <!-- bad_handle -->
166    <expr
167      oper="=="
168      type="FILE*"
169      value="NULL"
170    />
171    <includes>stdio.h</includes>
172    <tor
173      __type__="allocator"
174      name="fopen"
175      float_arg_n1="0"
176      float_arg_n2="0"
177      is_handle_arg_out="true"
178      handle_arg_out="0"
179      cpp_alias=""
180    >
181    <validateDom_before></validateDom_before>
182    <args
183      type="FILE*"
184      name=""
185    />
186    <args
187      type="const char*"
188      name="path"
189    />
190    <args
191      type="const char*"
192      name="mode"
193    />
194
195    <!-- badRetCode -->
196    <expr
197      oper="=="
198      type="FILE*"
199      value="NULL"
200    />
201    </tor>
202
203    <tor
204      __type__="operator"
205      name="fwrite"
206      float_arg_n1="2"
207      float_arg_n2="3"
208      is_handle_arg_out="false"
209      handle_arg_out="0"
210      cpp_alias=""
211    >
212    <validateDom_before>-</validateDom_before>
213    <validateDom_before>heap-memory</validateDom_before>
214    <validateDom_before>-</validateDom_before>
215    <validateDom_before>-</validateDom_before>
216    <validateDom_before>stream-io</validateDom_before>
217    <args
218      type="size_t"
219      name=""
220    />
221    <args
222      type="void*"
223      name="ptr"
224    />
225    <args
226      type="size_t"
227      name="size"
228    />
229    <args
230      type="size_t"
231      name="nmemb"
232    />
233    <args
234      type="FILE*"
235      name="stream"
236    />
237
238    <!-- badRetCode -->
239    <!-- тут RetCode не так прост, например: If an error, or the end-of-file
240    is reached, the return value is a short item count (or zero).
241    fread() does not distinguish between end-of-file and error, and callers
242    must use feof(3) and ferror(3) to determine which occurred. -->
243    <expr
244      oper=""
245      type=""
246      value=""
247    />
248    </tor>
249
250    <tor
251      __type__="deallocator"
252      name="fclose"
253      float_arg_n1="0"
254      float_arg_n2="0"
255      is_handle_arg_out="false"
256      handle_arg_out=""
257      cpp_alias=""
258      >
259      <validateDom_before>-</validateDom_before>
260      <validateDom_before>stream-io</validateDom_before>
261      <args
262        type="int"
263        name=""
264        />
265      <args
266        type="FILE*"
267        name="fp"
268        />
269      <!-- badRetCode -->
270      <expr
271        oper="!="
272        type="int"
273        value="0"
274        />
275    </tor>
276  </domain>
277</template>
278