diff --git a/gcc/optc-gen.awk b/gcc/optc-gen.awk index 9e7e9970395..be5566b960a 100644 --- a/gcc/optc-gen.awk +++ b/gcc/optc-gen.awk @@ -595,5 +595,29 @@ for (i = 0; i < n_opts; i++) { } print "} " +split("", var_seen, ":") +print "\n#if !defined(GENERATOR_FILE) && defined(ENABLE_PLUGIN)" +print "DEBUG_VARIABLE const struct cl_var cl_vars[] =\n{" + +for (i = 0; i < n_opts; i++) { + name = var_name(flags[i]); + if (name == "") + continue; + var_seen[name] = 1; } +for (i = 0; i < n_extra_vars; i++) { + var = extra_vars[i] + sub(" *=.*", "", var) + name = var + sub("^.*[ *]", "", name) + sub("\\[.*\\]$", "", name) + if (name in var_seen) + continue; + print " { " quote name quote ", offsetof (struct gcc_options, x_" name ") }," + var_seen[name] = 1 +} + +print " { NULL, (unsigned short) -1 }\n};\n#endif" + +} diff --git a/gcc/opts.h b/gcc/opts.h index 7d1e126f217..d62bfcfdf6a 100644 --- a/gcc/opts.h +++ b/gcc/opts.h @@ -124,6 +124,14 @@ struct cl_option int range_max; }; +struct cl_var +{ + /* Name of the variable. */ + const char *var_name; + /* Offset of field for this var in struct gcc_options. */ + unsigned short var_offset; +}; + /* Records that the state of an option consists of SIZE bytes starting at DATA. DATA might point to CH in some cases. */ struct cl_option_state { @@ -134,6 +142,9 @@ struct cl_option_state { extern const struct cl_option cl_options[]; extern const unsigned int cl_options_count; +#ifdef ENABLE_PLUGIN +extern const struct cl_var cl_vars[]; +#endif extern const char *const lang_names[]; extern const unsigned int cl_lang_count;