3.17.16 HPPA Options
These ‘-m’ options are defined for the HPPA family of computers:
- Generate code for the specified architecture. The choices for
architecture-type are ‘1.0’ for PA 1.0, ‘1.1’ for PA
1.1, and ‘2.0’ for PA 2.0 processors. Refer to
/usr/lib/sched.models on an HP-UX system to determine the proper
architecture option for your machine. Code compiled for lower numbered
architectures runs on higher numbered architectures, but not the
other way around.
- Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
- Fill delay slots of function calls with unconditional jump instructions
by modifying the return pointer for the function call to be the target
of the conditional jump.
- Prevent floating-point registers from being used in any manner. This is
necessary for compiling kernels that perform lazy context switching of
floating-point registers. If you use this option and attempt to perform
floating-point operations, the compiler aborts.
- Prevent the compiler from using indexing address modes. This avoids some
rather obscure problems when compiling MIG generated code under MACH.
- Generate code that assumes the target has no space registers. This allows
GCC to generate faster indirect calls and use unscaled index address modes.
Such code is suitable for level 0 PA systems and kernels.
- Generate code that assumes calls never cross space boundaries. This
allows GCC to emit code that performs faster indirect calls.
This option does not work in the presence of shared libraries or nested
- Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator cannot use. This is
useful when compiling kernel code. A register range is specified as
two registers separated by a dash. Multiple register ranges can be
specified separated by a comma.
- Generate 3-instruction load and store sequences as sometimes required by
the HP-UX 10 linker. This is equivalent to the ‘+k’ option to
the HP compilers.
- Use the portable calling conventions proposed by HP for ELF systems.
- Enable the use of assembler directives only GAS understands.
- Schedule code according to the constraints for the machine type
cpu-type. The choices for cpu-type are ‘700’
‘7100’, ‘7100LC’, ‘7200’, ‘7300’ and ‘8000’. Refer
to /usr/lib/sched.models on an HP-UX system to determine the
proper scheduling option for your machine. The default scheduling is
- Enable the optimization pass in the HP-UX linker. Note this makes symbolic
debugging impossible. It also triggers a bug in the HP-UX 8 and HP-UX 9
linkers in which they give bogus error messages when linking some programs.
- Generate output containing library calls for floating point.
Warning: the requisite libraries are not available for all HPPA
targets. Normally the facilities of the machine's usual C compiler are
used, but this cannot be done directly in cross-compilation. You must make
your own arrangements to provide suitable library functions for
-msoft-float changes the calling convention in the output file;
therefore, it is only useful if you compile all of a program with
this option. In particular, you need to compile libgcc.a, the
library that comes with GCC, with -msoft-float in order for
this to work.
- Generate the predefine,
_SIO, for server IO. The default is
-mwsio. This generates the predefines,
_WSIO, for workstation IO. These
options are available under HP-UX and HI-UX.
- Use options specific to GNU ld.
This passes -shared to ld when
building a shared library. It is the default when GCC is configured,
explicitly or implicitly, with the GNU linker. This option does not
affect which ld is called; it only changes what parameters
are passed to that ld.
The ld that is called is determined by the
--with-ld configure option, GCC's program search path, and
finally by the user's PATH. The linker used by GCC can be printed
using ‘which `gcc -print-prog-name=ld`’. This option is only available
on the 64-bit HP-UX GCC, i.e. configured with ‘hppa*64*-*-hpux*’.
- Use options specific to HP ld.
This passes -b to ld when building
a shared library and passes +Accept TypeMismatch to ld on all
links. It is the default when GCC is configured, explicitly or
implicitly, with the HP linker. This option does not affect
which ld is called; it only changes what parameters are passed to that
The ld that is called is determined by the --with-ld
configure option, GCC's program search path, and finally by the user's
PATH. The linker used by GCC can be printed using ‘which
`gcc -print-prog-name=ld`’. This option is only available on the 64-bit
HP-UX GCC, i.e. configured with ‘hppa*64*-*-hpux*’.
- Generate code that uses long call sequences. This ensures that a call
is always able to reach linker generated stubs. The default is to generate
long calls only when the distance from the call site to the beginning
of the function or translation unit, as the case may be, exceeds a
predefined limit set by the branch type being used. The limits for
normal calls are 7,600,000 and 240,000 bytes, respectively for the
PA 2.0 and PA 1.X architectures. Sibcalls are always limited at
Distances are measured from the beginning of functions when using the
-ffunction-sections option, or when using the -mgas
and -mno-portable-runtime options together under HP-UX with
the SOM linker.
It is normally not desirable to use this option as it degrades
performance. However, it may be useful in large applications,
particularly when partial linking is used to build the application.
The types of long calls used depends on the capabilities of the
assembler and linker, and the type of code being generated. The
impact on systems that support long absolute calls, and long pic
symbol-difference or pc-relative calls should be relatively small.
However, an indirect call is used on 32-bit ELF systems in pic code
and it is quite long.
- Generate compiler predefines and select a startfile for the specified
UNIX standard. The choices for unix-std are ‘93’, ‘95’
and ‘98’. ‘93’ is supported on all HP-UX versions. ‘95’
is available on HP-UX 10.10 and later. ‘98’ is available on HP-UX
11.11 and later. The default values are ‘93’ for HP-UX 10.00,
‘95’ for HP-UX 10.10 though to 11.00, and ‘98’ for HP-UX 11.11
-munix=93 provides the same predefines as GCC 3.3 and 3.4.
-munix=95 provides additional predefines for
_XOPEN_SOURCE_EXTENDED, and the startfile unix95.o.
-munix=98 provides additional predefines for
_INCLUDE_XOPEN_SOURCE_500, and the startfile unix98.o.
It is important to note that this option changes the interfaces
for various library routines. It also affects the operational behavior
of the C library. Thus, extreme care is needed in using this
Library code that is intended to operate with more than one UNIX
standard must test, set and restore the variable __xpg4_extended_mask
as appropriate. Most GNU software doesn't provide this capability.
- Suppress the generation of link options to search libdld.sl when the
-static option is specified on HP-UX 10 and later.
- The HP-UX implementation of setlocale in libc has a dependency on
libdld.sl. There isn't an archive version of libdld.sl. Thus,
when the -static option is specified, special link options
are needed to resolve this dependency.
On HP-UX 10 and later, the GCC driver adds the necessary options to
link with libdld.sl when the -static option is specified.
This causes the resulting binary to be dynamic. On the 64-bit port,
the linkers generate dynamic binaries by default in any case. The
-nolibdld option can be used to prevent the GCC driver from
adding these link options.
- Add support for multithreading with the dce thread library
under HP-UX. This option sets flags for both the preprocessor and