This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [Patch, AArch64] Enable Address sanitizer and UB sanitizer
- From: pinskia at gmail dot com
- To: Marcus Shawcroft <marcus dot shawcroft at gmail dot com>
- Cc: Christophe Lyon <christophe dot lyon at linaro dot org>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Patch Tracking <patches at linaro dot org>
- Date: Tue, 9 Sep 2014 03:03:50 -0700
- Subject: Re: [Patch, AArch64] Enable Address sanitizer and UB sanitizer
- Authentication-results: sourceware.org; auth=none
- References: <CAKdteOZq5uYm3eGuy=r5E0rjmLNrszUzOPO57cF6ptTsL_mdmw at mail dot gmail dot com> <CAFqB+PyPsNO=xqNQaSR7YUNDfEn9QhQ0gL+6poc7mcwuS_P=Pg at mail dot gmail dot com>
> On Sep 9, 2014, at 2:50 AM, Marcus Shawcroft <marcus.shawcroft@gmail.com> wrote:
>
> +static unsigned HOST_WIDE_INT
> +aarch64_asan_shadow_offset (void)
> +{
> + return (HOST_WIDE_INT_1 << 36);
> +}
> +
>
> Looking around various other ports I see magic numbers including 29,
> 41, 44.... Help me understand why 36 is the right choice for aarch64?
Also why 36? What is the min virtual address space aarch64 Linux kernel supports with 4k pages and 3 level page table? Also does this need to conditionalized on lp64? Since I am about to post glibc patches turning on address sanitizer breaks that.
Thanks,
Andrew
>
> Cheers
> /Marcus
>
>
>> On 5 September 2014 15:49, Christophe Lyon <christophe.lyon@linaro.org> wrote:
>> Hi,
>>
>> The attached patch enables the address and undefined behavior sanitizers.
>>
>> I have tested it on AArch64 hardware, and asan.exp tests pass, but a
>> few ubsan.exp tests fail as follows:
>> FAIL: c-c++-common/ubsan/float-cast-overflow-1.c -O3 -g execution test
>> FAIL: c-c++-common/ubsan/float-cast-overflow-1.c -O2 -flto
>> -flto-partition=none execution test
>> FAIL: c-c++-common/ubsan/float-cast-overflow-2.c -O3 -g execution test
>> FAIL: c-c++-common/ubsan/float-cast-overflow-3.c -O3 -g execution test
>> FAIL: c-c++-common/ubsan/float-cast-overflow-4.c -O2 execution test
>> FAIL: c-c++-common/ubsan/float-cast-overflow-4.c -O3 -g execution test
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O0 (internal compiler error)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O0 (test for excess errors)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O1 (internal compiler error)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O1 (test for excess errors)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O2 (internal compiler error)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O2 (test for excess errors)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O3 -fomit-frame-pointer
>> (internal compiler error)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O3 -fomit-frame-pointer
>> (test for excess errors)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O3 -g (internal compiler error)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O3 -g (test for excess errors)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -Os (internal compiler error)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -Os (test for excess errors)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O2 -flto
>> -flto-partition=none (internal compiler error)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O2 -flto
>> -flto-partition=none (test for excess errors)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O2 -flto (internal
>> compiler error)
>> FAIL: c-c++-common/ubsan/overflow-int128.c -O2 -flto (test for excess errors)
>> FAIL: gcc.dg/ubsan/float-cast-overflow-bf.c -O3 -g execution test
>>
>> I think all these failures need to be addressed separately, and should
>> not prevent from adding the functionality since most of them pass.
>>
>> Note that an update of libsanitizer is required, to include at least
>> revision 209641 (which fixes internal_fork for AArch64).
>>
>> OK for trunk?
>>
>> Christophe.
>>
>> 2014-09-05 Christophe Lyon <christophe.lyon@linaro.org>
>> gcc/
>> * config/aarch64/aarch64-linux.h (ASAN_CC1_SPEC): Define.
>> (CC1_SPEC): Define.
>> * config/aarch64/aarch64.c (aarch64_asan_shadow_offset): New function.
>> (TARGET_ASAN_SHADOW_OFFSET): Define.
>>
>> libsanitizer/
>> * configure.tgt: Add AArch64 pattern.