Keil™, An ARM® Company

RealView Compiler Reference Guide

Technical Support

On-Line Manuals

RealView Compiler Reference Guide

Preface
Introduction
Compiler Command-line Options
Command-line options
‑Aopt
‑‑[no_]alternative_tokens
‑‑[no_]anachronisms
--apcs=qualifer...qualifier
‑‑arm
‑‑asm
‑‑[no_]autoinline
‑‑bigend
‑‑[no_]brief_diagnostics
--bss_threshold=num
‑c
‑C
‑‑c90
‑‑c99
‑‑[no_]code_gen
--[no_]compile_all_input
‑‑cpp
‑‑create_pch=filename
‑Dname[(parm-list)][=def]
‑‑[no_]data_reorder
‑‑[no_]debug
‑‑[no_]debug_macros
‑‑default_extension=ext
‑‑[no_]dep_name
‑‑depend=filename
‑‑depend_format=string
--[no_]depend_system_headers
‑‑device=list
‑‑device=name
--device_opt=option
‑‑diag_error=tag[,tag,...]
‑‑diag_remark=tag[,tag,... ]
‑‑diag_style={arm|ide|gnu}
‑‑diag_suppress=tag[,tag,...]
--diag_suppress=optimizations
‑‑diag_warning=tag[,tag,...]
--diag_warning=optimizations
‑‑[no_]dollar
‑‑dwarf2
‑‑dwarf3
‑E
‑‑enum_is_int
‑‑errors=filename
‑‑[no_]exceptions
‑‑[no_]exceptions_unwind
‑‑[no_]export_all_vtbl
‑‑[no_]export_defs_implicitly
--[no_]extended_initializers
‑‑feedback=filename
--[no_]force_new_nothrow
‑‑forceinline
‑‑fpmode=model
‑‑fpu=list
‑‑fpu=name
‑‑[no_]friend_injection
‑‑gnu
‑‑[no_]guiding_decls
‑‑help
‑‑[no_]hide_all
‑Idir[,dir,...]
‑‑[no_]implicit_include
--[no_]implicit_include_searches
‑‑[no_]implicit_typename
‑‑info=totals
‑‑[no_]inline
‑‑interleave
‑Jdir[,dir,...]
‑‑kandr_include
‑Lopt
‑‑library_interface=lib
--library_type=lib
‑‑list
‑‑littleend
‑‑locale=lang_country
‑‑loose_implicit_cast
‑‑[no_]lower_ropi
‑‑[no_]lower_rwpi
‑M
‑‑md
‑‑message_locale=lang_country[.codepage]
‑‑min_array_alignment=opt
‑‑[no_]multibyte_chars
‑‑[no_]multifile
‑‑[no_]nonstd_qualifier_deduction
‑o filename
‑Onum
‑‑[no_]old_specializations
-‑omf_browse
‑Ospace
‑Otime
‑‑[no_]parse_templates
‑‑pch
‑‑pch_dir=dir
‑‑[no_]pch_messages
‑‑[no_]pch_verbose
‑‑pending_instantiations=n
‑‑pointer_alignment=num
--[no_]project=filename
‑‑preinclude=filename
--[no_]reduce_paths
--reinitialize_workdir
‑‑remarks
‑‑[no_]restrict
‑‑[no_]rtti
‑S
‑‑[un]signed_bitfields
‑‑[un]signed_chars
‑‑show_cmdline
‑‑split_ldm
‑‑split_sections
‑‑[no_]strict
‑‑strict_warnings
‑‑sys_include
‑‑thumb
‑Uname
‑‑[no_]unaligned_access
‑‑use_pch=filename
‑‑[no_]using_std
‑‑[no_]vfe
‑‑via=filename
--[no_]vla
‑‑vsn
‑W
--wchar16
--wchar32
--workdir=directory
‑‑[no_]wrap_diagnostics
Language Extensions
Compiler-specific Features
C and C++ Implementation Details
Via File Syntax
Standard C Implementation Definition
Standard C++ Implementation Definition
C and C++ Compiler Implementation Limits

