Files - GNU Compiler Collection (GCC) Internals
Description: GNU Compiler Collection (GCC) Internals

Next: Invoking the garbage collector, Previous: GGC Roots, Up: Type Information

### 22.3 Source Files Containing Type Information

Whenever you add `GTY` markers to a source file that previously had none, or create a new source file containing `GTY` markers, there are three things you need to do:

1. You need to add the file to the list of source files the type machinery scans. There are four cases:
   1. For a back-end file, this is usually done automatically; if not, you should add it to `target_gtfiles` in the appropriate port's entries in `config.gcc`.
   2. For files shared by all front ends, add the filename to the `GTFILES` variable in `Makefile.in`.
   3. For files that are part of one front end, add the filename to the `gtfiles` variable defined in the appropriate `config-lang.in`. For C, the file is `c-config-lang.in`. Headers should appear before non-headers in this list.
   4. For files that are part of some but not all front ends, add the filename to the `gtfiles` variable of all the front ends that use it.
2. If the file was a header file, you'll need to check that it's included in the right place to be visible to the generated files. For a back-end header file, this should be done automatically. For a front-end header file, it needs to be included by the same file that includes `gtype-lang.h`. For other header files, it needs to be included in `gtype-desc.c`, which is a generated file, so add it to `ifiles` in `open_base_file` in `gengtype.c`.

   For source files that aren't header files, the machinery will generate a header file that should be included in the source file you just changed. The file will be called `gt-path.h` where path is the pathname relative to the `gcc` directory with slashes replaced by `-`, so for example the header file to be included in `cp/parser.c` is called `gt-cp-parser.c`. The generated header file should be included after everything else in the source file. Don't forget to mention this file as a dependency in the `Makefile`!

For language frontends, there is another file that needs to be included somewhere. It will be called `gtype-lang.h`, where lang is the name of the subdirectory the language is contained in.

Plugins can add additional root tables. Run the `gengtype` utility in plugin mode as `gengtype -P pluginout.h` source-dir file-list plugin*.c with your plugin files plugin*.c using `GTY` to generate the pluginout.h file. The GCC build tree is needed to be present in that mode.