forked from intel/device-modeling-language
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RELEASENOTES-1.4.docu
447 lines (445 loc) · 25.3 KB
/
RELEASENOTES-1.4.docu
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
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
<!--
© 2021-2023 Intel Corporation
SPDX-License-Identifier: MPL-2.0
-->
<rn id="dml-1.4">
<name>Device Modeling Language (DML) 1.4</name>
<build-id value="6012"><add-note> Initial release of DML version 1.4. The new
language version is
documented in the <em>DML 1.4 reference manual</em>
document. Some highlights:
<dl>
<dt>Better compilation performance</dt><dd>2-3 times faster
compile for devices with large register banks</dd>
<dt>Improved reset support</dt><dd>The reset mechanism in 1.4
is not hard-coded, and can be adapted to different reset
flows</dd>
<dt>Templates as types</dt><dd>You can pass around references to
banks/registers/fields etc in variables</dd>
<dt>Multiple levels of overrides</dt><dd>Methods and
parameters can be overridden any number of times. In 1.2,
this is often prevented by standard library legacy.</dd>
<dt>Syntax simplification</dt><dd>Many adjustments to improve
readability; for instance, removal of <tt>$</tt> and C-like
method syntax</dd>
<dt>Standard library API simplification</dt><dd>Clearer API,
easier to understand</dd>
<dt>Updated language semantics</dt><dd>More consistent and
well-specified behaviour of method bodies and expressions,
providing more predictable model behaviour</dd>
</dl> </add-note></build-id>
<build-id value="6013"><add-note> Export declarations are now available as
replacements for
<tt>method extern</tt>. </add-note></build-id>
<build-id value="6018"><add-note> The dml12-compatibility.dml library file is
now available.
This file should be included from DML 1.4 files that
use or override templates defined in <tt>dml-builtins.dml</tt> and
are meant to be backwards-compatible with DML
1.2 devices. </add-note></build-id>
<build-id value="6018"><add-note> Templates can now override <tt>get</tt> or
<tt>set</tt> method
templates and still be inherited by both registers
and fields. </add-note></build-id>
<build-id value="6019"><add-note> Fixed two problems where devices with a
very large number of
registers compiles slowly <bug number="SIMICS-13802"/>
<bug number="SIMICS-13803"/>. </add-note></build-id>
<build-id value="6024"><add-note> The <tt>import</tt> statement has been
changed: If the path
starts with <tt>./</tt> or <tt>../</tt>, the path is now
interpreted relative to the directory of the importing file
<bug number="2209506845"/>. </add-note></build-id>
<build-id value="6024"><add-note> Fixed a problem where parameters defined in
global scope in DML
1.4 (typically auto-converted from a DML 1.2 <tt>constant</tt>)
had to be accessed with <tt>$</tt> when referenced from a
parameter in a DML 1.2 file. </add-note></build-id>
<build-id value="6037"><add-note> The <tt>read_unmapped_bits</tt> and the
<tt>write_unmapped_bits</tt>
methods are now available to be overridden for registers. This can
be used to customize behaviour of registers with fields that do not
cover all register bits. </add-note></build-id>
<build-id value="6037"><add-note> Fixed bug in dml-lib "common.dml" where
<tt>pci_system_error</tt>
could not be called. </add-note></build-id>
<build-id value="6041"><add-note> Fixed a bug that sometimes caused a crash
when calling the default
implementation of a shared method. </add-note></build-id>
<build-id value="6041"><add-note> Fixed a bug that caused unused goto labels
in generated C code. </add-note></build-id>
<build-id value="6041"><add-note> Fixed a bug that caused DMLC to ignore
compile errors in the
right operands of the <tt>&&</tt> and <tt>||</tt>
operators. For instance, in <tt>a && b</tt>,
and <tt>a</tt> resolves to constant false,
and <tt>b</tt> is nowhere defined, then DMLC would
previously silently evaluate the expression to false; now it
will give a proper error message.
Expressions like <tt>cond_is_defined && cond()</tt>, where
<tt>cond_is_defined</tt> is a constant parameter, can be
rewritten as <tt>pred_is_defined #? pred()
#: false</tt>. </add-note></build-id>
<build-id value="6042"><add-note> The <tt>get</tt> and <tt>set</tt> methods
are now overrideable in
bank objects. </add-note></build-id>
<build-id value="6044"><add-note> Fixed a bug in how log group names are
generated. </add-note></build-id>
<build-id value="6046"><add-note> In <tt>switch</tt> statements,
<tt>case</tt> labels are now
permitted inside <tt>#if</tt> blocks
<bug number="14011267833"/>. </add-note></build-id>
<build-id value="6046"><add-note> Fixed an issue where the <tt>++</tt> and
<tt>--</tt> operators could not
be applied to pointers. </add-note></build-id>
<build-id value="6046"><add-note> Added compile warnings when trying to
override a library method
that was called in DML 1.2 but is ignored in
DML 1.4. </add-note></build-id>
<build-id value="6049"><add-note> Obtaining the address of a member of a
layout is now supported
<bug number="SIMICS-15381"/>. </add-note></build-id>
<build-id value="6049"><add-note> DMLC now gives an explicit error message on
name collision
between two members of a <tt>layout</tt> or <tt>bitfields</tt>
<bug number="SIMICS-9088"/>. </add-note></build-id>
<build-id value="6051"><add-note> Fixed issue with passing endian integers as
arguments to shared methods. </add-note></build-id>
<build-id value="6052"><add-note> The <fun>get</fun> method in <tt>bank</tt>
objects is now declared
<tt>throws</tt>; a read outside registers causes an exception
like in DML 1.2, causing the inquiry access to fail. </add-note></build-id>
<build-id value="6052"><add-note> The parameters <tt>partial</tt> and
<tt>overlapping</tt> in banks
are now <tt>true</tt> by default. </add-note></build-id>
<build-id value="6053"><add-note> Field objects now have a <tt>val</tt>
member. This is currently
a bitslice into the field's bits within the parent register's
storage. The .val parameter can be read, and it can be written
using assignment (<tt>=</tt>); however, the operators
<tt>--</tt> and <tt>++</tt> do not work
yet. Also, <tt>.val</tt> cannot be accessed from a shared
method. </add-note></build-id>
<build-id value="6053"><add-note> Fix a bug that caused DMLC to crash in
declarations of field
objects in files with a <tt>bitorder be</tt> declaration
<bug number="SIMINT-1275"/>. </add-note></build-id>
<build-id value="6056"><add-note> DMLC will now give you a better error in
some cases where a
typed template parameter has an initializer that cannot
be evaluated in a static context. </add-note></build-id>
<build-id value="6056"><add-note> The experimental <tt>bank_obj</tt> template
is now available
in the <tt>utility</tt> file,
providing a single shared method <fun>bank_obj</fun> which
returns the bank configuration object of a bank. </add-note></build-id>
<build-id value="6059"><add-note> The formatting of the log message output in
the default
implementation of partial register reads and write has
been improved. </add-note></build-id>
<build-id value="6060"><add-note> You can now access <tt>.len</tt> on lists
and sequences to obtain
the number of elements they contain. This expression is constant
for lists and non-constant for sequences. </add-note></build-id>
<build-id value="6060"><add-note> Reverted a change that allowed DMLC to
provide better error messages
when typed parameters had non-static initializers since it was overly
conservative in some cases. </add-note></build-id>
<build-id value="6061"><add-note> Removed the syntax for goto
labels (<tt>label:</tt>). <tt>goto</tt> statements are already forbidden
in DML 1.4, so goto labels are useless. <tt>case</tt> and <tt>default</tt>
labels in <tt>switch</tt> blocks are still allowed. </add-note></build-id>
<build-id value="6061"><add-note> If the condition of a <tt>while</tt> loop
is statically
evaluated to false, then faulty code in the loop body can now
cause compile errors. Previously the loop body was
silently discarded. </add-note></build-id>
<build-id value="6075"><add-note> Removed incorrect documentation
of the deprecated 'banks' parameter. </add-note></build-id>
<build-id value="6079"><add-note> <tt>session</tt> variable declarations
are no longer permitted within methods marked with
<tt>inline</tt>. </add-note></build-id>
<build-id value="6079"><add-note> <tt>saved</tt> variable
declarations are now available. These can be used to declare
variables that behave similarly to <tt>session</tt> variables,
but that are automatically checkpointed.
<bug number="SIMICS-7031"/>. </add-note></build-id>
<build-id value="6079"><add-note> If a <tt>static</tt> variable is
declared within a method declared under an object array, it will
now result in a separate instance of the variable for each
instance of the containing object.
<bug number="SIMICS-13738"/>. </add-note></build-id>
<build-id value="6079"><add-note> Fixed a bug that caused a crash
in <tt>print-device-regs</tt> and related commands, when
inspecting a function-mapped bank array in a DML 1.4 device
<bug number="1508646546"/>.</add-note></build-id>
<build-id value="6080"><add-note> If a method argument has mismatching
type in an override, then an error will now be
reported <bug number="SIMICS-9337"/>.</add-note></build-id>
<build-id value="6081"><add-note> DMLC will now report errors for
references to undefined type names in some rare cases that
previously were ignored, such as unused typedefs and functions
imported from C using <tt>extern</tt>
<bug number="SIMICS-16187"/>.</add-note></build-id>
<build-id value="6081"><add-note> DMLC will now report an error for
methods in <tt>implement</tt> blocks, if the method's return
type does not match the interface method. Previously, only input
arguments were typechecked in interface
methods</add-note></build-id>
<build-id value="6082"><add-note> The parameter <tt>connect</tt> now
accepts the values <tt>"none"</tt> and <tt>"pseudo"</tt>, just
like attributes and registers do.</add-note></build-id>
<build-id value="6084"><add-note> Added a
template <tt>init_as_subobj</tt> which can be used
on <tt>connect</tt> objects to make it instantiate a subobject
automatically <bug number="SIMICS-16131"/>.</add-note></build-id>
<build-id value="6095"><add-note> Added <tt>saved</tt> variables declared
within templates to the template type.</add-note></build-id>
<build-id value="6095"><add-note> Added parameter <tt>unmapped_offset</tt>
which makes a register unmapped.</add-note></build-id>
<build-id value="6102"><add-note>Fixed typo in documentation
of <tt>miss_pattern_bank</tt> template.</add-note></build-id>
<build-id value="6104"><add-note> Corrected documentation in reference manual
regarding <tt>read_bits</tt> and <tt>write_bits</tt>
methods. </add-note></build-id>
<build-id value="6104"><add-note> An illegal arithmetic operation,
such as a division by zero or negative shift, no longer crashes
the simulation. Instead it is reported as a critical error, and evaluates
to zero <bug number="SIMICS-16639"/>.</add-note></build-id>
<build-id value="6119"><add-note> You can now use the syntax <tt>X then Y</tt>
for the level in log statements to have the first log happen on log level
<tt>X</tt> and subsequent logs happen on level <tt>Y</tt>
<bug number="SIMICS-13513"/>.</add-note></build-id>
<build-id value="6119"><add-note> Fixed an issue where multiple registers
or fields instantiating <tt>read_only</tt> or similar templates from
<tt>utility.dml</tt> would switch log-level at the same time
<bug number="SIMICS-7025"/>.</add-note></build-id>
<build-id value="6123"><add-note> You can now access <tt>.len</tt> on
constant-sized object or value arrays to obtain the number of elements
they contain. These expressions are constant
<bug number="SIMICS-13114"/>.</add-note></build-id>
<build-id value="6127"><add-note> <tt>after</tt> statements now support
cycles as a unit of time <bug number="SIMICS-8798"/>.</add-note>
</build-id>
<build-id value="6129"><add-note> The compiler now explicitly
forbids using the <tt>export</tt> statement on a method with
multiple output parameters.</add-note></build-id>
<build-id value="6129"><add-note> Various improvements to the reference
manual has been made. </add-note></build-id>
<build-id value="6131"><add-note> It is no longer an error to instantiate
a non-existing template from within a dead branch of an `#if` block.
</add-note></build-id>
<build-id value="6133"><add-note> Two values of the same template type
can now be compared for equality, and are equal when they
reference the same object <bug number="SIMICS-6998"/>.
The internal representation of values of template types has been changed.
It is no longer allowed to cast such values to integer or pointer types.
</add-note></build-id>
<build-id value="6133"><add-note>Attributes that do not define
<i>either of</i> the <tt>documentation</tt> parameter or
the <tt>desc</tt> parameter are now considered internal by
default. Register-attributes are internal by default, regardless
if they define <tt>documentation</tt> or <tt>desc</tt>. This can
be changed by explicitly overriding the <tt>internal</tt>
parameter of the register or attribute.
</add-note></build-id>
<build-id value="6133"><add-note> Fixed an issue where a log
statement could fail to switch log levels when used within
a shared method and called through trait references.
</add-note></build-id>
<build-id value="6133"><add-note> Fixed an issue where a log
statement could incorrectly switch log levels when used within
a method declared within an object array.
</add-note></build-id>
<build-id value="6133"><add-note> Writes outside fields in a register will
now by default log one <tt>spec-violation</tt> message on log level 1
on first such write, and no logging on further such writes.
</add-note></build-id>
<build-id value="6135"><add-note> Added a
template <tt>map_target</tt> which can be used
on <tt>connect</tt> objects to expose methods for reading and
writing data from/to the connected object.</add-note></build-id>
<build-id value="6135"><add-note> The device info XML file is no
longer needed by DML 1.4 devices. A dummy XML file is still
created to avoid packaging problems.</add-note></build-id>
<build-id value="6135"><add-note> Optimized the DML-provided
implementation of the <tt>register_info</tt> and the
<tt>number_of_registers</tt> methods of the
<tt>register_view</tt> interface <bug number="SIMICS-18427"/>.
</add-note></build-id>
<build-id value="6137"><add-note>Banks that use the transaction
interface (the parameter <tt>use_io_memory</tt>
is <tt>false</tt>) now handle accesses that are bigger than 8
bytes.</add-note></build-id>
<build-id value="6139"><add-note> Added simple C99-style designated
initializers, which may be used together with <tt>struct</tt>-like types
<bug number="SIMICS-17252"/>. For example, the following is now supported:
<pre>
local size_t size = get_size();
local buffer_t buf = {.len = size, .data = new uint8[size]};
</pre></add-note></build-id>
<build-id value="6143"><add-note>Added an optimization that
reduces the compile time for devices with huge register arrays
<bug number="SIMICS-7038"/> </add-note></build-id>
<build-id value="6143"><add-note> Added support for cancelling events posted
via <tt>after</tt> statement through the use of the
<tt>cancel_after()</tt> method, provided as part of the <tt>object</tt>
template <bug number="SIMICS-17930"/>.
</add-note></build-id>
<build-id value="6145"><add-note> <tt>break</tt> may now be used within
<tt>foreach</tt> statements <bug number="SIMICS-18719"/>.
</add-note></build-id>
<build-id value="6147"><add-note> When declaring an object array, any
dimension size specification may now be omitted if already defined through
a different declaration of the same object array
<bug number="22014423596"/>. Omission is done by specifying <tt>...</tt>
instead of the dimension size; for example, the following is now
supported:
<pre>
group g[i < 4][j < ...] { }
group g[i < ...][j < 7] { }
</pre></add-note></build-id>
<build-id value="6148"><add-note>The <tt>issue</tt> method in the
<tt>map_target</tt> template can now be overridden.</add-note></build-id>
<build-id value="6149"><add-note> Objects of type `port` and `bank`
can now be placed inside `group` objects.</add-note></build-id>
<build-id value="6149"><add-note> Added a new object type
`subdevice`. This object behaves similar to a `port`, with two
differences: It may contain `port` and `bank` objects, and the
corresponding Simics object does not add a `port.` prefix. For
instance, the object for `subdevice x;` is named `dev.x` instead
of `dev.port.x`.</add-note></build-id>
<build-id value="6149"><add-note> Fixed a bug that caused incorrect
Simics object names when the `init_as_subobj` template is
instantiated on a `connect` object inside a `bank` or `port`
object.</add-note></build-id>
<build-id value="6150"><add-note> Multiple variables may now be declared
simultaneously using tuple syntax (parentheses), and tuple syntax can now
be used for multiple simultaneous assignment or initialization
<bug number="SIMICS-7027"/>.</add-note></build-id>
<build-id value="6150"><add-note> Calls to throwing methods or methods with
multiple return values may now be used as the argument to a return
statement. Compound initializer syntax can now be used to return
values of <tt>struct</tt>-like types, e.g.:
<pre>
method construct_buffer_t(size_t siz) -> (buffer_t) {
return { .len = siz, .data = new uint8[siz] };
}
</pre></add-note></build-id>
<build-id value="6153"><add-note>Added new templates <tt>signal_port</tt>
and <tt>signal_connect</tt> which help maintain correct handling of the
signal interface, i.e. do not raise signal when already high, and do not
lower it when already low.</add-note></build-id>
<build-id value="6154"><add-note> Added independent methods
<bug number="SIMICS-6181"/>, independent startup methods
<bug number="SIMICS-17632"/>, and independent startup memoized methods.
</add-note></build-id>
<build-id value="6154"><add-note> Invalid definitions of typed parameters
now emit compile errors <bug number="SIMICS-6182"/>.
</add-note></build-id>
<build-id value="6154"><add-note> Method references can now be converted
into function pointers using <tt>&</tt>. This can only be used with
methods that that may also be exported using the <tt>export</tt>
statement <bug number="SIMICS-14921"/>.
</add-note></build-id>
<build-id value="6157"><add-note> Overlapping field ranges within registers
are no longer allowed <bug number="SIMICS-19194"/>.
</add-note></build-id>
<build-id value="6157"><add-note> Fixed regression introduced in Simics
6.0.133, where methods or variable named <tt>independent</tt>,
<tt>startup</tt> or <tt>memoized</tt> would give a parse
error.</add-note></build-id>
<build-id value="6161"><add-note> Fixed a bug where independent
methods were exported incorrectly.</add-note></build-id>
<build-id value="6171"><add-note>The methods <tt>signal_raise</tt> and
<tt>signal_lower</tt> are now overridable in HRESET port defined in template
<tt>hreset</tt></add-note></build-id>
<build-id value="6173"><add-note> When a transaction misses in a
bank, the error message is now logged by the <tt>unmapped_read</tt> and
<tt>unmapped_write</tt> methods of the bank, instead of
<tt>io_memory_access</tt> or <tt>transaction_access</tt>. This
makes it easier to override the default behaviour; however, if a
model suppresses logging by providing a local alternative
implementation of the <tt>*_access</tt> methods, and that
implementation still calls <tt>unmapped_read</tt>
or <tt>unmapped_write</tt>, then that model will no longer
suppress logging.</add-note></build-id>
<build-id value="6177"><add-note>Removed the generation of some
broken <tt>#line</tt> directives that caused problems in code
coverage reports <bug number="18024044100"/>.</add-note></build-id>
<build-id value="6177"><add-note>When using designated initializers, partial
initialization is now possible through trailing <tt>...</tt> syntax
<bug number="SIMICS-18705"/>. Members not explicitly initialized are
zero-initialized. For example, the following is now supported:
<pre>
local struct { int value; bool valid; } x = {.valid = false, ...}
</pre></add-note></build-id>
<build-id value="6178"><add-note>Template types are now considered
serializable <bug number="SIMICS-18507"/>.</add-note></build-id>
<build-id value="6178"><add-note>Casts of constant object references to
template types are now considered constant expressions, allowing for their
use as initializers for <tt>session</tt>/<tt>saved</tt> variables:
<pre>
template t { }
group g is t;
saved t s = cast(g, t);
</pre></add-note></build-id>
<build-id value="6183"><add-note> Fixed a bug for ports/banks inside
groups, that inhibited the creation of attributes for <tt>saved</tt>
variables <bug number="SIMICS-19422"/></add-note></build-id>
<build-id value="6184"><add-note>Fixed a bug where
<tt>session</tt>/<tt>saved</tt> variables initialized to values of
template types could cause internal compiler errors or invalid generated
C <bug number="SIMICS-20145"/>.</add-note></build-id>
<build-id value="6187"><add-note>Fixed a bug where models containing
any parameter defined to be a value of a template type resulted
in broken generated debug files when compiling with <tt>-g</tt>
<bug number="SIMICS-20200"/>.</add-note></build-id>
<build-id value="6187"><add-note>The <tt>set</tt> method in
the <tt>map_target</tt> template can now be overridden, to
add extra behavior before and after the attribute
is set.</add-note></build-id>
<build-id value="6190"><add-note>Any value of a template type can now be cast
to the template type <tt>object</tt>, even if <tt>object</tt> is not an
ancestor of the template <bug number="SIMICS-19950"/>.</add-note>
</build-id>
<build-id value="6191"><add-note>A new parameter <tt>init_val</tt> has been
introduced to the attribute templates <tt>bool_attr</tt>,
<tt>uint64_attr</tt>, <tt>int64_attr</tt> and <tt>double_attr</tt>. These
templates now also provide a default <tt>init()</tt> implementation
that leverages <tt>init_val</tt> in order to initialize the <tt>val</tt>
variable provided by the template <bug number="SIMICS-20108"/>.
</add-note></build-id>
<build-id value="6191"><add-note><tt>NULL</tt> is now considered a constant
expression, and equalities between <tt>NULL</tt> and other constant
expressions of pointer type (in particular, string literals) are now also
considered constant.</add-note></build-id>
<build-id value="6191"><add-note>Attribute registration for <tt>connect</tt>,
<tt>attribute</tt>, and <tt>register</tt> objects has been greatly
optimized, reducing the compilation times of models that feature large
numbers of such objects <bug number="SIMICS-6271"/>. A consequence of this
change is that errors in the <tt>get_attribute()</tt>,
<tt>set_attribute()</tt>, <tt>set()</tt>, and <tt>get()</tt> methods of
such objects are always reported by the compiler, even if the
<tt>configuration</tt> parameter is defined to be <tt>"none"</tt>.
</add-note></build-id>
<build-id value="6191"><add-note>Fixed a bug where leveraging serialization
of a template type could cause an internal compiler error if there is
some object in the model instantiating that template which never gets
referenced in a value of that template type <bug number="SIMICS-20301"/>.
</add-note></build-id>
<build-id value="6191"><add-note>The <tt>register_info</tt> interface
for banks now provide unique names for each field in an array
<bug number="SIMICS-18244"/>.</add-note></build-id>
<build-id value="6191"><add-note>Fixed a bug where <tt>.len</tt> on template
type sequences could only be used with direct <tt>each</tt>-<tt>in</tt>
expressions <bug number="SIMICS-20278"/>.</add-note></build-id>
<build-id value="6195"><add-note>Fixed Windows-specific gcc compile
error on DMLC-generated code, caused by name clashes with
the <tt>interface</tt> macro, defined by <tt>windows.h</tt>
<bug number="15012582368"/>.</add-note></build-id>
<build-id value="6200"><add-note>Fixed a bug in <tt>saved</tt>
variables that caused stack overflow during checkpoint restore
for huge (multi-megabyte) struct types
<bug number="18026246959"/>.</add-note></build-id>
</rn>