On Sat, Aug 19, 2023 at 9:10 AM Richard Henderson <
richard.hender...@linaro.org> wrote:

> On 8/19/23 02:47, Karim Taha wrote:
> > From: Kyle Evans <kev...@freebsd.org>
> >
> > Signed-off-by: Kyle Evans <kev...@freebsd.org>
> > Signed-off-by: Karim Taha <kariem.taha...@gmail.com>
> > ---
> >   bsd-user/freebsd/os-misc.h    | 52 +++++++++++++++++++++++++++++++++++
> >   bsd-user/freebsd/os-syscall.c | 13 +++++++++
> >   2 files changed, 65 insertions(+)
> >
> > diff --git a/bsd-user/freebsd/os-misc.h b/bsd-user/freebsd/os-misc.h
> > index 8436ccb2f7..993e4598f9 100644
> > --- a/bsd-user/freebsd/os-misc.h
> > +++ b/bsd-user/freebsd/os-misc.h
> > @@ -24,5 +24,57 @@
> >   #include <sys/random.h>
> >   #include <sched.h>
> >
> > +int shm_open2(const char *path, int flags, mode_t mode, int shmflags,
> > +    const char *);
> > +
> > +#if defined(__FreeBSD_version) && __FreeBSD_version >= 1300048
> > +/* shm_open2(2) */
> > +static inline abi_long do_freebsd_shm_open2(abi_ulong pathptr,
> abi_ulong flags,
> > +    abi_long mode, abi_ulong shmflags, abi_ulong nameptr)
> > +{
> > +    int ret;
> > +    void *uname, *upath;
> > +
> > +#ifdef SHM_ANON
>
> Why would SHM_ANON not be defined?  You've already restricted the function
> to freebsd13+
> (presumably so that shm_open2() is in libc.a).
>

Good catch Richard. It's like this in the bsd-user fork, but after talking
it over with Kyle, we're
sure that's due to a cut and past from shm_open when this was implemented.
We should change
it before we submit it upstream absolutely. It's always defined on FreeBSD
and that will make
this code simpler.

Warner


> > +#define SHM_PATH(p) (p) == SHM_ANON ? (p) : path(p)
> > +    if (pathptr == (uintptr_t)SHM_ANON) {
> > +        upath = SHM_ANON;
> > +    } else
> > +#else
> > +#define SHM_PATH(p) path(p)
> > +#endif
> > +    {
> > +        upath = lock_user_string(pathptr);
> > +        if (upath == NULL) {
> > +            return -TARGET_EFAULT;
> > +        }
> > +    }
> > +
> > +    uname = NULL;
> > +    if (nameptr != 0) {
> > +        uname = lock_user_string(nameptr);
> > +        if (uname == NULL) {
> > +            unlock_user(upath, pathptr, 0);
> > +            return -TARGET_EFAULT;
> > +        }
> > +    }
> > +    ret = get_errno(shm_open2(SHM_PATH(upath),
>
> There is no need for SHM_PATH because you've already handled the condition
> while setting
> upath above.
>
>
>
> r~
>

Reply via email to