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
>>
>