Previous Next Contents Index Doc Set Home


The Pascal Compiler

3


The name of the Sun Workshop Compiler Pascal is pc. If you give pc a file name as an argument, and the file name ends with .p or .pas, pc compiles the file and leaves the result in an executable file, called a.out by default.

The syntax of this command is:

pc [options] filename
This chapter contains the following sections:

pc Version Number

page 17

Compile and Link Sequence

page 18

Language Preprocessor

page 19

File Name Extensions Accepted By pc

page 20

Option-Passing on the Command-Line

page 21

Option-Passing in the Program Text

page 21

Options

page 23


pc Version Number

To identify the version number of pc when you compile your program, call the compiler with the -V option. This option instructs the compiler to produce output that identifies the versions of all the programs used in compiling, the compiler itself, the code generator, and so on.

To identify the version number given an executable or object file created by the Pascal compiler, use the following command.

hostname% mcs -p a.out | grep Pascal
SC4.2 18 Sept 1996 Pascal 4.2


Compile and Link Sequence

You can compile the file any.p with the following command-line:

hostname% pc any.p
This command actually invokes the compiler driver, which calls several programs or passes of the program, each of which processes the program. The output of each pass is the input to the next one.

After several passes, the object file any.o is created. An executable file is then generated with the default name a.out. Finally, the file any.o is removed.

pc calls:

The above is the default action of pc; some compiler options change what pc calls.

Figure 3-1 shows the sequence of events when you invoke pc.

Figure  3-1 Organization of Pascal Compilation


Language Preprocessor

The cpp(1) program is the C language preprocessor. The compiler driver pc normally calls cpp(1) during the first pass of a Pascal compilation. If you use the -xl switch, pc calls the alternate preprocessor cppas. Then cpp(1) and cppas operate on files that contain the extension .p or .pas.

You can give directives to cpp(1) or cppas to define constants, conditionally compile parts of your program, include external files, and take other actions. For example, the following program shows the use of an include directive, which asks cpp(1) to copy the named file into the program before compilation.

program showinclude;
#include "file.i"
begin
...
end.

See the man page for cpp(1) for information on its directives and other features. Appendix A, "Pascal Preprocessor," describes cppas.


File Name Extensions Accepted By pc

Pascal source files generally use the extension .p. The compiler recognizes other file name extensions. Table 3-1 lists the most important extensions.

The table notes that pc can produce assembler source files as well as unlinked object files. In each case, you can pass these partially compiled files to pc, which then finishes the compilation, linking, and loading.

Table  3-1 File Name Suffixes Recognized by Pascal

Suffix
Description

.p

Usual extension for Pascal source files.

.pas

Valid extension for a Pascal source file. The extension instructs pc to put object files in the current directory. The default name of the object file is the name of the source file, but with a .o suffix.

.pi

Default extension for Pascal source files that have been processed by the Pascal preprocessor (either cpp or cppas).

.s

Extension for assembler source files that are produced when you call pc with the -S option.

.o

Extension for object files that are generated by the compiler when you call pc with the -c option.


Option-Passing on the Command-Line

To pass an option on the command-line, use a dash (-) followed by the option name. In some cases, you must supply additional information, such as a file name. For example, this command activates the listing option -l, which is off by default:

hostname% pc -l rmc.p
The following command causes the generated object file to be named rmc instead of the default, a.out.

hostname% pc -o rmc rmc.p


Option-Passing in the Program Text

Some options can be passed to the compiler in program text as well as on the command-line. With this facility, you can use different option values for different parts of a program.

Here are four examples of how options can be passed in program text:

{$P+}
{$H*}
(*$I-*)
{$l+,L-,n+}
Table 3-2 shows the options that can be passed in program text.

Table  3-2 Options That Can Be Passed in Program Text  

Option
Description

b

Uses buffering of the file output.

C

Uses runtime checks (same as t).

calign

Uses C data formats.

H

Uses check heap pointers.

l

Makes a listing.

L

Maps identifiers and keywords to lowercase.

p

Uses statement limit counting (different from command-line p1). See stlimit in the Pascal 4.2 Reference Manual.

P

Uses partial evaluation of boolean expressions.

t

Uses runtime checks (same as C, but different from the command-line t1).

u

Trims to 72-character line (not usable on command-line).

w

Prints warning diagnostics.

1 The options p and t are different when they are used within program text and when they are used on the command-line because they are received directly by pc0 when they are used in program text, while the compiler driver gives them to other compiler passes when they are given on the command-line. If you want to set them on the command-line and also want them to have the same effect as passing them in program text, use the Qoption command-line option to pass them directly to pc0.

You set options within comments, which can be delimited by either { and } or (* and *). The first character in the comment must be the $ (dollar sign). $ must be immediately followed by an option letter. Next must be either +, -, or *.

If you want to set more than one option, you can insert a comma after the first option, followed by another option letter and +, -, or *. You can set any number of options on a single line. There must be no embedded spaces. You can place spaces and other ordinary comment text after the last +, -, or *.

The new option setting takes effect at the next noncomment token.

The symbols + (plus sign) and - (minus sign) turn the option on and off, respectively. To understand the symbol *, you must know how options work in Pascal.

Except for b, each option in Table 3-2 has a current value and a "first in, last out" stack of up to 16 values. Again, except for b, each option can be on or off.

When you begin compiling a program, each stack is empty and each option has an initial current value, which may be the option default value or may have been set on the command line.

When the compiler encounters an option followed by...
This is what happens...

+

The current value is pushed onto the stack, and the current value becomes ON.

-

The current value is pushed onto the stack, and the current value becomes OFF.

*

The last value is popped off the stack and becomes the current value.

If no values have been pushed onto the stack, the effect of * is undefined.

Figure 3-2 illustrates how options are passed in program text.

Figure  3-2 Options in Program Text


Options

This section describes all the pc command options in alphabetical order. As described elsewhere in the documentation, Pascal 4.2 runs only in SPARC Solaris 2.x environments, which is where these options are designed for.

In general, processing of the compiler options is from left to right, so selective overriding of macros can be done. This rule does not apply to linker options.

-a

The -a option is the old style of basic block profiling for tcov. See
-xprofile=tcov for information on the new style of profiling and the tcov(1) man page for more details. Also see the manual, Profiling Tools.

The -a option inserts code to count how many times each basic block is executed. It also calls a runtime recording mechanism that creates a .d file for every .p file at normal termination. The .d file accumulates execution data for the corresponding source file. The tcov(1) utility can then be run on the source file to generate statistics about the program.

If set at compile-time, the TCOVDIR environment variable specifies the directory of where the .d files are located. If this variable is not set, then the .d files remain in the same directory as the .f files.

