mirror of
https://github.com/postgres/postgres.git
synced 2025-08-08 06:02:22 +03:00
Remove AIX support
There isn't a lot of user demand for AIX support, we have a bunch of
hacks to work around AIX-specific compiler bugs and idiosyncrasies,
and no one has stepped up to the plate to properly maintain it.
Remove support for AIX to get rid of that maintenance overhead. It's
still supported for stable versions.
The acute issue that triggered this decision was that after commit
8af2565248
, the AIX buildfarm members have been hitting this
assertion:
TRAP: failed Assert("(uintptr_t) buffer == TYPEALIGN(PG_IO_ALIGN_SIZE, buffer)"), File: "md.c", Line: 472, PID: 2949728
Apperently the "pg_attribute_aligned(a)" attribute doesn't work on AIX
for values larger than PG_IO_ALIGN_SIZE, for a static const variable.
That could be worked around, but we decided to just drop the AIX support
instead.
Discussion: https://www.postgresql.org/message-id/20240224172345.32@rfd.leadboat.com
Reviewed-by: Andres Freund, Noah Misch, Thomas Munro
This commit is contained in:
60
meson.build
60
meson.build
@@ -196,26 +196,7 @@ endif
|
||||
# that purpose.
|
||||
portname = host_system
|
||||
|
||||
if host_system == 'aix'
|
||||
library_path_var = 'LIBPATH'
|
||||
|
||||
export_file_format = 'aix'
|
||||
export_fmt = '-Wl,-bE:@0@'
|
||||
mod_link_args_fmt = ['-Wl,-bI:@0@']
|
||||
mod_link_with_dir = 'libdir'
|
||||
mod_link_with_name = '@0@.imp'
|
||||
|
||||
# M:SRE sets a flag indicating that an object is a shared library. Seems to
|
||||
# work in some circumstances without, but required in others.
|
||||
ldflags_sl += '-Wl,-bM:SRE'
|
||||
ldflags_be += '-Wl,-brtllib'
|
||||
|
||||
# Native memset() is faster, tested on:
|
||||
# - AIX 5.1 and 5.2, XLC 6.0 (IBM's cc)
|
||||
# - AIX 5.3 ML3, gcc 4.0.1
|
||||
memset_loop_limit = 0
|
||||
|
||||
elif host_system == 'cygwin'
|
||||
if host_system == 'cygwin'
|
||||
sema_kind = 'unnamed_posix'
|
||||
cppflags += '-D_GNU_SOURCE'
|
||||
dlsuffix = '.dll'
|
||||
@@ -1499,30 +1480,49 @@ sizeof_long = cc.sizeof('long', args: test_c_args)
|
||||
cdata.set('SIZEOF_LONG', sizeof_long)
|
||||
if sizeof_long == 8
|
||||
cdata.set('HAVE_LONG_INT_64', 1)
|
||||
cdata.set('PG_INT64_TYPE', 'long int')
|
||||
pg_int64_type = 'long int'
|
||||
cdata.set_quoted('INT64_MODIFIER', 'l')
|
||||
elif sizeof_long == 4 and cc.sizeof('long long', args: test_c_args) == 8
|
||||
cdata.set('HAVE_LONG_LONG_INT_64', 1)
|
||||
cdata.set('PG_INT64_TYPE', 'long long int')
|
||||
pg_int64_type = 'long long int'
|
||||
cdata.set_quoted('INT64_MODIFIER', 'll')
|
||||
else
|
||||
error('do not know how to get a 64bit int')
|
||||
endif
|
||||
cdata.set('PG_INT64_TYPE', pg_int64_type)
|
||||
|
||||
if host_machine.endian() == 'big'
|
||||
cdata.set('WORDS_BIGENDIAN', 1)
|
||||
endif
|
||||
|
||||
# Determine memory alignment requirements for the basic C data types.
|
||||
|
||||
alignof_types = ['short', 'int', 'long', 'double']
|
||||
maxalign = 0
|
||||
foreach t : alignof_types
|
||||
align = cc.alignment(t, args: test_c_args)
|
||||
if maxalign < align
|
||||
maxalign = align
|
||||
endif
|
||||
cdata.set('ALIGNOF_@0@'.format(t.to_upper()), align)
|
||||
endforeach
|
||||
cdata.set('MAXIMUM_ALIGNOF', maxalign)
|
||||
|
||||
# Compute maximum alignment of any basic type.
|
||||
#
|
||||
# We require 'double' to have the strictest alignment among the basic types,
|
||||
# because otherwise the C ABI might impose 8-byte alignment on some of the
|
||||
# other C types that correspond to TYPALIGN_DOUBLE SQL types. That could
|
||||
# cause a mismatch between the tuple layout and the C struct layout of a
|
||||
# catalog tuple. We used to carefully order catalog columns such that any
|
||||
# fixed-width, attalign=4 columns were at offsets divisible by 8 regardless
|
||||
# of MAXIMUM_ALIGNOF to avoid that, but we no longer support any platforms
|
||||
# where TYPALIGN_DOUBLE != MAXIMUM_ALIGNOF.
|
||||
#
|
||||
# We assume without checking that int64's alignment is at least as strong
|
||||
# as long, char, short, or int. Note that we intentionally do not consider
|
||||
# any types wider than 64 bits, as allowing MAXIMUM_ALIGNOF to exceed 8
|
||||
# would be too much of a penalty for disk and memory space.
|
||||
alignof_double = cdata.get('ALIGNOF_DOUBLE')
|
||||
if cc.alignment(pg_int64_type, args: test_c_args) > alignof_double
|
||||
error('alignment of int64 is greater than the alignment of double')
|
||||
endif
|
||||
cdata.set('MAXIMUM_ALIGNOF', alignof_double)
|
||||
|
||||
cdata.set('SIZEOF_VOID_P', cc.sizeof('void *', args: test_c_args))
|
||||
cdata.set('SIZEOF_SIZE_T', cc.sizeof('size_t', args: test_c_args))
|
||||
@@ -1571,7 +1571,7 @@ if cc.links('''
|
||||
if not meson.is_cross_build()
|
||||
r = cc.run('''
|
||||
/* This must match the corresponding code in c.h: */
|
||||
#if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__)
|
||||
#if defined(__GNUC__) || defined(__SUNPRO_C)
|
||||
#define pg_attribute_aligned(a) __attribute__((aligned(a)))
|
||||
#elif defined(_MSC_VER)
|
||||
#define pg_attribute_aligned(a) __declspec(align(a))
|
||||
@@ -2371,10 +2371,6 @@ endif
|
||||
# conflict.
|
||||
#
|
||||
# We assume C99 support, so we don't need to make this conditional.
|
||||
#
|
||||
# XXX: Historically we allowed platforms to disable restrict in template
|
||||
# files, but that was only added for AIX when building with XLC, which we
|
||||
# don't support yet.
|
||||
cdata.set('pg_restrict', '__restrict')
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user