[{"id":35153,"web_url":"https://patchwork.libcamera.org/comment/35153/","msgid":"<20250725221614.GB27425@pendragon.ideasonboard.com>","date":"2025-07-25T22:16:14","subject":"Re: [PATCH v1] v4l2: v4l2_compat: Set dlsym fallback for\n\topenat64/mmap64 on musl","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Giacomo,\n\nThank you for the patch.\n\nOn Fri, Jul 25, 2025 at 07:14:39PM +0200, Giacomo Cappellini wrote:\n> Fix dlsym lookup for 'openat64' and 'mmap64' to fallback to 'openat' and\n> 'mmap' on musl, since musl does not provide the LFS64 variants and this\n> ensures compatibility.\n> \n> musl does not support the LFS64 API, and relocs-processing is relevant\n> only to glibc ABI compatibility.\n> \n> Signed-off-by: Giacomo Cappellini <giacomo.cappellini.87@gmail.com>\n> ---\n>  src/v4l2/v4l2_compat_manager.cpp | 4 ++++\n>  1 file changed, 4 insertions(+)\n> \n> diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp\n> index f53fb300..b970d86c 100644\n> --- a/src/v4l2/v4l2_compat_manager.cpp\n> +++ b/src/v4l2/v4l2_compat_manager.cpp\n> @@ -43,10 +43,14 @@ V4L2CompatManager::V4L2CompatManager()\n>  \t: cm_(nullptr)\n>  {\n>  \tget_symbol(fops_.openat, \"openat64\");\n> +\tif (!fops_.openat)\n> +\t\tget_symbol(fops_.openat, \"openat\");\n\nI'm slightly worried that a silent fallback may cause difficult to debug\nissues if for some reason the openat64 lookup fails on a non-musl libc.\nI can't really provide a good example though, but how about the\nfollowing implementation that detects the available symbols at build\ntime and looks up the appropriate ones ?\n\ndiff --git a/meson.build b/meson.build\nindex 4ed8017eba1a..66222d8a9d77 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -90,6 +90,10 @@ if cc.has_header_symbol('sys/mman.h', 'memfd_create', prefix : '#define _GNU_SOU\n     config_h.set('HAVE_MEMFD_CREATE', 1)\n endif\n \n+if cc.has_function('openat64')\n+    config_h.set('HAVE_OPENAT64', 1)\n+endif\n+\n ioctl_posix_test = '''\n #include <sys/ioctl.h>\n int ioctl (int, int, ...);\ndiff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp\nindex f53fb300dde8..01b4b1460967 100644\n--- a/src/v4l2/v4l2_compat_manager.cpp\n+++ b/src/v4l2/v4l2_compat_manager.cpp\n@@ -42,11 +42,16 @@ void get_symbol(T &func, const char *name)\n V4L2CompatManager::V4L2CompatManager()\n \t: cm_(nullptr)\n {\n+#if HAVE_OPENAT64\n \tget_symbol(fops_.openat, \"openat64\");\n+\tget_symbol(fops_.mmap, \"mmap64\");\n+#else\n+\tget_symbol(fops_.openat, \"openat\");\n+\tget_symbol(fops_.mmap, \"mmap\");\n+#endif\n \tget_symbol(fops_.dup, \"dup\");\n \tget_symbol(fops_.close, \"close\");\n \tget_symbol(fops_.ioctl, \"ioctl\");\n-\tget_symbol(fops_.mmap, \"mmap64\");\n \tget_symbol(fops_.munmap, \"munmap\");\n }\n \n\nCould you test this with musl ?\n\n>  \tget_symbol(fops_.dup, \"dup\");\n>  \tget_symbol(fops_.close, \"close\");\n>  \tget_symbol(fops_.ioctl, \"ioctl\");\n>  \tget_symbol(fops_.mmap, \"mmap64\");\n> +\tif (!fops_.mmap)\n> +\t\tget_symbol(fops_.mmap, \"mmap\");\n>  \tget_symbol(fops_.munmap, \"munmap\");\n>  }\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 2D4BCC3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 25 Jul 2025 22:16:25 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2A75A6910B;\n\tSat, 26 Jul 2025 00:16:24 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1B745614D4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 26 Jul 2025 00:16:22 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id A7A999CE;\n\tSat, 26 Jul 2025 00:15:41 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"bipBb3sU\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1753481741;\n\tbh=5aJ22VAwAB4dwlncvZhCpbmhFrudiopLoGzli8f1zSc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=bipBb3sUx+jkgYEEPdPePxG11tXCkj2xUxLWij6sMbpAxcDj5U2DahkDTni1exwwH\n\twLlUW3Fu0Bv4Cb9ZN8xYYhDlH6N7J8oJJGXDaFrp+p7KDEEbbXkV9PnVQaOOqbCP8j\n\tl0gzQaui8kE2TQMh+1SK/+9ZFiXEt3UkIlR8Wnao=","Date":"Sat, 26 Jul 2025 01:16:14 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Giacomo Cappellini <giacomo.cappellini.87@gmail.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v1] v4l2: v4l2_compat: Set dlsym fallback for\n\topenat64/mmap64 on musl","Message-ID":"<20250725221614.GB27425@pendragon.ideasonboard.com>","References":"<20250725171608.1610639-1-giacomo.cappellini.87@gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20250725171608.1610639-1-giacomo.cappellini.87@gmail.com>","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":35154,"web_url":"https://patchwork.libcamera.org/comment/35154/","msgid":"<CABXJd1nj5EyKpjkx4cfNbeYPWsQs+ZovdXJRF-orLcFRSLk=EQ@mail.gmail.com>","date":"2025-07-26T00:18:21","subject":"Re: [PATCH v1] v4l2: v4l2_compat: Set dlsym fallback for\n\topenat64/mmap64 on musl","submitter":{"id":231,"url":"https://patchwork.libcamera.org/api/people/231/","name":"Giacomo Cappellini","email":"giacomo.cappellini.87@gmail.com"},"content":"Hi Laurent,\n\nyour proposed compile time solution does work on musl.\nIf you consider the runtime solution harder to debug, let's continue\nwith compile time solution using your proposed changes.\n\nWhat follow is just my opinionated take on the runtime solution, just\nskip if not interested (I wrote this as a note before sending the\npatch).\n\n2 reasons to prefer runtime instead of the compile time solution:\n- LD_PRELOAD and dlsym based nature of V4L2CompatManager\n- a couple of null checks is an easier solution without risking\nanything subtly or seriously wrong\nAs *64 bit symbols are only relevant for glibc 32 bit targets when\n_FILE_OFFSET_BITS is set, this handles non-standard *64 symbols, which\nare often transparently remapped by _FILE_OFFSET_BITS=64.\nThe explicit runtime null checks prevent subtle issues, ensuring an\neasier solution for greater compatibility across diverse libc\nimplementations.\n\nBest Regards,\n\nG.C.\n\nIl giorno sab 26 lug 2025 alle ore 00:16 Laurent Pinchart\n<laurent.pinchart@ideasonboard.com> ha scritto:\n>\n> Hi Giacomo,\n>\n> Thank you for the patch.\n>\n> On Fri, Jul 25, 2025 at 07:14:39PM +0200, Giacomo Cappellini wrote:\n> > Fix dlsym lookup for 'openat64' and 'mmap64' to fallback to 'openat' and\n> > 'mmap' on musl, since musl does not provide the LFS64 variants and this\n> > ensures compatibility.\n> >\n> > musl does not support the LFS64 API, and relocs-processing is relevant\n> > only to glibc ABI compatibility.\n> >\n> > Signed-off-by: Giacomo Cappellini <giacomo.cappellini.87@gmail.com>\n> > ---\n> >  src/v4l2/v4l2_compat_manager.cpp | 4 ++++\n> >  1 file changed, 4 insertions(+)\n> >\n> > diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp\n> > index f53fb300..b970d86c 100644\n> > --- a/src/v4l2/v4l2_compat_manager.cpp\n> > +++ b/src/v4l2/v4l2_compat_manager.cpp\n> > @@ -43,10 +43,14 @@ V4L2CompatManager::V4L2CompatManager()\n> >       : cm_(nullptr)\n> >  {\n> >       get_symbol(fops_.openat, \"openat64\");\n> > +     if (!fops_.openat)\n> > +             get_symbol(fops_.openat, \"openat\");\n>\n> I'm slightly worried that a silent fallback may cause difficult to debug\n> issues if for some reason the openat64 lookup fails on a non-musl libc.\n> I can't really provide a good example though, but how about the\n> following implementation that detects the available symbols at build\n> time and looks up the appropriate ones ?\n>\n> diff --git a/meson.build b/meson.build\n> index 4ed8017eba1a..66222d8a9d77 100644\n> --- a/meson.build\n> +++ b/meson.build\n> @@ -90,6 +90,10 @@ if cc.has_header_symbol('sys/mman.h', 'memfd_create', prefix : '#define _GNU_SOU\n>      config_h.set('HAVE_MEMFD_CREATE', 1)\n>  endif\n>\n> +if cc.has_function('openat64')\n> +    config_h.set('HAVE_OPENAT64', 1)\n> +endif\n> +\n>  ioctl_posix_test = '''\n>  #include <sys/ioctl.h>\n>  int ioctl (int, int, ...);\n> diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp\n> index f53fb300dde8..01b4b1460967 100644\n> --- a/src/v4l2/v4l2_compat_manager.cpp\n> +++ b/src/v4l2/v4l2_compat_manager.cpp\n> @@ -42,11 +42,16 @@ void get_symbol(T &func, const char *name)\n>  V4L2CompatManager::V4L2CompatManager()\n>         : cm_(nullptr)\n>  {\n> +#if HAVE_OPENAT64\n>         get_symbol(fops_.openat, \"openat64\");\n> +       get_symbol(fops_.mmap, \"mmap64\");\n> +#else\n> +       get_symbol(fops_.openat, \"openat\");\n> +       get_symbol(fops_.mmap, \"mmap\");\n> +#endif\n>         get_symbol(fops_.dup, \"dup\");\n>         get_symbol(fops_.close, \"close\");\n>         get_symbol(fops_.ioctl, \"ioctl\");\n> -       get_symbol(fops_.mmap, \"mmap64\");\n>         get_symbol(fops_.munmap, \"munmap\");\n>  }\n>\n>\n> Could you test this with musl ?\n>\n> >       get_symbol(fops_.dup, \"dup\");\n> >       get_symbol(fops_.close, \"close\");\n> >       get_symbol(fops_.ioctl, \"ioctl\");\n> >       get_symbol(fops_.mmap, \"mmap64\");\n> > +     if (!fops_.mmap)\n> > +             get_symbol(fops_.mmap, \"mmap\");\n> >       get_symbol(fops_.munmap, \"munmap\");\n> >  }\n> >\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id B391DBDCC1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 26 Jul 2025 00:18:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6602569112;\n\tSat, 26 Jul 2025 02:18:38 +0200 (CEST)","from mail-il1-x12c.google.com (mail-il1-x12c.google.com\n\t[IPv6:2607:f8b0:4864:20::12c])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2AAF3614C3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 26 Jul 2025 02:18:34 +0200 (CEST)","by mail-il1-x12c.google.com with SMTP id\n\te9e14a558f8ab-3e3c1d106e2so6338535ab.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 25 Jul 2025 17:18:34 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"XPrsoMBa\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20230601; t=1753489113; x=1754093913;\n\tdarn=lists.libcamera.org; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=t1p5qrg/mwc1j/FtQ6BgcP1tFTRdVLZxE7E/Z2cSwxs=;\n\tb=XPrsoMBaMX1KAZSsAcVVUn69t324EestkTovcRuBbkxOSnyd3DFllxb+hevZIS653p\n\tdE0UpMMupCNbNTs1BrofrR1OHX2nf9TvCn4CHgz3uVuDMKXpCXaHmb243Ge65QwJgjQ/\n\t2LvPirD3zbMTDC73HoW16wyueEAP9byruw2ztK+IisvwNDra/y9/3GBsdr1caQXCfhCN\n\tCbY3wywj6jJYYGw7n/tmWSt1e8az7kTseiZrMkLZNIsJXXDhgLofDGWuSp/ADpF/JW26\n\t64P2n6AlSjI3g6Vbl6DrW4jXQistBnW+XclF7sldczoBb+89NKXr1vmnvPtpGuFay3XU\n\tntUw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1753489113; x=1754093913;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=t1p5qrg/mwc1j/FtQ6BgcP1tFTRdVLZxE7E/Z2cSwxs=;\n\tb=uMZiGOz9mP2f/7OnFqhBqOmMNMkclSLwF3CSRHfxCHy9vvNz8U4Y1Sc4J7EnSNI9fk\n\tdM38MkfPw1adzDlGq2HZIyvT4ildz8DpVOTypuHuQv/mhNku+AIucLH52T9CXcqiRc8Q\n\tn87NKQTq0HHDGJT0M3YAju90ybaiulaY6YcecZjxNwvr/G3rBeFcyqGVGNBDbVmUSJdI\n\tzp5YyORqEUy0MMHpUKa4T7j5wPFYPDtjsXS6MLy56KckFhTlrpaoZ0CyK7m8+o25WLBf\n\t3wwOMUDRJ07dMZaZTUyLGvyNwfOxvd1OKpYjkxQ8+k1jCFW4+2EmM1FRHkfnfFOPefZT\n\tp4BA==","X-Gm-Message-State":"AOJu0YwaQJnv1ImO8tquhh2um7li4O7vlWPlw3NUbi1g6vjQBw8y6IIW\n\tnf4j4Wkf6DqkERUH1kvdLhQOQL2YNjqllR/0b8RNk1T3YGB1NLpgiCPvxl5brSL1y1GaJAntGK4\n\t93I+FWMh8AgLogD8gRC0/2VBSLNd3hIGwcXCBgns=","X-Gm-Gg":"ASbGncuQ4mve6JZFxZw7NVcSLrDGjCS+NrkCKgYMMJqv8a5c8gH8X2rOCI/37zgi5k6\n\tIb/K8CUQD8nCn0SVGZquRU88Z0RqurNgyf2XaOcH4APQKfZY/LQpFPRypb7UMndFGulVao6NlmR\n\t5FICPrPetfe+KGWQxVBNw4rYzxOQJWOjjI5Ow/Xk1eCTsZSScrVmi+rTDzeJ/qP9hbo+TV8Z2PH\n\t0thB7fW","X-Google-Smtp-Source":"AGHT+IGI0x6HKu0fV9p7WBlOL53KWQ+gmm+Skbijre4mVkJ/dWiL3+WyY/zCMW2WujFGSO77slVgFCfECz0/W1WmP78=","X-Received":"by 2002:a05:6e02:1a2f:b0:3dd:f338:6361 with SMTP id\n\te9e14a558f8ab-3e3c525fd5emr58912715ab.6.1753489112562;\n\tFri, 25 Jul 2025 17:18:32 -0700 (PDT)","MIME-Version":"1.0","References":"<20250725171608.1610639-1-giacomo.cappellini.87@gmail.com>\n\t<20250725221614.GB27425@pendragon.ideasonboard.com>","In-Reply-To":"<20250725221614.GB27425@pendragon.ideasonboard.com>","From":"Giacomo Cappellini <giacomo.cappellini.87@gmail.com>","Date":"Sat, 26 Jul 2025 02:18:21 +0200","X-Gm-Features":"Ac12FXz3GJATtULXdMX37ynQXBZo8o3lSLJMPF67opbfJHeix3IgSLLLoKl7HEs","Message-ID":"<CABXJd1nj5EyKpjkx4cfNbeYPWsQs+ZovdXJRF-orLcFRSLk=EQ@mail.gmail.com>","Subject":"Re: [PATCH v1] v4l2: v4l2_compat: Set dlsym fallback for\n\topenat64/mmap64 on musl","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":35166,"web_url":"https://patchwork.libcamera.org/comment/35166/","msgid":"<20250727182825.GJ27425@pendragon.ideasonboard.com>","date":"2025-07-27T18:28:25","subject":"Re: [PATCH v1] v4l2: v4l2_compat: Set dlsym fallback for\n\topenat64/mmap64 on musl","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Giacomo,\n\nOn Sat, Jul 26, 2025 at 02:18:21AM +0200, Giacomo Cappellini wrote:\n> Hi Laurent,\n> \n> your proposed compile time solution does work on musl.\n> If you consider the runtime solution harder to debug, let's continue\n> with compile time solution using your proposed changes.\n> \n> What follow is just my opinionated take on the runtime solution, just\n> skip if not interested (I wrote this as a note before sending the\n> patch).\n\nI'm always (OK, nearly always :-)) interesting in opinions different\nthan mine. Thank you for sharing.\n\n> 2 reasons to prefer runtime instead of the compile time solution:\n> - LD_PRELOAD and dlsym based nature of V4L2CompatManager\n\nI'm not sure what you mean by this, how does that relate to runtime vs.\nbuild time decision ?\n\n> - a couple of null checks is an easier solution without risking\n> anything subtly or seriously wrong\n> As *64 bit symbols are only relevant for glibc 32 bit targets when\n> _FILE_OFFSET_BITS is set, this handles non-standard *64 symbols, which\n> are often transparently remapped by _FILE_OFFSET_BITS=64.\n\nI'm also not sure to follow you here. The 64 bit symbols exist on both\n32-bit and 64-bit targets. On 64-bit targets the mmap function is\nredirected to mmap64 transparently if _FILE_OFFSET_BITS is defined to\n64, but the symbol that we need is mmap64. What do you mean by\nnon-standard *64 symbols ?\n\n> The explicit runtime null checks prevent subtle issues, ensuring an\n> easier solution for greater compatibility across diverse libc\n> implementations.\n\nMy concern is that we need openat and mmap functions that match the\n64-bit prototypes. On glibc (and uclibc) those are the *64 symbols,\nwhile on musl they are the non-64 symbols. If we pick a symbol for a\n32-bit function which thinking it matches the 64-bit API, there will be\nissues difficult to debug.\n\n> Il giorno sab 26 lug 2025 alle ore 00:16 Laurent Pinchart ha scritto:\n> > On Fri, Jul 25, 2025 at 07:14:39PM +0200, Giacomo Cappellini wrote:\n> > > Fix dlsym lookup for 'openat64' and 'mmap64' to fallback to 'openat' and\n> > > 'mmap' on musl, since musl does not provide the LFS64 variants and this\n> > > ensures compatibility.\n> > >\n> > > musl does not support the LFS64 API, and relocs-processing is relevant\n> > > only to glibc ABI compatibility.\n> > >\n> > > Signed-off-by: Giacomo Cappellini <giacomo.cappellini.87@gmail.com>\n> > > ---\n> > >  src/v4l2/v4l2_compat_manager.cpp | 4 ++++\n> > >  1 file changed, 4 insertions(+)\n> > >\n> > > diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp\n> > > index f53fb300..b970d86c 100644\n> > > --- a/src/v4l2/v4l2_compat_manager.cpp\n> > > +++ b/src/v4l2/v4l2_compat_manager.cpp\n> > > @@ -43,10 +43,14 @@ V4L2CompatManager::V4L2CompatManager()\n> > >       : cm_(nullptr)\n> > >  {\n> > >       get_symbol(fops_.openat, \"openat64\");\n> > > +     if (!fops_.openat)\n> > > +             get_symbol(fops_.openat, \"openat\");\n> >\n> > I'm slightly worried that a silent fallback may cause difficult to debug\n> > issues if for some reason the openat64 lookup fails on a non-musl libc.\n> > I can't really provide a good example though, but how about the\n> > following implementation that detects the available symbols at build\n> > time and looks up the appropriate ones ?\n> >\n> > diff --git a/meson.build b/meson.build\n> > index 4ed8017eba1a..66222d8a9d77 100644\n> > --- a/meson.build\n> > +++ b/meson.build\n> > @@ -90,6 +90,10 @@ if cc.has_header_symbol('sys/mman.h', 'memfd_create', prefix : '#define _GNU_SOU\n> >      config_h.set('HAVE_MEMFD_CREATE', 1)\n> >  endif\n> >\n> > +if cc.has_function('openat64')\n> > +    config_h.set('HAVE_OPENAT64', 1)\n> > +endif\n> > +\n> >  ioctl_posix_test = '''\n> >  #include <sys/ioctl.h>\n> >  int ioctl (int, int, ...);\n> > diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp\n> > index f53fb300dde8..01b4b1460967 100644\n> > --- a/src/v4l2/v4l2_compat_manager.cpp\n> > +++ b/src/v4l2/v4l2_compat_manager.cpp\n> > @@ -42,11 +42,16 @@ void get_symbol(T &func, const char *name)\n> >  V4L2CompatManager::V4L2CompatManager()\n> >         : cm_(nullptr)\n> >  {\n> > +#if HAVE_OPENAT64\n> >         get_symbol(fops_.openat, \"openat64\");\n> > +       get_symbol(fops_.mmap, \"mmap64\");\n> > +#else\n> > +       get_symbol(fops_.openat, \"openat\");\n> > +       get_symbol(fops_.mmap, \"mmap\");\n> > +#endif\n> >         get_symbol(fops_.dup, \"dup\");\n> >         get_symbol(fops_.close, \"close\");\n> >         get_symbol(fops_.ioctl, \"ioctl\");\n> > -       get_symbol(fops_.mmap, \"mmap64\");\n> >         get_symbol(fops_.munmap, \"munmap\");\n> >  }\n> >\n> >\n> > Could you test this with musl ?\n> >\n> > >       get_symbol(fops_.dup, \"dup\");\n> > >       get_symbol(fops_.close, \"close\");\n> > >       get_symbol(fops_.ioctl, \"ioctl\");\n> > >       get_symbol(fops_.mmap, \"mmap64\");\n> > > +     if (!fops_.mmap)\n> > > +             get_symbol(fops_.mmap, \"mmap\");\n> > >       get_symbol(fops_.munmap, \"munmap\");\n> > >  }\n> > >","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id BEB83C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 27 Jul 2025 18:28:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D12A669080;\n\tSun, 27 Jul 2025 20:28:37 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D65BD69080\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 27 Jul 2025 20:28:32 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 3F2FC55A;\n\tSun, 27 Jul 2025 20:27:51 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"MKUy9p/p\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1753640871;\n\tbh=2516nL09ibsjkpQJS4X2mejGkNUwYmVTrlviqrKdVZA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=MKUy9p/p5AvXw8Sq5stCPBce0+WrCjwOogzYPeItehbAIWJRhUtzOkJO71kM4nzO6\n\ttcY3MbJY+yFlp3nzLW8vlamFH/1f8WYjDlY+puDc79gLmu7IZQeJmAGaMuhJPzOcxv\n\tDU2GcpGQ/AhnVVmGIbAw4y5zaTV4N/F+Gc+gDeC0=","Date":"Sun, 27 Jul 2025 21:28:25 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Giacomo Cappellini <giacomo.cappellini.87@gmail.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v1] v4l2: v4l2_compat: Set dlsym fallback for\n\topenat64/mmap64 on musl","Message-ID":"<20250727182825.GJ27425@pendragon.ideasonboard.com>","References":"<20250725171608.1610639-1-giacomo.cappellini.87@gmail.com>\n\t<20250725221614.GB27425@pendragon.ideasonboard.com>\n\t<CABXJd1nj5EyKpjkx4cfNbeYPWsQs+ZovdXJRF-orLcFRSLk=EQ@mail.gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<CABXJd1nj5EyKpjkx4cfNbeYPWsQs+ZovdXJRF-orLcFRSLk=EQ@mail.gmail.com>","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]