The -xprofile=tcov and the -a options are compatible in a single executable. That is, you can link a program that contains some files which have been compiled with -xprofile=tcov, and others with -a. You cannot compile a single file with both options.

-Bbinding

The -B option specifies whether libraries for linking are static (not shared, indicated with -Bstatic), or dynamic (shared, indicated with -Bdynamic).

Link editing is the set of operations necessary to build an executable program from one or more object files. Static linking indicates that the results of these operations are saved to a file. Dynamic linking refers to these operations when performed at runtime. The executable that results from dynamic linking appears in the running process, but is not saved to a file.

-b

It is inefficient for Pascal to send each character to a terminal as it generates its output. It is even less efficient if the output is the input of another program, such as the line printer daemon, lpr(1).

To gain efficiency, Pascal buffers output characters; it saves the characters in memory until the buffer is full and then outputs the entire buffer in one system interaction. By default, Pascal output is line-buffered.

The -b option on the command-line turns on block-buffering with a block size of 1,024. You cannot turn off buffering from the command-line.

If you give the -b option in a comment in the program, you can turn off buffering or turn on block buffering. The valid values are:

{$b0}

No buffering

{$b1}

Line buffering

{$b2}

Block buffering. The block size is 1,024.

Any number greater than 2 (for example, {$b5}) is treated as {$b2}. You can only use this option in the main program. The block buffering value in effect at the end of the main program is used for the entire program.

-C

The -C option enables runtime checks that verifies that:

If you do not specify -C, most runtime checks are disabled, and pc treats the assert statement as a comment and never uses calls to the linelimit procedure to halt the program. However, divide-by-zero checks are always made.

The -V0 and -V1 options implicitly turn on -C.

-c

The -c option instructs the compiler not to call the linker, ld(1). The Pascal compiler, pc, leaves a .o or object file for each source file. Without -c, pc calls the linker when it finishes compilation, and produces an executable file, called a.out by default.

-calign

The -calign option instructs the compiler to allocate storage in records the same way as the C compiler allocates structures. See the Pascal 4.2 Reference Manual for details of how data is aligned with and without -calign.

You can use calign within a program as well as on the command-line. However, calign only has an effect in the type and var sections of the program. Any types you define when calign is on use C-style alignment whenever you define variables of that type.

-cg89

The -cg89 option is a macro for:
-xarch=v7 -xchip=old -xcache=64/32/1.

-cg92

The -cg92 option is a macro for:
-xarch=v8 -xchip=super -xcache=16/32/4:1024/32/1

-cond

You can only use this option when you also use the -xl option.

The -cond option instructs pc to compile the lines in your program that begin with the %debug compiler directive. If you compile your program without
-cond, pc treats lines with the %debug directive as comments.

-xl runs your program through the preprocessor cppas, which handles the Apollo DOMAIN®-style Pascal compiler directives, such as %debug.

See Appendix A, "Pascal Preprocessor," for a complete description of conditional variables, cppas, and compiler directives.

-config

You can only use this option when you also use the -xl option.

The -config option sets a conditional variable to true. You can only use this option when you use the preprocessor cppas, which is invoked when you use the -xl option.

Pascal supports the -config option with only one value. For example, Pascal accepts -config one, but not -config one two. To specify more than one variable, use multiple -config options on the command-line.

If you use -config but do not give a variable, the value of the predefined conditional variable %config is set to true.

-xl runs your program through the preprocessor cppas, which handles the Apollo DOMAIN-style Pascal compiler directives, such as %config.

See Appendix A, "Pascal Preprocessor," for a complete description of conditional variables, cppas, and compiler directives.

-Dname[=def]

The -D option defines a symbol name to the C preprocessor, cpp. It is equivalent to using the #define statement in your program. If you do not include a definition, name is defined as 1. See cpp(1) for more information.

If you use this option with the -xl option, -D is equivalent to using the %config directive in your program.

-dalign

The -dalign option instructs the compiler to generate double load and store instructions wherever possible for faster execution. All double-typed data become double-aligned, so do not use this option when correct alignment is not ensured.

-dn

The -dn option specifies static linking in the link editor.

-dryrun

The -dryrun option instructs the compiler to show, but not execute, the commands constructed by the compilation driver. You can then see the order of execution of compiler passes without actually executing them.

-dy

The -dy option specifies dynamic linking in the link editor.

-fast

The -fast option includes -fns -ftrap=%none; that is, it turns off all trapping. In previous releases, the -fast macro option included
-fnonstd; now it does not.

-fast includes -native in its expansion.

The code generation option, the optimization level, and using inline template files can be overridden by subsequent switches. For example, although the optimization part of -fast is -O2, the optimization part of -fast -03 is -03. Do not use this option for programs that depend on IEEE standard exception handling. It can produce different numerical results, premature program termination, or unexpected SIGFPE signals.


Note - The criteria for the -fast option vary with the compilers from SunSoft: C, C++, FORTRAN 77, Fortran 90, and Pascal. See the appropriate documentation for the specifics.

-flags

The -help or -flags option lists and summarizes all available options.

-fnonstd

The -fnonstd option causes nonstandard initialization of floating-point arithmetic hardware. By default, IEEE 754 floating-point arithmetic is nonstop, and underflows are gradual. (See the Numerical Computation Guide for details.) The -fnonstd option causes hardware traps to be enabled for floating-point overflow, division by zero, and invalid operation exceptions. These hardware traps are converted into SIGFPE signals, and if the program has no SIGFPE handler, it terminates with a memory dump.

-fnonstd also causes the math library to be linked in by passing -lm to the linker.

This option is a synonym for -fns -ftrap=common.

-fns

The -fns option turns on the SPARC non-standard floating-point mode.

The default is the SPARC standard floating-point mode.

If you compile one routine with -fns, then compile all routines of the program with the -fns option; otherwise, unexpected results may occur.

-fround=r

The -fround=r option sets the IEEE 754 rounding mode that is established during program initialization.

r must be one of: nearest, tozero, negative, positive.

The default is -fround=nearest.

The meanings are the same as those for the ieee_flags subroutine.

If you compile one routine with -fround=r, compile all routines of the program with the same -fround=r option; otherwise, unexpected results may occur.

-ftrap=t

The -ftrap=t option sets the IEEE 754 trapping mode in effect at startup.

t is a comma-separated list of one or more of the following: %all%none, common, [no%]invalid, [no%]overflow, [no%]underflow, [no%]division, [no%]inexact. The default is -ftrap=%none.

This option sets the IEEE 754 trapping modes that are established at program initialization. Processing is left-to-right. The common exceptions, by definition, are invalid, division by zero, and overflow.

