|
|
1.1 root 1: /* UNIX HEADER */
2: #include <stdio.h>
3:
4: /* COMMON SGS HEADERS */
5: #include "filehdr.h"
6: #include "ldfcn.h"
7:
8:
9: /* checkflags(filename, &filehead)
10: *
11: * checks and sets object file header flags appropriately
12: *
13: * checkflags returns SUCCESS or FAILURE
14: *
15: * checkflags will FAIL (and strip won't strip) in the following cases:
16: * if there is no symbol table (strip announces the fact if lflag, xflag
17: * or bflag imply that symbols were expected)
18: * if lflag, xflag or bflag is ON and there are no local symbols
19: * if lflag is OFF and there are relocation entries
20: *
21: * the file flags in the file header are set to reflect the new state of
22: * of the file:
23: * if xflag, bflag and lflag are all OFF there will be no symbols nor any
24: * line numbers in the file
25: * if xflag is ON then there will be no local symbols nor any line numbers
26: * if bflag is ON then there will be no local symbols except .bb, .eb, .bf
27: * and .ef
28: * if lflag is ON then there will be no line numbers
29: */
30:
31:
32: int
33: checkflags(filename, filehead)
34:
35: char *filename;
36: FILHDR *filehead;
37:
38: {
39: /* STRIP FUNCTION CALLED */
40: extern error( );
41:
42: /* EXTERNAL VARIABLES USED */
43: extern LDFILE *ldptr;
44: extern int lflag,
45: xflag,
46: bflag,
47: sflag,
48: rflag;
49: extern int fflag;
50:
51: /* LOCAL VARIABLE */
52: unsigned short filflags;
53:
54: if (filehead->f_nsyms == 0L) {
55: if (lflag || xflag || bflag || rflag || sflag || fflag ) {
56: error(filename, "no symbol table", 1);
57: onintr();
58: }
59: return(FAILURE);
60:
61: } else if (!(lflag || xflag || bflag || rflag || sflag || fflag)) {
62: filehead->f_nsyms = 0L;
63: }
64:
65: filflags = filehead->f_flags;
66:
67: if (sflag && (filflags & F_LSYMS) != 0)
68: {
69: error(filename, "no local symbols", 1);
70: return(FAILURE);
71: }
72:
73: if (((!rflag) && (!fflag) && (!lflag)) && (filflags & F_RELFLG) == 0) {
74: error(filename, "relocation entries; cannot strip", 1);
75: return(FAILURE);
76: }
77:
78: #if !UNIX
79: if (fflag && !(filflags & F_EXEC)) {
80: error( filename, "not executable, cannot strip", 1);
81: return( FAILURE );
82: }
83: #endif
84:
85: return(SUCCESS);
86: }
87: /*
88: * @(#)checkflags.c 1.6 11/4/83;
89: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.