From f9181416f604c1c0715fc538316948a9f957a3c3 Mon Sep 17 00:00:00 2001
From: grischka <grischka>
Date: Mon, 11 May 2009 18:45:44 +0200
Subject: [PATCH] move some global variables into TCCState

---
 i386-gen.c |  5 +++--
 libtcc.c   | 63 +++++++++++++++++++++++++++---------------------------
 tcc.c      | 30 +++++++++-----------------
 tcc.h      | 15 ++++++++++++-
 tcccoff.c  | 12 +++++------
 tccelf.c   | 14 ++++++------
 tccgen.c   | 20 ++++++++---------
 tccpe.c    | 12 +++++------
 tccpp.c    |  6 +++---
 9 files changed, 91 insertions(+), 86 deletions(-)

diff --git a/i386-gen.c b/i386-gen.c
index a2564f3d..f958ab54 100644
--- a/i386-gen.c
+++ b/i386-gen.c
@@ -480,7 +480,7 @@ void gfunc_prolog(CType *func_type)
         func_ret_sub = addr - 8;
 
     /* leave some room for bound checking code */
-    if (do_bounds_check) {
+    if (tcc_state->do_bounds_check) {
         oad(0xb8, 0); /* lbound section pointer */
         oad(0xb8, 0); /* call to function */
         func_bound_offset = lbounds_section->data_offset;
@@ -493,7 +493,8 @@ void gfunc_epilog(void)
     int v, saved_ind;
 
 #ifdef CONFIG_TCC_BCHECK
-    if (do_bounds_check && func_bound_offset != lbounds_section->data_offset) {
+    if (tcc_state->do_bounds_check
+     && func_bound_offset != lbounds_section->data_offset) {
         int saved_ind;
         int *bounds_ptr;
         Sym *sym, *sym_data;
diff --git a/libtcc.c b/libtcc.c
index 31961fac..bf4b1c6b 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -20,6 +20,10 @@
 
 #include "tcc.h"
 
+/* display benchmark infos */
+int total_lines;
+int total_bytes;
+
 /* parser */
 static struct BufferedFile *file;
 static int ch, tok;
@@ -93,19 +97,6 @@ static SValue vstack[VSTACK_SIZE], *vtop;
 /* some predefined types */
 static CType char_pointer_type, func_old_type, int_type;
 
-/* display some information during compilation */
-static int verbose = 0;
-
-/* compile with debug symbol (and use them if error during execution) */
-static int do_debug = 0;
-
-/* compile with built-in memory and bounds checker */
-static int do_bounds_check = 0;
-
-/* display benchmark infos */
-static int total_lines;
-static int total_bytes;
-
 /* use GNU C extensions */
 static int gnu_ext = 1;
 
@@ -114,17 +105,13 @@ static int tcc_ext = 1;
 
 /* max number of callers shown if error */
 #ifdef CONFIG_TCC_BACKTRACE
-static int num_callers = 6;
-static const char **rt_bound_error_msg;
+int num_callers = 6;
+const char **rt_bound_error_msg;
 #endif
 
 /* XXX: get rid of this ASAP */
 static struct TCCState *tcc_state;
 
-/* give the path of the tcc libraries */
-static const char *tcc_lib_path = CONFIG_TCCDIR;
-
-
 #ifdef TCC_TARGET_I386
 #include "i386-gen.c"
 #endif
@@ -564,7 +551,7 @@ static void put_extern_sym2(Sym *sym, Section *section,
     if (!sym->c) {
         name = get_tok_str(sym->v, NULL);
 #ifdef CONFIG_TCC_BCHECK
-        if (do_bounds_check) {
+        if (tcc_state->do_bounds_check) {
             char buf[32];
 
             /* XXX: avoid doing that for statics ? */
@@ -989,7 +976,7 @@ BufferedFile *tcc_open(TCCState *s1, const char *filename)
         fd = 0, filename = "stdin";
     else
         fd = open(filename, O_RDONLY | O_BINARY);
-    if ((verbose == 2 && fd >= 0) || verbose == 3)
+    if ((s1->verbose == 2 && fd >= 0) || s1->verbose == 3)
         printf("%s %*s%s\n", fd < 0 ? "nf":"->",
                (s1->include_stack_ptr - s1->include_stack), "", filename);
     if (fd < 0)
@@ -1039,7 +1026,7 @@ static int tcc_compile(TCCState *s1)
 
     /* file info: full path + filename */
     section_sym = 0; /* avoid warning */
-    if (do_debug) {
+    if (s1->do_debug) {
         section_sym = put_elf_sym(symtab_section, 0, 0, 
                                   ELFW(ST_INFO)(STB_LOCAL, STT_SECTION), 0, 
                                   text_section->sh_num, NULL);
@@ -1108,7 +1095,7 @@ static int tcc_compile(TCCState *s1)
             expect("declaration");
 
         /* end of translation unit info */
-        if (do_debug) {
+        if (s1->do_debug) {
             put_stabs_r(NULL, N_SO, 0, 0, 
                         text_section->data_offset, text_section, section_sym);
         }
@@ -1579,7 +1566,7 @@ int tcc_run(TCCState *s1, int argc, char **argv)
 
     prog_main = tcc_get_symbol_err(s1, "main");
     
-    if (do_debug) {
+    if (s1->do_debug) {
 #ifdef CONFIG_TCC_BACKTRACE
         struct sigaction sigact;
         /* install TCC signal handlers to print debug info on fatal
@@ -1598,7 +1585,7 @@ int tcc_run(TCCState *s1, int argc, char **argv)
     }
 
 #ifdef CONFIG_TCC_BCHECK
-    if (do_bounds_check) {
+    if (s1->do_bounds_check) {
         void (*bound_init)(void);
 
         /* set error function */
@@ -1659,6 +1646,7 @@ TCCState *tcc_new(void)
         return NULL;
     tcc_state = s;
     s->output_type = TCC_OUTPUT_MEMORY;
+    s->tcc_lib_path = CONFIG_TCCDIR;
 
     preprocess_new();
 
@@ -1995,17 +1983,17 @@ int tcc_set_output_type(TCCState *s, int output_type)
         tcc_add_sysinclude_path(s, CONFIG_SYSROOT "/usr/local/include");
         tcc_add_sysinclude_path(s, CONFIG_SYSROOT "/usr/include");
 #endif
-        snprintf(buf, sizeof(buf), "%s/include", tcc_lib_path);
+        snprintf(buf, sizeof(buf), "%s/include", s->tcc_lib_path);
         tcc_add_sysinclude_path(s, buf);
 #ifdef TCC_TARGET_PE
-        snprintf(buf, sizeof(buf), "%s/include/winapi", tcc_lib_path);
+        snprintf(buf, sizeof(buf), "%s/include/winapi", s->tcc_lib_path);
         tcc_add_sysinclude_path(s, buf);
 #endif
     }
 
     /* if bound checking, then add corresponding sections */
 #ifdef CONFIG_TCC_BCHECK
-    if (do_bounds_check) {
+    if (s->do_bounds_check) {
         /* define symbol */
         tcc_define_symbol(s, "__BOUNDS_CHECKING_ON", NULL);
         /* create bounds sections */
@@ -2021,7 +2009,7 @@ int tcc_set_output_type(TCCState *s, int output_type)
     }
 
     /* add debug sections */
-    if (do_debug) {
+    if (s->do_debug) {
         /* stab symbols */
         stab_section = new_section(s, ".stab", SHT_PROGBITS, 0);
         stab_section->sh_entsize = sizeof(Stab_Sym);
@@ -2043,7 +2031,7 @@ int tcc_set_output_type(TCCState *s, int output_type)
 #endif
 
 #ifdef TCC_TARGET_PE
-    snprintf(buf, sizeof(buf), "%s/lib", tcc_lib_path);
+    snprintf(buf, sizeof(buf), "%s/lib", s->tcc_lib_path);
     tcc_add_library_path(s, buf);
 #endif
 
@@ -2127,6 +2115,19 @@ int tcc_set_flag(TCCState *s, const char *flag_name, int value)
 /* set CONFIG_TCCDIR at runtime */
 void tcc_set_lib_path(TCCState *s, const char *path)
 {
-    tcc_lib_path = tcc_strdup(path);
+    s->tcc_lib_path = tcc_strdup(path);
 }
 
+LIBTCCAPI void print_stats(TCCState *s, int64_t total_time)
+{
+    double tt;
+    tt = (double)total_time / 1000000.0;
+    if (tt < 0.001)
+        tt = 0.001;
+    if (total_bytes < 1)
+        total_bytes = 1;
+    printf("%d idents, %d lines, %d bytes, %0.3f s, %d lines/s, %0.1f MB/s\n", 
+           tok_ident - TOK_IDENT, total_lines, total_bytes,
+           tt, (int)(total_lines / tt),
+           total_bytes / tt / 1000000.0);
+}
diff --git a/tcc.c b/tcc.c
index 32dc66cd..a82b8a13 100644
--- a/tcc.c
+++ b/tcc.c
@@ -303,12 +303,12 @@ int parse_args(TCCState *s, int argc, char **argv)
 #endif
 #ifdef CONFIG_TCC_BCHECK
             case TCC_OPTION_b:
-                do_bounds_check = 1;
-                do_debug = 1;
+                s->do_bounds_check = 1;
+                s->do_debug = 1;
                 break;
 #endif
             case TCC_OPTION_g:
-                do_debug = 1;
+                s->do_debug = 1;
                 break;
             case TCC_OPTION_c:
                 multiple_files = 1;
@@ -355,7 +355,7 @@ int parse_args(TCCState *s, int argc, char **argv)
                 break;
             case TCC_OPTION_v:
                 do {
-                    if (0 == verbose++) 
+                    if (0 == s->verbose++)
                         printf("tcc version %s\n", TCC_VERSION);
                 } while (*optarg++ == 'v');
                 break;
@@ -439,11 +439,11 @@ int main(int argc, char **argv)
     optind = parse_args(s, argc - 1, argv + 1);
     if (print_search_dirs) {
         /* enough for Linux kernel */
-        printf("install: %s/\n", tcc_lib_path);
+        printf("install: %s/\n", s->tcc_lib_path);
         return 0;
     }
     if (optind == 0 || nb_files == 0) {
-        if (optind && verbose)
+        if (optind && s->verbose)
             return 0;
         help();
         return 1;
@@ -517,7 +517,7 @@ int main(int argc, char **argv)
             if (tcc_add_library(s, filename + 2) < 0)
                 error("cannot find %s", filename);
         } else {
-            if (1 == verbose)
+            if (1 == s->verbose)
                 printf("-> %s\n", filename);
             if (tcc_add_file(s, filename) < 0)
                 ret = 1;
@@ -530,18 +530,8 @@ int main(int argc, char **argv)
     if (ret)
         goto the_end;
 
-    if (do_bench) {
-        double total_time;
-        total_time = (double)(getclock_us() - start_time) / 1000000.0;
-        if (total_time < 0.001)
-            total_time = 0.001;
-        if (total_bytes < 1)
-            total_bytes = 1;
-        printf("%d idents, %d lines, %d bytes, %0.3f s, %d lines/s, %0.1f MB/s\n", 
-               tok_ident - TOK_IDENT, total_lines, total_bytes,
-               total_time, (int)(total_lines / total_time), 
-               total_bytes / total_time / 1000000.0); 
-    }
+    if (do_bench)
+        print_stats(s, getclock_us() - start_time);
 
     if (s->output_type == TCC_OUTPUT_PREPROCESS) {
         if (outfile)
@@ -552,7 +542,7 @@ int main(int argc, char **argv)
         ret = tcc_output_file(s, outfile) ? 1 : 0;
  the_end:
     /* XXX: cannot do it with bound checking because of the malloc hooks */
-    if (!do_bounds_check)
+    if (!s->do_bounds_check)
         tcc_delete(s);
 
 #ifdef MEM_DEBUG
diff --git a/tcc.h b/tcc.h
index 2890493e..f0a82542 100644
--- a/tcc.h
+++ b/tcc.h
@@ -385,7 +385,6 @@ struct TCCState {
 
     int nostdinc; /* if true, no standard headers are added */
     int nostdlib; /* if true, no standard libraries are added */
-
     int nocommon; /* if true, do not use common symbols for .bss data */
 
     /* if true, static linking is performed */
@@ -418,6 +417,15 @@ struct TCCState {
     int warn_none;
     int warn_implicit_function_declaration;
 
+    /* display some information during compilation */
+    int verbose;
+    /* compile with debug symbol (and use them if error during execution) */
+    int do_debug;
+    /* compile with built-in memory and bounds checker */
+    int do_bounds_check;
+    /* give the path of the tcc libraries */
+    const char *tcc_lib_path;
+
     /* error handling */
     void *error_opaque;
     void (*error_func)(void *opaque, const char *msg);
@@ -842,6 +850,11 @@ static int tcc_assemble(TCCState *s1, int do_preprocess);
 static void asm_instr(void);
 static void asm_global_instr(void);
 
+#ifdef CONFIG_TCC_BACKTRACE
+extern int num_callers;
+extern const char **rt_bound_error_msg;
+#endif
+
 /* true if float/double/long double type */
 static inline int is_float(int t)
 {
diff --git a/tcccoff.c b/tcccoff.c
index de7d87c9..1ee9b0c4 100644
--- a/tcccoff.c
+++ b/tcccoff.c
@@ -183,7 +183,7 @@ int tcc_output_coff(TCCState *s1, FILE *f)
 	coff_sec->s_nlnno = 0;
 	coff_sec->s_lnnoptr = 0;
 
-	if (do_debug && tcc_sect == stext) {
+	if (s1->do_debug && tcc_sect == stext) {
 	    // count how many line nos data
 
 	    // also find association between source file name and function
@@ -311,7 +311,7 @@ int tcc_output_coff(TCCState *s1, FILE *f)
 
     file_hdr.f_symptr = file_pointer;	/* file pointer to symtab */
 
-    if (do_debug)
+    if (s1->do_debug)
 	file_hdr.f_nsyms = coff_nb_syms;	/* number of symtab entries */
     else
 	file_hdr.f_nsyms = 0;
@@ -362,7 +362,7 @@ int tcc_output_coff(TCCState *s1, FILE *f)
     // group the symbols in order of filename, func1, func2, etc
     // finally global symbols
 
-    if (do_debug)
+    if (s1->do_debug)
 	SortSymbolTable();
 
     // write line no data
@@ -371,7 +371,7 @@ int tcc_output_coff(TCCState *s1, FILE *f)
 	coff_sec = &section_header[i];
 	tcc_sect = s1->sections[i];
 
-	if (do_debug && tcc_sect == stext) {
+	if (s1->do_debug && tcc_sect == stext) {
 	    // count how many line nos data
 
 
@@ -499,7 +499,7 @@ int tcc_output_coff(TCCState *s1, FILE *f)
     }
 
     // write symbol table
-    if (do_debug) {
+    if (s1->do_debug) {
 	int k;
 	struct syment csym;
 	AUXFUNC auxfunc;
@@ -670,7 +670,7 @@ int tcc_output_coff(TCCState *s1, FILE *f)
 	}
     }
 
-    if (do_debug) {
+    if (s1->do_debug) {
 	// write string table
 
 	// first write the size
diff --git a/tccelf.c b/tccelf.c
index 11bb82c7..1f488f92 100644
--- a/tccelf.c
+++ b/tccelf.c
@@ -1163,7 +1163,7 @@ static void tcc_add_runtime(TCCState *s1)
 #endif
 
 #ifdef CONFIG_TCC_BCHECK
-    if (do_bounds_check) {
+    if (s1->do_bounds_check) {
         unsigned long *ptr;
         Section *init_section;
         unsigned char *pinit;
@@ -1176,7 +1176,7 @@ static void tcc_add_runtime(TCCState *s1)
                     ELFW(ST_INFO)(STB_GLOBAL, STT_NOTYPE), 0,
                     bounds_section->sh_num, "__bounds_start");
         /* add bound check code */
-        snprintf(buf, sizeof(buf), "%s/%s", tcc_lib_path, "bcheck.o");
+        snprintf(buf, sizeof(buf), "%s/%s", s1->tcc_lib_path, "bcheck.o");
         tcc_add_file(s1, buf);
 #ifdef TCC_TARGET_I386
         if (s1->output_type != TCC_OUTPUT_MEMORY) {
@@ -1199,7 +1199,7 @@ static void tcc_add_runtime(TCCState *s1)
 #ifdef CONFIG_USE_LIBGCC
         tcc_add_file(s1, CONFIG_SYSROOT "/lib/libgcc_s.so.1");
 #else
-        snprintf(buf, sizeof(buf), "%s/%s", tcc_lib_path, "libtcc1.a");
+        snprintf(buf, sizeof(buf), "%s/%s", s1->tcc_lib_path, "libtcc1.a");
         tcc_add_file(s1, buf);
 #endif
     }
@@ -1574,9 +1574,9 @@ int elf_output_file(TCCState *s1, const char *filename)
             /* //gr: avoid bogus relocs for empty (debug) sections */
             if (s1->sections[s->sh_info]->sh_flags & SHF_ALLOC)
                 prepare_dynamic_rel(s1, s);
-            else if (do_debug)
+            else if (s1->do_debug)
                 s->sh_size = s->data_offset;
-        } else if (do_debug || 
+        } else if (s1->do_debug ||
             file_type == TCC_OUTPUT_OBJ || 
             (s->sh_flags & SHF_ALLOC) ||
             i == (s1->nb_sections - 1)) {
@@ -1817,7 +1817,7 @@ int elf_output_file(TCCState *s1, const char *filename)
             put_dt(dynamic, DT_RELSZ, rel_size);
             put_dt(dynamic, DT_RELENT, sizeof(ElfW_Rel));
 #endif
-            if (do_debug)
+            if (s1->do_debug)
                 put_dt(dynamic, DT_DEBUG, 0);
             put_dt(dynamic, DT_NULL, 0);
         }
@@ -1888,7 +1888,7 @@ int elf_output_file(TCCState *s1, const char *filename)
         goto fail;
     }
     f = fdopen(fd, "wb");
-    if (verbose) 
+    if (s1->verbose)
         printf("<- %s\n", filename);
 
 #ifdef TCC_TARGET_COFF
diff --git a/tccgen.c b/tccgen.c
index 9f1ebf72..942c503c 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -1311,7 +1311,7 @@ void gen_op(int op)
 #ifdef CONFIG_TCC_BCHECK
             /* if evaluating constant expression, no code should be
                generated, so no bound check */
-            if (do_bounds_check && !const_wanted) {
+            if (tcc_state->do_bounds_check && !const_wanted) {
                 /* if bounded pointers, we generate a special code to
                    test bounds */
                 if (op == '-') {
@@ -2880,7 +2880,7 @@ static void indir(void)
         && (vtop->type.t & VT_BTYPE) != VT_FUNC) {
         vtop->r |= lvalue_type(vtop->type.t);
         /* if bound checking, the referenced pointer must be checked */
-        if (do_bounds_check) 
+        if (tcc_state->do_bounds_check)
             vtop->r |= VT_MUSTBOUND;
     }
 }
@@ -3294,7 +3294,7 @@ static void unary(void)
             if (!(vtop->type.t & VT_ARRAY)) {
                 vtop->r |= lvalue_type(vtop->type.t);
                 /* if bound checking, the referenced pointer must be checked */
-                if (do_bounds_check) 
+                if (tcc_state->do_bounds_check)
                     vtop->r |= VT_MUSTBOUND;
             }
             next();
@@ -3794,7 +3794,7 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym,
     Sym *s;
 
     /* generate line number info */
-    if (do_debug && 
+    if (tcc_state->do_debug &&
         (last_line_num != file->line_num || last_ind != ind)) {
         put_stabn(N_SLINE, 0, file->line_num, ind - func_ind);
         last_ind = ind;
@@ -4649,14 +4649,14 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r,
     }
     if ((r & VT_VALMASK) == VT_LOCAL) {
         sec = NULL;
-        if (do_bounds_check && (type->t & VT_ARRAY)) 
+        if (tcc_state->do_bounds_check && (type->t & VT_ARRAY))
             loc--;
         loc = (loc - size) & -align;
         addr = loc;
         /* handles bounds */
         /* XXX: currently, since we do only one pass, we cannot track
            '&' operators, so we add only arrays */
-        if (do_bounds_check && (type->t & VT_ARRAY)) {
+        if (tcc_state->do_bounds_check && (type->t & VT_ARRAY)) {
             unsigned long *bounds_ptr;
             /* add padding between regions */
             loc--;
@@ -4722,7 +4722,7 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r,
                because initializers themselves can create new initializers */
             data_offset += size;
             /* add padding if bound check */
-            if (do_bounds_check)
+            if (tcc_state->do_bounds_check)
                 data_offset++;
             sec->data_offset = data_offset;
             /* allocate section space to put the data */
@@ -4763,7 +4763,7 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r,
 
         /* handles bounds now because the symbol must be defined
            before for the relocation */
-        if (do_bounds_check) {
+        if (tcc_state->do_bounds_check) {
             unsigned long *bounds_ptr;
 
             greloc(bounds_section, sym, bounds_section->data_offset, R_DATA_32);
@@ -4860,7 +4860,7 @@ static void gen_function(Sym *sym)
     funcname = get_tok_str(sym->v, NULL);
     func_ind = ind;
     /* put debug symbol */
-    if (do_debug)
+    if (tcc_state->do_debug)
         put_func_debug(sym);
     /* push a dummy symbol to enable local sym storage */
     sym_push2(&local_stack, SYM_FIELD, 0, 0);
@@ -4876,7 +4876,7 @@ static void gen_function(Sym *sym)
     /* patch symbol size */
     ((ElfW(Sym) *)symtab_section->data)[sym->c].st_size = 
         ind - func_ind;
-    if (do_debug) {
+    if (tcc_state->do_debug) {
         put_stabn(N_FUN, 0, 0, ind - func_ind);
     }
     /* It's better to crash than to generate wrong code */
diff --git a/tccpe.c b/tccpe.c
index 1d6c7fdf..1e3fdb36 100644
--- a/tccpe.c
+++ b/tccpe.c
@@ -577,7 +577,7 @@ ST_FN int pe_write(struct pe_info *pe)
     file_offset = pe->sizeofheaders;
     pe_fpad(op, file_offset);
 
-    if (2 == verbose)
+    if (2 == pe->s1->verbose)
         printf("-------------------------------"
                "\n  virt   file   size  section" "\n");
 
@@ -588,7 +588,7 @@ ST_FN int pe_write(struct pe_info *pe)
         unsigned long size = si->sh_size;
         IMAGE_SECTION_HEADER *psh = &si->ish;
 
-        if (2 == verbose)
+        if (2 == pe->s1->verbose)
             printf("%6lx %6lx %6lx  %s\n",
                 addr, file_offset, size, sh_name);
 
@@ -662,9 +662,9 @@ ST_FN int pe_write(struct pe_info *pe)
         fwrite(&pe->sec_info[i].ish, 1, sizeof(IMAGE_SECTION_HEADER), op);
     fclose (op);
 
-    if (2 == verbose)
+    if (2 == pe->s1->verbose)
         printf("-------------------------------\n");
-    if (verbose)
+    if (pe->s1->verbose)
         printf("<- %s (%lu bytes)\n", pe->filename, file_offset);
 
     return 0;
@@ -859,7 +859,7 @@ ST_FN void pe_build_exports(struct pe_info *pe)
         error_noabort("could not create '%s': %s", buf, strerror(errno));
     } else {
         fprintf(op, "LIBRARY %s\n\nEXPORTS\n", dllname);
-        if (verbose)
+        if (pe->s1->verbose)
             printf("<- %s (%d symbols)\n", buf, sym_count);
     }
 #endif
@@ -1065,7 +1065,7 @@ ST_FN int pe_assign_addresses (struct pe_info *pe)
             flags & SHF_EXECINSTR ? "exec" : ""
             );
     }
-    verbose = 2;
+    pe->s1->verbose = 2;
 #endif
 
     tcc_free(section_order);
diff --git a/tccpp.c b/tccpp.c
index 0c14c246..b327a645 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -440,7 +440,7 @@ static uint8_t *parse_comment(uint8_t *p)
 #define cinp minp
 
 /* space exlcuding newline */
-static inline int is_space(int ch)
+LIBTCCAPI static inline int is_space(int ch)
 {
     return ch == ' ' || ch == '\t' || ch == '\v' || ch == '\f' || ch == '\r';
 }
@@ -1336,7 +1336,7 @@ static void preprocess(int is_bof)
             pstrcpy(f->inc_filename, sizeof(f->inc_filename), buf);
             file = f;
             /* add include file debug info */
-            if (do_debug) {
+            if (tcc_state->do_debug) {
                 put_stabs(file->filename, N_BINCL, 0, 0, 0);
             }
             tok_flags |= TOK_FLAG_BOF | TOK_FLAG_BOL;
@@ -1946,7 +1946,7 @@ static inline void next_nomacro1(void)
                 }
 
                 /* add end of include file debug info */
-                if (do_debug) {
+                if (tcc_state->do_debug) {
                     put_stabd(N_EINCL, 0, 0);
                 }
                 /* pop include stack */