Example: -ftrap=%all,no%inexact means set all traps, except inexact.

The meanings are the same as for the ieee_flags function, except that:

If you compile one routine with -ftrap=t, compile all routines of the program with the same -ftrap=t option; otherwise, unexpected results may occur.

-G

The -G option builds a shared library. All object files specified with this command option should have been compiled with either the -pic or the -PIC option.

-g

The -g option instructs pc to produce additional symbol table information for dbx and debugger. With -g, the incremental linker, ild, is called, instead of the linker, ld.

You can compile using both the -g and -O options. However, there are some side effects:


Note - Special case: -04 -g. The combination -04 -g turns off inlining that you usually get with -04.

-H

The -H option instructs pc to compile code to perform range-checking on pointers into the heap. This option is implicitly turned on by the -V0 and -V1 options.

-hname

The -hname option names a shared dynamic library and provides a way to have versions of a shared dynamic library.

This is a loader option, passed to ld. In general, the name after -h should be exactly the same as the one after -o. A space between the -h and name is optional.

The compile-time loader assigns the specified name to the shared dynamic library you are creating. It records the name in the library file as the intrinsic name of the library. If there is no -hname option, then no intrinsic name is recorded in the library file.

Every executable file has a list of needed shared library files. When the runtime linker links the library into an executable file, the linker copies the intrinsic name from the library into that list of needed shared library files. If there is no intrinsic name of a shared library, then the linker copies the path of the shared library file instead.

-help

The -help or -flags option lists and summarizes all available options.

-Ipathname

The -I option gives the preprocessor additional places to look for #include and %include files. For example,

hostname% pc -I/home/incfiles -I/usr/incfiles program.p
The preprocessor searches for #include and %include files in this order:

1. In /opt/SUNWspro/SC4.0/include/pascal

2. In the directory containing the source file, except when you use the #include <file> form, in which case this directory is not searched

3. In directories named with -I options, if any, in left to right order

4. In /usr/include

-i name

The -i option produces a listing for the specified procedure, function, #include, or %include file. For example, this command instructs the compiler to make a listing of the routines in the file scanner.i.

hostname% pc -i scanner.i program.p
See cpp(1), or or Chapter 5, "Separate Compilation," for information on include files.

-keeptmp

The -keeptmp option keeps temporary files that are created during compilation, so they are retained instead of being deleted automatically.

-L

The -L option maps all keywords and identifiers to lowercase. In Pascal, uppercase and lowercase are not interchangeable in identifiers and keywords. In standard Pascal, the case is insignificant outside of character strings and character constants. The -L option is most useful for transporting programs from other systems. See also the -s option.

-l

The -l option produces a listing of the program. For example:

hostname% pc -l random.p 
Pascal PC -- Version SC4.0 09 Jan 1995 Pascal 4.0

Mon Jan 09 09:04 1995 random.p:
	1	program random_number(output);
	2	var
	4		i: integer;
	5		x: integer;
	6
	7	begin
	8		for i := 1 to 5 do begin
	9			    write(trunc(random(x) * 101))
	10		end;
	11		writeln
	12		end.

The first line identifies the version of the compiler you are using. The next line gives the modification time of the file being compiled. The remainder of the listing is the source program.

-Ldirectory

The -Ldirectory option adds directory to the ld library search path for ld.

-libmieee

Forces IEEE 754 style return values for math routines in exceptional cases. In such cases, no exception message is printed, and errno is not set.

-libmil

The -libmil option instructs the compiler to select the best inline templates for the floating-point option and operating system release available on this system.

-llib

The -llib option links ld(1) with the object library, lib.

Do not use the -lucb option because Pascal is not compatible with the object library, libucb.

-misalign

The -misalign option allows for misaligned data in memory. Use this option only if you receive a warning message that your data is misaligned.

With the -misalign option, pc generates much slower code for references to formal parameters. If possible, recode the indicated section instead of recompiling your program with this option.

-mt

The -mt option uses multithread-safe libraries, eliminates conflicts between threads, so that Pascal library routines can be safely used in a multiprocessing environment.

The MT-safe library for Pascal is called libpc_mt.

On a single-processor system, the code that is generated with this option runs more slowly; the degradation in performance is usually insignificant, however.

Refer to the Multithreaded Programming Guide in the Solaris documentation for more information.

-native

The -native option causes pc to generate code for the best floating-point hardware available on the machine you are compiling on.

The -fast macro includes -native in its expansion.

This option is a synonym for -xtarget=native.

-nolib

The -nolib option instructs the compiler not to link any libraries by default--that is, no -l options are passed to ld. Normally, the pc driver passes -lc to ld.

When you use -nolib, pass all -l options yourself. For example, the following command links libm statically and the other libraries dynamically:

hostname% pc -nolib -Bstatic -lm -Bdynamic -lc test.p

-nolibmil

The -nolibmil option instructs the compiler to reset -fast so that it does not include inline templates. Use this option after the -fast option, as in:

hostname% pc -fast -nolibmil myprog.p

-non_init[=yes|no]

This option turns on early warnings of the use of uninitialized local variables. That is, if the pc compiler is given the -non_init (or -non_init=yes) option, it issues a warning at the time it finds an uninitialized local variable. This warning is issued even if the variable is initialized later in the routine.

The -non_init=yes option invokes extra compilation processing overhead for checking statements that change program control flow such as calls, gotos, NEXT, and other such possible elements. These checks are performed every time the compiler is run with this option.

By default (or if given the -non_init=no option), the pc compiler issues late warnings. That is, at the end of each function it checks the use of each local variable and issues a warning for each local variable that was used but never initialized, as discussed in "Uninitialized Variables" on page 220. The default -non_init=no option avoids the extra compilation processing overhead associated with -non_init=yes option.

The default late warnings are actually useful only for local variables that are never assigned. Commonly, however, a local variable is inappropriately first used and later initialized, as shown in the following example:

program iw1.p;
procedure q;
var x: integer;
begin
        writeln(x);
        x:= 1;
end;
begin
        q;
end.

In this iw1.p program, the local variable x is used at line 5 before initialization at line 6. If iw1.p is compiled without the -non_init option, the compiler does not issue a warning because the local variable is finally initialized.

However, if the pc compiler is given the -non_init option, it issues a warning immediately upon finding an uninitialized variable, as follows:

hostname% pc -non_init iw1.p
w 18280 line 5 - variable x is used but never set
hostname%

Given the -non_init option, the compiler tracks the program control flow, and issues a warning each time it encounters an uninitialized local variable.

