- Ada 2012
- Ada 2005 / 95 / 83
- Embedded Development
- Formal Methods
- Open Source
- Safety-Critical Development
- Static Analysis
Dec 15th, 2016
Implement workaround for LEON3FT b-to-b store errata
The compiler switch -mfix-ut699 has been enhanced to work around the issues present in Cobham Gaisler's UT699 LEON3FT processor and documented in the errata sheet titled "LEON3FT Stale Cache Entry After Store with Data Tag Parity Error". A new compiler switch -mfix-ut699e has also been added to work around the issues present only in the UT699E LEON3FT processor.
Recognize native compiler of different architecture
On multiarch systems, gprbuild can now recognize a native compiler of a different architecture than itself.
Support in Linux for locking policies
The Linux version now supports two additional locking policies pragma Locking_Policy (Ceiling_Locking); pragma Locking_Policy (Inheritance_Locking);.
Pragma Discard_Names and exception declarations
Pragma Discard_Names now suppresses the generation of String names for exception declarations. As a result, these names will not appear in the final binary. Note that routine Ada.Exceptions.Exception_Name will return an empty String when invoked with an exception subject to pragma Discard_Names.
Ada issue AI12-0131, inheritance of Pre’Class
AI12-0131, which is part of the Ada 2012 corrigendum 1, specifies that Pre'Class shall not be specified for an overriding primitive subprogram of a tagged type T unless the Pre'Class aspect is specified for the corresponding primitive subprogram of some ancestor of T.
Reduce memory use for temporary files
The run-time system now does a slightly better job of cleaning up some data structures used for temporary files created by Text_IO.
Allow larger ppc-elf programs with mpc8641 RTS
The ROM space available to program code and read-only data for powerpc-elf bareboard configurations with mpc8641 runtimes was unnecessarily limited to 1 MB. We relaxed this restriction, now allowing up to 32 MB instead.
Dec 1st, 2016
Foreign thread names retained on Linux
When foreign threads are registered with the Ada runtime on Linux, GNAT no longer changes the name of the thread to "foreign thread".
Nov 25th, 2016
New warning on late dispatching primitives
Compiler provides a new warning (enabled by means of switches -gnatw.j or -gnatwa) that warns on public primitives of a tagged type defined after some private extension of it.
Nov 24th, 2016
Support for vxWorks 653 184.108.40.206
GNAT Pro for vxWorks 653 now supports 220.127.116.11 on both PowerPC and e500v2.
Gtkada.Canvas_View: inline editing improvements
New signals have been aded:
Signal_Inline_Editing_Started Signal_Inline_Editing_FinishedNew subprograms have been added:
Set_Editable, Is_Editable Inline_Editing_In_ProgressWhen an item that is edited interactively by the user is moved, we now also move the editing widget (generally a GtkTextView). This text view now also inherits the font size and attributes from the edited item. End of editing is done via a simple <return>, since the previous <ctrl-return> was impossible to guess by the user. Preselect the whole text when editing, so that the user can more easily change it all.
GPS: relative paths in the Omnisearch
The Omnisearch can now also display project relative paths instead of absolute ones. This behavior can be controlled via a checkbox present in the Omnisearch settings.
GPS: non-exclusive key bindings in plugins
It is now possible to bind keys to actions without unbinding the key. This means that the same key binding might apply to several actions, and the action that gets executed is the first one for which the filter matches. In particular, this allows reusing keys like <enter> or <tab> in contexts other than the editor.
Sep 29th, 2016
Implement AI95-0133 in Ada 95 mode
Record representation clauses for record types with non-native Bit_Order are now interpreted according to the Binding Interpretation in AI95-0133 even when the compiler is running in Ada 95 mode. A new debug command line switch -gnatd.p is introduced, which restores the previous behavior (from the original Ada 95 specification). (Note that -gnatd.p has no effect when running in Ada 2005 mode or above).
Sep 28th, 2016
Use natural interrupt numbers on Cortex-M
The runtime has been adjusted so that Interrupt_ID now corresponds to the interrupt number of the manual. The previous offset of 2 has been removed. Warning: you possibly need to modify your application to use the new numbering if you were using pragma Attach_Handler.
GPS: new action to maximize a window
A new action ("maximize window") is provided to make the central area of the desktop (that contains the editor) occupy the full GPS window, hiding all other views. Executing the action again goes back to the previous layout. You can bind a key shortcut to this action via the Preferences/Key Bindings menu.
Sep 27th, 2016
More efficient integer overflow checking
The compiler now generates more efficient code for the overflow checking required by the arithmetical operations on signed integer types.
GPS: cross-references from runtime files
It is now possible to force GPS to index runtime files so that you can perform cross-references from them (it was always possible to cross-ref from your own sources to the runtime). This takes longer to index, so is disabled by default. See the preference Project/Cross References in Runtime Files.
GNATCOLL.Scripts.Execute_Expression: new function
This new function can be used to execute any python expression (not just function calls) and retrieve their result without knowing in advance whether it will return a string, list of string, boolean,...
GPS: toolchain information in About dialog
The About dialog now contains the name of the current project's toolchain if this toolchain is not the native one.
GNATdoc: Documentation_Dir attribute
Attribute Documentation_Dir is defined in Documentation package now. Attribute with same name in package IDE is obsolete. Its support will be removed in future version of GNATdoc.
GPS: Windows view sort order
Two new settings have been added to the Windows view: you can now choose whether to show nodes for notebooks that have a single window (the default is still to display the window itself, but not its notebook in this case); and you can choose whether to sort windows alphabetically, or to preserve the order of tabs within the notebooks. When the notebooks are not displayed, and sorting is disabled, the order depends on which window had the keyboard focus last, which provides a convenient way of switching quickly between a few editors among a lot of them.
Improved warning for value not referenced
The wording of two warnings related to values assigned to an object but possibly never referenced has been adjusted to reflect that these values might actually be referenced in some corner cases (namely, components of a controlled object might be referenced during the finalization of that object).
No_Elaboration_Code_All for System.Machine_Code
Package System.Machine_Code can now be with-ed by packages that have the pragma No_Elaboration_Code_All, supporting execution of code before elaboration.
GPS: using keyboard in Outline view
It is now possible to use <enter> in the Outline to jump to the corresponding entity (same as clicking on the line).
GPS: mouse buttons 4 and 5 for locations
The mouse buttons 4 and 5 (available on some high-end mice) are mapped to the locations command, and used to move in the locations history (back to the previous position, and back). This is hard-coded, and cannot be changed.
GPS: new action “locate in Files view”
GPS now exports a new action to find the current file in the Files view. This action is not visible by default in the contextual menu (as opposed to Locate in Project view) in an effort to keep the menu simple. However, it can be added with a small python script as in:
GPS.Action("Locate in Files view").contextual("Locate in Files")The menu /Navigate/Locate in Files view has been added.
GPS: ask before overwriting read-only file
GPS now checks the permission on the disk before saving a file (rather than just the read-only status of the editor). If the file is read-only on the disk, it displays a confirmation dialog to let you chose whether to overwrite (and, in the context of Clearcase, hijack the file).
GPRinstall support for separate ALI directory
The new GPRinstall's --ali-subdir option can be used to install the ALI files into a specific directory.
GPS: compute the GNAT Runtime menu dynamically
The Help -> GNAT Runtime menu is now computed from the runtime that is actually being used for the current project, rather than a static image of a native runtime. This is particularly helpful when working with embedded or restricted runtimes.
ECL: AJIS examples integration
A new "AJIS examples" importer is now available. It is accessible from "File > Import..." menu in Ada folder. This importer requires AJIS 17.0.20160919w or later installation. These AJIS versions contain GNATbench examples that can be imported, built, run and debugged in GNATbench without modifications.
GPS: display list of mains as flat menu
When a project (and its subprojects) have a small number of main units, and the root project is not an aggregate, we display the /Build/Project/, /Build/Run/ and /Debug/Initialize menus as a flat list of mains, rather than introduce one extra level of menu for the name of the project.
GPS: contextual menu to set watchpoint
Right-clicking on a variable while the debugger is running will now set a watchpoint, so that the debugger stops any time the variable is modified.
GPS: new menu /File/Reset All Perspectives
This menu restores the default window layout. This is in particular useful to reset the Debug perspective that has changed in this release of GPS.
Sep 14th, 2016
Include units requiring extended Ravenscar
The "Ravenscar-full" runtime libraries now contain language- defined and GNAT-defined packages that require the extended Ravenscar profile defined by GNAT. Specifically, Ada.Synchronous_Barriers, GNAT.Semaphores, GNAT.Bounded_Buffers, and GNAT.Bounded_Mailboxes are now available.
GPS: GPS.Process accepts a list of args
The Python GPS.Process() now accepts the command as a list of arguments instead of a string, which makes it easier to handle arguments with spaces (no need for quoting)
Sep 10th, 2016
Update Ada.Locales for RM 2012 COR:1:2016
Update the Ada.Locales interface to conform to the RM 2012 COR:1:2016. The type definitions for Language_Code and Country_Code are now using dynamic predicates.
GPS: GUI enhancements to the Omnisearch
The Omnisearch feature has received a number of enhancements:
- A default key shortcut (control-u) brings up the omnisearch - When bringing up the omnisearch through the key shortcut completions start appearing even before anything is typed in the entry. This allows, for instance, using the arrow keys to select one of the currently open windows. - The size of the popup window has been increased to take up to 2/3 of the main window. This is useful when listing directories with long names, for instance. - The highlighting of the fuzzy-matched characters now uses a color. - If the text in the global entry has been manually deleted, it no longer reappears next time the search is activated.
GPS: new %TP macro in builder targets
A new macro %TP is available in builder targets. It will be replaced with the name of the project file to which the main unit belongs. It is for instance used when you do not want to pass the root project to gprbuild, but directly the unit's own project
GPS: outline option to hide parameter names
A new setting for the Outline view allows you to hide the name of parameters in the profile of subprograms. This saves some space, and helps differentiate homonym subprograms.
New gprname switch—RTS=
gprname has now a switch --RTS= like all other GPR tools, as it is necessary for targets that do not have a default runtime.
GPRinstall support for separate debug symbol file
The new GPRinstall's --side-debug option can be used to write debug symbols out of executables and libraries into a separate file. If the executable to be installed is named main, then the debug information is moved into the file main.debug and is removed from the executable.
GPS: Pass the configuration file to the builder
The configuration file (.cgpr) set by the "--config" command-line switch is now passed on to the builder. Also, GPS now also passes the configuration file which was automatically generated when the "--autoconf" option was given.
Sjlj runtimes switched to back-end setjmp/longjmp
The setjmp/longjmp (sjlj) runtimes of our gcc based ports are now all relying on the gcc core mechanisms for exception handling, with improved efficiency compared to the previous scheme.
AI12-061 : iterated component associations
Ada issue AI12-061 introduces a new construct in array aggregates allowing component associations to be parameterized by a loop variable, for example: Squares : Array (1 .. 10) of Integer := (for I in 1 .. 10 => I ** 2); type Matrix is array (Positive range <>, Positive range <>) of Float; G : constant Matrix := (for I in 1 .. 4 => (for J in 1 .. 4 => (if I=J then 1.0 else 0.0))); -- Identity matrix The expression in such an association can also be a function that returns a limited type, and the range can be specified by an 'others' choice.
Removing redundant invariant check on array type
The type invariant of a constrained array component type is no longer verified multiple times when performing invariant checks.
GPS: search icons in GPS_CUSTOM_PATH
Icons used in plug-ins are now also searched in any of the directories specified in the environment variable GPS_CUSTOM_PATH.
Aug 31st, 2016
Include package Ada.Numerics.Real_Arrays
The Ravenscar "full" runtime libraries now include the language- defined package Ada.Numerics.Real_Arrays.
Aug 28th, 2016
gnatbind: New elaboration order algorithm
A new elaboration order algorithm is implemented, which is likely to be friendlier in most cases, especially with existing code that works with other compilers. It has the following useful properties: - Considering the graph of library units, each strongly connected component (SCC) is elaborated together, with no intervening units from other SCCs. In the absence of cycles in this graph, an SCC is a single library unit. If there are cycles, an SCC is a maximal group of units with cyclic dependences. Note that the nodes of this graph are library units, not library items. Cycles among library items are illegal (e.g. two specs cannot mention each other in nonlimited with clauses). Cycles among library units are legal (two packages may be mutually recursive, so long as at least one dependence is via a body. - In particular, this implies that if an SCC contains just a spec and the corresponding body, and nothing else, the body will be elaborated immediately after the spec. This is expected to result in a better elaboration order for most programs, because in this case, a call from outside the library unit cannot get ABE. - The elaboration order chosen is the same in static and dynamic mode. - Pragmas Elaborate_All (explicit and implicit) are ignored. Instead, we behave as if every legal pragma Elaborate_All were present. That is, if it would be legal to have "pragma Elaborate_All(Y);" on X, then we behave as if such a pragma exists, even if it does not.
Aug 26th, 2016
Support of Cortex-M0/M0+/M1 on arm-elf platform
The arm-elf bareboard compiler now supports Cortex-M0, Cortex-M0+ and Cortex-M1 cores. At this time there is no provided runtimes, but users can write their own ones.