mbox series

[0/6] musl: support multilib

Message ID 20261103231607.4021851-1-mark.yang@lge.com
Headers show
Series musl: support multilib | expand

Message

mark.yang Nov. 3, 2026, 11:16 p.m. UTC
From: "mark.yang" <mark.yang@lge.com>

This series makes musl work with multilib ([YOCTO #13122]) and
reverts the multilib guard in musl.inc (4da308d37a).

What it fixes:
- gcc wrote the 64-bit musl loader as /usr/lib64/ld-musl-*.so.1, but
  musl installs it in nonarch_base_libdir. 64-bit programs could not
  start, and meson's sanity check failed.
- The multilib header wrapper used bits/wordsize.h, which glibc has
  and musl does not, so oe_multilib_header did not support musl.
  On musl the wrapper now checks which of bits/alltypes-32.h and -64.h
  the sysroot has, and uses the pointer size when it has both.
- Both variants installed /usr/bin/ldd as a link to their own libc.so,
  and rpm rejected them as a file conflict. ldd is now a script in an
  ldd package, as in glibc. It runs the loader with the same ELF class
  as the file.

Tested on qemuarm64 + lib32 armv7ahf and qemux86-64 + lib32 x86, with
usrmerge:
- ipk: core-image-minimal with lib32 packages, and
  lib32-core-image-minimal, on both machines
- rpm: core-image-minimal with lib32 packages on qemuarm64
- ipk: core-image-minimal on qemuarm64 without multilib

In qemu, 64-bit and 32-bit programs ran side by side, and ldd picked
the right loader for each. I also ran the commands from the oeqa ldd
test by hand, and they passed in every image.

Still open: SWIG recipes that read wrapped headers need
-D__MHWORDSIZE. python3-m2crypto (meta-python) is the one I found. I
will send that fix to meta-python.

mark.yang (6):
  gcc: point the musl dynamic linker at nonarch_base_libdir
  musl: wrap the bits headers for multilib
  multilib_header_wrapper.h: support musl
  multilib_header: wrap musl headers for multilib builds
  musl: make ldd work with multilib
  Revert "musl: Show error when used with multilibs"

 meta/classes-recipe/cross-canadian.bbclass    |  1 +
 meta/classes-recipe/cross.bbclass             |  1 +
 meta/classes-recipe/crosssdk.bbclass          |  1 +
 meta/classes-recipe/multilib_header.bbclass   |  2 +-
 meta/recipes-core/musl/musl.inc               |  6 ---
 meta/recipes-core/musl/musl/ldd               | 18 +++++++++
 meta/recipes-core/musl/musl_git.bb            | 21 ++++++++--
 meta/recipes-devtools/gcc/gcc-common.inc      |  1 +
 .../gcc/gcc-configure-common.inc              |  2 +
 .../gcc/gcc-multilib-config.inc               | 20 ++++++----
 ...AMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch | 39 ++++++++++---------
 ...s-fix-v4bx-to-linker-to-support-EABI.patch |  2 +-
 scripts/multilib_header_wrapper.h             | 22 +++++++++--
 13 files changed, 95 insertions(+), 41 deletions(-)
 create mode 100644 meta/recipes-core/musl/musl/ldd