aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDaniel King <dmking@adacore.com>2024-09-13 16:16:52 +0100
committerMarc Poulhiès <dkm@gcc.gnu.org>2024-11-04 16:57:56 +0100
commit758a95db8a9ee0048a5de5334b59027535e2ecbc (patch)
tree58a6bcf4968650246aec9c18e8dd880be31a39d8 /gcc
parent010cf71da79f001e40a29aa4ebef27e5dbf7fce8 (diff)
downloadgcc-758a95db8a9ee0048a5de5334b59027535e2ecbc.zip
gcc-758a95db8a9ee0048a5de5334b59027535e2ecbc.tar.gz
gcc-758a95db8a9ee0048a5de5334b59027535e2ecbc.tar.bz2
ada: Fix alignment of pthread_mutex_t
On most targets the alignment of unsigned long is the same as pointer alignment, but on CHERI targets pointers have larger alignment (16 bytes compared to 8 bytes). pthread_mutex_t needs the same alignment as System.Address to account for CHERI targets. gcc/ada/ChangeLog: * libgnat/s-oslock__posix.ads: Fix alignment of pthread_mutex_t for CHERI targets.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/libgnat/s-oslock__posix.ads7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/ada/libgnat/s-oslock__posix.ads b/gcc/ada/libgnat/s-oslock__posix.ads
index e2c237f..cde92e5 100644
--- a/gcc/ada/libgnat/s-oslock__posix.ads
+++ b/gcc/ada/libgnat/s-oslock__posix.ads
@@ -52,6 +52,11 @@ private
Data : char_array (1 .. OS_Constants.PTHREAD_MUTEX_SIZE);
end record;
pragma Convention (C, pthread_mutex_t);
- for pthread_mutex_t'Alignment use Interfaces.C.unsigned_long'Alignment;
+ for pthread_mutex_t'Alignment use
+ Integer'Max (Interfaces.C.unsigned_long'Alignment,
+ System.Address'Alignment);
+ -- On some targets (e.g. CHERI), pointers have larger alignment than
+ -- unsigned_long. On other targets (e.g. some 16-bit targets) long is
+ -- larger than a pointer. Choose the largest to err on the side of caution.
end System.OS_Locks;