From 3300fa568738c0dde6e0a5c389f8a084746a44a9 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Mon, 17 Feb 2020 03:53:22 -0600 Subject: Fix musl-cross-make nommu build (at least for sh2eb). --- scripts/mcm-buildall.sh | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) (limited to 'scripts') diff --git a/scripts/mcm-buildall.sh b/scripts/mcm-buildall.sh index 6e36c7c4..e82ce2d5 100755 --- a/scripts/mcm-buildall.sh +++ b/scripts/mcm-buildall.sh @@ -127,6 +127,94 @@ make_tuple() done } +# Packages detect nommu via the absence of fork(). Musl provides a broken fork() +# on nommu builds that always returns -ENOSYS at runtime. Rip it out. +# (Currently only for superh/jcore.) +fix_nommu() +{ + # Rich won't merge this + sed -i 's/--enable-fdpic$/& --enable-twoprocess/' litecross/Makefile + + PP=patches/musl-"$(sed -n 's/MUSL_VER[ \t]*=[ \t]*//p' Makefile)" + mkdir -p "$PP" && + cat > "$PP"/0001-nommu.patch << 'EOF' +--- a/include/features.h ++++ b/include/features.h +@@ -3,2 +3,4 @@ + ++#define __MUSL__ 1 ++ + #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) +--- a/src/legacy/daemon.c ++++ b/src/legacy/daemon.c +@@ -17,3 +17,3 @@ + +- switch(fork()) { ++ switch(vfork()) { + case 0: break; +@@ -25,3 +25,3 @@ + +- switch(fork()) { ++ switch(vfork()) { + case 0: break; +--- a/src/misc/forkpty.c ++++ b/src/misc/forkpty.c +@@ -8,2 +8,3 @@ + ++#ifndef __SH_FDPIC__ + int forkpty(int *pm, char *name, const struct termios *tio, const struct winsize *ws) +@@ -57,1 +58,2 @@ + } ++#endif +--- a/src/misc/wordexp.c ++++ b/src/misc/wordexp.c +@@ -25,2 +25,3 @@ + ++#ifndef __SH_FDPIC__ + static int do_wordexp(const char *s, wordexp_t *we, int flags) +@@ -177,2 +178,3 @@ + } ++#endif + +--- a/src/process/fork.c ++++ b/src/process/fork.c +@@ -7,2 +7,3 @@ + ++#ifndef __SH_FDPIC__ + static void dummy(int x) +@@ -37,1 +38,2 @@ + } ++#endif +--- a/Makefile ++++ b/Makefile +@@ -100,3 +100,3 @@ + cp $< $@ +- sed -n -e s/__NR_/SYS_/p < $< >> $@ ++ sed -e s/__NR_/SYS_/ < $< >> $@ + +--- a/arch/sh/bits/syscall.h.in ++++ b/arch/sh/bits/syscall.h.in +@@ -2,3 +2,5 @@ + #define __NR_exit 1 ++#ifndef __SH_FDPIC__ + #define __NR_fork 2 ++#endif + #define __NR_read 3 +EOF + + # I won't sign the FSF's copyright assignment + tee $(for i in patches/gcc-*; do echo $i/099-vfork.patch; done) > /dev/null << 'EOF' +--- gcc-8.3.0/fixincludes/procopen.c 2005-08-14 19:50:43.000000000 -0500 ++++ gcc-bak/fixincludes/procopen.c 2020-02-06 23:27:15.408071708 -0600 +@@ -116,3 +116,3 @@ + */ +- ch_id = fork (); ++ ch_id = vfork (); + switch (ch_id) +EOF +} + +fix_nommu || exit 1 mkdir -p "$OUTPUT"/log # Make bootstrap compiler (no $TYPE, dynamically linked against host libc) -- cgit v1.2.3