On 04/04/2025 22:31, Srirama Kucherlapati wrote:
> - src/backend/port/aix/mkldexport.sh>
- When building shared libraries from various archives on AIX, we encounter a
situation where symbols are not exported. To resolve this, we require an
export
file. For instance, the command is used to export symbols.
gcc -shared libtest.so libtest.a -Wl,-bE:test.exp
However, if we directly provide object files in the command line instead
of an
archive, the symbols will be exported automatically, as demonstrated by
the command
gcc -shared libtest.so test1.o test2.o test3.o.
Oh, that's interesting. So if we do that, we don't need mkldepxort.sh
anymore?
- WRT to the MEMSET_LOOP_LIMIT flag, this is set to “0”, which would
internally use
The system call memset() as mentioned in the below link as well
https://www.postgresql.org/message-
id/20060203135315.E08B09DC816%40postgresql.org <https://
www.postgresql.org/message-id/20060203135315.E08B09DC816%40postgresql.org>
Yes, I understand what it does. But why? Whatever benchmarking was done
back in 2006 by is no longer relevant.
With all the above changes we have built and ran the tests. As of now we see
there is only one test case that is failing, which seems to have been
introduced recently. And this might not be related to the above changes as
earlier there were no test cases failing.
64 not ok 12 + float8 235 ms
297 # 1 of 226 tests failed.
20 +ERROR: value out of range: overflow
21 -- test overflow/underflow handling
22 SELECT gamma(float8 '-infinity');
23 ERROR: value out of range: overflow
Yeah, that function is new. I don't know if it's a pre-existing problem
or something specific to AIX. Please check the archives for prior
discussion on that; if you can reproduce it, maybe you can help to fix it?
12 files changed, 224 insertions(+), 20 deletions(-)
I'm glad to see this patch shrinking :-)
diff --git a/src/include/port/aix.h b/src/include/port/aix.h
new file mode 100644
index 00000000000..7d08480c8c0
--- /dev/null
+++ b/src/include/port/aix.h
@@ -0,0 +1,4 @@
+/*
+ * src/include/port/aix.h
+ */
+
Useless.
diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index 2f73f9fcf57..5da9b3acda4 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -421,17 +421,15 @@ tas(volatile slock_t *lock)
__asm__ __volatile__(
" lwarx %0,0,%3,1 \n"
" cmpwi %0,0 \n"
-" bne 1f \n"
+" bne $+16 \n" /* branch to li %1,1 */
" addi %0,%0,1 \n"
" stwcx. %0,0,%3 \n"
-" beq 2f \n"
-"1: \n"
+" beq $+12 \n" /* branch to lwsync */
" li %1,1 \n"
-" b 3f \n"
-"2: \n"
+" b $+12 \n" /* branch to end of asm sequence
*/
" lwsync \n"
" li %1,0 \n"
-"3: \n"
+
: "=&b"(_t), "=r"(_res), "+m"(*lock)
: "r"(lock)
: "memory", "cc");
Why is this change needed?
Yes, I know we've been over this many times already. I still don't
understand why it's needed. The onus is on you to explain it adequately,
in comments in the patch, so that I and others understand it. Or even
better, remove it if it's not necessary.
diff --git a/src/makefiles/Makefile.aix b/src/makefiles/Makefile.aix
new file mode 100644
index 00000000000..d33918f91b9
--- /dev/null
+++ b/src/makefiles/Makefile.aix
@@ -0,0 +1,39 @@
+# MAKE_EXPORTS is required for svr4 loaders that want a file of
+# symbol names to tell them what to export/import.
+MAKE_EXPORTS= true
Oh this is interesting. I think MAKE_EXPORTS is actually a leftover that
I failed to remove when I removed the AIX support; it's not used on any
currently-supported platform.
+# -blibpath must contain ALL directories where we should look for libraries
+libpath := $(shell echo $(subst -L,:,$(filter -L/%,$(LDFLAGS))) | sed -e's/
//g'):/usr/lib:/lib
Is this still sensible on modern AIX systems? What happens if you leave
it out?
+# when building with gcc, need to make sure that libgcc can be found
+ifeq ($(GCC), yes)
+libpath := $(libpath):$(dir $(shell gcc -print-libgcc-file-name))
+endif
Same here. Still relevant? What happens if you leave it out?
+# gcc needs to know it's building a shared lib, otherwise it'll not emit
+# correct code / link to the right support libraries
+ifeq ($(GCC), yes)
+LDFLAGS_SL += -shared
+endif
On other platforms, we have this in LINK.shared, see src/Makefile.shlib.
Should we do the same on AIX; if not, why not?
+# env var name to use in place of LD_LIBRARY_PATH
+ld_library_path_var = LIBPATH
Does AIX have LD_LIBRARY_PATH? This suggests that it does:
https://www.ibm.com/support/pages/aix-libpath-recommendations
What's the difference between LIBPATH and LD_LIBRARY_PATH? Why prefer
LIBPATH?
Separately from the remaining issues with this patch, I still feel
pretty reluctant with accepting this, because if I commit this patch,
I'm on the hook to keep it working. I do regularly commit stuff that I'm
not personally that interested in, but a new port is different:
If something breaks on AIX, I have no means (or interest!) in debugging
it. That means that I need to be pretty confident that there are others
who are interested and invested in keeping working, take ownership, will
help to debug problems in a timely fashion, and can submit high-quality
fixes. I am not seeing that.
I also notice that all the AIX systems we have in the buildfarm are still:
- maintained by Noah, who - correct me if I'm wrong - is not
particularly interested in AIX or keen on maintaining them
- are on AIX 7.1.5, which I believe is already end-of-line
- running on power7 hardware which is 15 years old.
That's not very reassuring.
--
Heikki Linnakangas
Neon (https://neon.tech)