#ifndef TCC_STATE_H # define TCC_STATE_H 1 # include # include # include # include # include # define TCC_WARN_ON 1 /** warning is on (-Woption) */ # define TCC_INCLUDE_STACK_SIZE 32 # define TCC_IFDEF_STACK_SIZE 64 # define TCC_CACHED_INCLUDES_HASH_SIZE 32 # define TCC_PACK_STACK_SIZE 8 typedef struct TCCState TCCState; typedef struct COFFSym COFFSym; typedef struct COFFReloc COFFReloc; typedef struct CachedInclude CachedInclude; typedef struct InlineFunc InlineFunc; typedef struct TCCStrtab { size_t len; char *tab; } TCCStrtab; typedef struct TCCSymtab { size_t nsym; size_t start; COFFSym *syms; TCCStrtab strtab; } TCCSymtab; typedef struct TCCSection { uint32_t data_offset; uint8_t *data; uint32_t data_allocated; TCCState *state; char name[8]; /** section name */ int32_t flags; int16_t secnum; int16_t addralign; uint16_t type; size_t offset; size_t nreloc; COFFReloc *reloc; struct TCCSection *prev; } TCCSection; struct TCCState { uint8_t verbose; /** if 1, display some information during compilation */ uint8_t nostdinc; /** if 1, no standard headers are added */ uint8_t nostdlib; /** if 1, no standard libraries are added */ uint8_t symbolic; /** if 1, resolve symbols in the current module first */ uint8_t filetype; /** file type for compilation (NONE, C, ASM) */ uint8_t optimize; /** only to #define __OPTIMIZE__ */ uint8_t option_pthread; /** -pthread option */ uint32_t cversion; /** suppported C ISO version, 199901 (default), 201112, ... */ /* C language options */ uint8_t char_is_unsigned; uint8_t leading_underscore; uint8_t ms_extensions; /** allow nested named struct w/o identifier behave lile unnamed */ uint8_t dollars_in_identifiers; /** allows '$' char in identifiers */ uint8_t ms_bitfields; /** if 1, emulate MS algorithm for aligning bitfields */ uint8_t reverse_funcargs; /** if 1, evaluate last function arg first */ uint8_t gnu89_inline; /** treat 'extern inline' like 'static inline' */ /* warning switches */ uint8_t warn_none; uint8_t warn_all; uint8_t warn_error; uint8_t warn_write_strings; uint8_t warn_unsupported; uint8_t warn_implicit_function_declaration; uint8_t warn_discarded_qualifiers; uint8_t warn_num; /** temp var for tcc_warning_c() */ uint8_t option_r; /** option -r */ uint8_t do_bench; /** option -bench */ uint8_t just_deps; /** option -M */ uint8_t gen_deps; /** option -MD */ uint8_t include_sys_deps; /** option -MD */ uint8_t gen_phony_deps; /** option -MP */ uint8_t gnu_ext; /** use GNU C extensions */ uint8_t tcc_ext; /** use TinyCC extensions */ uint8_t dflag; /** -dX value */ uint8_t Pflag; /** -P switch (LINE_MACRO_OUTPUT_FORMAT) */ uint8_t has_text_addr; uint32_t text_addr; /** address of text section */ unsigned section_align; /** section alignment */ char *tcc_lib_path; /** CONFIG_TCCDIR or -B option */ char *entryname; /** "_start" unless set */ int output_type; /** output type, see TCC_OUTPUT_xxx */ int output_format; /** output format, see TCC_OUTPUT_FORMAT_xxx */ /* include paths */ char **include_paths; int nb_include_paths; char **sysinclude_paths; int nb_sysinclude_paths; /* library paths */ char **library_paths; int nb_library_paths; /* crt?.o object path */ char **crt_paths; int nb_crt_paths; CString cmdline_defs; /** -D / -U options */ CString cmdline_incl; /** -include options */ /** error handling */ void *error_opaque; void (*error_func)(void *opaque, const char *msg); int error_set_jmp_enabled; jmp_buf error_jmp_buf; int nb_errors; FILE *ppfp; /** output file for preprocessing (-E) */ char **target_deps; /** for -MD/-MF: collected dependencies for this compilation */ int nb_target_deps; /* compilation */ BufferedFile *include_stack[TCC_INCLUDE_STACK_SIZE]; BufferedFile **include_stack_ptr; int ifdef_stack[TCC_IFDEF_STACK_SIZE]; int *ifdef_stack_ptr; /* included files enclosed with #ifndef MACRO */ int cached_includes_hash[TCC_CACHED_INCLUDES_HASH_SIZE]; CachedInclude **cached_includes; int nb_cached_includes; /* #pragma pack stack */ int pack_stack[TCC_PACK_STACK_SIZE]; int *pack_stack_ptr; char **pragma_libs; int nb_pragma_libs; /* inline functions are stored as token lists and compiled last only if referenced */ InlineFunc **inline_fns; int nb_inline_fns; /* sections */ TCCSection **sections; int nb_sections; /** number of sections, including first dummy section */ /* predefined sections */ TCCSection *text_section; TCCSection *data_section; TCCSection *rodata_section; TCCSection *bss_section; TCCSection *cur_text_section; /** current section where function code is generated */ /* symbol data */ TCCSymtab *symtab; /* benchmark info */ int total_idents; int total_lines; uint32_t total_bytes; uint32_t total_output[4]; /* for warnings/errors for object files */ const char *current_filename; /* used by main and tcc_parse_args only */ void **files; /** files seen on command line */ int nb_files; /** number thereof */ int nb_libraries; /** number of libs thereof */ char *outfile; /** output filename */ char *deps_outfile; /** option -MF */ int argc; char **argv; CString linker_arg; /** collect -Wl options */ }; #endif /* !TCC_STATE_H */