mirror of
https://github.com/termux-pacman/termux-packages.git
synced 2026-01-16 07:43:14 +00:00
7a4ab56ecb49e05612cbaaa37ffe22cc0fe71ac2
Patched `rts` heap reservation logic on Android:
* Need for patch
- There seems to be a bug on Android. Sometimes simple commands like `ghc --help` usage 90% - 100% cpu and hangs.
- It doesn't happen every time, but ~25% of the times (at least in my
testing).
* Cause of the bug
- The function `osReserveHeapMemory` tries to allocate virtual space starting
from `0x4200000000`. The allocated space has to start at an address >= this address.
- If the kernel doesn't allocate inside this space, it keeps on repeating the
`mmap` call with increasing starting point.
- Now, on Android the kernel sometimes return an address above (as in counting)
this `hint` address. It repeatedly returns the same address for subsequent calls.
- Thus, an infinite loop occurs.
References:
- 383be28ffd/rts/posix/OSMem.c (L461)
- https://github.com/termux/termux-packages/pull/22991#issuecomment-2759137291
* Solution (proposed by Robert Kirkman):
- It introduces a new helper function `osTryReserveHeapMemoryRecursive`.
This transforms the heap reservation logic into a recursive one.
- `osTryReserveHeapMemory()` is run multiple times without unmapping the
undesired addresses. Thus, forcing the kernel to map subsequent calls of
`mmap` to a new, unique address until an address above the `0x4200000000`
mark is obtained.
- After which each recursive call unmaps its undesired address before returning
the desired address (in order from last mapped to first mapped).
References:
- https://gitlab.haskell.org/ghc/ghc/-/merge_requests/14164
- https://github.com/termux/termux-packages/pull/22991#issuecomment-2761325484
Co-authored-by: Robert Kirkman <rkirkman@termux.dev>
Signed-off-by: Aditya Alok <alok@termux.dev>
Termux packages for pacman - official git repo mirror
Code for connecting repository:
main:
[main]
Server = https://service.termux-pacman.dev/main/$arch
x11:
[x11]
Server = https://service.termux-pacman.dev/x11/$arch
root:
[root]
Server = https://service.termux-pacman.dev/root/$arch
Other information:
- Android support: 7+
- Architecture support: all (aarch64, arm, x86_64, i686)
- Signature: termux-pacman organization gpg key
- Powered by aws
- Root repository: https://github.com/termux/termux-packages
- Organization maintaining the root repository: termux
Description
Languages
Shell
79.8%
C
13.1%
C++
2.7%
CMake
1.1%
Python
0.8%
Other
2.3%