Fix portability fallout from commit dc227eb82.

Give up on trying to mechanically forbid abort() within libpq.
Even though there are no such calls in the source code, we've now
seen three different scenarios where build toolchains silently
insert such calls: gcc does it for profiling, some platforms
implement assert() using it, and icc does so for no visible reason.
Checking for accidental use of exit() seems considerably more
important than checking for abort(), so we'll settle for doing
that for now.

Also, filter out __cxa_atexit() to avoid a false match.  It seems
that OpenBSD inserts a call to that despite the fact that libpq
contains no C++ code.

Discussion: https://postgr.es/m/3128896.1624742969@sss.pgh.pa.us
This commit is contained in:
Tom Lane 2021-06-30 10:52:20 -04:00
parent 3465c8a869
commit e45b0dfa1f

View File

@ -102,13 +102,15 @@ all: all-lib check-libpq-refs
include $(top_srcdir)/src/Makefile.shlib include $(top_srcdir)/src/Makefile.shlib
backend_src = $(top_srcdir)/src/backend backend_src = $(top_srcdir)/src/backend
# Check for functions that libpq must not call, currently abort() and exit(). # Check for functions that libpq must not call, currently just exit().
# If nm doesn't exist or doesn't work on shlibs, this test will silently # (Ideally we'd reject abort() too, but there are various scenarios where
# do nothing, which is fine. The exclusion of _eprintf.o is to prevent # build toolchains silently insert abort() calls, e.g. when profiling.)
# complaining about <assert.h> infrastructure on ancient macOS releases. # If nm doesn't exist or doesn't work on shlibs, this test will do nothing,
# which is fine. The exclusion of __cxa_atexit is necessary on OpenBSD,
# which seems to insert references to that even in pure C code.
.PHONY: check-libpq-refs .PHONY: check-libpq-refs
check-libpq-refs: $(shlib) check-libpq-refs: $(shlib)
! nm -A -g -u $< 2>/dev/null | grep -v '_eprintf\.o:' | grep -e abort -e exit ! nm -A -g -u $< 2>/dev/null | grep -v __cxa_atexit | grep exit
# Make dependencies on pg_config_paths.h visible in all builds. # Make dependencies on pg_config_paths.h visible in all builds.
fe-connect.o: fe-connect.c $(top_builddir)/src/port/pg_config_paths.h fe-connect.o: fe-connect.c $(top_builddir)/src/port/pg_config_paths.h