2.4.1. Functionality enhancements and new functionality

The ADS 1.0 release of the ADS introduced numerous enhancements and new features. The major changes are described in:

Support for new processors (ARM9E and ARM10)

ADS introduces support for the new ARM9E and ARM10 processors.

The new ARM9E instructions are supported by the assembler, the inline assembler of the C and C++ compilers, the debuggers, and the ARMulator.

The new ARM10 instructions are supported by the assembler, the inline assembler of the C and C++ compilers, the debuggers, and the Basic ARM Ten System (BATS) ARMulator model.


BATS is no longer shipped with ADS 1.1 or later.

The compiler performs instruction scheduling for ARM10 code by re-ordering machine instructions to gain maximum speed and minimize wait states. The linker uses BLX in interworking veneers when the underlying architecture (the ARM9E and ARM10, for example, have architecture 5) supports it.

New ARM/Thumb procedure call standard

The Procedure Call Standard has been redesigned to:

  • give equal emphasis to ARM and Thumb

  • interwork between ARM-state and Thumb-state for all variants

  • reduce the number of variants

  • support position-independence

  • produce compact code (especially with Thumb)

  • be binary compatible with the previous most commonly used APCS variant.

The new ARM/Thumb Procedure Call Standard (ATPCS) enables a consistent ARM and Thumb definition of Read Only Position Independence (also called Position Independent Code), and Read Write Position Independence (also called Position Independent Data) for both ARM and Thumb.

Floating-point support

Enhanced floating-point support is available in the compiler, assembler, and debugger:

  • The compiler, assembler, and debugger support the new VFP floating-point architecture in scalar mode.

  • The compiler can generate VFP instructions for double and float operations. (The inline assembler, however, does not support VFP.)

  • The assembler supports VFP in vector mode. (New register names and directives are available.)

  • The compiler and assembler command-line option -fpu specifies the FPA hardware, VFP hardware, or software variants.

    Choose -fpu FPA or -fpu softFPA to retain the old SDT 2.50/2.51 format.


The order of the words in a little-endian double is different for FPA and VFP. If you select -fpu FPA or -fpu softFPA the SDT 2.50/2.51 format is used. If you select -fpu VFP or -fpu softVFP the new format is used.

There is no functional difference between SoftFPA and SoftVFP. Both implement IEEE floating-point arithmetic by subroutine call, and both use the IEEE encoding of floating-point values into 32-bit words. However, the ordering of the two halves of a double is different for little-endian code. See Byte order of long long and double for details.

Byte order of long long and double

The compilers and assembler now support the industry-standard pure-endian long long and double types in both little-endian and big-endian formats. In SDT 2.50/2.51, the formats of little-endian double and big-endian long long are nonstandard mixed-endian.

If a big-endian 64-bit quantity is represented as abcdefgh in pure-endian, with a being the most significant byte and h the least significant byte, the standard little-endian format is hgfedcba in pure-endian. SDT 2.50/2.51 uses the following nonstandard mixed-endian formats:


For big-endian long long.


For little-endian double.


The format of long long is always industry-standard in ADS 1.0. There is no impact if you have used little-endian long long. If you previously used big-endian long long, you must recompile your code and ensure that it conforms to the new format.

There is no impact if you have used big-endian double. If you previously used little-endian double and hardware floating-point (FPA), you must continue to use the old little-endian double format and select the -fpu fpa option in ADS.

If you previously used little-endian double and software floating-point, you can choose whether or not to change to the new format:

  • Use -fpu softFPA or -fpu FPA to retain the old format.

  • Use -fpu softVFP or -fpu VFP to use the industry-standard format. You must recompile code that defines or references double types.

Remote Debug Interface

A new variant of the Remote Debug Interface (RDI 1.5.1) is introduced in ADS. The version used in SDT 2.50/2.51 was 1.5.

The ADW debugger has been modified to function with RDI 1.0, RDI 1.5, or RDI 1.5.1 client DLLs. AXD works with RDI 1.5.1 targets only.

Debug targets that are released as part of ADS (ARMulators, Remote_A, and Gateway) have been upgraded to RDI 1.5.1.


