This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: libsanitizer merge from upstream r221802
- From: Andrew Pinski <pinskia at gmail dot com>
- To: David Abdurachmanov <david dot abdurachmanov at gmail dot com>
- Cc: Jakub Jelinek <jakub at redhat dot com>, Dmitry Vyukov <dvyukov at google dot com>, Konstantin Serebryany <konstantin dot s dot serebryany at gmail dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>, Dodji Seketeli <dodji at redhat dot com>, Marek Polacek <polacek at redhat dot com>, "H.J. Lu" <hjl dot tools at gmail dot com>, Yuri Gribov <tetra2005 at gmail dot com>, Alexey Samsonov <samsonov at google dot com>
- Date: Tue, 30 Dec 2014 14:48:21 -0800
- Subject: Re: libsanitizer merge from upstream r221802
- Authentication-results: sourceware.org; auth=none
- References: <CAGQ9bdybHEXUYZ3xCaadBAi5U7mTmGkHK8yweF6Qts5q=yc42Q at mail dot gmail dot com> <20141113091614 dot GB5026 at tucnak dot redhat dot com> <CACT4Y+YiHMyvg_N+0K+X+Y7R3NzzbUvae_J1MqQG0nTR-qNU=g at mail dot gmail dot com> <71E9E6B2-2D35-4F25-997A-086EC1005423 at gmail dot com> <20141229184641 dot GP1667 at tucnak dot redhat dot com> <293A3D50-94B4-4F51-BF6F-B28DF0E31BDF at gmail dot com>
On Tue, Dec 30, 2014 at 2:39 PM, David Abdurachmanov
<david.abdurachmanov@gmail.com> wrote:
>
> On Dec 29, 2014, at 7:46 PM, Jakub Jelinek wrote:
>
>> On Mon, Dec 29, 2014 at 07:36:42PM +0100, David Abdurachmanov wrote:
>>> I believe this is breaking bootstrap on aarch64-linux-gnu with kernels <=3.15,
>>> 3.16 and above are fine.
>>>
>>> __kernel_old_{gid,uid}_t were changed in 3.16 from unsigned int to unsigned
>>> short. <=3.15 kernel will trigger static asserts in libsanitizer while
>>> compiling GCC.
>>>
>>> I created PR: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64435 (includes all
>>> the details).
>>>
>>> Attaching a patch with resolved issues on F19 + 3.12 kernel (also bootstrapped
>>> in QEMU with F21 rootfs + 3.17 kernel) on aarch64-linux-gnu.
>>
>> That looks very much wrong, ABI can't depend on what kernel headers you are
>> compiling against.
>> So, better would be just to ifdef out the check and always use 16-bit
>> __kernel_old_*_t on aarch64. Are the
>> getresuid16/getresgid16/getgroups16/setgroups16 syscalls wired at all on
>> aarch64? If not, then supposedly the sanitizer_common_syscalls.inc stuff
>> for these syscalls should be ifdefed out on aarch64 (or any other arch that
>> doesn't have those syscalls).
>
> I am not an expert here.
>
> # uname -r -m
> 3.17.0-301.fc21.aarch64 aarch64
>
> # cat /proc/kallsyms | sed -n 's/.* sys_//p' | grep 16
> chown16
> fchown16
> getegid16
> geteuid16
> getgid16
> getgroups16
> getresgid16
> getresuid16
> getuid16
> lchown16
> setfsgid16
> setfsuid16
> setgid16
> setgroups16
> setregid16
> setresgid16
> setresuid16
> setreuid16
> setuid16
>
> The following are syscall implementations available in my current kernel with
> "16" suffix.
>
> From include/uapi/asm-generic/unistd.h
>
> 435 #define __NR_getresuid 148
> 436 __SYSCALL(__NR_getresuid, sys_getresuid)
>
> From arch/arm64/include/asm/unistd32.h
>
> 354 #define __NR_getresuid 165
> 355 __SYSCALL(__NR_getresuid, sys_getresuid16)
>
> Isn't this needed for 32-bit (compat) application support on 64-bit system?
>
> https://lkml.org/lkml/2012/7/6/570
> https://lkml.org/lkml/2012/7/6/545
>
> If we have 64-bit kernel and 64-bit application is executed sys_getresuid is
> used for getresuid syscall, otherwise if 32-bit application is executed --
> sys_getresuid16 is used. Thus 64-bit application will never call
> sys_getresuid16 implemenation. Then
> getresuid16/getresgid16/getgroups16/setgroups16/etc only needs to in 32-bit
> binary of libsanitizer. Same should apply for x86_64/i*86.
>
> Is that correct?
Kinda. It only applies for aarch32 and not for AARCH64:ILP32.
AARCH64:ILP32 uses the standard system calls here too.
Thanks,
Andrew Pinski
>
> david