Re: Preventing abort() and exit() calls in libpq

Alvaro Herrera <alvherre@alvh.no-ip.org>

From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Michael Paquier <michael@paquier.xyz>, Jacob Champion <pchampion@vmware.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>, Daniel Gustafsson <daniel@yesql.se>, info@cspug.cz
Date: 2021-06-30T14:39:29Z
Lists: pgsql-hackers
On 2021-Jun-30, Tom Lane wrote:

> Alvaro Herrera <alvherre@alvh.no-ip.org> writes:
> > Maybe there's something about the linker flags being used.
> > ... ah yeah, if I configure with coverage enabled on my machine, it fails in the same way.
> 
> Ah-hah, yeah, I see it too if I enable profiling.  I can confirm
> that it's not from the abort() call in path.c, because it's still
> there if I remove that.  So this is another case where build
> infrastructure is injecting abort() calls we didn't ask for.

Hah, I didn't think to try that.

> Between this and the icc case, I'm now inclined to give up on
> trying to forbid abort() calls in libpq.  I think the value-add
> for that is a lot lower than it is for exit() anyway.  abort()
> is something one doesn't toss around lightly.

No objections to that.

> You mentioned __gcov_exit, but I'm not sure if we need an
> exception for that.  I see it referenced by the individual .o
> files, but the completed .so has no such reference, so at least
> on RHEL8 it's apparently satisfied during .so linkage.  Do you
> see something different?

Well, not really.  I saw it but only after I removed -fprofile-arcs from
Makefile.shlib's link line; but per my other email, that doesn't really
work.

Everything seems to work well for me after removing abort from that grep.

-- 
Álvaro Herrera                        Valdivia, Chile
                        https://www.EnterpriseDB.com/



Commits

  1. Further restrict the scope of no-exit()-in-libpq test.

  2. Improve build-time check that libpq doesn't call exit().

  3. Fix portability fallout from commit dc227eb82.

  4. Add a build-time check that libpq doesn't call exit() or abort().