Third-party DLLs written to use RDI 1.5 will continue to work with the versions of ADW and armsd shipped with ADS, but will only work with AXD if the DLL is, and reports itself as, RDI 1.5.1 capable. Third-party debuggers will fail to work with the ADS ARMulators, Remote_A, and Gateway DLLs unless the debuggers conform to RDI 1.5.1.


A new debugger, AXD, is available for use on Windows or UNIX in addition to the existing ADW and ADU. ADW has been enhanced.

All debug agents and targets in ADS support RDI 1.51, a new version of the Remote Debug Interface. The debuggers support all the debug agents (for example ARMulator and Remote_A) that are released as part of ADS. In addition, all debuggers except armsd support Multi-ICE 1.4:

  • ADW supports all ADS debug agents, Multi-ICE 1.3, and Multi-ICE 1.4

  • ADU supports all ADS debug agents, and Multi-ICE 1.4

  • Armsd supports all ADS debug agents

  • AXD supports all ADS debug agents and Multi-ICE 1.4.


The new debugger provides a modern GUI with improved window management, data display, and data manipulation. The debugging views have been redesigned to make the display more relevant to the data. This includes in-place expansion, in-place editing and validation, data sensitive formatting and editing, coloring modified data, and greater user control over formatting and structure.


ADW enhancements are:

  • Support for VFP floating-point opcodes and registers.

  • Improved stack-unwinding due to the use of DWARF2 descriptions. In ADS, all standard library functions carry DWARF frame unwinding descriptions with them. These are always generated by ADS compilers and there is new assembler support in ADS to facilitate their generation for hand-written assembly language.


AXD can debug RDI 1.5.1 targets only. All ARM-supplied debug targets (Multi-ICE, ARMulator, Remote_A, and gateway) support RDI 1.5.1. For non-ARM debug targets that support RDI 1.5 or RDI 1.0, use ADW instead of AXD.

There is no support for conversion of ADW obey files to AXD scripts. If existing obey files are important, use ADW instead.


The ARMulator has been enhanced to support RPS Interrupt Controller and Timer peripheral models (as defined in ARM DDI 0062D). The ARMulator supports the following new processor models:

  • ARM9E

  • ARM10T

  • ARM1020T™.

The ARM10 models do not support VFP.

There is also a new stack usage monitor memory model available for all processor models except ARM10T and ARM1020T.

The ARMulator supports RDI 1.5.1.

Angel and Remote_A

Angel and Remote_A enhancements are:

  • Remote_A connection supports RDI 1.5.1.

  • Improved reliability when semihosting.

  • Additional Angel ports and improved integration with uHAL.

  • Improved coprocessor support, for example FPA (ARM7500) and VFP (ARM10) coprocessors.

  • Support for dynamically loaded hardware drivers for the host on Windows and UNIX.

    Hardware other than serial, parallel, or ethernet ports can be used to communicate with Angel. The GUI interface for Remote_A is extended into the loaded driver.


All Libraries (C, C++, math, and floating-point) are released as a set of object code variants that cover all possible choices of Procedure Call Standard and all processor architecture versions. A limited set of variants is required because the libraries have been restructured to remove the necessity for some combinations. The compilation and linking system has been re-engineered so that the correct library variants are automatically linked in for the chosen compilation options. The linker is able to identify the correct library variant from attributes embedded in the ELF. This re-engineering makes the library variants much easier to use and removes the requirement to rebuild different variants.

The C library has been improved and restructured so that there is no requirement for a separate embedded C library. The C library chapter in the ADS Compilers and Libraries Guide describes in detail how to construct target-specific libraries.

New real-time (near constant time) versions of the heap management functions malloc(), free(), realloc(), and calloc() are provided.

The floating-point libraries have improved performance and functionality. Two versions are provided:

  • The version identified by the files beginning with f_ conforms to IEEE 754 accuracy standards and meets the floating-point arithmetic requirements of the C and Java language standards.

  • The version identified by the files beginning with g_ provides selectable IEEE rounding modes and full control of IEEE exceptions, but at some performance cost.

The Math library has better accuracy and a wider variety of functions (for example, gamma function, cube root, inverse hyperbolic functions).

Library manager

The library manager is armar. The ARM librarian enables sets of ELF format object files to be collected together and maintained in libraries. You can pass such a library to the linker in place of several ELF files. armar files are compatible with the UNIX archive format ar.


