1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: static char sccsid[] = "@(#)objaddr.c 5.1 (Berkeley) 6/6/85";
9: #endif not lint
10: /*
11: * Lookup the object address of a given line from the named file.
12: *
13: * Potentially all files in the file table need to be checked
14: * until the line is found since a particular file name may appear
15: * more than once in the file table (caused by includes).
16: */
17:
18: #include "defs.h"
19: #include "mappings.h"
20: #include "object.h"
21: #include "source.h"
22: #include "filetab.h"
23: #include "linetab.h"
24:
25: ADDRESS objaddr(line, name)
26: LINENO line;
27: char *name;
28: {
29: register FILETAB *ftp;
30: register LINENO i, j;
31: BOOLEAN foundfile;
32:
33: if (nlhdr.nlines == 0) {
34: return(-1);
35: }
36: if (name == NULL) {
37: name = cursource;
38: }
39: foundfile = FALSE;
40: for (ftp = &filetab[0]; ftp < &filetab[nlhdr.nfiles]; ftp++) {
41: if (streq(ftp->filename, name)) {
42: foundfile = TRUE;
43: i = ftp->lineindex;
44: if (ftp == &filetab[nlhdr.nfiles-1]) {
45: j = nlhdr.nlines;
46: } else {
47: j = (ftp + 1)->lineindex;
48: }
49: while (i < j) {
50: if (linetab[i].line == line) {
51: return linetab[i].addr;
52: }
53: i++;
54: }
55: }
56: }
57: if (!foundfile) {
58: error("unknown source file \"%s\"", name);
59: }
60: return(-1);
61: }
Defined functions
Defined variables
sccsid
defined in line
8;
never used