OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [opts.h] - Blame information for rev 774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 684 jeremybenn
/* Command line option handling.
2
   Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
3
   Free Software Foundation, Inc.
4
 
5
This file is part of GCC.
6
 
7
GCC is free software; you can redistribute it and/or modify it under
8
the terms of the GNU General Public License as published by the Free
9
Software Foundation; either version 3, or (at your option) any later
10
version.
11
 
12
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13
WARRANTY; without even the implied warranty of MERCHANTABILITY or
14
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15
for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with GCC; see the file COPYING3.  If not see
19
<http://www.gnu.org/licenses/>.  */
20
 
21
#ifndef GCC_OPTS_H
22
#define GCC_OPTS_H
23
 
24
#include "input.h"
25
#include "vec.h"
26
 
27
/* Specifies how a switch's VAR_VALUE relates to its FLAG_VAR.  */
28
enum cl_var_type {
29
  /* The switch is enabled when FLAG_VAR is nonzero.  */
30
  CLVC_BOOLEAN,
31
 
32
  /* The switch is enabled when FLAG_VAR == VAR_VALUE.  */
33
  CLVC_EQUAL,
34
 
35
  /* The switch is enabled when VAR_VALUE is not set in FLAG_VAR.  */
36
  CLVC_BIT_CLEAR,
37
 
38
  /* The switch is enabled when VAR_VALUE is set in FLAG_VAR.  */
39
  CLVC_BIT_SET,
40
 
41
  /* The switch takes a string argument and FLAG_VAR points to that
42
     argument.  */
43
  CLVC_STRING,
44
 
45
  /* The switch takes an enumerated argument (VAR_ENUM says what
46
     enumeration) and FLAG_VAR points to that argument.  */
47
  CLVC_ENUM,
48
 
49
  /* The switch should be stored in the VEC pointed to by FLAG_VAR for
50
     later processing.  */
51
  CLVC_DEFER
52
};
53
 
54
struct cl_option
55
{
56
  /* Text of the option, including initial '-'.  */
57
  const char *opt_text;
58
  /* Help text for --help, or NULL.  */
59
  const char *help;
60
  /* Error message for missing argument, or NULL.  */
61
  const char *missing_argument_error;
62
  /* Warning to give when this option is used, or NULL.  */
63
  const char *warn_message;
64
  /* Argument of alias target when positive option given, or NULL.  */
65
  const char *alias_arg;
66
  /* Argument of alias target when negative option given, or NULL.  */
67
  const char *neg_alias_arg;
68
  /* Alias target, or N_OPTS if not an alias.  */
69
  unsigned short alias_target;
70
  /* Previous option that is an initial substring of this one, or
71
     N_OPTS if none.  */
72
  unsigned short back_chain;
73
  /* Option length, not including initial '-'.  */
74
  unsigned char opt_len;
75
  /* Next option in a sequence marked with Negative, or -1 if none.  */
76
  int neg_index;
77
  /* CL_* flags for this option.  */
78
  unsigned int flags;
79
  /* Disabled in this configuration.  */
80
  BOOL_BITFIELD cl_disabled : 1;
81
  /* Options marked with CL_SEPARATE take a number of separate
82
     arguments (1 to 4) that is one more than the number in this
83
     bit-field.  */
84
  unsigned int cl_separate_nargs : 2;
85
  /* Option is an alias when used with separate argument.  */
86
  BOOL_BITFIELD cl_separate_alias : 1;
87
  /* Alias to negative form of option.  */
88
  BOOL_BITFIELD cl_negative_alias : 1;
89
  /* Option takes no argument in the driver.  */
90
  BOOL_BITFIELD cl_no_driver_arg : 1;
91
  /* Reject this option in the driver.  */
92
  BOOL_BITFIELD cl_reject_driver : 1;
93
  /* Reject no- form.  */
94
  BOOL_BITFIELD cl_reject_negative : 1;
95
  /* Missing argument OK (joined).  */
96
  BOOL_BITFIELD cl_missing_ok : 1;
97
  /* Argument is an integer >=0.  */
98
  BOOL_BITFIELD cl_uinteger : 1;
99
  /* Argument is a HOST_WIDE_INT.  */
100
  BOOL_BITFIELD cl_host_wide_int : 1;
101
  /* Argument should be converted to lowercase.  */
102
  BOOL_BITFIELD cl_tolower : 1;
103
  /* Report argument with -fverbose-asm  */
104
  BOOL_BITFIELD cl_report : 1;
105
  /* Offset of field for this option in struct gcc_options, or
106
     (unsigned short) -1 if none.  */
107
  unsigned short flag_var_offset;
108
  /* Index in cl_enums of enum used for this option's arguments, for
109
     CLVC_ENUM options.  */
110
  unsigned short var_enum;
111
  /* How this option's value is determined and sets a field.  */
112
  enum cl_var_type var_type;
113
  /* Value or bit-mask with which to set a field.  */
114
  HOST_WIDE_INT var_value;
115
};
116
 