Two example Pascal programs with control flow changes are given in following boxes. For these examples, -non_init warnings are not issued because the compiler sees they would make no sense or the control flow is changed.

program iw2;
procedure q;
label 1;
var x: integer;
begin
           goto 1;
           writeln(x);
        1: x:= 1;
end;
begin
	q;
end.

Given the -non_init option for compiling iw2, the pc compiler issues no non-initialized-variable warning because the goto statement changes the control flow of the program:

hostname% pc -non_init iw2.p
w 18630 line 7 - Unreachable statement
hostname%

The following example program, iw3.p, uses indirect variable p^ (p as a local pointer variable). However, the order of statements is wrong. That is, p^ is undefined until line 7, after the execution statements at lines 5 and 6.

program iw3;
procedure q;
var p: ^integer;
begin
	writeln(p^);
	new(p);
	p^:= 1;
end;
begin
	q;
end.

The -non_init option sets compile-time checking for appropriate usage of indirect variables. Given the following command with the -non_init option, the compiler displays a warning message resulting from compiling the error in the iw3.p program:

hostname% pc -non_init iw4.p
w 18280 line 6 - variable p is used but never set
hostname%

Use With -Rw

The -non_init option can be used together with the -Rw option, which provides warnings for record fields. Compiling with a combination of the -non_init and -Rw options can capture most usages of uninitialized whole and component variables.

program iw_rw;
procedure q;
type t = record a,b: integer end;
var p: ^integer;
    r: t;
    i: integer;
begin
        writeln(p^);
        writeln(r.a);
        writeln(i);
        new(p);
        r.a:= 1;
        i:= 0;
end;

begin
	q;
end.

Compiling iw_rw with a combination of the -non_init and -Rw options captures the usages of uninitialized whole and component variables:

hostname% pc -non_init -Rw iw_rw.p
w 18280 line 8 - variable p is used but never set
w 18280 line 9 - variable r is used but never set
w 18280 line 9 - field r.a is used but never set
w 18280 line 10 - variable i is used but never set
hostname%

Lack of Effect of -non_init

The -non_init option has no effect in the following two cases:

-noqueue

The -noqueue option instructs the compiler not to queue this compilation if a license is not available. Under normal circumstances, if no license is available, the compiler waits until one becomes available. With this option, the compiler returns immediately.

-notrace

The -notrace option disables runtime traceback. It is only effective when compiling the main program.

-O[level]

The -O option instructs the compiler to run the compiled program through the object code optimizer. The -O option also calls the -P option, which ensures boolean expressions are only evaluated as much as needed to determine the result. This process causes an increase in compile time in exchange for a decrease in compiled code size and execution time.

There are four levels of optimization. You indicate the level by specifying a digit from 1 to 4 after the -O option. If you leave out the digit, the optimization level defaults to -O2.

The level numbers are interpreted as follows:

-O

This is the most likely level of optimization to give fastest performance for most reasonable applications. The default is -O2.

-O1,-xO1

This is the minimum amount of optimization (peephole) and is postpass assembly-level. Do not use -O1 unless -O2 and -O3 result in excessive compilation time or shortage of swap space.

-O2, -xO2

This is the basic local and global optimization--induction-variable elimination, local and global common subexpression elimination, algebraic simplification, copy propagation, constant propagation, loop-invariant optimization, register allocation, control-flow optimization,
tail-recursion elimination, dead-code elimination, and tail-call elimination.

Level -O2 does not optimize references to or definitions of external or indirect variables. This level is the appropriate level for device drivers and programs that modify external variables from within signal handlers.

-O3, -xO3

Same as -O2, but optimizes the uses and definitions of external variables. Level -O3 does not trace the effects of pointer assignments. Do not use Level -O3 when compiling device drivers or programs that modify external variables from within signal handlers.

-O4, -xO3

Same as -O3, but traces the effects of pointer assignments and gathers alias information. Do not use Level -O4 when compiling device drivers or programs that modify external variables from within signal handlers.

-O5, -xO5

Generates the highest level of optimization. This level uses optimization algorithms that take more compilation time or that do not have as high a certainty of improving execution time.

Optimization at this level is more likely to improve performance if it is done with profile feedback. See -xprofile and -xO5.


Note - Levels -O3 and -O4 may result in an increase in the size of the executables. When optimizing for size, use level -O2. For most programs,
-O4
is faster than -O3, which is faster than -O2, which is faster than -O1. However, in a few cases -O2 may be faster than the others, and -O3 may be faster than -O4. You can try compiling with each level to see if you have one of these rare cases.
If the optimizer runs out of memory, it tries to recover by retrying the current procedure at a lower level of optimization, then resumes subsequent procedures at the original level specified in the -O command-line option.

If you optimize at -O3 or -O4 with very large procedures (thousands of lines of code in a single procedure), the optimizer may require an unreasonable amount of memory. Such cases may result in degraded machine performance.

You can prevent this from happening in the C shell by limiting the amount of virtual memory available to a single process. To do this, use the limit command (see csh(1)).

For example, to limit virtual memory to 16 megabytes:

hostname% limit datasize 16M
This command causes the optimizer to try to recover if it reaches 16 megabytes of data space.

This limit cannot be greater than the machine's total available swap space, and in practice, should be small enough to permit normal use of the machine while a large compilation is in progress. For example, on a machine with 32 megabytes of swap space, the command limit datasize 16M ensures that a single compilation never consumes more than half of the machine's swap space.

The best setting of data size depends on the degree of optimization requested and the amount of real memory and virtual memory available. To find the actual swap space:

hostname% /usr/sbin/swap -s
To find the actual real memory:

hostname% /usr/sbin/prtconf | grep Memory

-o filename

The -o option instructs the compiler to name the generated executable, filename. The default file name for executable files is a.out; for object files, it is the source file name with a .o extension. For example, the following command stores the executable in the file, myprog:

hostname% pc -o myprog myprog.p
If you use this option with the -c option, the name you give is used as the name for the object file. The default file name for object files is the source file name with a .o extension. You cannot give the object file the same name as the source file.

-P

The -P option causes the compiler to use partial evaluation semantics on the boolean operators, and and or. Left-to-right evaluation is guaranteed, and the second operand is evaluated only if necessary to determine the result.

-p and -pg

The -p and -pg options instruct the compiler to produce code that counts the number of times each routine is called. The profiling is based on a periodic sample taken by the system, rather than by line counters.

Using the -p Option

To generate an execution profile using the -p option:

1. Compile with the -p option.

2. Run a.out, which produces a mon.out executable file.

3. Type prof a.out. The program prints a profile.

Using the -pg Option

To generate an execution profile using the -pg option:

