Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/termux/termux-elf-cleaner

Utility to remove unused ELF sections causing warnings.
https://github.com/termux/termux-elf-cleaner

android elf elf-sections termux

Last synced: about 5 hours ago
JSON representation

Utility to remove unused ELF sections causing warnings.

Awesome Lists containing this project

README

        

# termux-elf-cleaner

Utility for Android ELF files to remove unused parts that the linker warns about.

## Description

When loading ELF files, the Android linker warns about unsupported dynamic section entries with warnings such as:

WARNING: linker: /data/data/org.kost.nmap.android.networkmapper/bin/nmap: unused DT entry: type 0x6ffffffe arg 0x8a7d4
WARNING: linker: /data/data/org.kost.nmap.android.networkmapper/bin/nmap: unused DT entry: type 0x6fffffff arg 0x3

This utility strips away the following dynamic section entries:

- `DT_RPATH` - not supported in any Android version.
- `DT_GNU_HASH` - supported from Android 6.0.
- `DT_RUNPATH` - supported from Android 7.0.
- `DT_VERDEF` - supported from Android 6.0.
- `DT_VERDEFNUM` - supported from Android 6.0.
- `DT_VERNEED` - supported from Android 6.0.
- `DT_VERNEEDNUM` - supported from Android 6.0.
- `DT_VERSYM` - supported from Android 6.0.
- `DT_AARCH64_BTI_PLT` - supported from Android 12.
- `DT_AARCH64_PAC_PLT` - supported from Android 12.
- `DT_AARCH64_VARIANT_PCS` - supported from Android 12.

It also removes the three ELF sections of type:

- `SHT_GNU_verdef`
- `SHT_GNU_verneed`
- `SHT_GNU_versym`

And makes sure that the alignment of a TLS segment is at least 32 (for 32bit arches) or 64 (for 64bit arches), to prevent errors similar to:

```
error: "valgrind": executable's TLS segment is underaligned: alignment is 8, needs to be at least 64 for ARM64 Bionic
```

## Usage

```
Usage: termux-elf-cleaner [OPTION-OR-FILENAME]...

Processes ELF files to remove unsupported section types and
dynamic section entries which the Android linker warns about.

Options:

--api-level NN choose target api level, i.e. 21, 24, ..
--dry-run print info but but do not remove entries
--quiet do not print info about removed entries
--help display this help and exit
--version output version information and exit
```

## License

SPDX-License-Identifier: [GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html)

## See also

* [Bionic's related docs](https://android.googlesource.com/platform/bionic/+/refs/heads/master/android-changes-for-ndk-developers.md)