117
/* Records that the state of an option consists of SIZE bytes starting
118
   at DATA.  DATA might point to CH in some cases.  */
119
struct cl_option_state {
120
  const void *data;
121
  size_t size;
122
  char ch;
123
};
124
 
125
extern const struct cl_option cl_options[];
126
extern const unsigned int cl_options_count;
127
extern const char *const lang_names[];
128
extern const unsigned int cl_lang_count;
129
 
130
#define CL_PARAMS               (1U << 16) /* Fake entry.  Used to display --param info with --help.  */
131
#define CL_WARNING              (1U << 17) /* Enables an (optional) warning message.  */
132
#define CL_OPTIMIZATION         (1U << 18) /* Enables an (optional) optimization.  */
133
#define CL_DRIVER               (1U << 19) /* Driver option.  */
134
#define CL_TARGET               (1U << 20) /* Target-specific option.  */
135
#define CL_COMMON               (1U << 21) /* Language-independent.  */
136
 
137
#define CL_MIN_OPTION_CLASS     CL_PARAMS
138
#define CL_MAX_OPTION_CLASS     CL_COMMON
139
 
140
/* From here on the bits describe attributes of the options.
141
   Before this point the bits have described the class of the option.
142
   This distinction is important because --help will not list options
143
   which only have these higher bits set.  */
144
 
145
#define CL_JOINED               (1U << 22) /* If takes joined argument.  */
146
#define CL_SEPARATE             (1U << 23) /* If takes a separate argument.  */
147
#define CL_UNDOCUMENTED         (1U << 24) /* Do not output with --help.  */
148
 
149
/* Flags for an enumerated option argument.  */
150
#define CL_ENUM_CANONICAL       (1 << 0) /* Canonical for this value.  */
151
#define CL_ENUM_DRIVER_ONLY     (1 << 1) /* Only accepted in the driver.  */
152
 
153
/* Structure describing an enumerated option argument.  */
154
 
155
struct cl_enum_arg
156
{
157
  /* The argument text, or NULL at the end of the array.  */
158
  const char *arg;
159
 
160
  /* The corresponding integer value.  */
161
  int value;
162
 
163
  /* Flags associated with this argument.  */
164
  unsigned int flags;
165
};
166
 
167
/* Structure describing an enumerated set of option arguments.  */
168
 
169
struct cl_enum
170
{
171
  /* Help text, or NULL if the values should not be listed in --help
172
     output.  */
173
  const char *help;
174
 
175
  /* Error message for unknown arguments, or NULL to use a generic
176
     error.  */
177
  const char *unknown_error;
178
 
179
  /* Array of possible values.  */
180
  const struct cl_enum_arg *values;
181
 
182
  /* The size of the type used to store a value.  */
183
  size_t var_size;
184
 
185
  /* Function to set a variable of this type.  */
186
  void (*set) (void *var, int value);
187
 
188
  /* Function to get the value of a variable of this type.  */
189
  int (*get) (const void *var);
190
};
191
 
192
extern const struct cl_enum cl_enums[];
193
extern const unsigned int cl_enums_count;
194
 
195
/* Possible ways in which a command-line option may be erroneous.
196
   These do not include not being known at all; an option index of
197
   OPT_SPECIAL_unknown is used for that.  */
198
 
