summaryrefslogtreecommitdiff
path: root/routine.c
diff options
context:
space:
mode:
authorLuca Dariz <luca@orpolo.org>2022-06-28 11:49:25 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2022-08-27 23:52:08 +0200
commitd29057d0866a663d4a5a867147a4a6366c12a647 (patch)
tree32ce8276b2857d78edbada89d2d60eddea3a19dd /routine.c
parent39e68c6ed7c9d6a2a73ab079846bc53c2839351f (diff)
fix message fields alignment for 64 bit
On x86_64 alignment of structures is different, as the pointer size is different. For simplicity we keep the same 4-byte alignment as used on 32-bit. This simplifies the support for 32-bit rpc on 64-bit kernels, and also it seems not worth as an optimization, as we would need to add more code in the ipc_kmsg* routines. * routine.c: align both short and long descriptors * utils.c: use a fixed alignment for data fields in structures representing messages. Signed-off-by: Luca Dariz <luca@orpolo.org> Message-Id: <20220628094927.442907-2-luca@orpolo.org>
Diffstat (limited to 'routine.c')
-rw-r--r--routine.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/routine.c b/routine.c
index 0edc6b9..6972e14 100644
--- a/routine.c
+++ b/routine.c
@@ -321,9 +321,9 @@ rtFindSize(const argument_t *args, u_int mask)
{
ipc_type_t *it = arg->argType;
+ /* might need proper alignment on demanding 64bit archies */
+ size = (size + word_size-1) & ~(word_size-1);
if (arg->argLongForm) {
- /* might need proper alignment on 64bit archies */
- size = (size + word_size-1) & ~(word_size-1);
size += sizeof_mach_msg_type_long_t;
} else {
size += sizeof_mach_msg_type_t;