diff options
author | Flavio Cruz <flaviocruz@gmail.com> | 2023-04-29 23:02:20 -0400 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-05-01 00:54:11 +0200 |
commit | 6b25b6ca4e30a114c5af4086ed04e2f2de7077e5 (patch) | |
tree | f6839a5278ab78891126de7bf045d8dceb05245a /mach | |
parent | 6639cc10029e24e06b34e169712b21c31b8cf213 (diff) | |
download | glibc-6b25b6ca4e30a114c5af4086ed04e2f2de7077e5.tar.gz glibc-6b25b6ca4e30a114c5af4086ed04e2f2de7077e5.tar.xz glibc-6b25b6ca4e30a114c5af4086ed04e2f2de7077e5.zip |
Make __mach_msg_destroy portable for x86_64
We need to align on uintptr_t to make this work for x86_64, otherwise things will go wrong when RPCs return errors. Message-Id: <ZE3aPH7uCEDti47H@jupiter.tail36e24.ts.net>
Diffstat (limited to 'mach')
-rw-r--r-- | mach/msg-destroy.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/mach/msg-destroy.c b/mach/msg-destroy.c index 7429ecbc2d..0a8b46c895 100644 --- a/mach/msg-destroy.c +++ b/mach/msg-destroy.c @@ -38,6 +38,7 @@ * */ +#include <libc-pointer-arith.h> #if 1 #include <mach.h> #else @@ -162,9 +163,10 @@ __mach_msg_destroy (mach_msg_header_t *msg) saddr += sizeof(mach_msg_type_t); } - /* calculate length of data in bytes, rounding up */ - length = (((((number * size) + 7) >> 3) + sizeof (int) - 1) - &~ (sizeof (int) - 1)); + /* Calculate length of data in bytes... */ + length = ((number * size) + 7) >> 3; + /* ... and round up using uintptr_t alignment */ + length = ALIGN_UP (length, __alignof__ (uintptr_t)); addr = is_inline ? saddr : * (vm_offset_t *) saddr; @@ -177,7 +179,6 @@ __mach_msg_destroy (mach_msg_header_t *msg) } if (is_inline) { - /* inline data sizes round up to int boundaries */ saddr += length; } else { mach_msg_destroy_memory(addr, length); |