|
|
1.1 root 1: static char sccsid[] = "@(#)initsym.c 2.5";
2:
3: #include <sys/types.h>
4: #ifndef REGULUS
5: #include <sys/stat.h>
6: #include <core.h>
7: #else
8: #include <stat.h>
9: #endif
10:
11: #ifndef BSD41
12: #define SYSTYPES 1 /* see basic.h */
13: #endif
14: #ifdef SUN
15: #define SYSTYPES 1 /* see basic.h */
16: #endif
17: #include "cdb.h"
18:
19: #ifdef BSD41
20: #include <pagsiz.h>
21: #endif
22:
23: export long vmtimeSym; /* last modification time of vsbSymfile */
24: export int vmagicSym; /* magic number of the Sym file */
25: export MAPR vmapText;
26:
27: typedef struct exec EXECR, *pEXECR;
28: #define cbEXECR sizeof(EXECR)
29:
30: #define cbFileMax 1L<<24
31:
32:
33: /* C B L F F N */
34:
35: export long CblFFn(fn)
36: int fn;
37: {
38: struct stat statbuf;
39:
40: fstat(fn, &statbuf);
41: return(statbuf.st_size);
42: } /* CblFFn */
43:
44:
45: /* A G E F F N */
46:
47: export long AgeFFn(fn)
48: int fn;
49: {
50: struct stat statbuf;
51:
52: fstat(fn, &statbuf);
53: return(statbuf.st_mtime);
54: } /* AgeFFn */
55:
56:
57: /* I N I T S Y M F I L E */
58:
59: local void InitSymfile(sbFile)
60: char *sbFile;
61: {
62: long cbData, cbText;
63: EXECR execSym;
64:
65: /* printf("Opening file %s\n", sbFile); */
66: vfnSym = open(sbFile, O_RDONLY);
67: if (vfnSym < 0) {
68: perror(sbFile);
69: exit(1);
70: } /* if */
71: vmtimeSym = AgeFFn(vfnSym);
72: vsbSymfile = sbFile;
73:
74: vmapText.fn = vfnSym;
75: if (read(vfnSym, &execSym, cbEXECR) != cbEXECR)
76: Panic("Cannot read header of %s", sbFile);
77: if (FBadMagic(execSym))
78: Panic("Bad Magic number in %s", sbFile);
79:
80: vmagicSym = execSym.a_magic;
81: #ifndef BSD41
82: if (vmagicSym == magicReadOnly) {
83: printf("WARNING: Instructions are READ ONLY!\n");
84: printf(" This means you CANNOT set breakpoints!\n");
85: } /* if */
86: #endif
87: visymMax = execSym.a_syms / cbSYMR;
88: cbData = execSym.a_data;
89: cbText = execSym.a_text;
90:
91: #ifndef REGULUS
92: /* regulus does not do core dumps, so we will never look at symfile */
93:
94: vmapText.f1 = CbTextOffset(execSym); /* standard offset */
95: vmapText.b1 = 0; /* section 1 always includes address 0 */
96: vmapText.e1 = cbText; /* section one is text */
97: /* the sym file use section 1 ONLY! - data is in child or core file */
98: vmapText.f2 = vmapText.b2 = vmapText.e2 = 0;
99: #ifdef SYSIII
100: /* following is due to bug in ONYX C compiler */
101: vcbSymFirst = cbText + cbData + CbTextOffset(execsym);
102: #endif
103: #ifdef BSD41
104: vcbSymFirst = CbSymOffset(execSym);
105: vcbSbFirst = CbStrOffset(execSym);
106: vissMax = CblFFn(vfnSym) - vcbSbFirst;
107: /* size of string space (is this right?) */
108: #endif
109: #endif
110: } /* InitSymfile */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.