ERC32 Ada Technical Summary

For mission-critical applications using the ERC32 spacecraft computer

Chris Nettleton

Ellis Thomas

This report presents technical and commercial information about Version 1.7 of the ERC32 Ada compilation system.


XGC Software acknowledges contributions from the following organizations:

  • The European Space Agency, contracts 11935 and 11374

  • The UK Ministry of Defence, HOLD III contract

  • TRW Aerospace, HOLD III contract

  • New York University and ACT, Inc., for the GNAT front end

  • The Free Software Foundation, for the base-level C compiler, assembler and linker.

This manual is written in XML that conforms to DocBook Version 4.4. See The DocBook web site for more information.


The information in this document is subject to change without notice and should not be construed as a commitment by XGC Software. XGC Software assumes no responsibility for any errors that may appear in this document.

Table of Contents
1. Introduction
1.1. Performance
1.2. Restrictions
1.3. User Documentation
1.4. Media
1.5. Warranty
2. Host and Target
2.1. Cross-Development System
2.2. Host Configurations
2.3. Host Operating System
2.4. Target Configurations
2.5. Target Operating System
2.6. Programming Support Environment
2.7. Host-Target Communication
3. Language-Related Issues
3.1. Overview
3.2. Section 2: Lexical Elements
3.3. Section 3: Declarations and Types
3.3.1. Uninitialized Variables
3.3.2. Enumeration Types
3.3.3. Integer Types
3.3.4. Floating Point Types
3.3.5. Fixed Point Types
3.4. Section 4: Names and Expressions
3.5. Section 5: Statements
3.6. Section 6: Subprograms
3.7. Section 7: Packages
3.8. Section 8: Visibility Rules
3.9. Section 9: Tasks and Synchronization
3.9.1. type Duration
3.9.2. Shared Variables
3.10. Section 10: Program Structure and Compilation Issues
3.11. Section 11: Exceptions
3.12. Section 12: Generic Units
3.13. Section 13: Representation Issues
3.13.1. Definitions from the predefined package System
3.13.2. The type Address
3.14. Input-Output
3.15. Annex A: Predefined Language Environment
3.16. Annex B: Interface to Other Languages
3.17. Annex C: Systems Programming
3.18. Annex D: Real-Time Systems
3.19. Annex E: Distributed Systems
3.20. Annex F: Information Systems
3.21. Annex G: Numerics
3.22. Annex H: Safety and Security
3.23. Annex J: Obsolescent Features
3.24. Annex K: Language-Defined Attributes
3.25. Annex L: Language-Defined Pragmas
4. User Interface and Debugging Facilities
4.1. Compiler Invocation
4.2. Compilation
4.2.1. Format and Content of User Listings
4.3. Errors and Warnings
4.4. Other Software Supplied
4.5. Debugging Facilities
5. Performance and Capacity
5.1. Host Performance and Capacity
5.2. Target Code Performance
5.2.1. Optimization and Code Quality
5.2.2. Constraint Checks
5.2.3. Space for Unused Variables
5.2.4. Space for Unused Subprograms
5.2.5. Evaluation of Static Expressions
5.2.6. Elimination of Unreachable Code
5.2.7. Common Sub-expressions
5.2.8. Loop Invariants
5.2.9. Bound Checks
5.2.10. The pragma Inline
5.2.11. Procedure Calling Overhead
5.2.12. The Rendezvous
5.2.13. Space Requirements
6. Cross-Compiler and Run-Time Interfacing
6.1. Cross-Compiler Issues
6.1.1. Background
6.2. Compiler Phase and Pass Structure
6.3. Compiler Module Structure
6.3.1. Intermediate Program Representations
6.3.2. Final Program Representation
6.3.3. Compiler Interfaces to Other Tools
6.4. Compiler Construction Tools
6.5. Installation
6.6. Run-Time System Issues
6.6.1. The Stack
6.6.2. Subprogram Call and Parameter Handling
6.6.3. Data Representation
6.6.4. Implementation of Ada Tasking
6.7. Exception Handling System
6.8. I/O Interfaces
6.9. Documentation
7. Re-targeting and Re-hosting
7.1. Retargeting
7.2. Rehosting
7.2.1. Availability of Source Code
7.2.2. Source Language
7.2.3. System Dependencies
8. Contractual Matters
8.1. The Compiler License
8.2. The Run-Time License
8.3. Support
9. Validation
A. Examples of Generated Code
A.1. The Sieve of Eratosthenes
A.2. Ackermann's Function
B. Restrictions and Profiles
C. The Predefined Library
List of Tables
3-1. Attributes of the Predefined Integer Types
3-2. Basic Attributes of Floating Point Types
3-3. Attributes of the Predefined Type Duration
3-4. Named Numbers from package System
5-1. Benchmark Results
5-2. Task-Related Metrics
9-1. The Validation Test Classes
B-1. Supported Profiles
B-2. Profiles and Restrictions
B-3. Profiles and Numerical Restrictions
C-1. Predefined Library Units
List of Examples
A-1. Source Code for Sieve
A-2. Generated Code for Sieve
A-3. Source Code for Ackermann's Function
A-4. Generated Code for Ackermann's Function