199
#define CL_ERR_DISABLED         (1 << 0) /* Disabled in this configuration.  */
200
#define CL_ERR_MISSING_ARG      (1 << 1) /* Argument required but missing.  */
201
#define CL_ERR_WRONG_LANG       (1 << 2) /* Option for wrong language.  */
202
#define CL_ERR_UINT_ARG         (1 << 3) /* Bad unsigned integer argument.  */
203
#define CL_ERR_ENUM_ARG         (1 << 4) /* Bad enumerated argument.  */
204
#define CL_ERR_NEGATIVE         (1 << 5) /* Negative form of option
205
                                            not permitted (together
206
                                            with OPT_SPECIAL_unknown).  */
207
 
208
/* Structure describing the result of decoding an option.  */
209
 
210
struct cl_decoded_option
211
{
212
  /* The index of this option, or an OPT_SPECIAL_* value for
213
     non-options and unknown options.  */
214
  size_t opt_index;
215
 
216
  /* Any warning to give for use of this option, or NULL if none.  */
217
  const char *warn_message;
218
 
219
  /* The string argument, or NULL if none.  For OPT_SPECIAL_* cases,
220
     the option or non-option command-line argument.  */
221
  const char *arg;
222
 
223
  /* The original text of option plus arguments, with separate argv
224
     elements concatenated into one string with spaces separating
225
     them.  This is for such uses as diagnostics and
226
     -frecord-gcc-switches.  */
227
  const char *orig_option_with_args_text;
228
 
229
  /* The canonical form of the option and its argument, for when it is
230
     necessary to reconstruct argv elements (in particular, for
231
     processing specs and passing options to subprocesses from the
232
     driver).  */
233
  const char *canonical_option[4];
234
 
235
  /* The number of elements in the canonical form of the option and
236
     arguments; always at least 1.  */
237
  size_t canonical_option_num_elements;
238
 
239
  /* For a boolean option, 1 for the true case and 0 for the "no-"
240
     case.  For an unsigned integer option, the value of the
241
     argument.  1 in all other cases.  */
242
  int value;
243
 
244
  /* Any flags describing errors detected in this option.  */
245
  int errors;
246
};
247
 
248
/* Structure describing an option deferred for handling after the main
249
   option handlers.  */
250
 
251
typedef struct
252
{
253
  /* Elements from struct cl_decoded_option used for deferred
254
     options.  */
255
  size_t opt_index;
256
  const char *arg;
257
  int value;
258
} cl_deferred_option;
259
DEF_VEC_O(cl_deferred_option);
260
DEF_VEC_ALLOC_O(cl_deferred_option,heap);
261
 
262
/* Structure describing a single option-handling callback.  */
263
 
264
struct cl_option_handler_func
265
{
266
  /* The function called to handle the option.  */
267
  bool (*handler) (struct gcc_options *opts,
268
                   struct gcc_options *opts_set,
269
                   const struct cl_decoded_option *decoded,
270
                   unsigned int lang_mask, int kind, location_t loc,
271
                   const struct cl_option_handlers *handlers,
272
                   diagnostic_context *dc);
273
 
274
  /* The mask that must have some bit in common with the flags for the
275
     option for this particular handler to be used.  */
276
  unsigned int mask;
277
};
278
 
279
/* Structure describing the callbacks used in handling options.  */
280
 
281
struct cl_option_handlers
282
{
283
  /* Callback for an unknown option to determine whether to give an
284
     error for it, and possibly store information to diagnose the
285
     option at a later point.  Return true if an error should be
286
     given, false otherwise.  */
287
  bool (*unknown_option_callback) (const struct cl_decoded_option *decoded);
288
 
289
  /* Callback to handle, and possibly diagnose, an option for another
290
     language.  */
291
  void (*wrong_lang_callback) (const struct cl_decoded_option *decoded,
292
                               unsigned int lang_mask);
293
 
294
  /* The number of individual handlers.  */
295
  size_t num_handlers;
296
 
297
  /* The handlers themselves.  */
298
  struct cl_option_handler_func handlers[3];
299
};
300
 
301
/* Input file names.  */
302
 
303
extern const char **in_fnames;
304
 
305
/* The count of input filenames.  */
306
 
307
extern unsigned num_in_fnames;
308
 
309
size_t find_opt (const char *input, unsigned int lang_mask);
310
extern int integral_argument (const char *arg);
311
extern bool enum_value_to_arg (const struct cl_enum_arg *enum_args,
312
                               const char **argp, int value,
313
                               unsigned int lang_mask);
