Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / src / nas,5.n2.os.2 / lib / python / man / man3 / TCL_MEM_DEBUG.3
CommitLineData
86530b38
AT
1'\"
2'\" Copyright (c) 1992-1999 Karl Lehenbauer and Mark Diekhans.
3'\" Copyright (c) 2000 by Scriptics Corporation.
4'\" All rights reserved.
5'\"
6'\" RCS: @(#) $Id: TCL_MEM_DEBUG.3,v 1.6 2002/11/15 15:34:17 dkf Exp $
7'\"
8'\" The definitions below are for supplemental macros used in Tcl/Tk
9'\" manual entries.
10'\"
11'\" .AP type name in/out ?indent?
12'\" Start paragraph describing an argument to a library procedure.
13'\" type is type of argument (int, etc.), in/out is either "in", "out",
14'\" or "in/out" to describe whether procedure reads or modifies arg,
15'\" and indent is equivalent to second arg of .IP (shouldn't ever be
16'\" needed; use .AS below instead)
17'\"
18'\" .AS ?type? ?name?
19'\" Give maximum sizes of arguments for setting tab stops. Type and
20'\" name are examples of largest possible arguments that will be passed
21'\" to .AP later. If args are omitted, default tab stops are used.
22'\"
23'\" .BS
24'\" Start box enclosure. From here until next .BE, everything will be
25'\" enclosed in one large box.
26'\"
27'\" .BE
28'\" End of box enclosure.
29'\"
30'\" .CS
31'\" Begin code excerpt.
32'\"
33'\" .CE
34'\" End code excerpt.
35'\"
36'\" .VS ?version? ?br?
37'\" Begin vertical sidebar, for use in marking newly-changed parts
38'\" of man pages. The first argument is ignored and used for recording
39'\" the version when the .VS was added, so that the sidebars can be
40'\" found and removed when they reach a certain age. If another argument
41'\" is present, then a line break is forced before starting the sidebar.
42'\"
43'\" .VE
44'\" End of vertical sidebar.
45'\"
46'\" .DS
47'\" Begin an indented unfilled display.
48'\"
49'\" .DE
50'\" End of indented unfilled display.
51'\"
52'\" .SO
53'\" Start of list of standard options for a Tk widget. The
54'\" options follow on successive lines, in four columns separated
55'\" by tabs.
56'\"
57'\" .SE
58'\" End of list of standard options for a Tk widget.
59'\"
60'\" .OP cmdName dbName dbClass
61'\" Start of description of a specific option. cmdName gives the
62'\" option's name as specified in the class command, dbName gives
63'\" the option's name in the option database, and dbClass gives
64'\" the option's class in the option database.
65'\"
66'\" .UL arg1 arg2
67'\" Print arg1 underlined, then print arg2 normally.
68'\"
69'\" RCS: @(#) $Id: man.macros,v 1.4 2000/08/25 06:18:32 ericm Exp $
70'\"
71'\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
72.if t .wh -1.3i ^B
73.nr ^l \n(.l
74.ad b
75'\" # Start an argument description
76.de AP
77.ie !"\\$4"" .TP \\$4
78.el \{\
79. ie !"\\$2"" .TP \\n()Cu
80. el .TP 15
81.\}
82.ta \\n()Au \\n()Bu
83.ie !"\\$3"" \{\
84\&\\$1 \\fI\\$2\\fP (\\$3)
85.\".b
86.\}
87.el \{\
88.br
89.ie !"\\$2"" \{\
90\&\\$1 \\fI\\$2\\fP
91.\}
92.el \{\
93\&\\fI\\$1\\fP
94.\}
95.\}
96..
97'\" # define tabbing values for .AP
98.de AS
99.nr )A 10n
100.if !"\\$1"" .nr )A \\w'\\$1'u+3n
101.nr )B \\n()Au+15n
102.\"
103.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
104.nr )C \\n()Bu+\\w'(in/out)'u+2n
105..
106.AS Tcl_Interp Tcl_CreateInterp in/out
107'\" # BS - start boxed text
108'\" # ^y = starting y location
109'\" # ^b = 1
110.de BS
111.br
112.mk ^y
113.nr ^b 1u
114.if n .nf
115.if n .ti 0
116.if n \l'\\n(.lu\(ul'
117.if n .fi
118..
119'\" # BE - end boxed text (draw box now)
120.de BE
121.nf
122.ti 0
123.mk ^t
124.ie n \l'\\n(^lu\(ul'
125.el \{\
126.\" Draw four-sided box normally, but don't draw top of
127.\" box if the box started on an earlier page.
128.ie !\\n(^b-1 \{\
129\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
130.\}
131.el \}\
132\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
133.\}
134.\}
135.fi
136.br
137.nr ^b 0
138..
139'\" # VS - start vertical sidebar
140'\" # ^Y = starting y location
141'\" # ^v = 1 (for troff; for nroff this doesn't matter)
142.de VS
143.if !"\\$2"" .br
144.mk ^Y
145.ie n 'mc \s12\(br\s0
146.el .nr ^v 1u
147..
148'\" # VE - end of vertical sidebar
149.de VE
150.ie n 'mc
151.el \{\
152.ev 2
153.nf
154.ti 0
155.mk ^t
156\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
157.sp -1
158.fi
159.ev
160.\}
161.nr ^v 0
162..
163'\" # Special macro to handle page bottom: finish off current
164'\" # box/sidebar if in box/sidebar mode, then invoked standard
165'\" # page bottom macro.
166.de ^B
167.ev 2
168'ti 0
169'nf
170.mk ^t
171.if \\n(^b \{\
172.\" Draw three-sided box if this is the box's first page,
173.\" draw two sides but no top otherwise.
174.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
175.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
176.\}
177.if \\n(^v \{\
178.nr ^x \\n(^tu+1v-\\n(^Yu
179\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
180.\}
181.bp
182'fi
183.ev
184.if \\n(^b \{\
185.mk ^y
186.nr ^b 2
187.\}
188.if \\n(^v \{\
189.mk ^Y
190.\}
191..
192'\" # DS - begin display
193.de DS
194.RS
195.nf
196.sp
197..
198'\" # DE - end display
199.de DE
200.fi
201.RE
202.sp
203..
204'\" # SO - start of list of standard options
205.de SO
206.SH "STANDARD OPTIONS"
207.LP
208.nf
209.ta 5.5c 11c
210.ft B
211..
212'\" # SE - end of list of standard options
213.de SE
214.fi
215.ft R
216.LP
217See the \\fBoptions\\fR manual entry for details on the standard options.
218..
219'\" # OP - start of full description for a single option
220.de OP
221.LP
222.nf
223.ta 4c
224Command-Line Name: \\fB\\$1\\fR
225Database Name: \\fB\\$2\\fR
226Database Class: \\fB\\$3\\fR
227.fi
228.IP
229..
230'\" # CS - begin code excerpt
231.de CS
232.RS
233.nf
234.ta .25i .5i .75i 1i
235..
236'\" # CE - end code excerpt
237.de CE
238.fi
239.RE
240..
241.de UL
242\\$1\l'|0\(ul'\\$2
243..
244.TH TCL_MEM_DEBUG 3 8.1 Tcl "Tcl Library Procedures"
245.BS
246.SH NAME
247TCL_MEM_DEBUG \- Compile-time flag to enable Tcl memory debugging.
248.BE
249
250.SH DESCRIPTION
251When Tcl is compiled with \fBTCL_MEM_DEBUG\fR defined, a powerful set
252of memory debugging aids are included in the compiled binary. This
253includes C and Tcl functions which can aid with debugging
254memory leaks, memory allocation overruns, and other memory related
255errors.
256
257.SH "ENABLING MEMORY DEBUGGING"
258.PP
259To enable memory debugging, Tcl should be recompiled from scratch with
260\fBTCL_MEM_DEBUG\fR defined. This will also compile in a non-stub
261version of \fBTcl_InitMemory\fR to add the \fBmemory\fR command to Tcl.
262.PP
263\fBTCL_MEM_DEBUG\fR must be either left defined for all modules or undefined
264for all modules that are going to be linked together. If they are not, link
265errors will occur, with either \fBTclDbCkfree\fR and \fBTcl_DbCkalloc\fR or
266\fBTcl_Ckalloc\fR and \fBTcl_Ckfree\fR being undefined.
267.PP
268Once memory debugging support has been compiled into Tcl, the C
269functions \fBTcl_ValidateAllMemory\fR, and \fBTcl_DumpActiveMemory\fR,
270and the Tcl \fBmemory\fR command can be used to validate and examine
271memory usage.
272
273.SH "GUARD ZONES"
274.PP
275When memory debugging is enabled, whenever a call to \fBckalloc\fR is
276made, slightly more memory than requested is allocated so the memory debugging
277code can keep track of the allocated memory, and eight-byte ``guard
278zones'' are placed in front of and behind the space that will be
279returned to the caller. (The sizes of the guard zones are defined by the
280C #define \fBLOW_GUARD_SIZE\fR and #define \fBHIGH_GUARD_SIZE\fR
281in the file \fIgeneric/tclCkalloc.c\fR -- it can
282be extended if you suspect large overwrite problems, at some cost in
283performance.) A known pattern is written into the guard zones and, on
284a call to \fBckfree\fR, the guard zones of the space being freed are
285checked to see if either zone has been modified in any way. If one
286has been, the guard bytes and their new contents are identified, and a
287``low guard failed'' or ``high guard failed'' message is issued. The
288``guard failed'' message includes the address of the memory packet and
289the file name and line number of the code that called \fBckfree\fR.
290This allows you to detect the common sorts of one-off problems, where
291not enough space was allocated to contain the data written, for
292example.
293
294.SH "DEBUGGING DIFFICULT MEMORY CORRUPTION PROBLEMS"
295.PP
296Normally, Tcl compiled with memory debugging enabled will make it easy
297to isolate a corruption problem. Turning on memory validation with
298the memory command can help isolate difficult problems. If you
299suspect (or know) that corruption is occurring before the Tcl
300interpreter comes up far enough for you to issue commands, you can set
301\fBMEM_VALIDATE\fR define, recompile tclCkalloc.c and rebuild Tcl.
302This will enable memory validation from the first call to
303\fBckalloc\fR, again, at a large performance impact.
304.PP
305If you are desperate and validating memory on every call to
306\fBckalloc\fR and \fBckfree\fR isn't enough, you can explicitly call
307\fBTcl_ValidateAllMemory\fR directly at any point. It takes a \fIchar
308*\fR and an \fIint\fR which are normally the filename and line number
309of the caller, but they can actually be anything you want. Remember
310to remove the calls after you find the problem.
311
312.SH "SEE ALSO"
313ckalloc, memory, Tcl_ValidateAllMemory, Tcl_DumpActiveMemory
314
315.SH KEYWORDS
316memory, debug
317
318