mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
sys-libs/musl: Fix riscv32 syscall headers
Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
This commit is contained in:
48
sys-libs/musl/files/musl-1.2.6-riscv32-syscalls.patch
Normal file
48
sys-libs/musl/files/musl-1.2.6-riscv32-syscalls.patch
Normal file
@@ -0,0 +1,48 @@
|
||||
From b306b16af15c89a04d8e0c55cac2dadbeb39c083 Mon Sep 17 00:00:00 2001
|
||||
From: Rich Felker <dalias@aerifal.cx>
|
||||
Date: Thu, 18 Jun 2026 11:33:50 -0400
|
||||
Subject: [PATCH] riscv32: fix missing and extraneous items in syscall table
|
||||
|
||||
nanosleep is a time32 syscall which riscv32 lacks by being natively
|
||||
time64. the erroneous macro being present did not break anything libc
|
||||
internal, because SYS_nanosleep is never used in the natively-time64
|
||||
path, but i could in theory cause applications to wrongly attempt to
|
||||
use it if they do their own syscalls. it has wrongly been there since
|
||||
the riscv32 port was added.
|
||||
|
||||
close_range and quotactl_fd were somehow omitted in commit
|
||||
8432d16a4664433b2f9a263aee0d7d829129a7bc.
|
||||
---
|
||||
arch/riscv32/bits/syscall.h.in | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/riscv32/bits/syscall.h.in b/arch/riscv32/bits/syscall.h.in
|
||||
index dcd0e9f7..7ce5083f 100644
|
||||
--- a/arch/riscv32/bits/syscall.h.in
|
||||
+++ b/arch/riscv32/bits/syscall.h.in
|
||||
@@ -89,7 +89,6 @@
|
||||
#define __NR_unshare 97
|
||||
#define __NR_set_robust_list 99
|
||||
#define __NR_get_robust_list 100
|
||||
-#define __NR_nanosleep 101
|
||||
#define __NR_getitimer 102
|
||||
#define __NR_setitimer 103
|
||||
#define __NR_kexec_load 104
|
||||
@@ -280,12 +279,14 @@
|
||||
#define __NR_fspick 433
|
||||
#define __NR_pidfd_open 434
|
||||
#define __NR_clone3 435
|
||||
+#define __NR_close_range 436
|
||||
#define __NR_openat2 437
|
||||
#define __NR_pidfd_getfd 438
|
||||
#define __NR_faccessat2 439
|
||||
#define __NR_process_madvise 440
|
||||
#define __NR_epoll_pwait2 441
|
||||
#define __NR_mount_setattr 442
|
||||
+#define __NR_quotactl_fd 443
|
||||
#define __NR_landlock_create_ruleset 444
|
||||
#define __NR_landlock_add_rule 445
|
||||
#define __NR_landlock_restrict_self 446
|
||||
--
|
||||
2.53.0
|
||||
|
||||
262
sys-libs/musl/musl-1.2.6-r2.ebuild
Normal file
262
sys-libs/musl/musl-1.2.6-r2.ebuild
Normal file
@@ -0,0 +1,262 @@
|
||||
# Copyright 1999-2026 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit crossdev flag-o-matic toolchain-funcs prefix
|
||||
|
||||
DESCRIPTION="Light, fast and, simple C library focused on standards-conformance and safety"
|
||||
HOMEPAGE="https://musl.libc.org"
|
||||
|
||||
if [[ ${PV} == 9999 ]] ; then
|
||||
EGIT_REPO_URI="https://git.musl-libc.org/git/musl"
|
||||
inherit git-r3
|
||||
else
|
||||
VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/musl.asc
|
||||
inherit verify-sig
|
||||
|
||||
SRC_URI="
|
||||
https://musl.libc.org/releases/${P}.tar.gz
|
||||
https://distfiles.gentoo.org/pub/proj/musl/${P}-patches.tar.xz
|
||||
verify-sig? ( https://musl.libc.org/releases/${P}.tar.gz.asc )
|
||||
"
|
||||
KEYWORDS="-* ~riscv"
|
||||
|
||||
BDEPEND="verify-sig? ( sec-keys/openpgp-keys-musl )"
|
||||
fi
|
||||
|
||||
GETENT_COMMIT="93a08815f8598db442d8b766b463d0150ed8e2ab"
|
||||
GETENT_FILE="musl-getent-${GETENT_COMMIT}.c"
|
||||
SRC_URI+="
|
||||
https://dev.gentoo.org/~blueness/musl-misc/getconf.c
|
||||
https://gitlab.alpinelinux.org/alpine/aports/-/raw/${GETENT_COMMIT}/main/musl/getent.c -> ${GETENT_FILE}
|
||||
https://dev.gentoo.org/~blueness/musl-misc/iconv.c
|
||||
"
|
||||
|
||||
LICENSE="MIT LGPL-2 GPL-2"
|
||||
SLOT="0"
|
||||
IUSE="crypt headers-only split-usr"
|
||||
|
||||
QA_SONAME="usr/lib/libc.so"
|
||||
QA_DT_NEEDED="usr/lib/libc.so"
|
||||
# bug #830213
|
||||
QA_PRESTRIPPED="usr/lib/crtn.o"
|
||||
|
||||
# We want crypt on by default for this as sys-libs/libxcrypt isn't (yet?)
|
||||
# built as part as crossdev. Also, elide the blockers when in cross-*,
|
||||
# as it doesn't make sense to block the normal CBUILD libxcrypt at all
|
||||
# there when we're installing into /usr/${CHOST} anyway.
|
||||
if is_crosspkg ; then
|
||||
IUSE="${IUSE/crypt/+crypt}"
|
||||
else
|
||||
RDEPEND="crypt? ( !sys-libs/libxcrypt[system] )"
|
||||
PDEPEND="!crypt? ( sys-libs/libxcrypt[system] )"
|
||||
fi
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${PN}-getifaddrs-qemu-workaround.patch
|
||||
"${WORKDIR}"/${P}-patches
|
||||
"${FILESDIR}"/${P}-riscv32-syscalls.patch
|
||||
)
|
||||
|
||||
just_headers() {
|
||||
use headers-only && target_is_not_host
|
||||
}
|
||||
|
||||
pkg_setup() {
|
||||
if [[ ${CTARGET} == ${CHOST} ]] ; then
|
||||
case ${CHOST} in
|
||||
*-musl*) ;;
|
||||
*) die "Use sys-devel/crossdev to build a musl toolchain" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Fix for bug #667126, copied from glibc ebuild:
|
||||
# make sure host make.conf doesn't pollute us
|
||||
if target_is_not_host || tc-is-cross-compiler ; then
|
||||
CHOST=${CTARGET} strip-unsupported-flags
|
||||
fi
|
||||
}
|
||||
|
||||
src_unpack() {
|
||||
if [[ ${PV} == 9999 ]] ; then
|
||||
git-r3_src_unpack
|
||||
elif use verify-sig ; then
|
||||
# We only verify the release; not the additional (fixed, safe) files
|
||||
# we download.
|
||||
# (Seem to get IPC error on verifying in cross?)
|
||||
! target_is_not_host && verify-sig_verify_detached "${DISTDIR}"/${P}.tar.gz{,.asc}
|
||||
fi
|
||||
|
||||
default
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
mkdir "${WORKDIR}"/misc || die
|
||||
cp "${DISTDIR}"/getconf.c "${WORKDIR}"/misc/getconf.c || die
|
||||
cp "${DISTDIR}/${GETENT_FILE}" "${WORKDIR}"/misc/getent.c || die
|
||||
cp "${DISTDIR}"/iconv.c "${WORKDIR}"/misc/iconv.c || die
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
strip-flags && filter-lto # Prevent issues caused by aggressive optimizations & bug #877343
|
||||
tc-getCC ${CTARGET}
|
||||
|
||||
just_headers && export CC=true
|
||||
|
||||
local sysroot
|
||||
target_is_not_host && sysroot=/usr/${CTARGET}
|
||||
./configure \
|
||||
--target=${CTARGET} \
|
||||
--prefix="${EPREFIX}${sysroot}/usr" \
|
||||
--syslibdir="${EPREFIX}${sysroot}/lib" \
|
||||
--disable-gcc-wrapper || die
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
emake obj/include/bits/alltypes.h
|
||||
just_headers && return 0
|
||||
|
||||
emake
|
||||
if ! is_crosspkg ; then
|
||||
emake -C "${T}" getconf getent iconv \
|
||||
CC="$(tc-getCC)" \
|
||||
CFLAGS="${CFLAGS}" \
|
||||
CPPFLAGS="${CPPFLAGS}" \
|
||||
LDFLAGS="${LDFLAGS}" \
|
||||
VPATH="${WORKDIR}/misc"
|
||||
fi
|
||||
|
||||
$(tc-getCC) ${CPPFLAGS} ${CFLAGS} -c -o libssp_nonshared.o "${FILESDIR}"/stack_chk_fail_local.c || die
|
||||
$(tc-getAR) -rcs libssp_nonshared.a libssp_nonshared.o || die
|
||||
}
|
||||
|
||||
src_install() {
|
||||
local target="install"
|
||||
just_headers && target="install-headers"
|
||||
emake DESTDIR="${D}" ${target}
|
||||
just_headers && return 0
|
||||
|
||||
# musl provides ldd via a sym link to its ld.so
|
||||
local sysroot=
|
||||
target_is_not_host && sysroot=/usr/${CTARGET}
|
||||
local ldso=$(basename "${ED}${sysroot}"/lib/ld-musl-*)
|
||||
dosym -r "${sysroot}/lib/${ldso}" "${sysroot}/usr/bin/ldd"
|
||||
|
||||
if ! use crypt ; then
|
||||
# Allow sys-libs/libxcrypt[system] to provide it instead
|
||||
rm "${ED}${sysroot}/usr/include/crypt.h" || die
|
||||
rm "${ED}${sysroot}"/usr/*/libcrypt.a || die
|
||||
fi
|
||||
|
||||
if ! is_crosspkg ; then
|
||||
# Fish out of config:
|
||||
# ARCH = ...
|
||||
# SUBARCH = ...
|
||||
# and print $(ARCH)$(SUBARCH).
|
||||
local arch=$(awk '{ k[$1] = $3 } END { printf("%s%s", k["ARCH"], k["SUBARCH"]); }' config.mak)
|
||||
|
||||
# The musl build system seems to create a symlink:
|
||||
# ${D}/lib/ld-musl-${arch}.so.1 -> /usr/lib/libc.so.1 (absolute)
|
||||
# During cross or within prefix, there's no guarantee that the host is
|
||||
# using musl so that file may not exist. Use a relative symlink within
|
||||
# ${D} instead.
|
||||
rm "${ED}"/lib/ld-musl-${arch}.so.1 || die
|
||||
if use split-usr; then
|
||||
dosym ../usr/lib/libc.so /lib/ld-musl-${arch}.so.1
|
||||
# If it's still a dead symlink, OK, we really do need to abort.
|
||||
[[ -e "${ED}"/lib/ld-musl-${arch}.so.1 ]] || die
|
||||
else
|
||||
dosym libc.so /usr/lib/ld-musl-${arch}.so.1
|
||||
[[ -e "${ED}"/usr/lib/ld-musl-${arch}.so.1 ]] || die
|
||||
fi
|
||||
|
||||
cp "${FILESDIR}"/ldconfig.in-r3 "${T}"/ldconfig.in || die
|
||||
sed -e "s|@@ARCH@@|${arch}|" "${T}"/ldconfig.in > "${T}"/ldconfig || die
|
||||
eprefixify "${T}"/ldconfig
|
||||
into /
|
||||
dosbin "${T}"/ldconfig
|
||||
into /usr
|
||||
dobin "${T}"/getconf
|
||||
dobin "${T}"/getent
|
||||
dobin "${T}"/iconv
|
||||
newenvd - "00musl" <<-EOF
|
||||
# 00musl autogenerated by sys-libs/musl ebuild; DO NOT EDIT.
|
||||
LDPATH="include ld.so.conf.d/*.conf"
|
||||
EOF
|
||||
fi
|
||||
|
||||
if target_is_not_host ; then
|
||||
into /usr/${CTARGET}
|
||||
dolib.a libssp_nonshared.a
|
||||
else
|
||||
dolib.a libssp_nonshared.a
|
||||
fi
|
||||
}
|
||||
|
||||
# Simple test to make sure our new musl isn't completely broken.
|
||||
# Make sure we don't test with statically built binaries since
|
||||
# they will fail. Also, skip if this musl is a cross compiler.
|
||||
#
|
||||
# If coreutils is built with USE=multicall, some of these files
|
||||
# will just be wrapper scripts, not actual ELFs we can test.
|
||||
musl_sanity_check() {
|
||||
cd / #228809
|
||||
|
||||
# We enter ${ED} so to avoid trouble if the path contains
|
||||
# special characters; for instance if the path contains the
|
||||
# colon character (:), then the linker will try to split it
|
||||
# and look for the libraries in an unexpected place. This can
|
||||
# lead to unsafe code execution if the generated prefix is
|
||||
# within a world-writable directory.
|
||||
# (e.g. /var/tmp/portage:${HOSTNAME})
|
||||
pushd "${ED}"/usr/$(get_libdir) >/dev/null
|
||||
|
||||
# first let's find the actual dynamic linker here
|
||||
# symlinks may point to the wrong abi
|
||||
local newldso=$(find . -maxdepth 1 -name 'libc.so' -type f -print -quit)
|
||||
|
||||
einfo Last-minute run tests with ${newldso} in /usr/$(get_libdir) ...
|
||||
|
||||
local x striptest
|
||||
for x in cal date env free ls true uname uptime ; do
|
||||
x=$(type -p ${x})
|
||||
[[ -z ${x} || ${x} != ${EPREFIX}/* ]] && continue
|
||||
striptest=$(LC_ALL="C" file -L ${x} 2>/dev/null) || continue
|
||||
case ${striptest} in
|
||||
*"statically linked"*) continue;;
|
||||
*"static-pie linked"*) continue;;
|
||||
*"ASCII text"*) continue;;
|
||||
esac
|
||||
# We need to clear the locale settings as the upgrade might want
|
||||
# incompatible locale data. This test is not for verifying that.
|
||||
LC_ALL=C \
|
||||
${newldso} --library-path . ${x} > /dev/null \
|
||||
|| die "simple run test (${x}) failed"
|
||||
done
|
||||
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
# Nothing to do if just installing headers
|
||||
just_headers && return
|
||||
|
||||
# Prepare /etc/ld.so.conf.d/ for files
|
||||
mkdir -p "${EROOT}"/etc/ld.so.conf.d
|
||||
|
||||
[[ -n ${ROOT} ]] && return 0
|
||||
[[ -d ${ED}/usr/$(get_libdir) ]] || return 0
|
||||
target_is_not_host && return 0
|
||||
musl_sanity_check
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
target_is_not_host && return 0
|
||||
|
||||
[[ -n "${ROOT}" ]] && return 0
|
||||
|
||||
ldconfig || die
|
||||
}
|
||||
Reference in New Issue
Block a user