BSD 4 release
[unix-history] / usr / src / cmd / sdb / display.c
index aa3d678..57a500b 100644 (file)
@@ -1,10 +1,18 @@
+static char sccsid[] = "@(#)display.c 4.1 10/9/80";
 #include "head.h"
 #include <a.out.h>
 #include "head.h"
 #include <a.out.h>
+#include <stab.h>
 #include "cdefs.h"
 struct user u;
 BKPTR  bkpthead;
 
 #include "cdefs.h"
 struct user u;
 BKPTR  bkpthead;
 
+#ifdef FLEXNAMES
+#define        bread(a,b,c)    stread(b,c)
+#define        blseek(a,b,c)   stseek(b,c)
+#endif
+
 /* initialize frame pointers to top of call stack */
 /* initialize frame pointers to top of call stack */
+/*  MACHINE DEPENDENT */
 struct proct *
 initframe() {
        argp = *(ADDR *) (((ADDR) &u) + AP);
 struct proct *
 initframe() {
        argp = *(ADDR *) (((ADDR) &u) + AP);
@@ -12,7 +20,7 @@ initframe() {
        callpc = *(ADDR *) (((ADDR) &u) + PC);
        if ((frame == 0) || (frame & 0xf0000000 != 0x70000000))
                return(badproc);
        callpc = *(ADDR *) (((ADDR) &u) + PC);
        if ((frame == 0) || (frame & 0xf0000000 != 0x70000000))
                return(badproc);
-       return(adrtoproc(callpc++));  /* ++ because UNIX backs up instrs */
+       return(adrtoprocp(callpc++));  /* ++ because UNIX backs up instrs */
 }
 
 
 }
 
 
@@ -28,10 +36,11 @@ nextframe() {
        }
        if ((frame == 0) || (frame & 0xf0000000 != 0x70000000))
                return(badproc);
        }
        if ((frame == 0) || (frame & 0xf0000000 != 0x70000000))
                return(badproc);
-       return(adrtoproc(callpc-1));
+       return(adrtoprocp(callpc-1));
 }
 
 /* returns core image address for variable */
 }
 
 /* returns core image address for variable */
+/*  MACHINE DEPENDENT */
 ADDR
 formaddr(class, addr)
 register char class;
 ADDR
 formaddr(class, addr)
 register char class;
@@ -136,6 +145,10 @@ char *proc, *var, *fmt; {
        char *comblk;
        register struct proct *procp;
 
        char *comblk;
        register struct proct *procp;
 
+       if (percentflag) {      /* kludge for register names */
+               return(regout(var, prvar, fmt));
+       }
+
        if (var[0] == '\0') {
                error("Unexpected null variable name");
                return(-1);
        if (var[0] == '\0') {
                error("Unexpected null variable name");
                return(-1);
@@ -204,6 +217,11 @@ char *proc, *var, *fmt; {
                }
        }
 
                }
        }
 
