From 5ec944f8fa60ab0d61b0d98463bf193bbe5dd6c1 Mon Sep 17 00:00:00 2001 From: Bob Dubner <rdubner@symas.com> Date: Fri, 5 Apr 2024 17:29:06 -0400 Subject: [PATCH] WIP: doing more stack than static --- gcc/cobol/genapi.cc | 10 ++++------ gcc/cobol/genmath.cc | 4 ++-- gcc/cobol/genutil.cc | 15 ++++++++++++++- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc index 51fd3f63beb8..9820433fe034 100644 --- a/gcc/cobol/genapi.cc +++ b/gcc/cobol/genapi.cc @@ -159,8 +159,8 @@ trace1_init() if( first_time ) { first_time = false; - trace_handle = gg_define_variable(INT, vs_static); - trace_indent = gg_define_variable(INT, vs_static); + trace_handle = gg_define_variable(INT, "trace_handle", vs_static); + trace_indent = gg_define_variable(INT, "trace_indent", vs_static); bTRACE1 = getenv("TRACE1") ? getenv("TRACE1") : gv_trace_switch; @@ -5127,9 +5127,7 @@ parser_exit(void) tree array_type = build_array_type_nelts(UCHAR, current_function->returning->data.capacity); - tree retval = gg_define_variable(array_type, - NULL, - vs_static); + tree retval = gg_define_variable(array_type, vs_stack); gg_memcpy(gg_get_address_of(retval), member(current_function->returning->var_decl_node, "data"), member(current_function->returning->var_decl_node, "capacity")); @@ -14995,7 +14993,7 @@ parser_symbol_add(struct cbl_field_t *new_var ) { // We need a unique name for the allocated data for this COBOL variable: char achDataName[256]; - sprintf(achDataName, "__vardata_%lu", sv_data_name_counter++); + sprintf(achDataName, "_%s_data_%lu", new_var->name, sv_data_name_counter++); tree array_type = build_array_type_nelts(UCHAR, bytes_to_allocate); new_var->data_decl_node = gg_define_variable( diff --git a/gcc/cobol/genmath.cc b/gcc/cobol/genmath.cc index e2796172da3e..066e2f986f5f 100644 --- a/gcc/cobol/genmath.cc +++ b/gcc/cobol/genmath.cc @@ -155,7 +155,7 @@ arithmetic_operation2(size_t nC, cbl_num_result_t *C, cbl_refer_t *results = (cbl_refer_t *)xmalloc((nC+1) * sizeof( cbl_refer_t )); int ncount = 0; - tree rounds = gg_define_variable(build_pointer_type(INT), vs_static); + tree rounds = gg_define_variable(build_pointer_type(INT), vs_stack); gg_assign( rounds, gg_cast(build_pointer_type(INT), gg_malloc((nC+1) * sizeof(int)))); @@ -366,7 +366,7 @@ arithmetic_operation( size_t nC, cbl_num_result_t *C, cbl_refer_t *results = (cbl_refer_t *)xmalloc((nC+1) * sizeof( cbl_refer_t )); int ncount = 0; - tree rounds = gg_define_variable(build_pointer_type(INT), vs_static); + tree rounds = gg_define_variable(build_pointer_type(INT), vs_stack); gg_assign( rounds, gg_cast(build_pointer_type(INT), gg_malloc((nC+1) * sizeof(int)))); diff --git a/gcc/cobol/genutil.cc b/gcc/cobol/genutil.cc index c8b1a32c2dda..46efbc1b88b6 100644 --- a/gcc/cobol/genutil.cc +++ b/gcc/cobol/genutil.cc @@ -2423,7 +2423,20 @@ refer_fill_internal(cbl_refer_t &refer, refer_type_t refer_type) { //fprintf(stderr, "refer_fill_internal: %s %s\n", refer.field->name, cbl_field_type_str(refer.field->type)); tree retval = gg_define_int(0); - refer.refer_decl_node = gg_define_variable(cblc_refer_type_node, vs_static); + + static int counter=1; + char ach[128]; + sprintf(ach, + "_%s_field_%d", + refer.field ? refer.field->name : "noname", + counter++); + + // if( strcasestr(ach, "zeros") ) + // { + // fprintf(stderr, "zeros\n"); + // } + + refer.refer_decl_node = gg_define_variable(cblc_refer_type_node, ach, vs_static); if( refer.field ) { gg_assign(member(refer.refer_decl_node, "field"), -- GitLab