Specifications

The ULTRIX Operating System, Version 4.5 SPD 26.40.32
The ULTRIX RISC compiler does not allow ‘‘old-
fashioned’’ initialization. An example of this, which
works on VAX but gives a warning on ULTRIX RISC,
is:
inti0;
.
varargs
is different. Any program that tries to walk
the argument list by taking the address of an argu-
ment and incrementing it will not be successful, es-
pecially for double precision arguments. Programs
using the macros in varargs.h will work. Compiling
with the
-varargs
option on ULTRIX RISC will attempt
to detect non-portable code.
The setjmp/longjmp buffer is larger on ULTRIX RISC.
Programs with a hard-coded ten-word buffer will
fail; programs that correctly include the header file
setjmp.h and declare a
jmp_buf
will work correctly.
ULTRIX RISC has boundary alignment rules. User
programs should only see this as a performance is-
sue (the kernel does fix-ups). It is better, however, to
align double-words, words and half-words on natural
boundaries. The
setsysinfo
system call or
uac
com-
mand can be used to turn off the fixup messages.
ULTRIX RISC pointers cannot be used as the var on
switch statements.
ULTRIX RISC will not allow the same .c or .o file to
be listed twice. ULTRIX RISC will generate doubly
defined symbol errors. VAX pcc allows this.
-L
flag: On VAX pcc,
-L
flags on the line collectively
affect
-l
flags. On ULTRIX RISC,
-L
flags are seen
strictly left to right, so that a
-l
must come first.
ULTRIX RISC global symbols do not have an extra
leading underscore added to them. This difference
affects assembler programmers and users of
nlist
(3).
The
-R
(read-only text) option is not yet supported
with ULTRIX RISC.
-Md
,
-Mg
options: Not needed on ULTRIX RISC; the
hardware has only one double precision format.
ULTRIX RISC defines a macro (LANGUAGE_C, for
instance) for the preprocessor that makes it possible
to write multilingual include files.
cpp predefined symbols: Both VAX and ULTRIX
RISC define
ultrix
,
unix
, and
bsd4_2
. On ULTRIX
RISC, the equivalent predefined symbol of
vax
is
mips
. On ULTRIX RISC,
MIPSEL
and
host_mips
are
also defined.
Some ULTRIX options on the RISC R2000/R3000
/R4000 series hardware are not available on the VAX
hardware:
-I
(no dirname).
-P
(preprocess, produce .i file).
-W
(phase, opt).
-v
(print commands).
-cpp
,
-nocpp
: Most useful for languages other
than C.
-G
: Relevant only to MIPS architecture.
-j
,
-k
,
-ko
: Relevant only to ULTRIX RISC compiler
design.
-std
,
-std0
,
-std1
(warn nonstandard usage): vcc
has
-V standard=portable
.
-volatile
,
-varargs
: Modify compiler behavior in
certain areas.
-V
(print versions).
ULTRIX RISC has big/little endian options
-EB
and
-EL
.
-unsigned
indicates that variables of type
char
are to
be treated as unsigned quantities. The default is to
treat chars as signed.
ULTRIX RISC recognizes the environ variables
ROOTDIR
and
TMPDIR
.
Profiling: On VAX, there are two levels selected with
-p
and
-pg
. On ULTRIX RISC, there are also two
levels, selected with the
-p
option or by running the
post-processor program
pixie
(1). The ULTRIX RISC
compiler is not affected by either option; all work is
done in the assembler or loader (or postprocessor).
Optimization: On ULTRIX VAX, there is one level
of optimization, off by default and enabled with
-O
.
On ULTRIX RISC, there are five levels. By default,
the second level is used; the
-O0
option disables
this,
-O
or
-O2
invokes global optimization. More
complex processes can be invoked with
-O3
and
-O4
.
ULTRIX RISC also has the
-Olimit
switch that allows
optimization to be bypassed with overly complicated
code sections.
Selecting alternate compilers: On both architectures,
the
-t
and
-B
options specify passes and paths; how-
ever, the pass names for
-t
differ (there are more on
ULTRIX RISC), and the semantics of
-B
belong to
the
-h
option;
-B
is used to specify a command suf-
fix instead. ULTRIX RISC also has
-H
,
-K
, and
-#
arguments designed for compiler development work.
Debugging information: ULTRIX RISC offers four lev-
els, where VAX has only two (on and off).
9