On Mon, Mar 7, 2016 at 12:10 AM, H.J. Lu <hjl.to...@gmail.com> wrote:
> On Sun, Mar 6, 2016 at 1:39 PM, Uros Bizjak <ubiz...@gmail.com> wrote:
>> Hello!
>>
>> Attached patch prevents red-zone with -fPIC for leaf functions on
>> i686. The idea is to mark when set_got is expanded as a call to a pc
>> thunk, and use this flag to prevent red-zone in the current function.
>>
>> Please note that using red-zone with i686 violates all known ABIs, but
>> some future ABI can trip on this limitation. The failure mode is quite
>> tricky, so IMO it warrants a couple of lines as a safety net.
>>
>> The testcase is not suitable for the testsuite (it uses -mred-zone for
>> i686 target), but I have checked that the testcase works OK when
>> compiled with the patched compiler even when -mred-zone is used
>> together with -fPIC.
>>
>> Jakub, HJ -  what do you think?
>>
>> 2016-03-01  Uros Bizjak  <ubiz...@gmail.com>
>>
>>     PR target/70064
>>     * config/i386/i386.h (machine_function): Add
>>     pc_thunk_call_expanded flag.
>>     (ix86_pc_thunk_call_expanded): New define.
>>     * config/i386/i386.md (set_got, set_got_labelled): New expanders.
>>     (*set_got): Rename insn pattern from set_got.
>>     (*set_got_labelled): Rename inst pattern from set_got_labelled.
>>     * config/i386/i386.c (ix86_compute_frame_layout): Use
>>     ix86_pc_thunk_call_expanded to prevent red-zone.
>>
>> The patch is bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.
>>
>
> I think red zone should only be allowed for x86-64 psABI.

Is there a hardware limitation in the processor that would disallow
red-zone for all x86_32 targets? As far as the documentation goes, the
existence of redzone depends on signal and interrupt handlers. x86_32
linux in particular doesn't provide this area, but there is no reason
some other OS will.

In light of this, I think that limiting redzone to x86_64 would be an
artificial limitation.

Uros.

Reply via email to