|
|
1.1 root 1: .\" Copyright (c) 1985 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)dbx.5 6.2 (Berkeley) 1/12/86
6: .\"
7: .TH DBX 5 "January 12, 1986"
8: .UC 6
9: .SH NAME
10: dbx \- dbx symbol table information
11: .SH DESCRIPTION
12: The compiler symbol information generated
13: for \fIdbx\fP(1) uses the same structure
14: as described in \fIstab\fP(5), with additional type and scope information
15: appended to a symbol's name.
16: The assembler directive used to describe symbol information
17: has the following format:
18: .sp 1
19: .ti +8n
20: \fBstabs\fR ``\fIstring\fP'',\fIkind\fP,0,\fIsize\fP,\fIvalue\fP
21: .PP
22: \fIString\fR contains the name, source language type, and scope of the symbol,
23: \fIkind\fR specifies the memory class
24: (e.g., external, static, parameter, local, register), and
25: \fIsize\fR specifies the byte size of the object, if relevant.
26: The third field (0 above) is unused.
27: For a global variable or a type, \fIvalue\fR is unused;
28: for a local variable or parameter, it is the offset from the frame pointer,
29: for a register variable, it is the associated register number.
30: .PP
31: The different kinds of stab entries are interpreted by dbx as follows:
32: .IP N_GSYM 10
33: The symbol is a global variable (e.g., .comm variable).
34: The variable's address can be found from the corresponding
35: ld(1) symbol entry, thus the value field for N_GSYM symbols is ignored.
36: For example, a global variable ``x'' will have both an N_GSYM entry and
37: an \fIld\fP(1) entry (e.g., N_BSS + N_EXT).
38: See \fIa.out\fP(5) for details about these other entries.
39: of
40: .IP N_FUN
41: The symbol is a procedure or function.
42: The size field contains the line number of the entry point.
43: The value field contains the address of the entry point (in the text segment).
44: .IP N_STSYM
45: The symbol is a statically allocated variable for which
46: an initial value has been specified.
47: The value field contains the address of the variable (in the data segment).
48: .IP N_LCSYM
49: The symbol is statically allocated, but not initialized.
50: .IP N_RSYM
51: The symbol is a register variable whose value is kept in the register
52: denoted by the value field.
53: .IP N_PSYM
54: The symbol is a parameter whose value is pushed on the stack before the call.
55: The value field contains the offset from the argument base pointer
56: (on the VAX, the ap register).
57: .IP N_LSYM
58: The symbol is a local variable whose value is stored in the most recently
59: defined procedure's stack frame.
60: The value is the (often negative) offset from the frame pointer
61: (on the VAX, the fp register).
62: .IP "N_PC, N_MOD2"
63: The symbol defines separate compilation information
64: for pre-linking checking for Berkeley Pascal and DEC Modula-2 programs
65: respectively.
66: For Pascal, the value field contains the line number
67: that the symbol is defined on.
68: The value field is not used for Modula-2.
69: .PP
70: Most of the source level information about a symbol
71: is stored in the string field of the stab entry.
72: Since strings are kept in a separate string table in the a.out file,
73: they can be arbitrarily long.
74: Thus there are no restrictions on the kind or length of information
75: in the string field, and it was not necessary
76: to modify the assembler or loader when extending or modifying
77: the format of this information.
78: .sp
79: .PP
80: Below is a grammar describing the syntax of the symbol string.
81: Except in the case of a constant whose value is a string,
82: there are no blanks in a symbol string.
83: .nf
84: .ta 1i 2i 3i 4i 5i 6i 7i
85: .sp 1
86: NAME: [a-zA-Z_][a-zA-Z_0-9]*
87: INTEGER: [-][0-9][0-9]*
88: REAL: [+-][0-9]*(\.[0-9][0-9]*|)([eE]([+-]|)[0-9][0-9]*|)
89: STRING: ``.*''
90: BSTRING: .*
91:
92: String:
93: NAME `:' Class
94: `:' Class
95:
96: Class:
97: `c' `=' Constant `;'
98: Variable
99: Procedure
100: Parameter
101: NamedType
102: `X' ExportInfo -- export or import information (for N_MOD2 only)
103:
104: Constant:
105: `i' INTEGER
106: `r' REAL
107: `c' OrdValue
108: `b' OrdValue
109: `s' STRING
110: `e' TypeId `,' OrdValue
111: `S' TypeId `,' NumElements `,' NumBits `,' BSTRING
112:
113: OrdValue:
114: INTEGER
115:
116: NumElements:
117: INTEGER
118:
119: NumBits:
120: INTEGER
121:
122: Variable:
123: TypeId -- local variable of type TypeId
124: `r' TypeId -- register variable of type TypeId
125: `S' TypeId -- module variable of type TypeId (static global in C)
126: `V' TypeId -- own variable of type TypeId (static local in C)
127: `G' TypeId -- global variable of type TypeId
128:
129: Procedure:
130: Proc -- top level procedure
131: Proc `,' NAME `,' NAME -- local to first NAME,
132: -- second NAME is corresponding ld symbol
133:
134: .need 8
135: Proc:
136: `P' -- global procedure
137: `Q' -- local procedure (static in C)
138: `I' -- internal procedure (different calling sequence)
139: `F' TypeId -- function returning type TypeId
140: `f' TypeId -- local function
141: `J' TypeId -- internal function
142:
143: Parameter:
144: `p' TypeId -- value parameter of type TypeId
145: `v' TypeId -- reference parameter of type TypeId
146:
147: NamedType:
148: `t' TypeId -- type name for type TypeId
149: `T' TypeId -- C structure tag name for struct TypeId
150:
151: TypeId:
152: INTEGER -- Unique (per compilation) number of type
153: INTEGER `=' TypeDef -- Definition of type number
154: INTEGER `=' TypeAttrs TypeDef
155:
156: --
157: -- Type attributes are extra information associated with a type,
158: -- such as alignment constraints or pointer checking semantics.
159: -- Dbx interprets some of these, but will ignore rather than complain
160: -- about any it does not recognize. Therefore this is a way to add
161: -- extra information for pre-linking checking.
162: --
163: TypeAttrs:
164: `@' TypeAttrList `;'
165:
166: TypeAttrList:
167: TypeAttrList `,' TypeAttr
168: TypeAttr
169:
170: TypeAttr:
171: `a' INTEGER -- align boundary
172: `s' INTEGER -- size in bits
173: `p' INTEGER -- pointer class (e.g., checking)
174: BSTRING -- something else
175:
176: TypeDef:
177: INTEGER
178: Subrange
179: Array
180: Record
181: `e' EnumList `;' -- enumeration
182: `*' TypeId -- pointer to TypeId
183: `S' TypeId -- set of TypeId
184: `d' TypeId -- file of TypeId
185: ProcedureType
186: `i' NAME `:' NAME `;' -- imported type ModuleName:Name
187: `o' NAME `;' -- opaque type
188: `i' NAME `:' NAME `,' TypeId `;'
189: `o' NAME `,' TypeId `;'
190:
191: Subrange:
192: `r' TypeId `;' INTEGER `;' INTEGER
193:
194: Array:
195: `a' TypeId `;' TypeId -- array [TypeId] of TypeId
196: `A' TypeId -- open array of TypeId
197: `D' INTEGER `,' TypeId -- N-dim. dynamic array
198: `E' INTEGER `,' TypeId -- N-dim. subarray
199:
200: ProcedureType:
201: `f' TypeId `;' -- C function type
202: `f' TypeId `,' NumParams `;' TParamList `;'
203: `p' NumParams `;' TParamList `;'
204:
205: NumParams:
206: INTEGER
207:
208: Record:
209: `s' ByteSize FieldList `;' -- structure/record
210: `u' ByteSize FieldList `;' -- C union
211:
212: ByteSize:
213: INTEGER
214:
215: FieldList :
216: Field
217: FieldList Field
218:
219: Field:
220: NAME `:' TypeId `,' BitOffset `,' BitSize `;'
221:
222: BitSize:
223: INTEGER
224:
225: BitOffset:
226: INTEGER
227:
228: EnumList:
229: Enum
230: EnumList Enum
231:
232: Enum:
233: NAME `:' OrdValue `,'
234:
235: ParamList:
236: Param
237: ParamList Param
238:
239: Param:
240: NAME `:' TypeId `,' PassBy `;'
241:
242: PassBy:
243: INTEGER
244:
245: TParam:
246: TypeId `,' PassBy `;'
247:
248: TParamList :
249: TParam
250: TParamList TParam
251:
252: Export:
253: INTEGER ExportInfo
254:
255: ExportInfo:
256: `t' TypeId
257: `f' TypeId `,' NumParams `;' ParamList `;'
258: `p' NumParams `;' ParamList `;'
259: `v' TypeId
260: `c' `=' Constant
261:
262: .fi
263: .PP
264: A `?' indicates that the symbol information is continued in
265: the next stab entry.
266: This directive can only occur where a `;' would otherwise
267: separate the fields of a record or constants in an enumeration.
268: It is useful when the number of elements in one of these lists
269: is large.
270: .SH "SEE ALSO"
271: dbx(1), stab(5), a.out(5)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.