1. Compile with the -pg option.

2. Run a.out, which produces a gmon.out executable file, a more sophisticated profiling tool than mon.out.

3. Type gprof a.out. The program prints a profile.

-pic, -Kpic and -PIC, -KPIC

The -pic and -PIC options cause the compiler to generate position-independent code (PIC). One of these options should be used for objects which are then put into shared libraries. With PIC, each reference to a global datum is generated as a dereference of a pointer in the global offset table. Each function call is generated in pc-relative addressing mode through a procedure linkage table.

The size of the global offset table is limited to 8Kbytes with -pic. The -PIC option expands the global offset table to handle 32-bit addresses for those rare cases where there are too many data objects for -pic.

For more information on PIC, see the section on shared libraries in the Solaris documentation.

-Qoption

The -Qoption passes an option to the program. The option value must be appropriate to that program and can begin with a plus or minus sign. The program value can be either cpp(1), cppas, iropt, ld(1), ild(1), pc0, or pc3. For example, the following command passes the option -R to cpp and allows recursive macros:

hostname% pc -Qoption cpp -R myprog.p

-Qpath pathname

The -Qpath option inserts a path name into the compilation search path, hence providing an alternate path to search for each compiler component. You can select this option, for instance, to use a different linker or code generator. In the following command, pc searches /home/pascal/sparc for the compiler components and uses them if it finds them; if pc does not find the specified components, it uses the default components:

hostname% pc -Qpath /home/pascal/sparc testp.p

-Qproduce

The -Qproduce option instructs pc to produce source code of the type sourcetype, which can be one of the following:

.o

Object file from as(1)

.pi

Preprocessed Pascal source from cpp(1)

.s

Assembler source. This option is the same as the -S option.

For example, the following command produces the file, hello.s:

hostname% pc -Qproduce .s hello.p

-qp

The -qp option is the same as -p option.

-R path[:dir]

The -Rpath[:dir] option passes a colon-separated list of directories that specify the library search path used by the runtime linker. If present and not null, it is recorded in the output object file and passed to the runtime linker.

If both LD_RUN_PATH and the -R option are specified, the -R option takes precedence.

-Rw

The -Rw option checks and issues warnings on record fields which are used, but not set.

By default, the Pascal compiler generates warnings of this kind for whole variables, but not for fields.

This option works only for local record variables that are defined in procedures or functions, not for global variables, that is, variables that are in the main program or in a separately compiled module. This is because global variables may appear to be initialized not in the main program itself, but in some procedure or function that is compiled separately, which is subsequently linked to the executable program.

This option is suppressed when the -Z option is on. See "-Z" on page 70. In this case, all local variables and their components are initialized by zero values.

When this option is on, the compiler performs a full analysis (as far as possible at compile time) of how record fields are assigned and used. Warnings contain full access constructs for fields which are used, but not set, for example, V.F1.F2^.F3.

The compiler issues warnings at the end of the procedure where the record variables are defined, that is, when some of the fields are definitely not set. However, no warnings are issued if fields are used in the source before they are initialized, as the control flow may be different.

In some cases, it is not possible to determine at compile time whether the fields have actually been initialized. For example:

With the -Rw option, the compiler takes into account built-in procedures which initialize their argument variables, for example, reset(f) for the file buffer variable f^ and its components. rewrite(f) does not initialize f^. The compiler also examines field handling inside WITH statements.

Use the -Rw option to check the use of "unsafe" variant records, such as the assignment of a variant to a field, or the use of another field from a "parallel" variant. These practices may result in runtime errors which are hard to find.


Note - The -Rw option requires extra compile-time, and is, therefore, recommended for use in debugging only.
Examples:

The Pascal main program, r.p (record and array of records)

program p;
procedure qq;
type compl = record re, im: integer end;
    arc = array[1..2] of compl;
var z: compl;
    a: arc;
begin
writeln(z.im);
writeln(a[1].re);
end;
begin
end.

The commands to compile r.p and the -Rw warnings that are issued

hostname% pc -Rw r.p
Fri Jan 27 17:35:50 1995 r.p:
In procedure qq:
w 18280 field z.im is used but never set
w 18280 field a[...].re is used but never set

The Pascal main program, rr.p (two records)

program p;
type r = record a,b: integer end;
procedure qq;
var r1, r2: r;
var i: integer;
begin
 i:=r1.a;
 i:=r2.a;
 i:=r1.b;
 i:=r2.b;
end;
begin
 qq;
end.

The commands to compile rr.p and the -Rw warnings that are issued

hostname% pc -Rw rr.p
Mon Feb 20 14:59:04 1995 pas/rr.p:
In procedure qq:
w 18280 field r1.b is used but never set
w 18280 field r1.a is used but never set
w 18280 field r2.b is used but never set
w 18280 field r2.a is used but never set

The Pascal main program, recvar.p (variant record)

program p;
procedure qq;
type r = record
	  x,y: integer;
			 case integer of
			 0:(a: integer);
	 		 1: (b: char);
	end;
var v: r;
begin
 v.x:= 1;
 writeln(v.y);
end;
begin
qq;
end.

The commands to compile recvar.p

hostname% pc -Rw recvar.p
Mon Feb 20 15:55:18 1995 recvar.p:
In procedure qq:
w 18260 field v.a is neither used nor set
w 18260 field v.b is neither used nor set
w 18280 field v.y is used but never set
hostname% a.out
0

The Pascal main program, with.p (with statement)

program p;
type C = record re, im: integer end;
     AC = array[1..2] of C;
     RC = record C1, C2: C end;
     PRC = ^RC;
procedure qq;
var
 c: C;
 ac: AC;
 rc: RC;
 prc: PRC;
begin
 ac[1]:= c;
 with ac[1] do
 begin
  re:= 1;
 writeln(im);
 end;
 with prc^.C1 do
 begin
  writeln(im);
 end;
end;
begin
qq;
end.

The commands to compile and execute with.p

hostname% pc -Rw with.p
Mon Feb 20 16:28:34 1995 with.p:
In procedure qq:
w 18280 variable c is used but never set
w 18260 variable rc is neither used nor set
w 18280 field prc^.C1.im is used but never set
hostname% a.out
0

*** a.out terminated by signal 11: segmentation violation
*** Traceback being written to a.out.trace
Abort (core dumped)

-S

The -S option compiles the program and outputs the assembly language in the file, sourcefile.s. For example, the following command places the assembly language translation of rmc.p in the file rmc.s. No executable file is created.

hostname% pc -S rmc.p

-s[level]

The -s option instructs the compiler to accept standard Pascal only. Pascal has two levels of compliance with standard Pascal: Level 0 and Level 1. The only difference between the two is that Level 1 also allows conformant arrays.

