nested function question
Aurelien Buhrig
aurelien.buhrig.gcc@gmail.com
Tue Sep 11 15:52:00 GMT 2012
Le 11/09/2012 15:25, Ian Lance Taylor a écrit :
> On Tue, Sep 11, 2012 at 2:15 AM, Aurelien Buhrig
> <aurelien.buhrig.gcc@gmail.com> wrote:
>>
>>
>>
>>> Hi,
>>>
>>> The gcc.c-torture/execute/nestfunc-3.c test fails on a private target. I
>>> suspect this is because the STATIC_CHAIN_REGNUM, which is not a call
>>> used register, is used by the caller function (main), modified by the
>>> trampoline, but not restored upon nested function return.
>>>
>>> Should the STATIC_CHAIN_REGNUM be defined so that
>>> CALL_USED_REGISTERS[STATIC_CHAIN_REGNUM] == 0?
>>
>> The question is rather:
>> Should the STATIC_CHAIN_REGNUM be defined so that
>> CALL_USED_REGISTERS[STATIC_CHAIN_REGNUM] == 1? Or is it possible to make
>> nested functions work if CALL_USED_REGISTERS[STATIC_CHAIN_REGNUM] == 0?
>
> The static chain register is normally a call-used register or a fixed
> register or a stack location. It may be possible to make it work with
> a call-saved register, but clearly it is essential that the call to
> the nested function restore the original value of the register before
> returning.
>
> Ian
>
Thank you Ian for your reply.
I think I will use last call-used register that was used for arg passing
before. So nested functions will have less arg registers, but a better
epilogue.
Aurélien
More information about the Gcc-help
mailing list