|
|
1.1 root 1: .TH LCC 1 "local \- 4/13/93"
2: .SH NAME
3: lcc \- local ANSI C compiler
4: .SH SYNOPSIS
5: .B lcc
6: [
7: .I option
8: |
9: .I file
10: ]...
11: .br
12: .SH DESCRIPTION
13: .PP
14: .I lcc
15: is a local ANSI C compiler for the VAX, MIPS, SPARC, and Motorola MC68020.
16: .PP
17: Arguments whose names end with `.c' are taken to be
18: C source programs; they are preprocessed, compiled, and
19: each object program is left on the file
20: whose name is that of the source with `.o' substituted for `.c'.
21: Arguments whose names end with `.i' are treated similarly,
22: except they are not preprocessed.
23: In the same way,
24: arguments whose names end with `.s' are taken to be assembly source programs
25: and are assembled, producing a `.o' file.
26: .PP
27: .I lcc
28: deletes a `.o' file if and only if exactly one
29: source file (`.c', `.s', or `.i' file) is mentioned and no other file
30: (source, object, library) or
31: .B \-l
32: option is mentioned.
33: .PP
34: .I lcc
35: uses ANSI standard header files
36: in preference to the `old-style' header files normally found in
37: .B /usr/include
38: (see `FILES' below).
39: Include files not found in the ANSI header files
40: are taken from the normal default include areas,
41: which usually includes
42: .BR /usr/include .
43: .PP
44: .I lcc
45: interprets the following options; unrecognized options are
46: taken as loader options (see
47: .IR ld (1))
48: unless
49: .BR \-c ,
50: .BR \-S ,
51: or
52: .B \-E
53: precedes them.
54: Except for
55: .BR \-l ,
56: all options are processed before any of the files
57: and apply to all of the files.
58: Applicable options are passed to each compilation phase in the order given.
59: .TP
60: .B \-c
61: Suppress the loading phase of the compilation, and force
62: an object file to be produced even if only one program is compiled.
63: .TP
64: .B \-g
65: Produce additional symbol table information for the local debuggers.
66: .I lcc
67: warns when
68: .B \-g
69: is unsupported.
70: .TP
71: .B \-w
72: Suppress warning diagnostics, such as those
73: announcing unreferenced statics, locals, and parameters.
74: The line
75: .I
76: #pragma ref id
77: simulates a reference to the variable
78: .IR id .
79: .TP
80: .BI \-d n
81: Generate jump tables for switches whose density is at least
82: .IR n ,
83: a floating point constant between zero and one.
84: The default is 0.5.
85: .TP
86: .SM
87: .B \-A
88: Warns about
89: declarations and casts of function types without prototypes,
90: missing return values in returns from int functions,
91: assignments between pointers to ints and pointers to enums, and
92: conversions from pointers to smaller integral types.
93: A second
94: .SM
95: .B \-A
96: warns about
97: unrecognized control lines,
98: non-ANSI language extensions and source characters in literals,
99: unreferenced variables and static functions,
100: declaring arrays of incomplete types,
101: and exceeding
102: .I some
103: ANSI environmental limits, like more than 257 cases in switches.
104: It also arranges for duplicate global definitions in separately compiled
105: files to cause loader errors.
106: .TP
107: .SM
108: .B \-P
109: Writes declarations for all defined globals on standard error.
110: Function declarations include prototypes;
111: editing this output can simplify conversion to ANSI C.
112: This output may not correspond to the input when
113: there are several typedef's for the same type.
114: .TP
115: .B \-n
116: Arrange for the compiler to produce code
117: that tests for dereferencing zero pointers.
118: The code reports the offending file and line number and calls
119: .IR abort (3).
120: .TP
121: .SM
122: .B \-O
123: is ignored.
124: .TP
125: .SM
126: .B \-S
127: Compile the named C programs, and leave the
128: assembler-language output on corresponding files suffixed `.s'.
129: .TP
130: .SM
131: .B \-E
132: Run only the preprocessor on the named C programs
133: and unsuffixed file arguments,
134: and send the result to the standard output.
135: .TP
136: .SM
137: .B \-C
138: Prevent the preprocessor from eliding comments.
139: .TP
140: .BI \-o " output"
141: Name the output file
142: .IR output .
143: If
144: .B \-c
145: or
146: .B \-S
147: is specified and there is exactly one source file,
148: this option names the object or assembly file, respectively.
149: Otherwise, this option names the final executable
150: file generated by the loader, and `a.out' is left undisturbed.
151: .I lcc
152: warns if
153: .B \-o
154: and
155: .B \-c
156: or
157: .B \-S
158: are given with more than one source file and ignores the
159: .B \-o
160: option.
161: .TP
162: .SM
163: .BI \-D \*Sname=def
164: .br
165: .ns
166: .TP
167: .SM
168: .BI \-D \*Sname
169: Define the
170: .I name
171: to the preprocessor, as if by `#define'.
172: If no definition is given, the name is defined as "1".
173: .TP
174: .SM
175: .BI \-U \*Sname
176: Remove any initial definition of
177: .IR name .
178: .TP
179: .SM
180: .BI \-I \*Sdir
181: `#include' files
182: whose names do not begin with `/' are always
183: sought first in the directory of the
184: .I file
185: arguments, then in directories named in
186: .SM
187: .B \-I
188: options, then in directories on a standard list.
189: .TP
190: .SM
191: .B \-N
192: Do not search
193: .I any
194: of the standard directories for `#include' files.
195: Only those directories specified by explicit
196: .SM
197: .B \-I
198: options will be searched, in the order given.
199: .TP
200: .SM
201: .BI \-B \*Sstr
202: Use the compiler \fIstr\fP\fBrcc\fP instead of the default version.
203: Note that
204: .I str
205: often requires a trailing slash.
206: On Suns only,
207: .SM
208: .B \-Bstatic
209: and
210: .SM
211: .BI \-Bdynamic
212: are passed to the loader; see
213: .IR ld (1).
214: .TP
215: .B \-v
216: Print commands as they are executed; some of the executed
217: programs are directed to print their version numbers.
218: More than one occurrence of
219: .B \-v
220: causes the commands to be printed, but
221: .I not
222: executed.
223: .TP
224: .B \-b
225: Produce code that counts the number of times each expression is executed.
226: If loading takes place, replace the standard exit
227: function by one that writes a
228: .B prof.out
229: file when the object program terminates.
230: A listing annotated with execution counts can then be generated with
231: .IR bprint (1).
232: .I lcc
233: warns when
234: .B \-b
235: is unsupported.
236: .B \-Wf-C
237: is similar, but counts only the number of function calls.
238: .TP
239: .B \-p
240: Produce code that counts the number of times each function is called.
241: If loading takes place, replace the standard startup
242: function by one that automatically calls
243: .IR monitor (3)
244: at the start and arranges to write a
245: .B mon.out
246: file when the object program terminates normally.
247: An execution profile can then be generated with
248: .IR prof (1).
249: .I lcc
250: warns when
251: .B \-p
252: is unsupported.
253: .TP
254: .B \-pg
255: Causes the compiler to produce counting code like
256: .BR \-p ,
257: but invokes a run-time recording mechanism that keeps more
258: extensive statistics and produces a
259: .B gmon.out
260: file at normal termination.
261: Also, a profiling library is searched, in lieu of the standard C library.
262: An execution profile can then be generated with
263: .IR gprof (1).
264: .I lcc
265: warns when
266: .B \-pg
267: is unsupported.
268: .TP
269: .SM
270: .BI \-t \*Sname
271: .br
272: .ns
273: .TP
274: .SM
275: .BI \-t
276: Produce code to print the name of the function, an activation number,
277: and the name and value of each argument at function entry.
278: At function exit, produce code to print
279: the name of the function, the activation number, and the return value.
280: By default,
281: .I printf
282: does the printing; if
283: .I name
284: appears, it does.
285: For null
286: .I char*
287: values, "(null)" is printed.
288: On Suns only,
289: .SM
290: .BI \-target
291: .I name
292: is accepted, but ignored.
293: .TP
294: .SM
295: .BI \-W \*Sx \fIarg\fP
296: pass argument
297: .I arg
298: to the program indicated by
299: .IR x ;
300: .I x
301: can be one of
302: .BR p ,
303: .BR f ,
304: .BR a ,
305: or
306: .BR l ,
307: which refer, respectively, to the preprocessor, the compiler proper,
308: the assembler, and the loader.
309: .I arg
310: is passed as given; if a
311: .B \-
312: is expected, it must be given explicitly.
313: .SM
314: .BI \-W \*So \fIarg\fP
315: specifies a system-specific option,
316: .IR arg .
317: .PP
318: Other arguments
319: are taken to be either loader option arguments, or C-compatible
320: object programs, typically produced by an earlier
321: .I lcc
322: run, or perhaps libraries of C-compatible routines.
323: Duplicate `.o' files are ignored.
324: These programs, together with the results of any
325: compilations specified, are loaded (in the order
326: given) to produce an executable program with name
327: .BR a.out .
328: .PP
329: .I lcc
330: assigns the most frequently referenced scalar parameters and
331: locals to registers whenever possible.
332: For each block,
333: explicit register declarations are obeyed first;
334: remaining registers are assigned to automatic locals if they
335: are `referenced' at least 3 times.
336: Each top-level occurrence of an identifier
337: counts as 1 reference. Occurrences in a loop,
338: either of the then/else arms of an if statement, or a case
339: in a switch statement each count, respectively, as 10, 1/2, or 1/10 references.
340: These values are increased accordingly for nested control structures.
341: .B \-Wf-a
342: causes
343: .I lcc
344: to read a
345: .B prof.out
346: file from a previous execution and to use the data therein
347: to compute reference counts (see
348: .BR \-b ).
349: .SH LIMITATIONS
350: .PP
351: .I lcc
352: accepts the C programming language
353: as described in the proposed ANSI standard
354: and in the second edition of Kernighan and Ritchie.
355: .I lcc
356: is intended to be used with the GNU C preprocessor, which supports the
357: preprocessing features introduced by the ANSI standard.
358: The
359: .SM
360: .B \-Wp-trigraphs
361: option is required to enable trigraph sequences.
362: .PP
363: Wide-character literals are accepted
364: but are treated as plain char literals.
365: Plain chars are signed chars,
366: ints and long ints are the same size
367: as are doubles and long doubles, and
368: plain int bit fields are signed.
369: Bit fields are aligned like unsigned integers but are otherwise laid out
370: as if by the standard C compiler,
371: .IR cc (1).
372: Other compilers, such as the GNU C compiler,
373: .IR gcc (1),
374: may choose other, incompatible layouts.
375: .PP
376: Likewise, calling conventions are intended to be compatible with
377: .IR cc (1),
378: except possibly for passing and returning structures.
379: Specifically,
380: .I lcc
381: passes structures like
382: .I cc
383: on all targets,
384: but returns structures like
385: .I cc
386: on only the MIPS.
387: Consequently, calls to/from such functions compiled with
388: .I cc
389: or other C compilers may not work.
390: Calling a function that returns
391: a structure without declaring it as such violates
392: the ANSI standard and may cause a core dump.
393: .SH FILES
394: .PP
395: The file names listed below are
396: .IR typical ,
397: but vary among installations; installation-dependent variants
398: can be displayed by running
399: .I lcc
400: with the
401: .B \-v
402: option.
403: .PP
404: .ta \w'/usr/lib/gcc-cppxx'u
405: .nf
406: file.c input file
407: file.o object file
408: a.out loaded output
409: /tmp/lcc? temporaries
410: /usr/lib/gcc-cpp preprocessor
411: /usr/lib/rcc compiler
412: /usr/lib/bbexit.o exit for profiling
413: /lib/crt0.o runtime startoff
414: /lib/[gm]crt0.o startoffs for profiling
415: /lib/libc.a standard library
416: /usr/include/lcc ANSI standard headers
417: /usr/include/libc local ANSI headers
418: /usr/include traditional headers
419: prof.out file produced for \fIbprint\fR(1)
420: mon.out file produced for \fIprof\fR(1)
421: gmon.out file produced for \fIgprof\fR(1)
422: .fi
423: .PP
424: .I lcc
425: predefines the macros `unix' and `__LCC__'.
426: It may also predefine some installation-dependent symbols; option
427: .B \-v
428: exposes them.
429: .SH "SEE ALSO"
430: B. W. Kernighan and D. M. Ritchie,
431: .I The C Programming Language,
432: Prentice-Hall, 2nd Ed., 1988.
433: .PP
434: .I
435: American National Standard for Information Systems, Programming Language C,
436: ANSI X3.159-1989, American National Standard Institute, Inc., New York, 1990.
437: .PP
438: cc(1), ld(1)
439: .br
440: .SH BUGS
441: Mail bug reports along with the shortest program
442: that exposes them and the details reported by
443: .IR lcc 's
444: .B \-v
445: option to [email protected].
446: .PP
447: The `ANSI standard headers' conform to the specifications in
448: the standard, which may be too restrictive for some applications,
449: but necessary for portability.
450: Functions given in the ANSI headers may be missing from
451: the local C library (e.g., `wide character' functions)
452: or may not correspond exactly to the local version;
453: for example, the ANSI standard
454: .B stdio.h
455: specifies that
456: .IR printf ,
457: .IR fprintf ,
458: and
459: .I sprintf
460: return the number of characters written to the file or array,
461: but few existing libraries implement this convention.
462: .PP
463: On VAXes running 4.3bsd UNIX,
464: the definitions of
465: .I tolower
466: and
467: .I toupper
468: erroneously return bad values for non-letter arguments.
469: .PP
470: On the MIPS and SPARC, old-style variadic functions must use
471: .B varargs.h
472: from MIPS or Sun. New-style is recommended.
473: .PP
474: The Sun assembler version 3.5 or later is required on the MC68020,
475: and only the MC68881 is supported.
476: .PP
477: With
478: .BR \-b ,
479: files compiled
480: .I without
481: .B \-b
482: may cause
483: .I bprint
484: to print erroneous call graphs.
485: For example, if
486: .B f
487: calls
488: .B g
489: calls
490: .B h
491: and
492: .B f
493: and
494: .B h
495: are compiled with
496: .BR \-b ,
497: but
498: .B g
499: is not,
500: .B bprint
501: will report that
502: .B f
503: called
504: .BR h .
505: The total number of calls is correct, however.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.