summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex AUVOLAT <alex.auvolat@ens.fr>2014-03-28 13:53:30 +0100
committerAlex AUVOLAT <alex.auvolat@ens.fr>2014-03-28 13:53:30 +0100
commit8d9e22df8afa4c3339e52c7b3b77388ca0e69fac (patch)
tree16234b646d18399e07f90f78324de54b031f014b
parentbdce62a91076aa1a076d484ce1d8564a8ba0988f (diff)
downloadSOS-8d9e22df8afa4c3339e52c7b3b77388ca0e69fac.tar.gz
SOS-8d9e22df8afa4c3339e52c7b3b77388ca0e69fac.zip
Make article 6 compile ; modifications to article 1 && 2 for the course.
-rw-r--r--sos-code-article1/Makefile2
-rw-r--r--sos-code-article1/drivers/x86_videomem.c1
-rwxr-xr-xsos-code-article2/cdrom/sos.elfbin22391 -> 22499 bytes
-rw-r--r--sos-code-article2/sos.map24
-rw-r--r--sos-code-article2/sos/main.c6
-rw-r--r--sos-code-article6/cdrom/boot/grub/stage2_eltoritobin0 -> 147440 bytes
-rw-r--r--sos-code-article6/sos.map268
-rw-r--r--sos-code-article6/sos/main.c61
8 files changed, 316 insertions, 46 deletions
diff --git a/sos-code-article1/Makefile b/sos-code-article1/Makefile
index a0c82b2..cf14445 100644
--- a/sos-code-article1/Makefile
+++ b/sos-code-article1/Makefile
@@ -20,7 +20,7 @@ $(MULTIBOOT_IMAGE): $(KERNEL_OBJ)
exit -1; \
fi
cp $(KERNEL_OBJ) cdrom
- echo timeout 0 > cdrom/boot/grub/menu.lst
+ echo timeout 10 > cdrom/boot/grub/menu.lst
echo title Simple OS >> cdrom/boot/grub/menu.lst
echo kernel /$(KERNEL_OBJ) >> cdrom/boot/grub/menu.lst
genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 \
diff --git a/sos-code-article1/drivers/x86_videomem.c b/sos-code-article1/drivers/x86_videomem.c
index cc4b79c..d05a0e4 100644
--- a/sos-code-article1/drivers/x86_videomem.c
+++ b/sos-code-article1/drivers/x86_videomem.c
@@ -112,7 +112,6 @@ sos_ret_t sos_x86_videomem_putchar(unsigned char row, unsigned char col,
return SOS_OK;
}
-
sos_ret_t sos_x86_videomem_printf(unsigned char row, unsigned char col,
unsigned char attribute,
const char *format, /* args */...)
diff --git a/sos-code-article2/cdrom/sos.elf b/sos-code-article2/cdrom/sos.elf
index 0898db5..b9e16da 100755
--- a/sos-code-article2/cdrom/sos.elf
+++ b/sos-code-article2/cdrom/sos.elf
Binary files differ
diff --git a/sos-code-article2/sos.map b/sos-code-article2/sos.map
index ea0519f..721a8af 100644
--- a/sos-code-article2/sos.map
+++ b/sos-code-article2/sos.map
@@ -1,14 +1,14 @@
00201000 __b_kernel
00200000 __b_load
00202d6b clk_it
-00203940 clock_count.1103
+002039a0 clock_count.1103
00202ce0 display_bits
-00203944 div_count.1107
+002039a4 div_count.1107
00202da3 divide_ex
-00207950 __e_kernel
-00203066 __e_load
-00202f00 gdt
-00203080 idt
+002079b0 __e_kernel
+002030d0 __e_load
+00202f58 gdt
+002030e0 idt
00201011 loop
0020278b memcmp
00202734 memcpy
@@ -22,7 +22,7 @@
00202426 sos_bochs_putstring
0020241c sos_bochs_setup
002012d0 sos_exception_get_routine
-00203880 sos_exception_handler_array
+002038e0 sos_exception_handler_array
0020123d sos_exception_set_routine
00201218 sos_exceptions_setup
00201300 sos_exception_wrapper_0
@@ -57,7 +57,7 @@
002014dc sos_exception_wrapper_7
00201b24 sos_exception_wrapper_8
00201520 sos_exception_wrapper_9
-00202f20 sos_exception_wrapper_array
+00202f80 sos_exception_wrapper_array
002011e4 sos_gdt_setup
002021a8 sos_i8254_set_frequency
0020214e sos_i8259_disable_irq_line
@@ -67,7 +67,7 @@
002010b9 sos_idt_set_handler
00201014 sos_idt_setup
00201bfe sos_irq_get_routine
-00203900 sos_irq_handler_array
+00203960 sos_irq_handler_array
00201b35 sos_irq_set_routine
00201b28 sos_irq_setup
00201c20 sos_irq_wrapper_0
@@ -86,14 +86,14 @@
00201e18 sos_irq_wrapper_7
00201e60 sos_irq_wrapper_8
00201ea8 sos_irq_wrapper_9
-00202fa0 sos_irq_wrapper_array
+00203000 sos_irq_wrapper_array
00202ddb sos_main
00202240 sos_x86_videomem_cls
0020238a sos_x86_videomem_printf
00202313 sos_x86_videomem_putchar
00202283 sos_x86_videomem_putstring
00202220 sos_x86_videomem_setup
-00203950 stack
+002039b0 stack
00201000 start
00201000 _start
002028d9 strcmp
@@ -102,5 +102,5 @@
0020280a strnlen
0020288e strzcat
0020283d strzcpy
-00202f18 video
+00202f70 video
0020297c vsnprintf
diff --git a/sos-code-article2/sos/main.c b/sos-code-article2/sos/main.c
index 9d897b0..1f91c22 100644
--- a/sos-code-article2/sos/main.c
+++ b/sos-code-article2/sos/main.c
@@ -133,12 +133,12 @@ void sos_main(unsigned long magic, unsigned long addr)
compiling with -O3: "i=1/0;" is considered dead code with gcc
-O3. */
i = 10;
- while (1)
- {
/* Stupid function call to fool gcc optimizations */
sos_bochs_printf("i = 1 / %d...\n", i);
i = 1 / i;
- }
+ sos_bochs_printf("i = 1 / %d...\n", i);
+ i = 1 / i;
+ sos_bochs_printf("i = 1 / %d...\n", i);
/* Will never print this since the "divide by zero" exception always
returns to the faulting instruction (see Intel x86 doc vol 3,
diff --git a/sos-code-article6/cdrom/boot/grub/stage2_eltorito b/sos-code-article6/cdrom/boot/grub/stage2_eltorito
new file mode 100644
index 0000000..6d82f08
--- /dev/null
+++ b/sos-code-article6/cdrom/boot/grub/stage2_eltorito
Binary files differ
diff --git a/sos-code-article6/sos.map b/sos-code-article6/sos.map
new file mode 100644
index 0000000..da7c0a6
--- /dev/null
+++ b/sos-code-article6/sos.map
@@ -0,0 +1,268 @@
+002084c8 a.1066
+002077ce alloc_node_binop
+00207752 alloc_node_num
+0020781a alloc_node_unarop
+00207786 alloc_node_var
+00206dbb backtracer.1277
+00201000 __b_kernel
+00200000 __b_load
+0020833c bootstrap_stack_bottom
+00208340 bootstrap_stack_size
+00204ab7 cache_add_slab
+00204c08 cache_grow
+00204978 cache_initialize
+0020a590 cache_of_struct_kslab
+0020a58c cache_of_struct_kslab_cache
+00204cfb cache_release_slab
+00206d83 clk_it
+0021adf0 clock_count.1265
+002033e8 core_routine
+00204eaf create_cache_of_caches
+00204fd9 create_cache_of_ranges
+00203b02 create_range
+0021ae04 ctxt_hello1
+0021ae00 ctxt_hello2
+0021ae0c ctxt_main
+0021addc data_lexer_to_parser
+0021add8 data_reader_to_lexer
+0020adc0 deep_stack
+0021adf4 demand_paging_count.1288
+00206cf8 display_bits
+0020a340 double_fault_alternate_stack
+00206f1f dump_backtrace
+0021f000 __e_kernel
+00209ab9 __e_load
+00207eac eval_expression
+00207111 exit_hello12
+0020394e find_suitable_free_range
+002058fa free_object
+0020a59c free_ppage
+00207f7b free_syntax_tree
+00207e6e func_eval
+002074cd func_exit
+00207f27 func_free
+00207547 func_lexer
+00207b45 func_parser
+002074f0 func_reader
+00208348 gdt
+002038f8 get_closest_preceding_kmem_range
+00207993 get_expr
+002079ae get_expr_lr
+00207a8b get_factor
+0020788d get_number
+00207918 get_op
+002062be get_page_descr_at_paddr
+00207956 get_par
+00207b0f get_scalar
+002078ca get_str
+00207a0f get_term
+00207a2a get_term_lr
+00207133 hello1
+0021ae08 hello1_stack
+00207176 hello2
+0021adfc hello2_stack
+00209ac0 idt
+0020399e insert_range
+00208400 kmalloc_cache
+0020a580 kmem_free_range_list
+0020a588 kmem_range_cache
+0020a584 kmem_used_range_list
+0020a594 kslab_cache_list
+00203a4b lookup_range
+00201011 loop
+00206697 memcmp
+00206640 memcpy
+00206671 memset
+002086a0 msg_double_fault_not_supported
+00208780 msg_nested_level_overflow
+00201000 multiboot_entry
+00200000 multiboot_header
+0020248c paging_setup_map_helper
+00207b6c parse_expression
+0020785d parser_exception
+00206f94 pgflt_ex
+0020a598 physical_page_descr_array
+0020a5a4 physmem_base
+0020a5a8 physmem_top
+0020a5ac physmem_total_pages
+0020a5b0 physmem_used_pages
+00209308 __PRETTY_FUNCTION__.1040
+00208da6 __PRETTY_FUNCTION__.1064
+00208db3 __PRETTY_FUNCTION__.1073
+00208a54 __PRETTY_FUNCTION__.1093
+00208dc0 __PRETTY_FUNCTION__.1101
+0020885f __PRETTY_FUNCTION__.1111
+00208a80 __PRETTY_FUNCTION__.1121
+00209368 __PRETTY_FUNCTION__.1124
+00208aab __PRETTY_FUNCTION__.1131
+00208ddd __PRETTY_FUNCTION__.1132
+00208ac2 __PRETTY_FUNCTION__.1136
+00209142 __PRETTY_FUNCTION__.1137
+00208877 __PRETTY_FUNCTION__.1145
+00208ad9 __PRETTY_FUNCTION__.1145
+00209160 __PRETTY_FUNCTION__.1177
+00209187 __PRETTY_FUNCTION__.1227
+0020919c __PRETTY_FUNCTION__.1242
+002091c0 __PRETTY_FUNCTION__.1262
+00209a94 __PRETTY_FUNCTION__.1292
+00209a9d __PRETTY_FUNCTION__.1327
+00209ab0 __PRETTY_FUNCTION__.1563
+002071b9 print_hello_world
+002084c4 q.1067
+002084cc r.1068
+00206888 random
+002084c0 _random_seed
+00207c48 rec_eval.1511
+002074c8 reclaim
+002070fe reclaim_stack
+002038cf resume_pc
+00208af8 sizeof_struct_sos_kmem_range
+00206c4a snprintf
+002037f0 sos_backtrace
+002032dd sos_bochs_hexdump
+002033a2 sos_bochs_printf
+002030c2 sos_bochs_putchar
+002030ff sos_bochs_puthex
+002030da sos_bochs_putstring
+002030b8 sos_bochs_setup
+002036c1 sos_cpu_context_dump
+002038d0 sos_cpu_context_exit_to
+002037df sos_cpu_context_get_EX_faulting_vaddr
+00203798 sos_cpu_context_get_EX_info
+00203636 sos_cpu_context_get_PC
+0020367d sos_cpu_context_get_SP
+0020388c sos_cpu_context_switch
+00203437 sos_cpu_kstate_init
+0020354f sos_cpu_state_detect_kernel_stack_overflow
+00203518 sos_cpu_state_prepare_detect_kernel_stack_overflow
+00206c80 sos_display_fatal_error
+00201382 sos_exception_get_name
+00201353 sos_exception_get_routine
+0020a2c0 sos_exception_handler_array
+002012c0 sos_exception_set_routine
+00201260 sos_exception_subsystem_setup
+002013a4 sos_exception_wrapper_0
+002013e8 sos_exception_wrapper_1
+00201a48 sos_exception_wrapper_10
+00201a8c sos_exception_wrapper_11
+00201ad0 sos_exception_wrapper_12
+00201b14 sos_exception_wrapper_13
+00201b58 sos_exception_wrapper_14
+00201608 sos_exception_wrapper_15
+0020164c sos_exception_wrapper_16
+00201b9c sos_exception_wrapper_17
+00201690 sos_exception_wrapper_18
+002016d4 sos_exception_wrapper_19
+0020142c sos_exception_wrapper_2
+00201718 sos_exception_wrapper_20
+0020175c sos_exception_wrapper_21
+002017a0 sos_exception_wrapper_22
+002017e4 sos_exception_wrapper_23
+00201828 sos_exception_wrapper_24
+0020186c sos_exception_wrapper_25
+002018b0 sos_exception_wrapper_26
+002018f4 sos_exception_wrapper_27
+00201938 sos_exception_wrapper_28
+0020197c sos_exception_wrapper_29
+00201470 sos_exception_wrapper_3
+002019c0 sos_exception_wrapper_30
+00201a04 sos_exception_wrapper_31
+002014b4 sos_exception_wrapper_4
+002014f8 sos_exception_wrapper_5
+0020153c sos_exception_wrapper_6
+00201580 sos_exception_wrapper_7
+00201be0 sos_exception_wrapper_8
+002015c4 sos_exception_wrapper_9
+00208700 sos_exception_wrapper_array
+002011e4 sos_gdt_subsystem_setup
+00201218 sos_generic_ex
+00202e44 sos_i8254_set_frequency
+00202432 sos_i8259_disable_irq_line
+002023d4 sos_i8259_enable_irq_line
+00202384 sos_i8259_subsystem_setup
+00201174 sos_idt_get_handler
+002010b9 sos_idt_set_handler
+00201014 sos_idt_subsystem_setup
+00201cfe sos_irq_get_nested_level
+00201cdc sos_irq_get_routine
+0020a540 sos_irq_handler_array
+0021adf8 sos_irq_nested_level_counter
+00201c13 sos_irq_set_routine
+00201bfc sos_irq_subsystem_setup
+00201d08 sos_irq_wrapper_0
+00201d6c sos_irq_wrapper_1
+00202114 sos_irq_wrapper_10
+0020217c sos_irq_wrapper_11
+002021e4 sos_irq_wrapper_12
+0020224c sos_irq_wrapper_13
+002022b4 sos_irq_wrapper_14
+0020231c sos_irq_wrapper_15
+00201dd4 sos_irq_wrapper_2
+00201e3c sos_irq_wrapper_3
+00201ea4 sos_irq_wrapper_4
+00201f0c sos_irq_wrapper_5
+00201f74 sos_irq_wrapper_6
+00201fdc sos_irq_wrapper_7
+00202044 sos_irq_wrapper_8
+002020ac sos_irq_wrapper_9
+002087c0 sos_irq_wrapper_array
+00205e4b sos_kfree
+00205da9 sos_kmalloc
+00205ce0 sos_kmalloc_subsystem_setup
+0020565e sos_kmem_cache_alloc
+002054cb sos_kmem_cache_create
+002055cf sos_kmem_cache_destroy
+00205bc8 sos_kmem_cache_free
+00205c11 sos_kmem_cache_release_struct_range
+002054af sos_kmem_cache_subsystem_setup_commit
+002050f1 sos_kmem_cache_subsystem_setup_prepare
+0020488b sos_kmem_vmm_alloc
+0020432f sos_kmem_vmm_del_range
+002048c2 sos_kmem_vmm_free
+00204954 sos_kmem_vmm_is_valid_vaddr
+002040cf sos_kmem_vmm_new_range
+0020492b sos_kmem_vmm_resolve_slab
+0020490b sos_kmem_vmm_set_slab
+00203d52 sos_kmem_vmm_subsystem_setup
+00207fd4 sos_main
+00202d87 sos_paging_get_paddr
+00202cd7 sos_paging_get_prot
+00202851 sos_paging_map
+002026c5 sos_paging_subsystem_setup
+00202b2f sos_paging_unmap
+002065b9 sos_physmem_get_kmem_range
+00206613 sos_physmem_get_state
+0020630b sos_physmem_ref_physpage_at
+00206151 sos_physmem_ref_physpage_new
+002065e2 sos_physmem_set_kmem_range
+00205e74 sos_physmem_subsystem_setup
+0020644e sos_physmem_unref_physpage
+00208360 sos_x86_exnames
+00202edc sos_x86_videomem_cls
+00203026 sos_x86_videomem_printf
+00202faf sos_x86_videomem_putchar
+00202f1f sos_x86_videomem_putstring
+00202ebc sos_x86_videomem_setup
+002068d5 srandom
+0021b000 stack
+0020a9c0 stack_lexer
+0020a5c0 stack_reader
+00201000 start
+00201000 _start
+0021adcc st_eval
+0021add0 st_free
+0021adc4 st_lexer
+0021add4 st_main
+0021adc8 st_parser
+002067e5 strcmp
+0021adc0 st_reader
+002066f1 strlen
+00206827 strncmp
+00206716 strnlen
+0020679a strzcat
+00206749 strzcpy
+0020748d test_backtrace
+002072a2 test_demand_paging
+0020a5a0 used_ppage
+002083e0 video
+002068e2 vsnprintf
diff --git a/sos-code-article6/sos/main.c b/sos-code-article6/sos/main.c
index 37f1d68..546dbe7 100644
--- a/sos-code-article6/sos/main.c
+++ b/sos-code-article6/sos/main.c
@@ -79,7 +79,7 @@ static void dump_backtrace(const struct sos_cpu_state *cpu_state,
sos_bool_t on_console,
sos_bool_t on_bochs)
{
- static void backtracer(sos_vaddr_t PC,
+ void backtracer(sos_vaddr_t PC,
sos_vaddr_t params,
sos_ui32_t depth,
void *custom_arg)
@@ -599,24 +599,23 @@ struct syntax_node
};
};
-static void func_parser(struct syntax_node ** syntax_tree)
-{
- static struct syntax_node *alloc_node_num(int val);
- static struct syntax_node *alloc_node_var(const char * name);
- static struct syntax_node *alloc_node_binop(char op,
+// BEGIN AUX FUNCTIONS
+ struct syntax_node *alloc_node_num(int val);
+ struct syntax_node *alloc_node_var(const char * name);
+ struct syntax_node *alloc_node_binop(char op,
struct syntax_node *parm_left,
struct syntax_node *parm_right);
- static struct syntax_node *alloc_node_unarop(char op,
+ struct syntax_node *alloc_node_unarop(char op,
struct syntax_node *parm);
- static struct syntax_node * get_expr();
- static struct syntax_node * get_expr_lr(struct syntax_node *n);
- static struct syntax_node * get_term();
- static struct syntax_node * get_term_lr(struct syntax_node *n);
- static struct syntax_node * get_factor();
- static struct syntax_node * get_scalar();
+ struct syntax_node * get_expr();
+ struct syntax_node * get_expr_lr(struct syntax_node *n);
+ struct syntax_node * get_term();
+ struct syntax_node * get_term_lr(struct syntax_node *n);
+ struct syntax_node * get_factor();
+ struct syntax_node * get_scalar();
/* Create a new node to store a number */
- static struct syntax_node *alloc_node_num(int val)
+ struct syntax_node *alloc_node_num(int val)
{
struct syntax_node *n
= (struct syntax_node*) sos_kmalloc(sizeof(struct syntax_node), 0);
@@ -625,7 +624,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
return n;
}
/* Create a new node to store a variable */
- static struct syntax_node *alloc_node_var(const char * name)
+ struct syntax_node *alloc_node_var(const char * name)
{
struct syntax_node *n
= (struct syntax_node*) sos_kmalloc(sizeof(struct syntax_node), 0);
@@ -634,7 +633,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
return n;
}
/* Create a new node to store a binary operator */
- static struct syntax_node *alloc_node_binop(char op,
+ struct syntax_node *alloc_node_binop(char op,
struct syntax_node *parm_left,
struct syntax_node *parm_right)
{
@@ -647,7 +646,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
return n;
}
/* Create a new node to store a unary operator */
- static struct syntax_node *alloc_node_unarop(char op,
+ struct syntax_node *alloc_node_unarop(char op,
struct syntax_node *parm)
{
struct syntax_node *n
@@ -660,7 +659,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
/* Raise an exception: transfer control back to main context,
without unrolling the whole recursion */
- static void parser_exception(const char *str)
+ void parser_exception(const char *str)
{
sos_bochs_printf("Parser exception: %s\n", str);
sos_cpu_context_switch(& st_parser, st_main);
@@ -668,7 +667,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
/* Consume the current terminal "number" token and ask for a new
token */
- static int get_number()
+ int get_number()
{
int v;
if (data_lexer_to_parser.type != LEX_IS_NUMBER)
@@ -679,7 +678,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
}
/* Consume the current terminal "variable" token and ask for a new
token */
- static void get_str(char name[STR_VAR_MAXLEN])
+ void get_str(char name[STR_VAR_MAXLEN])
{
if (data_lexer_to_parser.type != LEX_IS_VAR)
parser_exception("Expected variable");
@@ -688,7 +687,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
}
/* Consume the current terminal "operator" token and ask for a new
token */
- static char get_op()
+ char get_op()
{
char op;
if (data_lexer_to_parser.type != LEX_IS_OPER)
@@ -699,7 +698,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
}
/* Consume the current terminal "parenthese" token and ask for a new
token */
- static void get_par()
+ void get_par()
{
if ( (data_lexer_to_parser.type != LEX_IS_OPENPAR)
&& (data_lexer_to_parser.type != LEX_IS_CLOSEPAR) )
@@ -708,13 +707,13 @@ static void func_parser(struct syntax_node ** syntax_tree)
}
/* Parse an Expression */
- static struct syntax_node * get_expr()
+ struct syntax_node * get_expr()
{
struct syntax_node *t = get_term();
return get_expr_lr(t);
}
/* Parse an Expr_lr */
- static struct syntax_node * get_expr_lr(struct syntax_node *n)
+ struct syntax_node * get_expr_lr(struct syntax_node *n)
{
if ( (data_lexer_to_parser.type == LEX_IS_OPER)
&& ( (data_lexer_to_parser.operator == '+')
@@ -728,13 +727,13 @@ static void func_parser(struct syntax_node ** syntax_tree)
return n;
}
/* Parse a Term */
- static struct syntax_node * get_term()
+ struct syntax_node * get_term()
{
struct syntax_node *f1 = get_factor();
return get_term_lr(f1);
}
/* Parse a Term_lr */
- static struct syntax_node * get_term_lr(struct syntax_node *n)
+ struct syntax_node * get_term_lr(struct syntax_node *n)
{
if ( (data_lexer_to_parser.type == LEX_IS_OPER)
&& ( (data_lexer_to_parser.operator == '*')
@@ -748,7 +747,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
return n;
}
/* Parse a Factor */
- static struct syntax_node * get_factor()
+ struct syntax_node * get_factor()
{
if ( (data_lexer_to_parser.type == LEX_IS_OPER)
&& ( (data_lexer_to_parser.operator == '-')
@@ -769,7 +768,7 @@ static void func_parser(struct syntax_node ** syntax_tree)
return get_scalar();
}
/* Parse a Scalar */
- static struct syntax_node * get_scalar()
+ struct syntax_node * get_scalar()
{
if (data_lexer_to_parser.type != LEX_IS_NUMBER)
{
@@ -780,7 +779,11 @@ static void func_parser(struct syntax_node ** syntax_tree)
return alloc_node_num(get_number());
}
+// END AUX FUNCTIONS
+
+static void func_parser(struct syntax_node ** syntax_tree)
+{
/*
* Body of the function
*/
@@ -841,7 +844,7 @@ static void func_eval(struct func_eval_params *parms)
{
/* The internal (recursive) nested function to evaluate each node of
the syntax tree */
- static int rec_eval(const struct syntax_node *n,
+ int rec_eval(const struct syntax_node *n,
const char* var_name[], int var_val[], int nb_vars)
{
switch (n->type)