The "permanent state" of an instrumentation is stored in various output files. Here are those files. Information is perhaps not perfectly divided among them, but I wanted not to create new files for version 1.4 of GCT, just change the contents of old files. The instrumented file contains: - The instrumented code itself, of course. - "per file" pointers that point into the global Gct_table and Gct_group_table. Each file only indexes off of its per-file pointer, thus allowing files to be instrumented and reinstrumented separately. gct_init(), gct_finish(), and finish_function() write this file. gct-ps-defs.c contains: - Definitions of all the per-file pointers, initialized with the appropriate offsets. gct_init.sh initializes this file, finish_instrumentation() appends one file's definition. gct-ps-defs.h contains information about how many "things" have been seen since the last invocation of gct-init: - How many test conditions (GCT_NUM_CONDITIONS). - How many race groups (GCT_NUM_RACE_GROUPS). - How many files (GCT_NUM_FILES) These numbers are used to make sure that names do not overlap or portions of tables are not reused. gct_init.sh initializes this file, init_instrumentation() initializes it, and finish_instrumentation() updates it. gct-map contains: - A header uniquely identifying this instrumentation. - A succession of file headers identifying a file. - A succession of function headers identifying functions within files. - The actual entries that describe coverage conditions. gct_init.sh initializes this file. It is appended to by init_mapfile(), mapfile_function_finish(), and dump_mapfile_buffer().