libargp package breaks getent utility

Christian Franke Christian.Franke@t-online.de
Mon Nov 10 13:20:18 GMT 2025


Jon Turney via Cygwin wrote:
> On 09/11/2025 16:02, Andrew Schulman via Cygwin wrote:
>>> A message box shown when running an affected program directly from
>>> cmd.exe reveals the problem: Entrypoint "argp_parse" is missing.
>>>
>>> $ objdump -p /bin/cygargp-0.dll | grep argp_parse
>>>          [  56] +base[  57]  0038 rpl_argp_parse
>>>
>>> Previous version:
>>>
>>> $ objdump -p /bin/cygargp-0.dll | grep argp_parse
>>>          [  24] +base[  25]  0018 argp_parse
>>>
>>>
>>> Current <argp.h> actually maps 'argp_parse' to 'rpl_argp_parse':
>>>
>>> $ printf '#include <argp.h>\nargp_parse' | gcc -E -xc - | tail -1
>>> rpl_argp_parse
>>>
>>> $ grep -B1 rpl_argp_parse /usr/include/argp-config.h
>>> /* Define to the name of argp_parse outside libc. */
>>> #define argp_parse rpl_argp_parse
>>
>> Good grief. Thanks Christian. So I see a few possible solutions to this:
>>
>> (1) Recompile all of the Cygwin programs that use argp, so they call 
>> the new
>> entry point rpl_argp_parse, aliased from argp_parse. (I don't really 
>> want to
>> do this)
>>
>> (2) Patch the gnulib source to make argp_parse a function that points to
>> rpl_argp_parse, instead of just a #define.
>>
>> (3) File a bug report with the gnulib project and see if they'll fix it.
>
> There are a few other possibilities, such as:
>
> (4) If upstream really intends this to be an ABI break, bump the 
> soversion to 1 in a new package libargp1 (and we'll keep the existing 
> libargp (effectively libargp0) around until stuff linking with it is 
> rebuilt).
>
> (5) If upstream thinks there isn't a stable ABI, stop providing a 
> shared library, only a static one in libargp-devel.
>

(6) Patch the gnulib source to drop the #define.

According to this comment+link in argp.m4, the define exists due to a 
conflict with same function from glibc:

    dnl Rename argp_parse to another symbol, so that clang's ASAN does not
    dnl intercept it.
    dnl See 
<https://lists.gnu.org/archive/html/bug-gnulib/2023-12/msg00035.html>.
    AC_DEFINE([argp_parse], [rpl_argp_parse],
     [Define to the name of argp_parse outside libc.])

Under the assumption that there are no plans to add argp_parse() to 
cygwin1.dll, it would IMO make more sense to keep the original name.

(Smoke-)tested patch attached.

-- 
Regards,
Christian

-------------- next part --------------
diff -u origsrc/gnulib/argp/glm4/argp.m4 src/gnulib/argp/glm4/argp.m4
--- a/argp/glm4/argp.m4	2025-11-08 01:38:35.000000000 +0100
+++ b/argp/glm4/argp.m4	2025-11-10 12:25:48.909066600 +0100
@@ -15,8 +15,8 @@
   dnl Rename argp_parse to another symbol, so that clang's ASAN does not
   dnl intercept it.
   dnl See <https://lists.gnu.org/archive/html/bug-gnulib/2023-12/msg00035.html>.
-  AC_DEFINE([argp_parse], [rpl_argp_parse],
-    [Define to the name of argp_parse outside libc.])
+  dnl AC_DEFINE([argp_parse], [rpl_argp_parse],
+  dnl  [Define to the name of argp_parse outside libc.])
 
   AC_CHECK_DECLS([program_invocation_name],
     [],


More information about the Cygwin mailing list