# Vault 7: Projects

This publication series is about specific projects related to the Vault 7 main publication.

### Protego

# MPLAB XC16 C-Compiler

- 1
- 2
…
- 82
- 83
- 84
- 85
- 86
…
- 365
- 366

MPLAB
®
XC16 C Compiler Users Guide
DS50002071C-page 84  2012-2013 Microchip Technology Inc.
-mlarge-arrays Specifies that arrays may be larger than the default maximum size of
32K. See Section 6.7 Bit-Reversed and Modulo Addressing for
more information.
-mlarge-code Compile using the large code model. No assumptions are made about
the locality of called functions.
When this option is chosen, single functions that are larger than 32k
are not supported and may cause assembly-time errors since all
branches inside of a function are of the short form.
-mlarge-data Compile using the large data model. No assumptions are made about
the location of static and external variables.
-mcpu=
target
This option selects the target processor ID (and communicates it to the
assembler and linker if those tools are invoked). This option affects how
some predefined constants are set; see Section 19.4 Predefined
Macro Names for more information. A full list of accepted targets can
be seen in the Readme.htm file that came with the release.
-mpa
(1)
Enable the procedure abstraction optimization. There is no limit on the
nesting level.
Optimization levels depend on the compiler edition (see Chapter
18. Optimizations.)
-mpa=n
(1)
Enable the procedure abstraction optimization up to level n. If n is zero,
the optimization is disabled. If n is 1, first level of abstraction is allowed;
that is, instruction sequences in the source code may be abstracted
into a subroutine. If n is 2, a second level of abstraction is allowed; that
is, instructions that were put into a subroutine in the first level may be
abstracted into a subroutine one level deeper. This pattern continues
for larger values of n. The net effect is to limit the subroutine call nest-
ing depth to a maximum of n.
Optimization levels depend on the compiler edition (see Chapter
18. Optimizations.)
-mno-pa
(1)
Do not enable the procedure abstraction optimization.
(This is the default.)
-mno-isr-warn By default the compiler will produce a warning if the __interrupt__
is not attached to a recognized interrupt vector name. This option will
disable that feature.
-omf Selects the OMF (Object Module Format) to be used by the compiler.
The omf specifier can be one of the following:
elf Produce ELF object files. (This is the default.)
coff Produce COFF object files.
The debugging format used for ELF object files is DWARF 2.0.
-msmall-code Compile using the small code model. Called functions are assumed to
be proximate (within 32 Kwords of the caller). (This is the default.)
TABLE 5-5: 16-BIT DEVICE-SPECIFIC OPTIONS (CONTINUED)
Option Definition
Note 1: The procedure abstractor behaves as the inverse of inlining functions. The pass is
designed to extract common code sequences from multiple sites throughout a
translation unit and place them into a common area of code. Although this option
generally does not improve the run-time performance of the generated code, it can
reduce the code size significantly. Programs compiled with -mpa can be harder to
debug; it is not recommended that this option be used while debugging using the
COFF object format.
The procedure abstractor is invoked as a separate phase of compilation, after the
production of an assembly file. This phase does not optimize across translation
units. When the procedure-optimizing phase is enabled, inline assembly code must
be limited to valid machine instructions. Invalid machine instructions or instruction
sequences, or assembler directives (sectioning directives, macros, include files,
etc.) must not be used, or the procedure abstraction phase will fail, inhibiting the
creation of an output file.

- 1
- 2
…
- 82
- 83
- 84
- 85
- 86
…
- 365
- 366