Hi Lin,

On Fri, 28 Feb 2014 19:14:11, lin zuojian wrote:
>
> 于 2014年02月28日 15:58, lin zuojian 写道:
>> Hi Bernd,
>> I agree you with the mode problem.
>>
>> And I have not change the stack alignment.What I change is the virtual
>> register base's alignment.

I tried your patch on this test case:

gcc -O2 -fsanitize=address -S gcc/testsuite/c-c++-common/asan/pr59063-1.c

and compared the stack usage with and without patch:

without patch:

        @ Function supports interworking.
        @ args = 0, pretend = 0, frame = 96
        @ frame_needed = 0, uses_anonymous_args = 0
        stmfd   sp!, {r4, r5, r6, r7, r8, lr}
        ldr     r3, .L12
        ldr     r3, [r3]
        sub     sp, sp, #96
        cmp     r3, #0
        mov     r5, sp
        mov     r8, sp

and with patch:

        @ Function supports interworking.
        @ args = 0, pretend = 0, frame = 128
        @ frame_needed = 0, uses_anonymous_args = 0
        stmfd   sp!, {r4, r5, r6, r7, r8, lr}
        ldr     r3, .L12
        ldr     r3, [r3]
        sub     sp, sp, #128
        cmp     r3, #0
        add     r3, sp, #128
        bic     r4, r3, #31
        sub     r4, r4, #96
        mov     r8, r4

So, that is what I mean: this patch makes the stack grow by
32 bytes, just because the emit_stack_protection uses SImode,
with unaligned addresses which is not possible for ARM, and
not optimal for X86_64.

Why not use the true alignment value in set_mem_align?
And simply let get_best_mode() choose the right mode to
use for that alignment.

IMHO it should not be necessary to use STRICT_ALIGNMENT
everywhere, because get_best_mode should know what mode
is appropriate for which alignment value.


Regards
Bernd.

>> Realignment must be make in !STRICT_ALIGNMENT machine,or emitting the
>> efficient code is impossible.
> Sorry, it should be "Realignment must be make in STRICT_ALIGNMENT machine".
>> For example 4 set mem:QI X,REG:QI Y will not combine into one set mem:SI
>> X1,REG:SI Y1,if X is not mentioned as SI mode aligned.
>> To make sure X is SI mode algined,virtual register base must be realigned.
>>
>> For this patch,I only intent to make it right.Making it best is next task.
>> --
>> Regards
>> lin zuojian.
>>
>> 于 2014年02月28日 15:47, Bernd Edlinger 写道:
>>> Hi,
>>>
>>> I see the problem too.
>>>
>>> But I think it is not necessary to change the stack alignment
>>> to solve the problem.
>>>
>>> It appears to me that the code in asan_emit_stack_protection
>>> is just wrong. It uses SImode when the memory is not aligned
>>> enough for that mode. This would not happen if that code
>>> is rewritten to use get_best_mode, and by the way, even on
>>> x86_64 the emitted code is not optimal, because that target
>>> could work with DImode more efficiently.
>>>
>>> So, to fix that, it would be better to concentrate on that function,
>>> and use word_mode instead of SImode, and let get_best_mode
>>> choose the required mode.
>>>
>>>
>>> Regards
>>> Bernd Edlinger.
>                                         

Reply via email to