Skip to content

Commit 47d54b6

Browse files
committed
AIX: Fix missing libpq symbols by respecting SHLIB_EXPORTS.
We make each AIX shared library export all globals found in .o files that originate in the library. That doesn't include symbols acquired by -lpgcommon_shlib. That is good on average, but it became a problem for libpq when commit e6afa89 moved five official libpq API symbols into src/common. Fix this by implementing the SHLIB_EXPORTS mechanism for AIX, so affected libraries export the same symbols that they export on Linux. This reintroduces symbols pg_encoding_to_char, pg_utf_mblen, pg_char_to_encoding, pg_valid_server_encoding, and pg_valid_server_encoding_id. Back-patch to v13, where the aforementioned commit first appeared. While a minor release is usually the wrong time to add or remove symbol exports in libpq or libecpg, we should expect users to want each documented symbol. Tony Reix Discussion: https://postgr.es/m/PR3PR02MB6396742E2FC3E77D37A920BC86C79@PR3PR02MB6396.eurprd02.prod.outlook.com
1 parent 599c73a commit 47d54b6

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

src/Makefile.shlib

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,11 @@ $(shlib): $(OBJS) | $(SHLIB_PREREQS)
329329
rm -f $(stlib)
330330
$(LINK.static) $(stlib) $^
331331
$(RANLIB) $(stlib)
332+
ifeq (,$(SHLIB_EXPORTS))
332333
$(MKLDEXPORT) $(stlib) $(shlib) >$(exports_file)
334+
else
335+
( echo '#! $(shlib)'; $(AWK) '/^[^#]/ {printf "%s\n",$$1}' $(SHLIB_EXPORTS) ) >$(exports_file)
336+
endif
333337
$(COMPILER) -o $(shlib) $(stlib) -Wl,-bE:$(exports_file) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK)
334338
rm -f $(stlib)
335339
$(AR) $(AROPT) $(stlib) $(shlib)

src/port/README

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ applications.
2828
from libpgport are linked first. This avoids having applications
2929
dependent on symbols that are _used_ by libpq, but not intended to be
3030
exported by libpq. libpq's libpgport usage changes over time, so such a
31-
dependency is a problem. Windows, Linux, and macOS use an export list to
32-
control the symbols exported by libpq.
31+
dependency is a problem. Windows, Linux, AIX, and macOS use an export
32+
list to control the symbols exported by libpq.

0 commit comments

Comments
 (0)