Re: AIX support

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Peter Eisentraut <peter(at)eisentraut(dot)org>
Cc: Srirama Kucherlapati <sriram(dot)rk(at)in(dot)ibm(dot)com>, "pgsql-hackers(at)lists(dot)postgresql(dot)org" <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Tristan Partin <tristan(at)partin(dot)io>, AIX PG user <postgres-ibm-aix(at)wwpdl(dot)vnet(dot)ibm(dot)com>
Subject: Re: AIX support
Date: 2026-01-26 17:45:37
Message-ID: 190704.1769449537@sss.pgh.pa.us
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Peter Eisentraut <peter(at)eisentraut(dot)org> writes:
> Ok, that patch set looks pretty reasonable now.
> Can you confirm that this is the complete patch set required for AIX
> support?
> What version of AIX are you testing with?
> What compilers are you testing with?

I tried to build HEAD with 0001-Support-for-AIX.pg19.v11.patch
on the GCC compile farm (cfarm119.cfarm.net, which is running
AIX 7.3); I used gcc 13.3.0. I observed the following problems:

* The patch's changes to configure do not match those to configure.ac.
I used configure as-patched, so I don't know if it'd work after
re-running autoconf.

* In my tree, mkldexport.sh was created without execute permissions,
causing a build failure. I see that the patch says
new file mode 100755
so this is arguably the fault of the rather hoary version of
patch(1) that cfarm119 has. I mention it mainly to remind the
eventual committer to make sure mkldexport.sh is committed with
the correct permissions.

* I got this:

In file included from ../../../../src/include/postgres.h:48,
from pgstat_slru.c:18:
pgstat_slru.c:60:11: warning: no previous prototype for 'pgstat_count_slru_truncate64' [-Wmissing-prototypes]
60 | CppConcat(pgstat_count_slru_,stat)(int slru_idx) \
| ^~~~~~~~~~~~~~~~~~
../../../../src/include/c.h:429:41: note: in definition of macro 'CppConcat'
429 | #define CppConcat(x, y) x##y
| ^
pgstat_slru.c:84:1: note: in expansion of macro 'PGSTAT_COUNT_SLRU'
84 | PGSTAT_COUNT_SLRU(truncate)
| ^~~~~~~~~~~~~~~~~

and then

ld: 0711-317 ERROR: Undefined symbol: .pgstat_count_slru_truncate

On investigation, this is happening because <unistd.h> has

#define truncate truncate64

which causes "PGSTAT_COUNT_SLRU(truncate)" to expand as
"pgstat_count_slru_truncate64", which is not the name declared in
pgstat.h. An even more unfortunate result is that the "truncate"
field in PgStat_SLRUStats might actually be named "truncate64",
depending on whether <unistd.h> was read before pgstat.h.

I got around that by partially reverting eccba079c2ea:

diff --git a/src/backend/utils/activity/pgstat_slru.c b/src/backend/utils/activity/pgstat_slru.c
index 2190f388eae..4d8ad3f20fc 100644
--- a/src/backend/utils/activity/pgstat_slru.c
+++ b/src/backend/utils/activity/pgstat_slru.c
@@ -81,7 +81,11 @@ PGSTAT_COUNT_SLRU(blocks_written)
PGSTAT_COUNT_SLRU(flush)

/* pgstat_count_slru_truncate */
-PGSTAT_COUNT_SLRU(truncate)
+void
+pgstat_count_slru_truncate(int slru_idx)
+{
+ get_slru_entry(slru_idx)->truncate += 1;
+}

I didn't have to make any other changes, so it seems that we are
currently consistent about always reading <unistd.h> first, but this
seems terribly fragile. We probably need some more-invasive answer,
like changing both the function and field name to "trunc" or something
like that.

* I also got some warnings:

auth.c: In function 'auth_peer':
auth.c:1877:13: warning: implicit declaration of function 'getpeereid' [-Wimplicit-function-declaration]
1877 | if (getpeereid(port->sock, &uid, &gid) != 0)

pg_locale_libc.c: In function 'wchar2char':
pg_locale_libc.c:1243:26: warning: implicit declaration of function 'wcstombs_l'; did you mean 'wcstombs'? [-Wimplicit-function-declaration]
1243 | result = wcstombs_l(to, from, tolen, loc);

fe-connect.c: In function 'PQconnectPoll':
fe-connect.c:3598:45: warning: implicit declaration of function 'getpeereid'; did you mean 'getpwuid'? [-Wimplicit-function-declaration]
3598 | if (getpeereid(conn->sock, &uid, &gid) != 0)

These did not break the build (so the functions do exist...) but
they need to be fixed.

After all that I was able to get through "make" and "make install",
but testing failed immediately:

bash-5.3$ initdb
exec(): 0509-036 Cannot load program initdb because of the following errors:
0509-022 Cannot load module /home/tgl/testversion/lib/libpq.a(libpq.so.5).
0509-150 Dependent module libgcc_s.a(shr.o) could not be loaded.
0509-022 Cannot load module libgcc_s.a(shr.o).
0509-026 System error: A file or directory in the path name does not exist.

So there's something wrong with the make rules for using libpq.so.
I do not know anything about AIX, so I can't debug this.

I was unable to test the meson patches, because meson isn't installed
on this machine.

I haven't actually read the patch, so don't take this as an
endorsement of the changes otherwise.

regards, tom lane

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Jelte Fennema-Nio 2026-01-26 17:46:28 Re: meson: Make test output much more useful on failure (both in CI and locally)
Previous Message Zsolt Parragi 2026-01-26 17:26:26 Re: tablecmds: reject CLUSTER ON for partitioned tables earlier