Specify the level of compliance as follows:

This option causes many features of Pascal that are not found in standard Pascal to be diagnosed with warning messages. These features include:

In addition, all letters, except character strings and constants, are mapped to lowercase. Thus, the case of keywords and identifiers is ignored.

This option is most useful when a program is to be ported to other machines.

-sb

The -sb option produces a database for source browsing.

-sbfast

The -sbfast option performs the same task as -sb, but does not compile.

-tc

The -tc option instructs the compiler to generate pc3 stab information that allows cross-module type checking.

This option can be used for two purposes:

For example, the following program has a name conflict with libc:

  program p(output);
  var time: integer;
  begin
    writeln(wallclock);
  end.

When the program is compiled with the -tc option, pc3 issues a warning that the name time is already defined as a libc routine. Running a.out causes a core dump. To avoid this problem, change the name of the variable that has the conflict--in this case, time.

-temp=dir

The -temp option instructs pc to locate the temporary files that it creates during compilation in the directory named dir. For example, the following command puts the temporary files in the current directory.

hostname% pc -temp=. hello.p
If you do not specify a temporary directory, pc places the temporary files in the /tmp directory.

-time

The -time option instructs the compiler to report execution performance statistics for the various compilation passes. Here is some sample output; some spaces have been removed so the output would fit on the page.

hostname% pc -time hello.p
cpp:time U:0.0s+S:0.1s=0.2s REAL:1.6s 11%. core T:0k D:0k. io IN:4b OUT:3b. pf IN:25p OUt:184p.
pc0:time U:0.0s+S:0.3s=0.4s REAL:3.2s 13%. core T:0k D:4k. io IN:4b OUT:4b. pf IN:70pOUT:131p.
cg: time U:0.0s+S:0.1s=0.2s REAL:2.0s 12%. core T:0k D:1k. io IN:2b OUT:1b. pf IN:39p OUT:163p.
as: time U:0.0s+S:0.2s=0.3s REAL:1.5s 19%. core T:0k D:1k. io IN:3b OUT:10b.pf IN:33pOUT:117p.
pc3:time U:0.1s+S:0.1s=0.3s REAL:0.9s 31%. core T:0k D:1k. io IN:7b OUT:0b. pf IN:20pOUT:109p.
ld:time U:0.8s+S:0.9s=1.8sREAL:10.2s 17%. core T:0k D:21k.io IN:74bOUT:29b.pf IN:89pOUT:184p.

Each line begins with the name of the compiler pass. The rest of the line is divided into four parts: time, core, io, and pf.

-U name

The -U option removes any initial definition of the cpp(1) symbol name. See cpp(1) for more information. You cannot use this option with the -xl option.

-V

The -V option prints the version number of each compilation pass.

-V0 and -V1

The -V0 and -V1 options turn on sets of options that insert checks into the object file, as follows:

-V0

Equivalent to -C, -H, -L, and -s0

-V1

Equivalent to -C, -H, -L, and -s1

-v

The -v (verbose) option prints the command line used to call each compilation pass.

-w

By default, the compiler prints warnings about inconsistencies it finds in the input program. The -w option turns off the warnings.

To turn off warnings in a program comment, use this command:

hostname% {$w-}

-xa

Same as -a.

-xarch=a

The -xarch=a option limits the set of instructions the compiler may use.

a must be one of: generic, v7, v8, v8a, v8plus, v8plusa.

Although this option can be used alone, it is part of the expansion of the xtarget option; its primary use is to override a value supplied by the xtarget option.

This option limits the instructions generated to those of the specified architecture, and allows the specified set of instructions. It does not guarantee an instruction is used; however, under optimization, it is usually used.

If this option is used with optimization, the appropriate choice can provide good performance of the executable on the specified architecture. An inappropriate choice can result in serious degradation of performance.

v7, v8, and v8a are all binary compatible. v8plus and v8plusa are binary compatible with each other and forward, but not backward. For any particular choice, the generated executable can run much more slowly on earlier architectures (to the left in the above list).

Table  3-3 The -xarch Values 

Value
Meaning

generic

Get good performance on most SPARCs, and major degradation on none.

This is the default. This option uses the best instruction set for good performance on most SPARC processors without major performance degradation on any of them. With each new release, this best instruction set will be adjusted, if appropriate.

v7

Limit the instruction set to V7 architecture.

This option uses the best instruction set for good performance on the V7 architecture, but without the quad-precision floating-point instructions. This is equivalent to using the best instruction set for good performance on the V8 architecture, but without the following instructions:

The quad-precision floating-point instructions

The integer mul and div instructions

The fsmuld instruction

Examples: SPARCstation 1, SPARCstation 2

v8a

Limit the instruction set to the V8a version of the V8 architecture.

This option uses the best instruction set for good performance on the V8 architecture, but without:

The quad-precision floating-point instructions

The fsmuld instruction

Example: Any machine based on MicroSPARC I chip architecture

v8

Limit the instruction set to V8 architecture.

This option uses the best instruction set for good performance on the V8 architecture, but without quad-precision floating-point instructions.

Example: SPARCstation 10

v8plus

Limit the instruction set to the V8plus version of the V9 architecture.

By definition, V8plus, or V8+, means the V9 architecture, except:

Without the quad-precision floating point instructions

Limited to the 32-bit subset defined by the V8+ specification

Without the VIS instructions

This option uses the best instruction set for good performance on the V9 architecture. In V8+, a system with the 64-bit registers of V9 runs in 32-bit addressing mode, but the upper 32 bits of the i and l registers must not affect program results.

Example: Any machine based on UltraSPARC chip architecture.

Use of this option also causes the .o file to be marked as a Sun-specific V8+ binary; such files will not run on a v7 or v8 machine.

v8plusa

Limit the instruction set to the V8plusa version of the V9 architecture.

By definition, V8plusa means the V8plus architecture, plus:

The UltraSPARC-specific instructions

The VIS instructions

This option uses the best instruction set for good performance on the UltraSPARCTM architecture but limited to the 32-bit subset defined by the V8+ specification.

Example: Any machine based on UltraSPARC chip architecture.

Use of this option also causes the .o file to be marked as a Sun-specific V8+ binary; such files will not run on a v7 or v8 machine.

-xcache=c

The -xcache=c option defines the cache properties for use by the optimizer.

c must be one of the following:

The si/li/ai are defined as follows:

si

The size of the data cache at level i, in kilobytes

li

The line size of the data cache at level i, in bytes

ai

The associativity of the data cache at level i

