diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | cmake/ConfigureChecks.cmake | 2 | ||||
-rw-r--r-- | configure.ac | 7 | ||||
-rw-r--r-- | dbus/dbus-arch-deps.h.in | 2 | ||||
-rw-r--r-- | dbus/dbus-message.c | 12 | ||||
-rw-r--r-- | meson.build | 3 |
6 files changed, 26 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 58ed3d89..28017a4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -735,6 +735,7 @@ message(" cxxflags release: ${CMAKE_CXX_FLAGS_RELEASE} " message(" 64-bit int: ${DBUS_INT64_TYPE} ") message(" 32-bit int: ${DBUS_INT32_TYPE} ") message(" 16-bit int: ${DBUS_INT16_TYPE} ") +message(" pointer size: ${DBUS_SIZEOF_VOID_P} ") message(" Doxygen: ${DOXYGEN} ") message(" Docbook Generator: ${DOCBOOK_GENERATOR_NAME} ") diff --git a/cmake/ConfigureChecks.cmake b/cmake/ConfigureChecks.cmake index bb2f021e..172db213 100644 --- a/cmake/ConfigureChecks.cmake +++ b/cmake/ConfigureChecks.cmake @@ -84,6 +84,8 @@ int main() { } " DBUS_USE_SYNC) +set(DBUS_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}) + check_type_size("short" SIZEOF_SHORT) check_type_size("int" SIZEOF_INT) check_type_size("long" SIZEOF_LONG) diff --git a/configure.ac b/configure.ac index 033a1f8e..aee08dc7 100644 --- a/configure.ac +++ b/configure.ac @@ -429,13 +429,17 @@ winsock2.h ws2tcpip.h ]) +#### Pointer size +AC_CHECK_SIZEOF(void *) +DBUS_SIZEOF_VOID_P=$ac_cv_sizeof_void_p +AC_SUBST(DBUS_SIZEOF_VOID_P) + #### Integer sizes AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(int) -AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(long long) AC_CHECK_SIZEOF(__int64) @@ -1706,6 +1710,7 @@ echo " 64-bit int: ${DBUS_INT64_TYPE} 32-bit int: ${DBUS_INT32_TYPE} 16-bit int: ${DBUS_INT16_TYPE} + pointer size: ${DBUS_SIZEOF_VOID_P} Doxygen: ${DOXYGEN:-not found} xmlto: ${XMLTO:-not found} ducktype: ${DUCKTYPE:-not found} diff --git a/dbus/dbus-arch-deps.h.in b/dbus/dbus-arch-deps.h.in index 2dc58945..7b6328bc 100644 --- a/dbus/dbus-arch-deps.h.in +++ b/dbus/dbus-arch-deps.h.in @@ -46,6 +46,8 @@ typedef unsigned @DBUS_INT32_TYPE@ dbus_uint32_t; typedef @DBUS_INT16_TYPE@ dbus_int16_t; typedef unsigned @DBUS_INT16_TYPE@ dbus_uint16_t; +#define DBUS_SIZEOF_VOID_P @DBUS_SIZEOF_VOID_P@ + /* This is not really arch-dependent, but it's not worth * creating an additional generated header just for this */ diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index a87043e3..de355b07 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -136,6 +136,15 @@ struct DBusMessageRealIter } u; /**< the type writer or reader that does all the work */ }; +#if DBUS_SIZEOF_VOID_P > 8 +/* + * Architectures with 128-bit pointers were not supported in DBus 1.10, so we + * do no check for DBus 1.10 structure layout compatibility for such + * architectures (e.g. Arm Morello). + */ +#define CHECK_DBUS_1_10_BINARY_COMPATIBILITY 0 +#else +#define CHECK_DBUS_1_10_BINARY_COMPATIBILITY 1 /** * Layout of a DBusMessageIter on the stack in dbus 1.10.0. This is no * longer used, but for ABI compatibility we need to assert that the @@ -158,6 +167,7 @@ typedef struct int pad2; void *pad3; } DBusMessageIter_1_10_0; +#endif static void get_const_signature (DBusHeader *header, @@ -2069,12 +2079,14 @@ _dbus_message_iter_init_common (DBusMessage *message, _DBUS_STATIC_ASSERT (sizeof (DBusMessageRealIter) <= sizeof (DBusMessageIter)); _DBUS_STATIC_ASSERT (_DBUS_ALIGNOF (DBusMessageRealIter) <= _DBUS_ALIGNOF (DBusMessageIter)); +#if CHECK_DBUS_1_10_BINARY_COMPATIBILITY /* A failure of these two assertions would indicate that we've broken * ABI on this platform since 1.10.0. */ _DBUS_STATIC_ASSERT (sizeof (DBusMessageIter_1_10_0) == sizeof (DBusMessageIter)); _DBUS_STATIC_ASSERT (_DBUS_ALIGNOF (DBusMessageIter_1_10_0) == _DBUS_ALIGNOF (DBusMessageIter)); +#endif /* If this static assertion fails, it means the DBusMessageIter struct * is not "packed", which might result in "iter = other_iter" not copying * every byte. */ diff --git a/meson.build b/meson.build index 9103bb0e..31c6df51 100644 --- a/meson.build +++ b/meson.build @@ -276,6 +276,8 @@ foreach type : int_types endif endforeach +arch_config.set('DBUS_SIZEOF_VOID_P', cc.sizeof('void *')) + ############################################################################### # Dependencies @@ -1195,6 +1197,7 @@ summary_dict += { '64-bit int': arch_config.get('DBUS_INT64_TYPE'), '32-bit int': arch_config.get('DBUS_INT32_TYPE'), '16-bit int': arch_config.get('DBUS_INT16_TYPE'), + 'pointer size': arch_config.get('DBUS_SIZEOF_VOID_P'), 'xsltproc': xsltproc.found() ? xsltproc.full_path() : '', 'Doxygen': doxygen.found() ? doxygen.full_path() : '', 'ducktype': ducktype.found() ? ducktype.full_path() : '', |