123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- From 5ed3b4ded6cf3e4de6fc8c8739b84231b0285b0e Mon Sep 17 00:00:00 2001
- From: Dario Binacchi <dario.binacchi@amarulasolutions.com>
- Date: Fri, 5 May 2023 08:57:45 +0200
- Subject: [PATCH] Don't compile programs using fork() on MMU-less systems
- Systems that lack a MMU cannot use fork() to create the child process.
- The patch does not compile the affected programs on MMU-less systems.
- Co-developed-by: Marc Kleine-Budde <mkl@pengutronix.de>
- Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
- Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
- Upstream: https://github.com/linux-can/can-utils/commit/5ed3b4ded6cf3e4de6fc8c8739b84231b0285b0e
- ---
- CMakeLists.txt | 15 ++++++++++++---
- GNUmakefile.am | 10 +++++++---
- Makefile | 16 +++++++++++++---
- check_cc.sh | 16 ++++++++++++++++
- configure.ac | 2 ++
- fork_test.c | 27 +++++++++++++++++++++++++++
- 6 files changed, 77 insertions(+), 9 deletions(-)
- create mode 100755 check_cc.sh
- create mode 100644 fork_test.c
- diff --git a/CMakeLists.txt b/CMakeLists.txt
- index 09ccd805de66..aee8ff7fca02 100644
- --- a/CMakeLists.txt
- +++ b/CMakeLists.txt
- @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.3)
-
- project(can-utils LANGUAGES C)
-
- +include (CheckFunctionExists)
- include (CheckSymbolExists)
- include (GNUInstallDirs)
-
- @@ -25,12 +26,13 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSCM_TXTIME=SO_TXTIME")
- include_directories (.)
- include_directories (./include)
-
- +check_function_exists(fork HAVE_FORK)
- +
- set(PROGRAMS_CANLIB
- asc2log
- canbusload
- candump
- cangen
- - canlogserver
- canplayer
- cansend
- cansequence
- @@ -39,6 +41,10 @@ set(PROGRAMS_CANLIB
- slcanpty
- )
-
- +if(HAVE_FORK)
- + list(APPEND PROGRAMS_CANLIB canlogserver)
- +endif()
- +
- set(PROGRAMS_J1939
- j1939acd
- j1939cat
- @@ -49,7 +55,6 @@ set(PROGRAMS_J1939
-
- set(PROGRAMS
- ${PROGRAMS_CANLIB}
- - bcmserver
- canfdtest
- cangw
- cansniffer
- @@ -57,13 +62,17 @@ set(PROGRAMS
- isotpperf
- isotprecv
- isotpsend
- - isotpserver
- isotpsniffer
- isotptun
- slcan_attach
- slcand
- )
-
- +if(HAVE_FORK)
- + list(APPEND PROGRAMS bcmserver)
- + list(APPEND PROGRAMS isotpserver)
- +endif()
- +
- add_executable(can-calc-bit-timing
- calc-bit-timing/can-calc-bit-timing.c
- )
- diff --git a/GNUmakefile.am b/GNUmakefile.am
- index 5a7ad75f682e..e818754db3a4 100644
- --- a/GNUmakefile.am
- +++ b/GNUmakefile.am
- @@ -75,14 +75,12 @@ EXTRA_DIST += \
-
- bin_PROGRAMS = \
- asc2log \
- - bcmserver \
- can-calc-bit-timing \
- canbusload \
- candump \
- canfdtest \
- cangen \
- cangw \
- - canlogserver \
- canplayer \
- cansend \
- cansequence \
- @@ -91,7 +89,6 @@ bin_PROGRAMS = \
- isotpperf \
- isotprecv \
- isotpsend \
- - isotpserver \
- isotpsniffer \
- isotptun \
- j1939acd \
- @@ -106,6 +103,13 @@ bin_PROGRAMS = \
- slcanpty \
- testj1939
-
- +if HAVE_FORK
- +bin_PROGRAMS += \
- + bcmserver \
- + canlogserver \
- + isotpserver
- +endif
- +
- j1939acd_LDADD = libj1939.la
- j1939cat_LDADD = libj1939.la
- j1939spy_LDADD = libj1939.la
- diff --git a/Makefile b/Makefile
- index 29eef997b290..a26ff3d75e67 100644
- --- a/Makefile
- +++ b/Makefile
- @@ -45,6 +45,8 @@ MAKEFLAGS := -k
-
- CFLAGS := -O2 -Wall -Wno-parentheses
-
- +HAVE_FORK := $(shell ./check_cc.sh "$(CC)" fork_test.c)
- +
- CPPFLAGS += \
- -I. \
- -Iinclude \
- @@ -66,10 +68,14 @@ PROGRAMS_ISOTP := \
- isotpperf \
- isotprecv \
- isotpsend \
- - isotpserver \
- isotpsniffer \
- isotptun
-
- +ifeq ($(HAVE_FORK),1)
- +PROGRAMS_ISOTP += \
- + isotpserver
- +endif
- +
- PROGRAMS_J1939 := \
- j1939acd \
- j1939cat \
- @@ -87,14 +93,12 @@ PROGRAMS := \
- $(PROGRAMS_J1939) \
- $(PROGRAMS_SLCAN) \
- asc2log \
- - bcmserver \
- can-calc-bit-timing \
- canbusload \
- candump \
- canfdtest \
- cangen \
- cansequence \
- - canlogserver \
- canplayer \
- cansend \
- cansniffer \
- @@ -103,6 +107,12 @@ PROGRAMS := \
- mcp251xfd-dump \
- slcanpty
-
- +ifeq ($(HAVE_FORK),1)
- +PROGRAMS += \
- + canlogserver \
- + bcmserver
- +endif
- +
- all: $(PROGRAMS)
-
- clean:
- diff --git a/check_cc.sh b/check_cc.sh
- new file mode 100755
- index 000000000000..d85ad129da9d
- --- /dev/null
- +++ b/check_cc.sh
- @@ -0,0 +1,16 @@
- +#!/bin/sh
- +# SPDX-License-Identifier: GPL-2.0-only
- +# check_cc.sh - Helper to test userspace compilation support
- +# Copyright (c) 2015 Andrew Lutomirski
- +
- +CC="$1"
- +TESTPROG="$2"
- +shift 2
- +
- +if [ -n "$CC" ] && $CC -o /dev/null "$TESTPROG" -O0 "$@"; then
- + echo 1
- +else
- + echo 0
- +fi
- +
- +exit 0
- diff --git a/configure.ac b/configure.ac
- index 5493c9c7ccdf..9bf62a5c6409 100644
- --- a/configure.ac
- +++ b/configure.ac
- @@ -76,6 +76,8 @@ AC_CHECK_FUNCS([ \
- strtoul \
- ])
-
- +AM_CONDITIONAL(HAVE_FORK, test "$ac_cv_func_fork_works" = "yes")
- +
- # glibc versions before 2.17 needs to link with -lrt for clock_nanosleep
- AC_SEARCH_LIBS([clock_nanosleep], [rt])
-
- diff --git a/fork_test.c b/fork_test.c
- new file mode 100644
- index 000000000000..036692392483
- --- /dev/null
- +++ b/fork_test.c
- @@ -0,0 +1,27 @@
- +/* SPDX-License-Identifier: GPL-2.0-only */
- +/*
- + * Copyright (C) 2023 Dario Binacchi <dario.binacchi@amarulasolutions.com>
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the version 2 of the GNU General Public License
- + * as published by the Free Software Foundation
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, see <http://www.gnu.org/licenses/>.
- + */
- +
- +#include <stdio.h>
- +#include <sys/types.h>
- +#include <unistd.h>
- +
- +int main(int argc, char **argv)
- +{
- + fork();
- +
- + return 0;
- +}
- --
- 2.32.0
|