Although this option can be used alone, it is part of the expansion of the -target option. Its primary use is to override a value supplied by the -target option.

This option specifies the cache properties that the optimizer can use. It does not guarantee that any particular cache property is used.

Table  3-4 The -xcache Values 

Value
Meaning

generic

Define the cache properties for good performance on most SPARCs.

This is the default value which directs the compiler to use cache properties for good performance on most SPARC processors, without major performance degradation on any of them.

With each new release, these best timing properties will be adjusted, if appropriate.

s1/l1/a1

Define level 1 cache properties.

s1/l1/a1:s2/l2/a2

Define levels 1 and 2 cache properties.

s1/l1/a1:s2/l2/a2:s3/l3/a3

Define levels 1, 2, and 3 cache properties

Example: -xcache=16/32/4:1024/32/1 specifies the following:

Level 1 cache has:

16K bytes

32 bytes line size

4-way associativity

Level 2 cache has:

1024K bytes

32 bytes line size

Direct mapping associativity

-xchip=c

The -xchip=c option specifies the target processor for use by the optimizer.

c must be one of: generic, old, super, super2, micro, micro2, hyper, hyper2, powerup, ultra

Although this option can be used alone, it is part of the expansion of the -target option; its primary use is to provide a value supplied by the -target option.

This option specifies timing properties by specifying the target processor.

Some effects are:

-xcg89

Same as -cg89.

-xcg92

Same as -cg92.

-xF

The -xF option enables performance analysis of the executable file using the SPARCworks Performance Analyzer and Debugger. This option also causes the code generator to generate some debugging information in the object file, necessary for data collection. The compiler generates code that can be reordered at the function level. It takes each function in the file and places it into a separate section. For example, functions fcn1() and fcn2() are placed in the sections .text%fcn1 and .text%fcn2. You can control the order of functions in the final executable by using the -xF and the loader
-Mmapfile options.

In the map file, if you include the flag O in the string of segment flags, then the static linker ld attempts to place sections in the order they appear in the map file. See the Solaris documentation for details about this option, the segment flags, and the map file.

-xildoff

Turns off the incremental linker and forces the use of ld. This option is the default if you do not use the -g option, or you do not use the -G option, or any source files are present on the command line. Override this default by using the -xildon option.

-xildon

Turns on the incremental linker and forces the use of ild in incremental mode. This option is the default if you use the -g option, and you do not use the -G option, and there are no source files present on the command line. Override this default by using the -xildoff option.

-xl

The -xl option implements a set of features that provide broad compatibility with Apollo Pascal. We recommend using -xl only when porting Pascal systems from Apollo platforms to SPARC system platforms. See the Pascal 4.2 Reference Manual for details of the features controlled by -xl.

When you use -xl, the compiler invokes the cppas preprocessor in place of cpp(1). See Appendix A, "Pascal Preprocessor," for information on cppas.

Modules compiled with -xl are not compatible with modules compiled without -xl. You should not link these two types of modules together.

-xlibmieee

Same as -libmieee.

-xlibmil

Same as -libmil.

-xlibmopt

Uses a math routine library optimized for performance. The results may be slightly different than those produced by the normal math library. This option is implied by the -fast option.

-xlicinfo

The -xlicinfo option returns information about the licensing system. In particular, it returns the name of the license server and the IDs of users who have licenses checked out. When you give this option, the compiler is not invoked and a license is not checked out.

-xMerge

The -xMerge option instructs pc to merge the data segment of the resulting program with the text segment.

-xnolib

Same as -nolib.

-xnolibmopt

Resets -fast, and does not use the math routine library.

Use this option after the -fast option on the command-line, as in:
pc -fast -xnolibmopt ...

-xO5

Optimizes the object code. See also -O[level].

(Solaris 2.x) This option can be combined with -g, but not with -xa.

When -O is used with the -g option, a limited amount of debugging is available.

Generates the highest level of optimization. Uses optimization algorithms that take more compilation time or that do not have as high a certainty of improving execution time. Optimization at this level is more likely to improve performance if it is done with profile feedback. See -xprofile=p.

If the optimizer runs out of memory, it tries to recover by retrying the current procedure at a lower level of optimization and resumes subsequent procedures at the original level specified in the command-line option.

-xpg

Same as -p and -pg

-xprofile=p

The -xprofile=p option collects data for a profile or use a profile to optimize.

p must be collect, use[:name], or tcov.

This option causes execution frequency data to be collected and saved during execution, then the data can be used in subsequent runs to improve performance.

Table  3-6 The -xprofile Values

Value
Meaning

collect

Collect and save execution frequency for later use by the optimizer.

The compiler inserts code to measure the execution frequency at a low level. During execution, the measured frequency data is written into .prof files that correspond to each of the source files.

If you run the program several times, the execution frequency data accumulates in the .prof files; that is, output from prior runs is not lost.

use

Use execution frequency data saved by the compiler.

Optimize by using the execution frequency data previously generated and saved in the .prof files by the compiler.

The source files and the compiler options (excepting only this option), must be exactly the same as for the compilation used to create the compiled program that was executed to create the .prof files.

tcov

Correctly collects data for programs that have source code in header files or make use of C++ templates. See -a for information on the old style of profiling, the tcov(1) man page, and the Profiling Tools manual for more details.

Code instrumentation is performed similarly to that of -a, but .d files are no longer generated. Instead, a single file is generated, whose name is based off of the final executable. For example, if the program is run out of /foo/bar/myprog, then the data file is stored in /foo/bar/myprog.profile/myprog.tcovd.

When running tcov, you must pass it the -x option to make it use the new style of data. If not, tcov uses the old .d files, if any, by default for data, and produces unexpected output.

Unlike -a, the TCOVDIR environment variable has no effect at compile-time. However, its value is used at program runtime.

-xregs=r

The -xregs=r option specifies the usage of registers for the generated code.

r is a comma-separated list that consists of one or more of the following: [no%]appl, [no%]float.

Example: -xregs=appl,no%float

Table  3-7 The -xregs Values

Value
Meaning

appl

Allow using the registers g2, g3, and g4.

In the SPARC ABI, these registers are described as application registers. Using these registers can increase performance because fewer load and store instructions are needed. However, such use can conflict with some old library programs written in assembly code.

no%appl

Do not use the appl registers.

float

Allow using the floating-point registers as specified in the SPARC ABI. You can use these registers even if the program contains no floating-point code.

no%float

Do not use the floating-point registers.

With this option, a source program cannot contain any floating-point code.

The default is -xregs=appl,float.

-xs

The -xs option disables Auto-Read for dbx in case you cannot keep the .o files around. This option passes the -s option to the code generator and linker.

