]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/doc/gty.texi
backport: As described in http://gcc.gnu.org/ml/gcc/2012-08/msg00015.html...
[thirdparty/gcc.git] / gcc / doc / gty.texi
1 @c Copyright (C) 2002, 2003, 2004, 2007, 2008, 2009, 2010
2 @c Free Software Foundation, Inc.
3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi.
5
6 @node Type Information
7 @chapter Memory Management and Type Information
8 @cindex GGC
9 @findex GTY
10
11 GCC uses some fairly sophisticated memory management techniques, which
12 involve determining information about GCC's data structures from GCC's
13 source code and using this information to perform garbage collection and
14 implement precompiled headers.
15
16 A full C++ parser would be too complicated for this task, so a limited
17 subset of C++ is interpreted and special markers are used to determine
18 what parts of the source to look at. All @code{struct}, @code{union}
19 and @code{template} structure declarations that define data structures
20 that are allocated under control of the garbage collector must be
21 marked. All global variables that hold pointers to garbage-collected
22 memory must also be marked. Finally, all global variables that need
23 to be saved and restored by a precompiled header must be marked. (The
24 precompiled header mechanism can only save static variables if they're
25 scalar. Complex data structures must be allocated in garbage-collected
26 memory to be saved in a precompiled header.)
27
28 The full format of a marker is
29 @smallexample
30 GTY (([@var{option}] [(@var{param})], [@var{option}] [(@var{param})] @dots{}))
31 @end smallexample
32 @noindent
33 but in most cases no options are needed. The outer double parentheses
34 are still necessary, though: @code{GTY(())}. Markers can appear:
35
36 @itemize @bullet
37 @item
38 In a structure definition, before the open brace;
39 @item
40 In a global variable declaration, after the keyword @code{static} or
41 @code{extern}; and
42 @item
43 In a structure field definition, before the name of the field.
44 @end itemize
45
46 Here are some examples of marking simple data structures and globals.
47
48 @smallexample
49 struct GTY(()) @var{tag}
50 @{
51 @var{fields}@dots{}
52 @};
53
54 typedef struct GTY(()) @var{tag}
55 @{
56 @var{fields}@dots{}
57 @} *@var{typename};
58
59 static GTY(()) struct @var{tag} *@var{list}; /* @r{points to GC memory} */
60 static GTY(()) int @var{counter}; /* @r{save counter in a PCH} */
61 @end smallexample
62
63 The parser understands simple typedefs such as
64 @code{typedef struct @var{tag} *@var{name};} and
65 @code{typedef int @var{name};}.
66 These don't need to be marked.
67
68 @menu
69 * GTY Options:: What goes inside a @code{GTY(())}.
70 * GGC Roots:: Making global variables GGC roots.
71 * User GC:: Adding user-provided GC marking routines.
72 * Files:: How the generated files work.
73 * Invoking the garbage collector:: How to invoke the garbage collector.
74 * Troubleshooting:: When something does not work as expected.
75 @end menu
76
77 @node GTY Options
78 @section The Inside of a @code{GTY(())}
79
80 Sometimes the C code is not enough to fully describe the type
81 structure. Extra information can be provided with @code{GTY} options
82 and additional markers. Some options take a parameter, which may be
83 either a string or a type name, depending on the parameter. If an
84 option takes no parameter, it is acceptable either to omit the
85 parameter entirely, or to provide an empty string as a parameter. For
86 example, @code{@w{GTY ((skip))}} and @code{@w{GTY ((skip ("")))}} are
87 equivalent.
88
89 When the parameter is a string, often it is a fragment of C code. Four
90 special escapes may be used in these strings, to refer to pieces of
91 the data structure being marked:
92
93 @cindex % in GTY option
94 @table @code
95 @item %h
96 The current structure.
97 @item %1
98 The structure that immediately contains the current structure.
99 @item %0
100 The outermost structure that contains the current structure.
101 @item %a
102 A partial expression of the form @code{[i1][i2]@dots{}} that indexes
103 the array item currently being marked.
104 @end table
105
106 For instance, suppose that you have a structure of the form
107 @smallexample
108 struct A @{
109 @dots{}
110 @};
111 struct B @{
112 struct A foo[12];
113 @};
114 @end smallexample
115 @noindent
116 and @code{b} is a variable of type @code{struct B}. When marking
117 @samp{b.foo[11]}, @code{%h} would expand to @samp{b.foo[11]},
118 @code{%0} and @code{%1} would both expand to @samp{b}, and @code{%a}
119 would expand to @samp{[11]}.
120
121 As in ordinary C, adjacent strings will be concatenated; this is
122 helpful when you have a complicated expression.
123 @smallexample
124 @group
125 GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
126 " ? TYPE_NEXT_VARIANT (&%h.generic)"
127 " : TREE_CHAIN (&%h.generic)")))
128 @end group
129 @end smallexample
130
131 The available options are:
132
133 @table @code
134 @findex length
135 @item length ("@var{expression}")
136
137 There are two places the type machinery will need to be explicitly told
138 the length of an array of non-atomic objects. The first case is when a
139 structure ends in a variable-length array, like this:
140 @smallexample
141 struct GTY(()) rtvec_def @{
142 int num_elem; /* @r{number of elements} */
143 rtx GTY ((length ("%h.num_elem"))) elem[1];
144 @};
145 @end smallexample
146
147 In this case, the @code{length} option is used to override the specified
148 array length (which should usually be @code{1}). The parameter of the
149 option is a fragment of C code that calculates the length.
150
151 The second case is when a structure or a global variable contains a
152 pointer to an array, like this:
153 @smallexample
154 struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
155 @end smallexample
156 In this case, @code{iter} has been allocated by writing something like
157 @smallexample
158 x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
159 @end smallexample
160 and the @code{collapse} provides the length of the field.
161
162 This second use of @code{length} also works on global variables, like:
163 @verbatim
164 static GTY((length("reg_known_value_size"))) rtx *reg_known_value;
165 @end verbatim
166
167 Note that the @code{length} option is only meant for use with arrays of
168 non-atomic objects, that is, objects that contain pointers pointing to
169 other GTY-managed objects. For other GC-allocated arrays and strings
170 you should use @code{atomic}.
171
172 @findex skip
173 @item skip
174
175 If @code{skip} is applied to a field, the type machinery will ignore it.
176 This is somewhat dangerous; the only safe use is in a union when one
177 field really isn't ever used.
178
179 @findex desc
180 @findex tag
181 @findex default
182 @item desc ("@var{expression}")
183 @itemx tag ("@var{constant}")
184 @itemx default
185
186 The type machinery needs to be told which field of a @code{union} is
187 currently active. This is done by giving each field a constant
188 @code{tag} value, and then specifying a discriminator using @code{desc}.
189 The value of the expression given by @code{desc} is compared against
190 each @code{tag} value, each of which should be different. If no
191 @code{tag} is matched, the field marked with @code{default} is used if
192 there is one, otherwise no field in the union will be marked.
193
194 In the @code{desc} option, the ``current structure'' is the union that
195 it discriminates. Use @code{%1} to mean the structure containing it.
196 There are no escapes available to the @code{tag} option, since it is a
197 constant.
198
199 For example,
200 @smallexample
201 struct GTY(()) tree_binding
202 @{
203 struct tree_common common;
204 union tree_binding_u @{
205 tree GTY ((tag ("0"))) scope;
206 struct cp_binding_level * GTY ((tag ("1"))) level;
207 @} GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
208 tree value;
209 @};
210 @end smallexample
211
212 In this example, the value of BINDING_HAS_LEVEL_P when applied to a
213 @code{struct tree_binding *} is presumed to be 0 or 1. If 1, the type
214 mechanism will treat the field @code{level} as being present and if 0,
215 will treat the field @code{scope} as being present.
216
217 @findex param_is
218 @findex use_param
219 @item param_is (@var{type})
220 @itemx use_param
221
222 Sometimes it's convenient to define some data structure to work on
223 generic pointers (that is, @code{PTR}) and then use it with a specific
224 type. @code{param_is} specifies the real type pointed to, and
225 @code{use_param} says where in the generic data structure that type
226 should be put.
227
228 For instance, to have a @code{htab_t} that points to trees, one would
229 write the definition of @code{htab_t} like this:
230 @smallexample
231 typedef struct GTY(()) @{
232 @dots{}
233 void ** GTY ((use_param, @dots{})) entries;
234 @dots{}
235 @} htab_t;
236 @end smallexample
237 and then declare variables like this:
238 @smallexample
239 static htab_t GTY ((param_is (union tree_node))) ict;
240 @end smallexample
241
242 @findex param@var{n}_is
243 @findex use_param@var{n}
244 @item param@var{n}_is (@var{type})
245 @itemx use_param@var{n}
246
247 In more complicated cases, the data structure might need to work on
248 several different types, which might not necessarily all be pointers.
249 For this, @code{param1_is} through @code{param9_is} may be used to
250 specify the real type of a field identified by @code{use_param1} through
251 @code{use_param9}.
252
253 @findex use_params
254 @item use_params
255
256 When a structure contains another structure that is parameterized,
257 there's no need to do anything special, the inner structure inherits the
258 parameters of the outer one. When a structure contains a pointer to a
259 parameterized structure, the type machinery won't automatically detect
260 this (it could, it just doesn't yet), so it's necessary to tell it that
261 the pointed-to structure should use the same parameters as the outer
262 structure. This is done by marking the pointer with the
263 @code{use_params} option.
264
265 @findex deletable
266 @item deletable
267
268 @code{deletable}, when applied to a global variable, indicates that when
269 garbage collection runs, there's no need to mark anything pointed to
270 by this variable, it can just be set to @code{NULL} instead. This is used
271 to keep a list of free structures around for re-use.
272
273 @findex if_marked
274 @item if_marked ("@var{expression}")
275
276 Suppose you want some kinds of object to be unique, and so you put them
277 in a hash table. If garbage collection marks the hash table, these
278 objects will never be freed, even if the last other reference to them
279 goes away. GGC has special handling to deal with this: if you use the
280 @code{if_marked} option on a global hash table, GGC will call the
281 routine whose name is the parameter to the option on each hash table
282 entry. If the routine returns nonzero, the hash table entry will
283 be marked as usual. If the routine returns zero, the hash table entry
284 will be deleted.
285
286 The routine @code{ggc_marked_p} can be used to determine if an element
287 has been marked already; in fact, the usual case is to use
288 @code{if_marked ("ggc_marked_p")}.
289
290 @findex mark_hook
291 @item mark_hook ("@var{hook-routine-name}")
292
293 If provided for a structure or union type, the given
294 @var{hook-routine-name} (between double-quotes) is the name of a
295 routine called when the garbage collector has just marked the data as
296 reachable. This routine should not change the data, or call any ggc
297 routine. Its only argument is a pointer to the just marked (const)
298 structure or union.
299
300 @findex maybe_undef
301 @item maybe_undef
302
303 When applied to a field, @code{maybe_undef} indicates that it's OK if
304 the structure that this fields points to is never defined, so long as
305 this field is always @code{NULL}. This is used to avoid requiring
306 backends to define certain optional structures. It doesn't work with
307 language frontends.
308
309 @findex nested_ptr
310 @item nested_ptr (@var{type}, "@var{to expression}", "@var{from expression}")
311
312 The type machinery expects all pointers to point to the start of an
313 object. Sometimes for abstraction purposes it's convenient to have
314 a pointer which points inside an object. So long as it's possible to
315 convert the original object to and from the pointer, such pointers
316 can still be used. @var{type} is the type of the original object,
317 the @var{to expression} returns the pointer given the original object,
318 and the @var{from expression} returns the original object given
319 the pointer. The pointer will be available using the @code{%h}
320 escape.
321
322 @findex chain_next
323 @findex chain_prev
324 @findex chain_circular
325 @item chain_next ("@var{expression}")
326 @itemx chain_prev ("@var{expression}")
327 @itemx chain_circular ("@var{expression}")
328
329 It's helpful for the type machinery to know if objects are often
330 chained together in long lists; this lets it generate code that uses
331 less stack space by iterating along the list instead of recursing down
332 it. @code{chain_next} is an expression for the next item in the list,
333 @code{chain_prev} is an expression for the previous item. For singly
334 linked lists, use only @code{chain_next}; for doubly linked lists, use
335 both. The machinery requires that taking the next item of the
336 previous item gives the original item. @code{chain_circular} is similar
337 to @code{chain_next}, but can be used for circular single linked lists.
338
339 @findex reorder
340 @item reorder ("@var{function name}")
341
342 Some data structures depend on the relative ordering of pointers. If
343 the precompiled header machinery needs to change that ordering, it
344 will call the function referenced by the @code{reorder} option, before
345 changing the pointers in the object that's pointed to by the field the
346 option applies to. The function must take four arguments, with the
347 signature @samp{@w{void *, void *, gt_pointer_operator, void *}}.
348 The first parameter is a pointer to the structure that contains the
349 object being updated, or the object itself if there is no containing
350 structure. The second parameter is a cookie that should be ignored.
351 The third parameter is a routine that, given a pointer, will update it
352 to its correct new value. The fourth parameter is a cookie that must
353 be passed to the second parameter.
354
355 PCH cannot handle data structures that depend on the absolute values
356 of pointers. @code{reorder} functions can be expensive. When
357 possible, it is better to depend on properties of the data, like an ID
358 number or the hash of a string instead.
359
360 @findex variable_size
361 @item variable_size
362
363 The type machinery expects the types to be of constant size. When this
364 is not true, for example, with structs that have array fields or unions,
365 the type machinery cannot tell how many bytes need to be allocated at
366 each allocation. The @code{variable_size} is used to mark such types.
367 The type machinery then provides allocators that take a parameter
368 indicating an exact size of object being allocated. Note that the size
369 must be provided in bytes whereas the @code{length} option works with
370 array lengths in number of elements.
371
372 For example,
373 @smallexample
374 struct GTY((variable_size)) sorted_fields_type @{
375 int len;
376 tree GTY((length ("%h.len"))) elts[1];
377 @};
378 @end smallexample
379
380 Then the objects of @code{struct sorted_fields_type} are allocated in GC
381 memory as follows:
382 @smallexample
383 field_vec = ggc_alloc_sorted_fields_type (size);
384 @end smallexample
385
386 If @var{field_vec->elts} stores @var{n} elements, then @var{size}
387 could be calculated as follows:
388 @smallexample
389 size_t size = sizeof (struct sorted_fields_type) + n * sizeof (tree);
390 @end smallexample
391
392 @findex atomic
393 @item atomic
394
395 The @code{atomic} option can only be used with pointers. It informs
396 the GC machinery that the memory that the pointer points to does not
397 contain any pointers, and hence it should be treated by the GC and PCH
398 machinery as an ``atomic'' block of memory that does not need to be
399 examined when scanning memory for pointers. In particular, the
400 machinery will not scan that memory for pointers to mark them as
401 reachable (when marking pointers for GC) or to relocate them (when
402 writing a PCH file).
403
404 The @code{atomic} option differs from the @code{skip} option.
405 @code{atomic} keeps the memory under Garbage Collection, but makes the
406 GC ignore the contents of the memory. @code{skip} is more drastic in
407 that it causes the pointer and the memory to be completely ignored by
408 the Garbage Collector. So, memory marked as @code{atomic} is
409 automatically freed when no longer reachable, while memory marked as
410 @code{skip} is not.
411
412 The @code{atomic} option must be used with great care, because all
413 sorts of problem can occur if used incorrectly, that is, if the memory
414 the pointer points to does actually contain a pointer.
415
416 Here is an example of how to use it:
417 @smallexample
418 struct GTY(()) my_struct @{
419 int number_of_elements;
420 unsigned int * GTY ((atomic)) elements;
421 @};
422 @end smallexample
423 In this case, @code{elements} is a pointer under GC, and the memory it
424 points to needs to be allocated using the Garbage Collector, and will
425 be freed automatically by the Garbage Collector when it is no longer
426 referenced. But the memory that the pointer points to is an array of
427 @code{unsigned int} elements, and the GC must not try to scan it to
428 find pointers to mark or relocate, which is why it is marked with the
429 @code{atomic} option.
430
431 Note that, currently, global variables can not be marked with
432 @code{atomic}; only fields of a struct can. This is a known
433 limitation. It would be useful to be able to mark global pointers
434 with @code{atomic} to make the PCH machinery aware of them so that
435 they are saved and restored correctly to PCH files.
436
437 @findex special
438 @item special ("@var{name}")
439
440 The @code{special} option is used to mark types that have to be dealt
441 with by special case machinery. The parameter is the name of the
442 special case. See @file{gengtype.c} for further details. Avoid
443 adding new special cases unless there is no other alternative.
444
445 @findex user
446 @item user
447
448 The @code{user} option indicates that the code to mark structure
449 fields is completely handled by user-provided routines. See section
450 @ref{User GC} for details on what functions need to be provided.
451 @end table
452
453 @node User GC
454 @section Support for user-provided GC marking routines
455 @cindex user gc
456 The garbage collector supports types for which no automatic marking
457 code is generated. For these types, the user is required to provide
458 three functions: one to act as a marker for garbage collection, and
459 two functions to act as marker and pointer walker for pre-compiled
460 headers.
461
462 Given a structure @code{struct GTY((user)) my_struct}, the following functions
463 should be defined to mark @code{my_struct}:
464
465 @smallexample
466 void gt_ggc_mx (my_struct *p)
467 @{
468 /* This marks field 'fld'. */
469 gt_ggc_mx (p->fld);
470 @}
471
472 void gt_pch_nx (my_struct *p)
473 @{
474 /* This marks field 'fld'. */
475 gt_pch_nx (tp->fld);
476 @}
477
478 void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie)
479 @{
480 /* For every field 'fld', call the given pointer operator. */
481 op (&(tp->fld), cookie);
482 @}
483 @end smallexample
484
485 In general, each marker @code{M} should call @code{M} for every
486 pointer field in the structure. Fields that are not allocated in GC
487 or are not pointers must be ignored.
488
489 For embedded lists (e.g., structures with a @code{next} or @code{prev}
490 pointer), the marker must follow the chain and mark every element in
491 it.
492
493 Note that the rules for the pointer walker @code{gt_pch_nx (my_struct
494 *, gt_pointer_operator, void *)} are slightly different. In this
495 case, the operation @code{op} must be applied to the @emph{address} of
496 every pointer field.
497
498 @section User-provided marking routines for template types
499 When a template type @code{TP} is marked with @code{GTY}, all
500 instances of that type are considered user-provided types. This means
501 that the individual instances of @code{TP} do not need to be marked
502 with @code{GTY}. The user needs to provide template functions to mark
503 all the fields of the type.
504
505 The following code snippets represent all the functions that need to
506 be provided. Note that type @code{TP} may reference to more than one
507 type. In these snippets, there is only one type @code{T}, but there
508 could be more.
509
510 @smallexample
511 template<typename T>
512 void gt_ggc_mx (TP<T> *tp)
513 @{
514 extern void gt_ggc_mx (T&);
515
516 /* This marks field 'fld' of type 'T'. */
517 gt_ggc_mx (tp->fld);
518 @}
519
520 template<typename T>
521 void gt_pch_nx (TP<T> *tp)
522 @{
523 extern void gt_pch_nx (T&);
524
525 /* This marks field 'fld' of type 'T'. */
526 gt_pch_nx (tp->fld);
527 @}
528
529 template<typename T>
530 void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie)
531 @{
532 /* For every field 'fld' of 'tp' with type 'T *', call the given
533 pointer operator. */
534 op (&(tp->fld), cookie);
535 @}
536
537 template<typename T>
538 void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie)
539 @{
540 extern void gt_pch_nx (T *, gt_pointer_operator, void *);
541
542 /* For every field 'fld' of 'tp' with type 'T', call the pointer
543 walker for all the fields of T. */
544 gt_pch_nx (&(tp->fld), op, cookie);
545 @}
546 @end smallexample
547
548 Support for user-defined types is currently limited. The following
549 restrictions apply:
550
551 @enumerate
552 @item Type @code{TP} and all the argument types @code{T} must be
553 marked with @code{GTY}.
554
555 @item Type @code{TP} can only have type names in its argument list.
556
557 @item The pointer walker functions are different for @code{TP<T>} and
558 @code{TP<T *>}. In the case of @code{TP<T>}, references to
559 @code{T} must be handled by calling @code{gt_pch_nx} (which
560 will, in turn, walk all the pointers inside fields of @code{T}).
561 In the case of @code{TP<T *>}, references to @code{T *} must be
562 handled by calling the @code{op} function on the address of the
563 pointer (see the code snippets above).
564 @end enumerate
565
566 @node GGC Roots
567 @section Marking Roots for the Garbage Collector
568 @cindex roots, marking
569 @cindex marking roots
570
571 In addition to keeping track of types, the type machinery also locates
572 the global variables (@dfn{roots}) that the garbage collector starts
573 at. Roots must be declared using one of the following syntaxes:
574
575 @itemize @bullet
576 @item
577 @code{extern GTY(([@var{options}])) @var{type} @var{name};}
578 @item
579 @code{static GTY(([@var{options}])) @var{type} @var{name};}
580 @end itemize
581 @noindent
582 The syntax
583 @itemize @bullet
584 @item
585 @code{GTY(([@var{options}])) @var{type} @var{name};}
586 @end itemize
587 @noindent
588 is @emph{not} accepted. There should be an @code{extern} declaration
589 of such a variable in a header somewhere---mark that, not the
590 definition. Or, if the variable is only used in one file, make it
591 @code{static}.
592
593 @node Files
594 @section Source Files Containing Type Information
595 @cindex generated files
596 @cindex files, generated
597
598 Whenever you add @code{GTY} markers to a source file that previously
599 had none, or create a new source file containing @code{GTY} markers,
600 there are three things you need to do:
601
602 @enumerate
603 @item
604 You need to add the file to the list of source files the type
605 machinery scans. There are four cases:
606
607 @enumerate a
608 @item
609 For a back-end file, this is usually done
610 automatically; if not, you should add it to @code{target_gtfiles} in
611 the appropriate port's entries in @file{config.gcc}.
612
613 @item
614 For files shared by all front ends, add the filename to the
615 @code{GTFILES} variable in @file{Makefile.in}.
616
617 @item
618 For files that are part of one front end, add the filename to the
619 @code{gtfiles} variable defined in the appropriate
620 @file{config-lang.in}.
621 Headers should appear before non-headers in this list.
622
623 @item
624 For files that are part of some but not all front ends, add the
625 filename to the @code{gtfiles} variable of @emph{all} the front ends
626 that use it.
627 @end enumerate
628
629 @item
630 If the file was a header file, you'll need to check that it's included
631 in the right place to be visible to the generated files. For a back-end
632 header file, this should be done automatically. For a front-end header
633 file, it needs to be included by the same file that includes
634 @file{gtype-@var{lang}.h}. For other header files, it needs to be
635 included in @file{gtype-desc.c}, which is a generated file, so add it to
636 @code{ifiles} in @code{open_base_file} in @file{gengtype.c}.
637
638 For source files that aren't header files, the machinery will generate a
639 header file that should be included in the source file you just changed.
640 The file will be called @file{gt-@var{path}.h} where @var{path} is the
641 pathname relative to the @file{gcc} directory with slashes replaced by
642 @verb{|-|}, so for example the header file to be included in
643 @file{cp/parser.c} is called @file{gt-cp-parser.c}. The
644 generated header file should be included after everything else in the
645 source file. Don't forget to mention this file as a dependency in the
646 @file{Makefile}!
647
648 @end enumerate
649
650 For language frontends, there is another file that needs to be included
651 somewhere. It will be called @file{gtype-@var{lang}.h}, where
652 @var{lang} is the name of the subdirectory the language is contained in.
653
654 Plugins can add additional root tables. Run the @code{gengtype}
655 utility in plugin mode as @code{gengtype -P pluginout.h @var{source-dir}
656 @var{file-list} @var{plugin*.c}} with your plugin files
657 @var{plugin*.c} using @code{GTY} to generate the @var{pluginout.h} file.
658 The GCC build tree is needed to be present in that mode.
659
660
661 @node Invoking the garbage collector
662 @section How to invoke the garbage collector
663 @cindex garbage collector, invocation
664 @findex ggc_collect
665
666 The GCC garbage collector GGC is only invoked explicitly. In contrast
667 with many other garbage collectors, it is not implicitly invoked by
668 allocation routines when a lot of memory has been consumed. So the
669 only way to have GGC reclaim storage it to call the @code{ggc_collect}
670 function explicitly. This call is an expensive operation, as it may
671 have to scan the entire heap. Beware that local variables (on the GCC
672 call stack) are not followed by such an invocation (as many other
673 garbage collectors do): you should reference all your data from static
674 or external @code{GTY}-ed variables, and it is advised to call
675 @code{ggc_collect} with a shallow call stack. The GGC is an exact mark
676 and sweep garbage collector (so it does not scan the call stack for
677 pointers). In practice GCC passes don't often call @code{ggc_collect}
678 themselves, because it is called by the pass manager between passes.
679
680 At the time of the @code{ggc_collect} call all pointers in the GC-marked
681 structures must be valid or @code{NULL}. In practice this means that
682 there should not be uninitialized pointer fields in the structures even
683 if your code never reads or writes those fields at a particular
684 instance. One way to ensure this is to use cleared versions of
685 allocators unless all the fields are initialized manually immediately
686 after allocation.
687
688 @node Troubleshooting
689 @section Troubleshooting the garbage collector
690 @cindex garbage collector, troubleshooting
691
692 With the current garbage collector implementation, most issues should
693 show up as GCC compilation errors. Some of the most commonly
694 encountered issues are described below.
695
696 @itemize @bullet
697 @item Gengtype does not produce allocators for a @code{GTY}-marked type.
698 Gengtype checks if there is at least one possible path from GC roots to
699 at least one instance of each type before outputting allocators. If
700 there is no such path, the @code{GTY} markers will be ignored and no
701 allocators will be output. Solve this by making sure that there exists
702 at least one such path. If creating it is unfeasible or raises a ``code
703 smell'', consider if you really must use GC for allocating such type.
704
705 @item Link-time errors about undefined @code{gt_ggc_r_foo_bar} and
706 similarly-named symbols. Check if your @file{foo_bar} source file has
707 @code{#include "gt-foo_bar.h"} as its very last line.
708
709 @end itemize