Re: BUG #19095: Test if function exit() is used fail when linked static
VASUKI M <vasukim1992002@gmail.com>
From: VASUKI M <vasukim1992002@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Daniel Gustafsson <daniel@yesql.se>, Tom Lane <tgl@sss.pgh.pa.us>,
BharatDB <bharatdbpg@gmail.com>, torsten.rupp@gmx.net, pgsql-bugs@lists.postgresql.org, byavuz81@gmail.com
Date: 2025-12-03T11:59:33Z
Lists: pgsql-bugs, pgsql-hackers
Attachments
Hi Hackers,
This is a refreshed version of the patch to unify the exit() reference check
performed during libpq builds. Earlier versions had duplicated logic between
the Makefile and Meson builds, while platform-specific details were also
split
between comments and build rules.
Following feedback from Michael, Daniel, Tom, and Nazir, v4 includes the
following changes:
Changes in v4
-
Added top-level AC_PATH_PROG(NM, nm) in configure.ac, and propagated
it via NM, so both build systems use the same nm path.
-
Updated Makefile and Meson rules to invoke the new Perl helper using
-
- -nm=$(NM) / - -nm=@NM@
-
Centralized all platform-specific behavior in the Perl script:
-
Skip on Solaris and Windows
-
Handle ThreadSanitizer (__tsan_func_exit)
-
Handle OpenBSD’s __cxa_atexit
-
Whitelist pthread_exit()
-
Gracefully skip if nm is not available
-
Removed redundant checks from meson.build and Makefile and replaced them
with
a short reference to the script.
-
Added missing cleanup (closing filehandle), and improved comments.
-
Ensured consistent behavior across autoconf and Meson builds.
Testing:
Both autoconf and Meson builds were tested with:
-
Valid nm present
-
Missing nm
-
Solaris/Windows-skip behavior
-
Injected exit() symbol to confirm failure mode works correctly
The behavior is now uniform across build systems.
Patch is attached.
Thanks for the reviews so far, and I welcome further comments.
Regards,
Vasuki
>
> On Wed, 26 Nov 2025 at 09:13, Michael Paquier <michael@paquier.xyz> wrote:
>
>> On Tue, Nov 25, 2025 at 11:51:55AM +0100, Daniel Gustafsson wrote:
>> > +if find_program('nm', required: false, native: true).found() and not
>> get_option('b_coverage')
>> > Sorry for being late to the party, but I wonder why we aren't adding
>> this check
>> > to the toplevel meson.build and configure.ac (via config/programs.m4)
>> like how
>> > we check for all others tools used by the build? Such checks should of
>> course
>> > not fail the configuration, merely record the presence or absence of
>> the tool.
>> > The path can then be exported to
>> src/interfaces/libpq/{Makefile|meson.build} to
>> > use.
>>
>> +1 for this find_program() call grouped at the top of meson.build,
>> grouped with the others.
>>
> Fixed in the v4 please review it.
> --
>> Michael
>>
>