Annotation of researchv10no/cmd/lcc/etc/lcc.1, revision 1.1

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.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.