This is the mail archive of the
mailing list for the glibc project.
Re: struct msgbuf wrong mtype size on ILP32 and possibly x32
- From: Szabolcs Nagy <nsz at port70 dot net>
- To: Cyril Hrubis <chrubis at suse dot cz>
- Cc: libc-alpha at sourceware dot org, kamil at semihalf dot com
- Date: Tue, 17 Mar 2015 19:07:47 +0100
- Subject: Re: struct msgbuf wrong mtype size on ILP32 and possibly x32
- Authentication-results: sourceware.org; auth=none
- References: <20150317155750 dot GB28649 at rei dot suse dot de>
* Cyril Hrubis <firstname.lastname@example.org> [2015-03-17 16:57:50 +0100]:
> I've got a bugreport for LTP that msgrcv and msgsnd are hanging forever
> on -mabi=ilp32 (and possibly on x32).
> The issue seems to be that sizeof(long) != sizeof(__syscall_slong_t) on
> these (which is used to define mtype in glibc headers and likely the
> size used in kernel) which is probably the reason for the test hang.
> The proposed solution for fixing LTP is to replace the long in the
> custom defined msgbuf structures with __syscall_slong_t which is
> obviously wrong. Not only it uses glibc internal type but also breaks
> backward compatibilty.
> I'm pretty sure that this needs to be fixed somewhere in glibc/kernel
> because the mtype being long is part of the ABI. Or at least man page
> and numerous tutorials on net suggets so.
this is just another case where the kernel x32 abi
(and thus glibc) fails to follow the standard/man
just like with timespec, timex and sysinfo structs
the userspace api should use long and not __syscall_slong_t
> See for reference the LTP discussion:
> Cyril Hrubis