summaryrefslogtreecommitdiff
path: root/man/bcc.1
diff options
context:
space:
mode:
Diffstat (limited to 'man/bcc.1')
-rw-r--r--man/bcc.1322
1 files changed, 322 insertions, 0 deletions
diff --git a/man/bcc.1 b/man/bcc.1
new file mode 100644
index 0000000..7f6097f
--- /dev/null
+++ b/man/bcc.1
@@ -0,0 +1,322 @@
+.TH bcc 1 "Oct, 1996"
+.BY Bruce Evans
+.nh
+.SH NAME
+bcc \- Bruce's C compiler
+.SH SYNOPSIS
+.B bcc
+.RB [ -03EGNOPSVcegv ]
+.RB [ -Aas_option ]
+.RB [ -Bexecutable_prefix ]
+.RB [ -Ddefine ]
+.RB [ -Uundef ]
+.RB [ -Mc_mode ]
+.RB [ -o\ outfile ]
+.RB [ -ansi ]
+.RB [ -Ccc1_option ]
+.RB [ -Iinclude_dir ]
+.RB [ -Lld_option ]
+.RB [ -Ttmpdir ]
+.RB [ -Qc386_option ]
+.RB [ ld_options ]
+.RB [ infiles ]
+.SH DESCRIPTION
+.B Bcc
+is a simple C compiler that produces 8086 assembler, in addition compiler
+compile time options allow 80386 or 6809 versions. The compiler understands
+traditional K&R C with just the restriction that bit fields are mapped to
+one of the other integer types.
+
+The default operation is to produce an 8086 executable called
+.B a.out
+from the source file.
+
+.SH OPTIONS
+.TP
+.B -ansi
+Pass the C source through
+.B unprotoize(1)
+after preprocessing and before code generation. This will allow
+.I some
+ansi C to be compiled but it is definitly
+.B NOT
+a true ansi-C compiler.
+.TP
+.B -0
+8086 target (works on 80386 host, but not 6809)
+.TP
+.B -3
+80386 target (may work on 8086 host, but not 6809)
+.TP
+.B -A
+pass remainder of option to assembler (e.g. -A-l -Alistfile for a listing)
+.TP
+.B -B
+prefix for executable search path (as usual; the search order is all paths
+specified using
+.BR -B ,
+in order, then the path given in the environment variable
+.B BCC_EXEC_PREFIX
+if that is set, then the compiled-in defaults
+(something like /usr/lib/bcc/ followed by /usr/bin/)
+.TP
+.B -C
+pass remainder of option to bcc-cc1, see code generation options.
+.TP
+.B -D
+preprocessor define
+.TP
+.B -E
+produce preprocessor output to standard out.
+.TP
+.B -G
+produce GCC objects (only useful for i386 code)
+.TP
+.B -Ixyz
+include search 'xyz' path
+.TP
+.B -I
+don't add default include to search list
+.TP
+.B -Lxyz
+add directory name 'xyz' to the head of the list of library directories searched
+.TP
+.B -L
+don't add default library to search list
+.TP
+.B -Md
+alters the arguments for all passes to produce MSDOS executable COM files.
+.TP
+.B -Mf
+sets the code generator to pass the
+.B -c
+and
+.B -f
+arguments to the code generator for smaller faster code. Note this code is
+not compatible with the standard calling conventions so a different version
+of the C library is linked too.
+.TP
+.B -Ms
+alters the arguments for all passes and selects C-library
+to produce standalone Linux-86 executables
+.TP
+.B -N
+makes the linker produce a native a.out file (Linux OMAGIC) if combined
+with -3 the executable will run under Linux-i386.
+.TP
+.B -O
+optimize (does nothing)
+.TP
+.B -P
+produce preprocessor output with no line numbers to standard output.
+.TP
+.B -Q
+pass full option to c386 (Only for c386 version)
+.TP
+.B -S
+produce assembler file
+.TP
+.B -T
+temporary directory (overrides previous value and default; default is
+from the environment variable TMPDIR if that is set, otherwise /tmp)
+.TP
+.B -U
+preprocessor undefine
+.TP
+.B -V
+print names of files being compiled
+.TP
+.B -X
+pass remainder of option to linker (e.g. -X-Ofile is passed to the linker
+as -Ofile)
+.TP
+.B -c
+produce object file
+.TP
+.B -e
+run the preprocess pass separately. This takes less memory, and may help
+or harm by giving more traditional semantics like token pasting with /**/.
+.TP
+.B -f
+error (float emulation not supported)
+.TP
+.B -g
+produce debugging info (does nothing)
+.TP
+.B -o
+output file name follows (assembler, object or executable) (as usual)
+.TP
+.B -p
+error (profiling not supported)
+.TP
+.B -t
+error (substitution of some cc passes not supported)
+.TP
+.B -v
+print names and args of subprocesses being run. Two or more -v's print
+names of files being unlinked. Three or more -v's print names of paths
+being searched.
+.P
+Other options are passed to the linker, in particular -i-, -lx, -M, -m, -s.
+The -i option is always passed to the linker but can be cancelled using -i-.
+
+.SH CODE GENERATOR OPTIONS
+These are all options that the code generator pass
+.B bcc-cc1
+understands, only some will be useful for the
+.B -C
+option of bcc. The code generator is normally used as a combined C preprocessor
+and generator but the
+.B -e
+and
+.B -ansi
+options of bcc split the operation.
+.TP
+.B -0
+8086 target (works even on 80386 host, not on 6809)
+.TP
+.B -3
+80386 target (may work even on 8086 host, not on 6809)
+.TP
+.B -D
+define (as usual)
+.TP
+.B -E
+produce preprocessor output (as usual)
+.TP
+.B -I
+include search path (as usual)
+.TP
+.B -P
+produce preprocessor output with no line numbers (as usual)
+.TP
+.B -c
+produce code with caller saving regs before function calls
+.TP
+.B -d
+print debugging information in assembly output
+.TP
+.B -f
+produce code with 1st argument passed in a register (AX, EAX or X)
+.TP
+.B -l
+produce code for 2 3 1 0 long byte order (only works in 16-bit code),
+a special library of compiler helper functions is needed for this mode.
+.TP
+.B -o
+assembler output file name follows
+.TP
+.B -p
+produce (almost) position-independent code (only for the 6809)
+.TP
+.B -t
+print source code in assembly output
+.TP
+.B -w
+print what cc1 thinks is the location counter in assembly output
+.P
+All the options except -D, -I and -o may be turned off by following the
+option letter by a '-'. Options are processed left to right so the last
+setting has precedence.
+
+.SH PREPROCESSOR DEFINES
+The preprocessor has a number of manifest constants.
+.TP
+.B __BCC__ 1
+The compiler identifier, normally used to avoid compiler limitations.
+.TP
+.B __FILE__
+stringized name of current input file
+.TP
+.B __LINE__
+current line number
+.TP
+.B __MSDOS__ 1
+compiler is configured for generating MSDOS executable COM files.
+.TP
+.B __STANDALONE__ 1
+compiler is configured for generating standalone executables.
+.TP
+.B __AS386_16__ 1
+compiler is generating 16 bit 8086 assembler and the
+.B #asm
+keyword is available for including 8086 code.
+.TP
+.B __AS386_32__ 1
+compiler is generating 32 bit 80386 assembler and the
+.B #asm
+keyword is available for including 80386 code.
+.TP
+.B __CALLER_SAVES__ 1
+compiler calling conventions are altered so the calling function must save the
+.I SI
+and
+.I DI
+registers if they are in use (ESI and EDI on the 80386)
+.TP
+.B __FIRST_ARG_IN_AX__ 1
+compiler calling conventions are altered so the calling function is passing
+the first argument to the function in the
+.I AX
+(or
+.I EAX
+)
+register.
+.TP
+.B __LONG_BIG_ENDIAN__ 1
+alters the word order of code generated by the 8086 compiler.
+.P
+These defines only occur in the 6809 version of the compiler.
+.TP
+.B __AS09__ 1
+compiler is generating 6809 code
+.TP
+.B __FIRST_ARG_IN_X__ 1
+the first argument to functions is passed in the
+.I X
+register.
+.TP
+.B __POS_INDEPENDENT__ 1
+the code generated is (almost) position independent.
+.P
+.SH ENVIRONMENT
+.TP
+.B BCC_EXEC_PREFIX
+default directory to seach for compiler passes
+.TP
+.B TMPDIR
+directory to place temporary files (default /tmp)
+.P
+.SH DIRECTORIES
+All the include, library and compiler components are stored under the
+.I /usr/bcc
+directory under Linux-86, this is laid out the same as a
+.I /usr
+filesystem and if bcc is to be the primary compiler on a system it should
+be moved there. The configuration for this is in the
+.B bcc.c
+source file only, all other executables are independent of location.
+
+The library installation also creates the file
+.BR /usr/lib/liberror.txt ,
+this path is hardcoded into the C library.
+
+The
+.B bcc
+executable itself is in /usr/bin and the
+.B as86
+and
+.B ld86
+executables can be placed there also, but be aware that some programs
+will require the old operation of the
+.B -r
+argument to ld86 (eg compiling DOSEMU)
+
+.SH SEE ALSO
+unprotoize(1), as86(1), ld86(1), elksemu(1)
+.SH BUGS
+The compiler cannot generate 8086 floating point code, if it's made to
+try it produces a nasty mixture of 8086 and 80386 code that really
+upsets the assembler.
+
+The bcc.c compiler driver source is very untidy.