The linker supports the deprecated ALF library format. Use armar for new libraries and migrate your existing libraries to armar.

CodeWarrior IDE

ARM has licensed the CodeWarrior IDE from Metrowerks and is making this available within ADS. This replaces APM on Windows platforms. (It is not available on UNIX platforms).

The CodeWarrior IDE provides a simple, versatile, graphical user interface for managing your software development projects. You can use the CodeWarrior IDE for the ARM Developer Suite to develop C, C++, and ARM assembly language code targeted at ARM processors. The CodeWarrior IDE enables you to configure the ARM tools to compile, assemble, and link your project code.

CodeWarrior IDE configuration dialogs

The CodeWarrior IDE dialog boxes are used to select the new features available in the compilers, assembler, and the linker.

Each selectable option on the dialog boxes has a tool tip that displays the command-line equivalent for the option.


Existing APM projects are not usable with the CodeWarrior IDE. There is no support for conversion of .apj files to CodeWarrior IDE projects. Use the CodeWarrior IDE for new projects. Migrate your existing APM projects to use the CodeWarrior IDE.

Check the assembler, compiler, and linker options for your new or migrated projects as the defaults for ADS 1.0 are different from the defaults for the SDT 2.50/2.51.


The major linker enhancements are:

  • Support for ELF object code.

  • Support for automatic selection of the correct library variant.

  • Improved scatter-loading features to support new execution region attributes:

    • Position Independent (PI)

    • Relocatable (RELOC)

    • linked at a fixed address (ABSOLUTE)

    • simple Overlay (OVERLAY).

  • Direct support for ROPI and RWPI procedure call standard variants.

  • Support for outputting symbol definitions from a link step and reading them in a later link step (support for system code at a fixed address).


Update your projects or makefiles to link with the appropriate options. In most cases you will not have to change your source code to use the new options.

Check the assembler, compiler, and linker options for your new or migrated projects as the defaults for ADS 1.0 are different from the defaults for armlink in SDT 2.50/2.51.

See Changed linker behavior and the ADS Linker and Utilities Guide for more information.


Extensive improvements have been made to the compilers.

C compilers

The following improvements have been made to the C Compiler:

  • Assembly language output generated with the -S option to the ARM and Thumb compilers can now more easily be assembled. The compilers add ASSERT directives for command-line options such as ATPCS variants and byte order to ensure that compatible compiler and assembler options are used when reassembling the output.

  • The inline assembler supports the new ARM9E and ARM10 instructions.

  • Instruction scheduling for ARM10 minimizes wait states.

  • the new VFP architecture is supported.

New compiler options are provided for:

  • controlling warnings

  • selecting optimization

  • generating position-independent code and position-independent data.

C++ compilers

The C++ compilers included with ADS inherit all the benefits of the C compiler. The following additional improvements have been introduced since C++ version 1.10:

  • Rogue Wave Library 2.01. This includes the Rogue Wave iostream implementation. The iostream implementation supplied with C++ version 1.10 has been removed. Replace references to stream.h and iostream.h with iostream.

  • Support for the EC++ informal standard.

  • Updated vtables to support ROPI.

  • Improved template handling.

In addition, improvements have been made to the C++ compilers syntax and semantic checking in both strict and non-strict modes. If previously successful programs now fail to compile, please check their syntax first, before concluding that there is a compiler fault.

Other general improvements are support for:

  • mutable

  • explicit

  • covariant return types for left-most inheritance

  • pseudo-destructors

  • aggregates with allow complicated initializations

  • template classes with static data members

  • temporary destruction order for arguments to functions

  • explicit casts to private bases

  • inline functions

  • better overload resolution

  • declarations in conditional statements.

See Changed compiler behavior and the ADS Compilers and Libraries Guide for more information.


Enhancements to the assembler include:

  • the assembler provides support for the latest ARM processors

  • the assembler outputs ELF object code.

There are considerable changes to assembler directives. See Changed assembler behavior and the ADS Assembler Guide for more information.

License management

ADS components are license-managed by FLEXlm. See the ADS Installation and License Management Guide for more information.

Copyright © 1999-2001 ARM Limited. All rights reserved.ARM DUI 0064D