Re: AIX support

Heikki Linnakangas <hlinnaka@iki.fi>

From: Heikki Linnakangas <hlinnaka@iki.fi>
To: AIX PG user <postgres-ibm-aix@wwpdl.vnet.ibm.com>, pgsql-hackers@lists.postgresql.org
Date: 2025-10-31T17:33:54Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Restore AIX support.

  2. pg_createsubscriber: Improve error messages.

  3. Use <stdint.h> and <inttypes.h> for c.h integers.

  4. Stabilize jsonb_path_query test case.

  5. Fix C23 compiler warning

  6. pg_stat_statements: Add tests for nested queries with level tracking

  7. Add missing newline at the end of index_including.sql

  8. Remove AIX support

  9. Fix s_lock.h PPC assembly code to be compatible with native AIX assembler.

  10. Use a non-locking initial test in TAS_SPIN on PPC.

  11. Use LWSYNC in place of SYNC/ISYNC in PPC spinlocks, where possible.

  12. Use mutex hint bit in PPC LWARX instructions, where possible.

  13. Adjust TAS assembly as per recent discussions: use "+m"(*lock) everywhere

  14. Apple's assembler likes the inlined TAS syntax too, so no reason to

  15. Tighten up register usage for inline PPC version of tas().

  16. Put the isync where it's supposed to be.

  17. > > I'll re-check that with the ppc architecture guy here.

  18. Fix PPC s_lock operations to work correctly on multi-CPU machines.

  19. I tried to build PostgreSQL with the following step to see backends hung

  20. Complete merge of all old man page information.

  21. s_lock aix patch.

On 16/10/2025 18:28, AIX PG user wrote:
> diff --git a/src/template/aix b/src/template/aix                                                                                                                           
> new file mode 100644                                                                                                                                                       
> index 00000000000..bfc193348f4                                                                                                                                             
> --- /dev/null                                                                                                                                                              
> +++ b/src/template/aix                                                                                                                                                     
> @@ -0,0 +1,7 @@                                                                                                                                                            
> +# This file is referred for specific flags wrt to AIX build process like                                                                                                  
> +# cflags.                                                                                                                                                                 
> +# src/template/aix                                                                                                                                                        
> +                                                                                                                                                                          
> +# Extra CFLAGS for code that will go into a shared library                                                                                                                
> +# With optimization, the MemSet() and MemSetAlign() perform better.                                                                                                       
> +CFLAGS_SL=" -O2 "                                                                                                                                                         
> --     

This looks weird. Sure, "-O2" makes things faster, but we shouldn't 
force that here. If you want optimizations, you should use pass 
CFLAGS="-O2" or CFLAGS="-O3" to configure. And why the special mention 
of MemSet() and MemSetAlign()?

> @@ -95,6 +97,24 @@ libpostgres.a: postgres
>  
>  endif # win32
>  
> +ifeq ($(PORTNAME), aix)
> +
> +postgres: $(POSTGRES_IMP)
> +	$(CC) $(CFLAGS) $(call expand_subsys,$(OBJS)) $(LDFLAGS) -Wl,-bE:$(top_builddir)/src/backend/$(POSTGRES_IMP) $(LIBS) -Wl,-brtllib -o $@
> +
> +# Linking to a single .o with -r is a lot faster than building a .a or passing
> +# all objects to MKLDEXPORT.
> +#
> +# It looks alluring to use $(CC) -r instead of ld -r, but that doesn't
> +# trivially work with gcc, due to gcc specific static libraries linked in with
> +# -r.
> +$(POSTGRES_IMP): $(OBJS)
> +	ld -r -o SUBSYS.o $(call expand_subsys,$^)
> +	$(MKLDEXPORT) SUBSYS.o . > $@
> +	@rm -f SUBSYS.o
> +
> +endif # aix
> +
>  $(top_builddir)/src/port/libpgport_srv.a: | submake-libpgport

I see there's some references to MAKE_EXPORTS in src/backend/Makefile. 
They seem related to MKLDEXPORT, but we never set MAKE_EXPORTS. Are they 
still needed?

- Heikki