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