Mercurial > hg > CbC > CbC_gcc
diff gcc/opts.h @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | f6334be47118 |
children | 84e7813d76e9 |
line wrap: on
line diff
--- a/gcc/opts.h Sun Aug 21 07:07:55 2011 +0900 +++ b/gcc/opts.h Fri Oct 27 22:46:09 2017 +0900 @@ -1,6 +1,5 @@ /* Command line option handling. - Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. + Copyright (C) 2002-2017 Free Software Foundation, Inc. This file is part of GCC. @@ -21,8 +20,7 @@ #ifndef GCC_OPTS_H #define GCC_OPTS_H -#include "input.h" -#include "vec.h" +#include "obstack.h" /* Specifies how a switch's VAR_VALUE relates to its FLAG_VAR. */ enum cl_var_type { @@ -53,21 +51,69 @@ struct cl_option { + /* Text of the option, including initial '-'. */ const char *opt_text; + /* Help text for --help, or NULL. */ const char *help; + /* Error message for missing argument, or NULL. */ const char *missing_argument_error; + /* Warning to give when this option is used, or NULL. */ const char *warn_message; + /* Argument of alias target when positive option given, or NULL. */ const char *alias_arg; + /* Argument of alias target when negative option given, or NULL. */ const char *neg_alias_arg; + /* Alias target, or N_OPTS if not an alias. */ unsigned short alias_target; + /* Previous option that is an initial substring of this one, or + N_OPTS if none. */ unsigned short back_chain; + /* Option length, not including initial '-'. */ unsigned char opt_len; + /* Next option in a sequence marked with Negative, or -1 if none. */ int neg_index; + /* CL_* flags for this option. */ unsigned int flags; + /* Disabled in this configuration. */ + BOOL_BITFIELD cl_disabled : 1; + /* Options marked with CL_SEPARATE take a number of separate + arguments (1 to 4) that is one more than the number in this + bit-field. */ + unsigned int cl_separate_nargs : 2; + /* Option is an alias when used with separate argument. */ + BOOL_BITFIELD cl_separate_alias : 1; + /* Alias to negative form of option. */ + BOOL_BITFIELD cl_negative_alias : 1; + /* Option takes no argument in the driver. */ + BOOL_BITFIELD cl_no_driver_arg : 1; + /* Reject this option in the driver. */ + BOOL_BITFIELD cl_reject_driver : 1; + /* Reject no- form. */ + BOOL_BITFIELD cl_reject_negative : 1; + /* Missing argument OK (joined). */ + BOOL_BITFIELD cl_missing_ok : 1; + /* Argument is an integer >=0. */ + BOOL_BITFIELD cl_uinteger : 1; + /* Argument is a HOST_WIDE_INT. */ + BOOL_BITFIELD cl_host_wide_int : 1; + /* Argument should be converted to lowercase. */ + BOOL_BITFIELD cl_tolower : 1; + /* Report argument with -fverbose-asm */ + BOOL_BITFIELD cl_report : 1; + /* Offset of field for this option in struct gcc_options, or + (unsigned short) -1 if none. */ unsigned short flag_var_offset; + /* Index in cl_enums of enum used for this option's arguments, for + CLVC_ENUM options. */ unsigned short var_enum; + /* How this option's value is determined and sets a field. */ enum cl_var_type var_type; - int var_value; + /* Value or bit-mask with which to set a field. */ + HOST_WIDE_INT var_value; + /* Range info minimum, or -1. */ + int range_min; + /* Range info maximum, or -1. */ + int range_max; }; /* Records that the state of an option consists of SIZE bytes starting @@ -83,12 +129,12 @@ extern const char *const lang_names[]; extern const unsigned int cl_lang_count; -#define CL_PARAMS (1 << 11) /* Fake entry. Used to display --param info with --help. */ -#define CL_WARNING (1 << 12) /* Enables an (optional) warning message. */ -#define CL_OPTIMIZATION (1 << 13) /* Enables an (optional) optimization. */ -#define CL_DRIVER (1 << 14) /* Driver option. */ -#define CL_TARGET (1 << 15) /* Target-specific option. */ -#define CL_COMMON (1 << 16) /* Language-independent. */ +#define CL_PARAMS (1U << 16) /* Fake entry. Used to display --param info with --help. */ +#define CL_WARNING (1U << 17) /* Enables an (optional) warning message. */ +#define CL_OPTIMIZATION (1U << 18) /* Enables an (optional) optimization. */ +#define CL_DRIVER (1U << 19) /* Driver option. */ +#define CL_TARGET (1U << 20) /* Target-specific option. */ +#define CL_COMMON (1U << 21) /* Language-independent. */ #define CL_MIN_OPTION_CLASS CL_PARAMS #define CL_MAX_OPTION_CLASS CL_COMMON @@ -98,23 +144,11 @@ This distinction is important because --help will not list options which only have these higher bits set. */ -/* Options marked with CL_SEPARATE take a number of separate arguments - (1 to 4) that is one more than the number in this bit-field. */ -#define CL_SEPARATE_NARGS_SHIFT 17 -#define CL_SEPARATE_NARGS_MASK (3 << CL_SEPARATE_NARGS_SHIFT) - -#define CL_SEPARATE_ALIAS (1 << 19) /* Option is an alias when used with separate argument. */ -#define CL_NO_DRIVER_ARG (1 << 20) /* Option takes no argument in the driver. */ -#define CL_REJECT_DRIVER (1 << 21) /* Reject this option in the driver. */ -#define CL_SAVE (1 << 22) /* Target-specific option for attribute. */ -#define CL_DISABLED (1 << 23) /* Disabled in this configuration. */ -#define CL_REPORT (1 << 24) /* Report argument with -fverbose-asm */ -#define CL_JOINED (1 << 25) /* If takes joined argument. */ -#define CL_SEPARATE (1 << 26) /* If takes a separate argument. */ -#define CL_REJECT_NEGATIVE (1 << 27) /* Reject no- form. */ -#define CL_MISSING_OK (1 << 28) /* Missing argument OK (joined). */ -#define CL_UINTEGER (1 << 29) /* Argument is an integer >=0. */ -#define CL_UNDOCUMENTED (1 << 30) /* Do not output with --help. */ +#define CL_JOINED (1U << 22) /* If takes joined argument. */ +#define CL_SEPARATE (1U << 23) /* If takes a separate argument. */ +#define CL_UNDOCUMENTED (1U << 24) /* Do not output with --help. */ +#define CL_NO_DWARF_RECORD (1U << 25) /* Do not add to producer string. */ +#define CL_PCH_IGNORE (1U << 26) /* Do compare state for pch. */ /* Flags for an enumerated option argument. */ #define CL_ENUM_CANONICAL (1 << 0) /* Canonical for this value. */ @@ -170,8 +204,9 @@ #define CL_ERR_MISSING_ARG (1 << 1) /* Argument required but missing. */ #define CL_ERR_WRONG_LANG (1 << 2) /* Option for wrong language. */ #define CL_ERR_UINT_ARG (1 << 3) /* Bad unsigned integer argument. */ -#define CL_ERR_ENUM_ARG (1 << 4) /* Bad enumerated argument. */ -#define CL_ERR_NEGATIVE (1 << 5) /* Negative form of option +#define CL_ERR_INT_RANGE_ARG (1 << 4) /* Bad unsigned integer argument. */ +#define CL_ERR_ENUM_ARG (1 << 5) /* Bad enumerated argument. */ +#define CL_ERR_NEGATIVE (1 << 6) /* Negative form of option not permitted (together with OPT_SPECIAL_unknown). */ @@ -218,16 +253,14 @@ /* Structure describing an option deferred for handling after the main option handlers. */ -typedef struct +struct cl_deferred_option { /* Elements from struct cl_decoded_option used for deferred options. */ size_t opt_index; const char *arg; int value; -} cl_deferred_option; -DEF_VEC_O(cl_deferred_option); -DEF_VEC_ALLOC_O(cl_deferred_option,heap); +}; /* Structure describing a single option-handling callback. */ @@ -239,7 +272,8 @@ const struct cl_decoded_option *decoded, unsigned int lang_mask, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc); + diagnostic_context *dc, + void (*target_option_override_hook) (void)); /* The mask that must have some bit in common with the flags for the option for this particular handler to be used. */ @@ -261,9 +295,8 @@ void (*wrong_lang_callback) (const struct cl_decoded_option *decoded, unsigned int lang_mask); - /* Callback to call after the successful handling of any option. */ - void (*post_handling_callback) (const struct cl_decoded_option *decoded, - unsigned int mask); + /* Target option override hook. */ + void (*target_option_override_hook) (void); /* The number of individual handlers. */ size_t num_handlers; @@ -272,6 +305,10 @@ struct cl_option_handler_func handlers[3]; }; +/* Hold command-line options associated with stack limitation. */ +extern const char *opt_fstack_limit_symbol_arg; +extern int opt_fstack_limit_register_no; + /* Input file names. */ extern const char **in_fnames; @@ -280,7 +317,13 @@ extern unsigned num_in_fnames; -size_t find_opt (const char *input, int lang_mask); +extern char *opts_concat (const char *first, ...); + +/* Obstack for option strings. */ + +extern struct obstack opts_obstack; + +size_t find_opt (const char *input, unsigned int lang_mask); extern int integral_argument (const char *arg); extern bool enum_value_to_arg (const struct cl_enum_arg *enum_args, const char **argp, int value, @@ -293,17 +336,21 @@ extern void init_options_once (void); extern void init_options_struct (struct gcc_options *opts, struct gcc_options *opts_set); +extern void init_opts_obstack (void); +extern void finalize_options_struct (struct gcc_options *opts); extern void decode_cmdline_options_to_array_default_mask (unsigned int argc, const char **argv, struct cl_decoded_option **decoded_options, unsigned int *decoded_options_count); -extern void set_default_handlers (struct cl_option_handlers *handlers); +extern void set_default_handlers (struct cl_option_handlers *handlers, + void (*target_option_override_hook) (void)); extern void decode_options (struct gcc_options *opts, struct gcc_options *opts_set, struct cl_decoded_option *decoded_options, unsigned int decoded_options_count, location_t loc, - diagnostic_context *dc); + diagnostic_context *dc, + void (*target_option_override_hook) (void)); extern int option_enabled (int opt_idx, void *opts); extern bool get_option_state (struct gcc_options *, int, struct cl_option_state *); @@ -317,7 +364,7 @@ size_t opt_index, const char *arg, int value, unsigned int lang_mask, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc); + bool generated_p, diagnostic_context *dc); void generate_option (size_t opt_index, const char *arg, int value, unsigned int lang_mask, struct cl_decoded_option *decoded); @@ -331,28 +378,35 @@ const struct cl_option_handlers *handlers, diagnostic_context *dc); extern void control_warning_option (unsigned int opt_index, int kind, - bool imply, location_t loc, + const char *arg, bool imply, location_t loc, unsigned int lang_mask, const struct cl_option_handlers *handlers, struct gcc_options *opts, struct gcc_options *opts_set, diagnostic_context *dc); +extern char *write_langs (unsigned int mask); extern void print_ignored_options (void); extern void handle_common_deferred_options (void); +unsigned int parse_sanitizer_options (const char *, location_t, int, + unsigned int, int, bool); + +unsigned int parse_no_sanitize_attribute (char *value); extern bool common_handle_option (struct gcc_options *opts, struct gcc_options *opts_set, const struct cl_decoded_option *decoded, unsigned int lang_mask, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc); + diagnostic_context *dc, + void (*target_option_override_hook) (void)); extern bool target_handle_option (struct gcc_options *opts, struct gcc_options *opts_set, const struct cl_decoded_option *decoded, unsigned int lang_mask, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc); + diagnostic_context *dc, + void (*target_option_override_hook) (void)); extern void finish_options (struct gcc_options *opts, struct gcc_options *opts_set, location_t loc); @@ -367,4 +421,22 @@ extern void set_struct_debug_option (struct gcc_options *opts, location_t loc, const char *value); +extern bool opt_enum_arg_to_value (size_t opt_index, const char *arg, + int *value, unsigned int lang_mask); + +extern const struct sanitizer_opts_s +{ + const char *const name; + unsigned int flag; + size_t len; + bool can_recover; +} sanitizer_opts[]; + +extern void add_misspelling_candidates (auto_vec<char *> *candidates, + const struct cl_option *option, + const char *base_option); +extern const char *candidates_list_and_hint (const char *arg, char *&str, + const auto_vec <const char *> & + candidates); + #endif