-xsafe=mem

The -xsafe=mem option allows the compiler to assume no memory-based traps occur.

This option grants permission to use the speculative load instruction on V9 machines.

-xsb

Same as -sb.

-xsbfast

Same as -sbfast.

-xspace

The -xspace option does no optimizations that increase the code size.

Example: Do not unroll loops.

-xtarget=t

The -xtarget=t option specifies the target system for the instruction set and optimization.

t must be one of: native, generic, system-name.

The -xtarget option permits a quick and easy specification of the -xarch, -xchip, and -xcache combinations that occur on real systems. The only meaning of -xtarget is in its expansion.

Table  3-8 The -xtarget Values

Value
Meaning

native

Get the best performance on the host system.

The compiler generates code for the best performance on the host system. It determines the available architecture, chip, and cache properties of the machine on which the compiler is running.

generic

Get the best performance for generic architecture, chip, and cache.

The compiler expands -xtarget=generic to:

-xarch=generic -xchip=generic -xcache=generic

This is the default value.

system-name

Get the best performance for the specified system.

You select a system name from Table 3-9 that lists the mnemonic encodings of the actual system names and numbers.

The performance of some programs may benefit by providing the compiler with an accurate description of the target computer hardware. When program performance is critical, the proper specification of the target hardware could be very important. This is especially true when running on the newer SPARC processors. However, for most programs and older SPARC processors, the performance gain is negligible and a generic specification is sufficient.

Each specific value for -xtarget expands into a specific set of values for the -xarch, -xchip, and -xcache options. See Table 3-9 for the values. For example:

-xtarget=sun4/15 is equivalent to:
-xarch=v8a -xchip=micro -xcache=2/16/1

Table  3-9

-xtarget

-xarch

-xchip

-xcache

sun4/15

v8a

micro

2/16/1

sun4/20

v7

old

64/16/1

sun4/25

v7

old

64/32/1

sun4/30

v8a

micro

2/16/1

sun4/40

v7

old

64/16/1

sun4/50

v7

old

64/32/1

sun4/60

v7

old

64/16/1

sun4/65

v7

old

64/16/1

sun4/75

v7

old

64/32/1

sun4/110

v7

old

2/16/1

sun4/150

v7

old

2/16/1

sun4/260

v7

old

128/16/1

sun4/280

v7

old

128/16/1

sun4/330

v7

old

128/16/1

sun4/370

v7

old

128/16/1

sun4/390

v7

old

128/16/1

sun4/470

v7

old

128/32/1

sun4/490

v7

old

128/32/1

sun4/630

v7

old

64/32/1

sun4/670

v7

old

64/32/1

sun4/690

v7

old

64/32/1

sselc

v7

old

64/32/1

ssipc

v7

old

64/16/1

ssipx

v7

old

64/32/1

sslc

v8a

micro

2/16/1

sslt

v7

old

64/32/1

sslx

v8a

micro

2/16/1

sslx2

v8a

micro2

8/64/1

ssslc

v7

old

64/16/1

ss1

v7

old

64/16/1

ss1plus

v7

old

64/16/1

ss2

v7

old

64/32/1

ss2p

v7

powerup

64/31/1

ss4

v8a

micro2

8/64/1

ss5

v8a

micro2

8/64/1

ssvyger

v8a

micro2

8/64/1

ss10

v8

super

16/32/4

ss10/hs11

v8

hyper

256/64/1

ss10/hs12

v8

hyper

256/64/1

ss10/hs14

v8

hyper

256/64/1

ss10/20

v8

super

16/32/4

ss10/hs21

v8

hyper

256/64/1

ss10/hs22

v8

hyper

256/64/1

ss10/30

v8

super

16/32/4

ss10/40

v8

super

16/32/4

ss10/41

v8

super

16/32/4:1024/32/1

ss10/50

v8

super

16/32/4

ss10/51

v8

super

16/32/4:1024/32/1

ss10/61

v8

super

16/32/4:1024/32/1

ss10/71

v8

super2

16/32/4:1024/32/1

ss10/402

v8

super

16/32/4

ss10/412

v8

super

16/32/4:1024/32/1

ss10/512

v8

super

16/32/4:1024/32/1

ss10/514

v8

super

16/32/4:1024/32/1

ss10/612

v8

super

16/32/4:1024/32/1

ss10/712

v8

super2

16/32/4:1024/32/1

ss20/hs11

v8

hyper

256/64/1

ss20/hs12

v8

hyper

256/64/1

ss20/hs14

v8

hyper

256/64/1

ss20/hs21

v8

hyper

256/64/1

ss20/hs22

v8

hyper

256/64/1

ss20/51

v8

super

16/32/4:1024/32/1

ss20/61

v8

super

16/32/4:1024/32/1

ss20/71

v8

super2

16/32/4:1024/32/1

ss20/91

v8

super2

16/32/4:1024/32/1

ss20/502

v8

super

16/32/4

ss10/512

v8

super

16/32/4:1024/32/1

ss20/514

v8

super

16/32/4:1024/32/1

ss20/612

v8

super

16/32/4:1024/32/1

ss20/712

v8

super

16/32/4:1024/32/1

ss20/912

v8

super

16/32/4:1024/32/1

ss600/41

v8

super

16/32/4:1024/32/1

ss600/51

v8

super

16/32/4:1024/32/1

ss600/61

v8

super

16/32/4:1024/32/1

ss600/120

v7

old

64/32/1

ss600/140

v7

old

64/32/1

ss600/412

v8

super

16/32/4:1024/32/1

ss600/

v8

super

16/32/4:1024/32/1

ss600/

v8

super

16/32/4:1024/32/1

ss600/

v8

super

16/32/4:1024/32/1

ss1000

v8

super

16/32/4:1024/32/1

sc2000

v8

super

16/32/4:1024/64/1

cs6400

v8

super

16/32/4:2048/64/1

solb5

v7

old

128/32/1

solb6

v8

super

16/32/4:1024/32/1

ultra

v8

ultra

16/32/1:512/64/1

ultra1/140

v8

ultra

16/32/1:512/64/1

ultra1/170

v8

ultra

16/32/1:512/64/1

ultra2/1170

v8

ultra

16/32/1:512/64/1

ultra2/1170

v8

ultra

16/32/1:512/64/1

ultra2/1170

v8

ultra

16/32/1:1024/64/1

-xtarget Expansions

-Z

The -Z option instructs pc to insert code that initializes all local variables to zero. Standard Pascal does not allow initialization of variables.

-ztext

The -ztext option forces a fatal error if relocations remain against non-writable, allocatable sections.


Previous Next Contents Index Doc Set Home