---
name: "gnatelim"
section: "1"
platform: "linux"
package: "asis-programs"
version: "2019-5"
release: "Debian 11 (Bullseye)"
platforms: ["linux"]
url: "https://new.carta.tech/gnatelim"
---

# gnatelim(1)

eliminate dead code from Ada programs

## NAME

gnatelim - eliminate dead code from Ada programs

## SYNOPSIS

**gnatelim** \[*OPTION*\]... *name*

## DESCRIPTION

When you are working with a program which shares some set of Ada packages with other programs, it may happen, that your program uses only a part of subprogram defined in these packages, whereas the code created for unused subprograms increases the size of the executable your program.

**gnatelim** is a utility tracking unused subprograms in an Ada program. Its output consists of a list of Eliminate pragmas marking all the subprograms that are declared, but never called in a given program. Eliminate is a GNAT-specific pragma. By ecompiling your program with these pragmas, you may decrease the size of its executable, because the compiler will not create the code for unused subprograms.

**gnatelim** is an ASIS application developed on top of the ASIS implementation for GNAT. It needs a set of tree files representing a program to analyze and the bind file for its main subprogram to be created in the current directory. For the current version, it is a the user's responsibility to maintain the consistency of the set of tree files processed by **gnatelim**, if the user also changes the sources of the Ada program to be processed.

To produce a list of Eliminate pragmas, **gnatelim** has to do an extensive analysis and it may take some time. For example, to process itself, **gnatelim** takes 4 minutes of CPU time on a Pentium 200.

## OPTIONS

- **-v**

  verbose mode: **gnatelim** version information is printed (in the form of Ada comments) in stdout; the names of the files being processed are printed to standard-error.

- **-vf**

  Same as -v, but in addition various debugging information and information reflecting some details of the analysis done by **gnatelim** are printed to standard-error.

- **-a**

  Process RTL components: by default, **gnatelim** does not analyze the units which are the components of the GNAT Run-Time Library (RTL), and it does not generate Eliminate pragmas for subprograms declared in the RTL.  If '-a' option is set, RTL components are also analyzed (except some units, which contains subprograms implicitly called by the compiler).

- **-m**

  Check missed units: if this option is set, **gnatelim** checks that all the units which (according to the bind file) has to be analyzed by **gnatelim** are really represented by the set of tree files processed by **gnatelim** (depending on whether or not '-a' option is set). By default (that is, if '-m' option is not set), **gnatelim** analyzes a set of units represented by a given set of tree files "as is" (excluding library packages which require bodies, but for which bodies are not available).

## SEE ALSO

[gnat(1)](/gnat/1.md), [asistant(1)](/asistant/1.md), [gnat2xml(1)](/gnat2xml/1.md), [gnatcheck(1)](/gnatcheck/1.md), [gnatmetric(1)](/gnatmetric/1.md), [gnatpp(1)](/gnatpp/1.md), [gnatstub(1)](/gnatstub/1.md), [gnattest(1)](/gnattest/1.md)

Documentation about the ASIS tools may be found in */usr/share/doc/asis-doc/* if the **asis-doc** package is installed. The reference documentation about ASIS is excluded due to license problems, but may be found in various formats at *http://libre.adacore.com/developers/documentation*.
