From: "Alex Bennée" <alex.bennee@linaro.org>
To: Laurent Vivier <laurent@vivier.eu>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Cornelia Huck" <cohuck@redhat.com>,
"Riku Voipio" <riku.voipio@iki.fi>,
qemu-devel@nongnu.org,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Aleksandar Markovic" <aleksandar.m.mail@gmail.com>
Subject: Re: [Qemu-devel] [PATCH] linux-user: fix __NR_semtimedop undeclared error
Date: Fri, 24 May 2019 08:29:21 +0100 [thread overview]
Message-ID: <87ef4o1fam.fsf@zen.linaroharston> (raw)
In-Reply-To: <20190523175413.14448-1-laurent@vivier.eu>
Laurent Vivier <laurent@vivier.eu> writes:
> In current code, __NR_msgrcv and__NR_semtimedop are supposed to be
> defined if __NR_msgsnd is defined.
>
> But linux headers 5.2-rc1 for MIPS define __NR_msgsnd without defining
> __NR_semtimedop and it breaks the QEMU build.
>
> __NR_semtimedop is defined in asm-mips/unistd_n64.h and asm-mips/unistd_n32.h
> but not in asm-mips/unistd_o32.h.
>
> Commit d9cb4336159a ("linux headers: update against Linux 5.2-rc1") has
> updated asm-mips/unistd_o32.h and added __NR_msgsnd but not __NR_semtimedop.
> It introduces __NR_semtimedop_time64 instead.
>
> This patch fixes the problem by checking for each __NR_XXX symbol
> before defining the corresponding syscall.
>
> Fixes: d9cb4336159a ("linux headers: update against Linux 5.2-rc1")
> Reported-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> linux-user/syscall.c | 24 ++++++++++++++++--------
> 1 file changed, 16 insertions(+), 8 deletions(-)
>
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index e311fcda0517..d316de25c9f2 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -761,14 +761,7 @@ safe_syscall2(int, nanosleep, const struct timespec *, req,
> safe_syscall4(int, clock_nanosleep, const clockid_t, clock, int, flags,
> const struct timespec *, req, struct timespec *, rem)
> #endif
> -#ifdef __NR_msgsnd
> -safe_syscall4(int, msgsnd, int, msgid, const void *, msgp, size_t, sz,
> - int, flags)
> -safe_syscall5(int, msgrcv, int, msgid, void *, msgp, size_t, sz,
> - long, msgtype, int, flags)
> -safe_syscall4(int, semtimedop, int, semid, struct sembuf *, tsops,
> - unsigned, nsops, const struct timespec *, timeout)
> -#else
> +#if !defined(__NR_msgsnd) || !defined(__NR_msgrcv) || !defined(__NR_semtimedop)
> /* This host kernel architecture uses a single ipc syscall; fake up
> * wrappers for the sub-operations to hide this implementation detail.
> * Annoyingly we can't include linux/ipc.h to get the constant definitions
> @@ -783,14 +776,29 @@ safe_syscall4(int, semtimedop, int, semid, struct sembuf *, tsops,
>
> safe_syscall6(int, ipc, int, call, long, first, long, second, long, third,
> void *, ptr, long, fifth)
> +#endif
> +#ifdef __NR_msgsnd
> +safe_syscall4(int, msgsnd, int, msgid, const void *, msgp, size_t, sz,
> + int, flags)
> +#else
> static int safe_msgsnd(int msgid, const void *msgp, size_t sz, int flags)
> {
> return safe_ipc(Q_IPCCALL(0, Q_MSGSND), msgid, sz, flags, (void *)msgp, 0);
> }
> +#endif
> +#ifdef __NR_msgrcv
> +safe_syscall5(int, msgrcv, int, msgid, void *, msgp, size_t, sz,
> + long, msgtype, int, flags)
> +#else
> static int safe_msgrcv(int msgid, void *msgp, size_t sz, long type, int flags)
> {
> return safe_ipc(Q_IPCCALL(1, Q_MSGRCV), msgid, sz, flags, msgp, type);
> }
> +#endif
> +#ifdef __NR_semtimedop
> +safe_syscall4(int, semtimedop, int, semid, struct sembuf *, tsops,
> + unsigned, nsops, const struct timespec *, timeout)
> +#else
> static int safe_semtimedop(int semid, struct sembuf *tsops, unsigned nsops,
> const struct timespec *timeout)
> {
--
Alex Bennée
next prev parent reply other threads:[~2019-05-24 7:30 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-23 17:54 [Qemu-devel] [PATCH] linux-user: fix __NR_semtimedop undeclared error Laurent Vivier
2019-05-23 18:29 ` Philippe Mathieu-Daudé
2019-05-23 18:34 ` Philippe Mathieu-Daudé
2019-05-24 7:12 ` Cornelia Huck
2019-05-24 7:29 ` Alex Bennée [this message]
2019-05-26 17:39 ` Aleksandar Markovic
2019-05-28 16:25 ` Laurent Vivier
2019-05-28 18:17 ` Aleksandar Markovic
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ef4o1fam.fsf@zen.linaroharston \
--to=alex.bennee@linaro.org \
--cc=aleksandar.m.mail@gmail.com \
--cc=cohuck@redhat.com \
--cc=laurent@vivier.eu \
--cc=peter.maydell@linaro.org \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.