+       if (addr == -1 && match == 0) {
+               addr = extoutvar(var, fmt, metaflag, prvar);
+               if (addr != -1)
+                       return(addr);
+       }
        if (match == 0) {
                printf("%s not an active procedure\n", proc);
                return(-1);
        if (match == 0) {
                printf("%s not an active procedure\n", proc);
                return(-1);
@@ -212,7 +230,11 @@ char *proc, *var, *fmt; {
                if (var[0] == '.')
                        var++;
                if (proc[0])
                if (var[0] == '.')
                        var++;
                if (proc[0])
-                       printf("%.8s:%s not found\n", proc, var);
+#ifndef FLEXNAMES
+                       printf("%.16s:%s not found\n", proc, var);
+#else
+                       printf("%s:%s not found\n", proc, var);
+#endif
                else
                        printf("%s not found\n", var);
                return(-1);
                else
                        printf("%s not found\n", var);
                return(-1);
@@ -320,8 +342,7 @@ prbkpt() {
        for (bkptr = bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
                if (bkptr->flag) {
                        cnt++;
        for (bkptr = bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
                if (bkptr->flag) {
                        cnt++;
-                       printbkpt("", adrtoprocp(bkptr->loc)->pname,
-                               adrtolineno(bkptr->loc));
+                       printbkpt("", adrtoprocp(bkptr->loc), bkptr->loc);
                        cmdp = bkptr->comm;
                        if (*cmdp != '\n') {
                                printf("   <");
                        cmdp = bkptr->comm;
                        if (*cmdp != '\n') {
                                printf("   <");
@@ -347,8 +368,7 @@ idbkpt() {
 
        for (bkptr = bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
                if (bkptr->flag) {
 
        for (bkptr = bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
                if (bkptr->flag) {
-                       printbkpt(" ? ", adrtoprocp(bkptr->loc)->pname,
-                               adrtolineno(bkptr->loc));
+                       printbkpt(" ? ", adrtoprocp(bkptr->loc), bkptr->loc);
                        yesflg = 0;
                        cnt++;
                        do {
                        yesflg = 0;
                        cnt++;
                        do {
@@ -370,17 +390,19 @@ dabkpt() {
        for (bkptr = bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
                bkptr->flag = 0;
 }
        for (bkptr = bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
                bkptr->flag = 0;
 }
-printbkpt(s, name, lineno)
-char *s, *name; {
-       if (name[0] == '_')
-               printf("%.7s:", name+1);
-       else
-               printf("%.8s:", name);
-
-       if (lineno != -1)
-               printf("%d%s", lineno, s);
-       else
-               printf("%s", s);
+/* 
+ * Print name of breakpoint for a, b, d commands:
+ */
+printbkpt(s, procp, dot)
+char *s; struct proct *procp; ADDR dot; {
+       adrtolineno(dot);
+       if (dot != lnfaddr)
+               printf("0x%x (", dot);
+       prlnoff(procp, dot);
+       if (dot != lnfaddr)
+               printf(")");
+       printf("%s", s);
 }
 
 /* print call frame */
 }
 
 /* print call frame */
@@ -405,10 +427,18 @@ prfrx(top) {
                if (eqstr("__dbsubc", p)) return;
                if (p[0] == '_') {
                        endflg = 1;
                if (eqstr("__dbsubc", p)) return;
                if (p[0] == '_') {
                        endflg = 1;
-                       printf("%.7s(", p+1);
+#ifndef FLEXNAMES
+                       printf("%.15s(", p+1);
+#else
+                       printf("%s(", p+1);
+#endif
                }
                else {
                }
                else {
-                       printf("%.8s(", p);
+#ifndef FLEXNAMES
+                       printf("%.16s(", p);
+#else
+                       printf("%s(", p);
+#endif
                        endflg = 0;
                }
                if (endflg == 0) {
                        endflg = 0;
                }
                if (endflg == 0) {
@@ -445,8 +475,13 @@ prfrx(top) {
                                argp += 4;
                        } else {
                                int length;
                                argp += 4;
                        } else {
                                int length;
-                               printf("%.8s=", stentry.n_name);
-                               dispx(argp, "", N_GSYM, stentry.n_desc, 0, 0);
+#ifndef FLEXNAMES
+                               printf("%.16s=", stentry.n_name);
+#else
+                               printf("%s=", stentry.n_un.n_name);
+#endif
+                               dispx(argp, "", N_GSYM, stentry.n_desc,
+                                       0, 0, DSP);
                                length = typetosize(stentry.n_desc, 0);
                                if (length > WORDSIZE)
                                        argp += length;
                                length = typetosize(stentry.n_desc, 0);
                                if (length > WORDSIZE)
                                        argp += length;
@@ -477,27 +512,14 @@ prfrx(top) {
        } while (((procp = nextframe()) != badproc) && !top);
 }
 
        } while (((procp = nextframe()) != badproc) && !top);
 }
 
-STRING         signals[] = {
-               "",
-               "hangup",
-               "interrupt",
-               "quit",
-               "illegal instruction",
-               "trace/BPT",
-               "IOT",
-               "EMT",
-               "floating exception",
-               "killed",
-               "bus error",
-               "memory fault",
-               "bad system call",
-               "broken pipe",
-               "alarm call",
-               "terminated",
-};
 INT            signo;
 INT            signo;
+STRING         signals[];
+extern nsig;
+sigprint()
+{
 
 
-sigprint() {
-       printf("%s", signals[signo]);
+       if (signo < nsig)
+               printf("%s", signals[signo]);
+       else
+               printf("signal %d???", signals[signo]);
 }
 }
-