Some improvements
authorceriel <none@none>
Tue, 19 Dec 1995 09:30:48 +0000 (09:30 +0000)
committerceriel <none@none>
Tue, 19 Dec 1995 09:30:48 +0000 (09:30 +0000)
lang/m2/comp/stab.c
lang/m2/comp/walk.c

index 7c1918c..54bf674 100644 (file)
@@ -223,6 +223,11 @@ stb_type(tp, assign_num)
                addc_db_str(';');
                break;
        case T_PROCEDURE:
+               if (gdb_flag) {
+                       addc_db_str('f');
+                       stb_type(tp->tp_next ? tp->tp_next : void_type, 0);
+                       break;
+               }
                addc_db_str('Q');
                stb_type(tp->tp_next ? tp->tp_next : void_type, 0);
                {
@@ -281,12 +286,11 @@ stb_string(df, kind)
                if (gdb_flag) {
                        addc_db_str('F');
                        stb_type(void_type, 0);
-                       addc_db_str(';');
                }
                else {
                        adds_db_str(sprint(buf, "M%d;", df->mod_vis->sc_count));
                }
-               C_ms_stb_pnam(db_str.base, N_FUN, proclevel, df->mod_vis->sc_scope->sc_name);
+               C_ms_stb_pnam(db_str.base, N_FUN, gdb_flag ? 0 : proclevel, df->mod_vis->sc_scope->sc_name);
                break;
        case D_PROCEDURE:
                if (gdb_flag) {
@@ -307,15 +311,8 @@ stb_string(df, kind)
                                sc = enclosing(sc);
                        }
                }
-               addc_db_str(';');
-               C_ms_stb_pnam(db_str.base, N_FUN, proclevel, df->prc_vis->sc_scope->sc_name);
-               {
-                       register struct paramlist *p = tp->prc_params;
-                       while (p) {
-                               stb_string(p->par_def, D_VARIABLE);
-                               p = p->par_next;
-                       }
-               }
+               else addc_db_str(';');
+               C_ms_stb_pnam(db_str.base, N_FUN, gdb_flag ? 0 : proclevel, df->prc_vis->sc_scope->sc_name);
                break;
        case D_END:
                if (gdb_flag) break;
@@ -345,14 +342,21 @@ stb_string(df, kind)
                }
                else if (!proclevel ||
                         (df->df_flags & D_ADDRGIVEN)) {        /* global */
-                       addc_db_str('G');
+                       int knd = N_LCSYM;
+                       if (df->df_flags & D_EXPORTED) {
+                               knd = N_GSYM;
+                               addc_db_str('G');
+                       }
+                       else {
+                               addc_db_str('S');
+                       }
                        stb_type(tp, 0);
                        addc_db_str(';');
                        if (df->df_flags & D_ADDRGIVEN) {
-                               C_ms_stb_cst(db_str.base, N_LCSYM, 0, df->var_off);
+                               C_ms_stb_cst(db_str.base, knd, 0, df->var_off);
                        }
                        else {
-                               C_ms_stb_dnam(db_str.base, N_LCSYM, 0, df->var_name, (arith) 0);
+                               C_ms_stb_dnam(db_str.base, knd, 0, df->var_name, (arith) 0);
                        }
                }
                else {  /* local variable */
index 30f3930..f7bfa90 100644 (file)
@@ -48,6 +48,7 @@ extern arith          NewInt();
 extern arith           TmpSpace();
 
 extern int             proclevel;
+extern int             gdb_flag;
 
 label                  text_label;
 label                  data_label = 1;
@@ -247,7 +248,7 @@ WalkModule(module)
        proclevel++;
 #ifdef DBSYMTAB
        if (options['g']) {
-               C_ms_std((char *) 0, N_LBRAC, proclevel);
+               C_ms_std((char *) 0, N_LBRAC, gdb_flag ? 0 : proclevel);
        }
 #endif /* DBSYMTAB */
        WalkNode(module->mod_body, NO_EXIT_LABEL, REACH_FLAG);
@@ -257,7 +258,7 @@ WalkModule(module)
        C_ret((arith) 0);
 #ifdef DBSYMTAB
        if (options['g']) {
-               C_ms_std((char *) 0, N_RBRAC, proclevel);
+               C_ms_std((char *) 0, N_RBRAC, gdb_flag ? 0 : proclevel);
        }
 #endif /* DBSYMTAB */
        C_end(-sc->sc_off);
@@ -336,7 +337,7 @@ WalkProcedure(procedure)
                stb_string(procedure, D_PROCEDURE);
                WalkDefList(procscope->sc_def, stabdef);
                stb_string(procedure, D_PEND);
-               C_ms_std((char *) 0, N_LBRAC, proclevel);
+               C_ms_std((char *) 0, N_LBRAC, gdb_flag ? 0 : proclevel);
        }
 #endif /* DBSYMTAB */
        C_ms_par(procedure->df_type->prc_nbpar
@@ -509,7 +510,7 @@ WalkProcedure(procedure)
                stb_string(procedure, D_PROCEDURE);
                WalkDefList(procscope->sc_def, stabdef);
                stb_string(procedure, D_PEND);
-               C_ms_std((char *) 0, N_LBRAC, proclevel);
+               C_ms_std((char *) 0, N_LBRAC, gdb_flag ? 0 : proclevel);
        }
 #endif /* DBSYMTAB */
        C_ms_par(procedure->df_type->prc_nbpar
@@ -524,7 +525,7 @@ WalkProcedure(procedure)
 #endif
 #ifdef DBSYMTAB
        if (options['g']) {
-               C_ms_std((char *) 0, N_RBRAC, proclevel);
+               C_ms_std((char *) 0, N_RBRAC, gdb_flag ? 0 : proclevel);
        }
 #endif /* DBSYMTAB */
        C_end(-procscope->sc_off);