Compilation options (GNAT User’s Guide for Native Platforms)

#### 6.3.3.2 Compilation options ¶

The operation of eliminating the unused code and data from the final executable is directly performed by the linker.

In order to do this, it has to work with objects compiled with the following switches passed to the GCC back end: `-ffunction-sections` `-fdata-sections`.

These options are usable with C and Ada files. They cause the compiler to place each function or data in a separate section in the resulting object file.

Once you’ve created the objects and static libraries with these switches, the linker can perform the dead code elimination. You can do this by specifying the `-Wl,--gc-sections` switch to your `gcc` command or in the `-largs` section of your invocation of `gnatmake`. This causes the linker to perform a garbage collection and remove code and data that are never referenced.

If the linker performs a partial link (`-r` linker switch), then you need to provide the entry point using the `-e` / `--entry` linker switch.

Note that objects compiled without the `-ffunction-sections` and `-fdata-sections` options can still be linked with the executable. However, no dead code elimination can be performed on those objects (they will be linked as is).

The GNAT static library is compiled with `-ffunction-sections` and `-fdata-sections` on some platforms. This allows you to eliminate the unused code and data of the GNAT library from your executable.