--apcs=qualifer...qualifier

2.1.4. --apcs=qualifer...qualifier

This option controls interworking and position independence when generating code.

By specifying qualifiers to the â€'â€'apcs commandâ€'line option, you can define the variant of the Procedure Call Standard for the ARM architecture (AAPCS) used by the compiler.

Syntax

--apcs=qualifer...qualifier

Where qualifier...qualifier denotes a list of qualifiers. There must be:

  • at least one qualifier present

  • no spaces separating individual qualifiers in the list.

Each instance of qualifier must be one of:

/[no]interwork

Generates code with or without ARM/Thumbâ„¢ interworking support. The default is /nointerwork.

/[no]ropi

Enables or disables the generation of Readâ€'Only Positionâ€'Independent (ROPI) code. The default is /noropi.

/[no]pic is an alias for /[no]ropi.

/[no]rwpi

Enables or disables the generation of Read/Write Positionâ€'Independent (RWPI) code. The default is /norwpi.

/[no]pid is an alias for /[no]rwpi.

Note

You can alternatively specify multiple qualifiers. For example, --apcs=/nointerwork/noropi/norwpi is equivalent to --apcs=/nointerwork --apcs=noropi/norwpi.

Default

If you do not specify an â€'â€'apcs option, the compiler assumes â€'â€'apcs=/nointerwork/noropi/norwpi.

Usage

/[no]interwork

By default, code is generated:

  • without interworking support, that is /nointerwork, unless the device you select using the â€'â€'device=name option corresponds to architecture ARMv5T or later

  • with interworking support, that is /interwork, for ARMv5T or later. This is because ARMv5T or later provides direct interworking support.

/[no]ropi

If you select the /ropi qualifier to generate ROPI code, the compiler:

  • addresses readâ€'only code and data PCâ€'relative

  • sets the Position Independent (PI) attribute on readâ€'only output sections.

Note

â€'â€'apcs=/ropi is not supported when compiling C++.

/[no]rwpi

If you select the /rwpi qualifier to generate RWPI code, the compiler:

  • addresses writable data using offsets from the static base register sb. This means that:

    • the base address of the RW data region can be fixed at runtime

    • data can have multiple instances

    • data can be, but does not have to be, positionâ€'independent.

  • sets the PI attribute on read/write output sections.

Note

Because the â€'â€'lower_rwpi option is the default, code that is not RWPI is automatically transformed into equivalent code that is RWPI. This static initialization is done at runtime by the C++ constructor mechanism, even for C.

Restrictions

There are restrictions when you compile code with /ropi or /rwpi.

/ropi

The main restrictions when compiling with /ropi are:

  • The use of â€'â€'apcs=/ropi is not supported when compiling C++.

  • Some constructs that are legal C do not work when compiled for â€'â€'apcs=/ropi. For example:

    extern const int ci; // ro
    const int *p2 = &ci; // this static initialization
                         // does not work with â€'â€'apcs=/ropi
    

    To enable such static initializations to work, compile your code using the â€'â€'lower_ropi option. For example:

    armcc â€'â€'apcs=/ropi â€'â€'lower_ropi
    
/rwpi

The main restrictions when compiling with /rwpi are:

  • Some constructs that are legal C do not work when compiled for â€'â€'apcs=/rwpi. For example:

    int i; Â Â Â Â Â Â Â Â Â Â Â Â Â Â // rw
    int *p1 = &i; Â Â Â Â Â Â Â // this static initialization
                         // does not work with â€'â€'apcs=/rwpi
                         // â€'â€'no_lower_rwpi
    

    To enable such static initializations to work, compile your code using the â€'â€'lower_rwpi option. For example:

    armcc â€'â€'apcs=/rwpi
    

    Note

    You do not have to specify â€'â€'lower_rwpi, because this is the default.

See also

Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0376A