314
extern void decode_cmdline_options_to_array (unsigned int argc,
315
                                             const char **argv,
316
                                             unsigned int lang_mask,
317
                                             struct cl_decoded_option **decoded_options,
318
                                             unsigned int *decoded_options_count);
319
extern void init_options_once (void);
320
extern void init_options_struct (struct gcc_options *opts,
321
                                 struct gcc_options *opts_set);
322
extern void decode_cmdline_options_to_array_default_mask (unsigned int argc,
323
                                                          const char **argv,
324
                                                          struct cl_decoded_option **decoded_options,
325
                                                          unsigned int *decoded_options_count);
326
extern void set_default_handlers (struct cl_option_handlers *handlers);
327
extern void decode_options (struct gcc_options *opts,
328
                            struct gcc_options *opts_set,
329
                            struct cl_decoded_option *decoded_options,
330
                            unsigned int decoded_options_count,
331
                            location_t loc,
332
                            diagnostic_context *dc);
333
extern int option_enabled (int opt_idx, void *opts);
334
extern bool get_option_state (struct gcc_options *, int,
335
                              struct cl_option_state *);
336
extern void set_option (struct gcc_options *opts,
337
                        struct gcc_options *opts_set,
338
                        int opt_index, int value, const char *arg, int kind,
339
                        location_t loc, diagnostic_context *dc);
340
extern void *option_flag_var (int opt_index, struct gcc_options *opts);
341
bool handle_generated_option (struct gcc_options *opts,
342
                              struct gcc_options *opts_set,
343
                              size_t opt_index, const char *arg, int value,
344
                              unsigned int lang_mask, int kind, location_t loc,
345
                              const struct cl_option_handlers *handlers,
346
                              diagnostic_context *dc);
347
void generate_option (size_t opt_index, const char *arg, int value,
348
                      unsigned int lang_mask,
349
                      struct cl_decoded_option *decoded);
350
void generate_option_input_file (const char *file,
351
                                 struct cl_decoded_option *decoded);
352
extern void read_cmdline_option (struct gcc_options *opts,
353
                                 struct gcc_options *opts_set,
354
                                 struct cl_decoded_option *decoded,
355
                                 location_t loc,
356
                                 unsigned int lang_mask,
357
                                 const struct cl_option_handlers *handlers,
358
                                 diagnostic_context *dc);
359
extern void control_warning_option (unsigned int opt_index, int kind,
360
                                    bool imply, location_t loc,
361
                                    unsigned int lang_mask,
362
                                    const struct cl_option_handlers *handlers,
363
                                    struct gcc_options *opts,
364
                                    struct gcc_options *opts_set,
365
                                    diagnostic_context *dc);
366
extern void print_ignored_options (void);
367
extern void handle_common_deferred_options (void);
368
extern bool common_handle_option (struct gcc_options *opts,
369
                                  struct gcc_options *opts_set,
370
                                  const struct cl_decoded_option *decoded,
371
                                  unsigned int lang_mask, int kind,
372
                                  location_t loc,
373
                                  const struct cl_option_handlers *handlers,
374
                                  diagnostic_context *dc);
375
extern bool target_handle_option (struct gcc_options *opts,
376
                                  struct gcc_options *opts_set,
377
                                  const struct cl_decoded_option *decoded,
378
                                  unsigned int lang_mask, int kind,
379
                                  location_t loc,
380
                                  const struct cl_option_handlers *handlers,
381
                                  diagnostic_context *dc);
382
extern void finish_options (struct gcc_options *opts,
383
                            struct gcc_options *opts_set,
384
                            location_t loc);
385
extern void default_options_optimization (struct gcc_options *opts,
386
                                          struct gcc_options *opts_set,
387
                                          struct cl_decoded_option *decoded_options,
388
                                          unsigned int decoded_options_count,
389
                                          location_t loc,
390
                                          unsigned int lang_mask,
391
                                          const struct cl_option_handlers *handlers,
392
                                          diagnostic_context *dc);
393
extern void set_struct_debug_option (struct gcc_options *opts,
394
                                     location_t loc,
395
                                     const char *value);
396
extern bool opt_enum_arg_to_value (size_t opt_index, const char *arg,
397
                                   int *value, unsigned int lang_mask);
398
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.