Skip to content

uclibc-compat: split .so and .a to fix segfault from symbol interposition#2000

Merged
widgetii merged 1 commit intomasterfrom
fix-uclibc-compat-so-interpose
Apr 13, 2026
Merged

uclibc-compat: split .so and .a to fix segfault from symbol interposition#2000
widgetii merged 1 commit intomasterfrom
fix-uclibc-compat-so-interpose

Conversation

@widgetii
Copy link
Copy Markdown
Member

Problem

libuclibc-compat.so exported stat/mmap which overrode musl's implementations process-wide, causing segfaults. musl expects 64-bit off_t for mmap but the shim's version takes uint32_t — when musl's own internal code called mmap, it hit the wrong implementation.

Confirmed crash: majestic segfaults at hisi_free_mem_ex (MMZ memory allocation via mmap) on hi3516cv100 nightly build.

Fix

Split into two libraries:

  • libuclibc-compat.so: only symbols MISSING from musl (__ctype_b, __assert, __fgetc_unlocked, memcpy_s, etc). Safe as shared lib — no conflict.
  • libuclibc-compat-static.a: stat/mmap wrappers. Must be statically linked into the executable, so overrides only affect vendor .so lookups through the executable's symbol scope, not musl internally.

BUNDLE_SDK updated to build and include both in the toolchain tarball.

Test plan

  • Rebuild cv100 toolchain, verify .so has no stat/mmap, .a has them
  • Build majestic linking -luclibc-compat (dynamic) + -luclibc-compat-static (static)
  • Hardware test on hi3516cv100 — no segfault at hisi_free_mem_ex

Ref: #1992

libuclibc-compat.so was exporting stat/mmap which overrode musl's
implementations for ALL code in the process, including musl's own
internal calls.  This caused segfaults because musl expects 64-bit
off_t but the shim's mmap takes uint32_t.

Split into two libraries:
- libuclibc-compat.so: only symbols MISSING from musl (__ctype_b,
  __assert, __fgetc_unlocked, memcpy_s, etc).  Safe as shared lib.
- libuclibc-compat-static.a: stat/mmap wrappers with uclibc-compatible
  ABI.  Must be statically linked into the executable so overrides
  only affect vendor .so lookups through the executable's symbol scope.

BUNDLE_SDK now builds and includes both in the toolchain tarball.

Fixes: segfault in majestic on hi3516cv100 at hisi_free_mem_ex (mmap)
Ref: #1992

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@widgetii
Copy link
Copy Markdown
Member Author

/rerun

@widgetii widgetii merged commit d1b2c87 into master Apr 13, 2026
88 of 176 checks passed
@widgetii widgetii deleted the fix-uclibc-compat-so-interpose branch April 14, 2026 05:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant