[OpenBIOS] [PATCH v2] sparc32: fix __context corruption in __switch_context_nosave

Artyom Tarasenko atar4qemu at gmail.com
Fri Feb 11 20:50:10 CET 2011


On Fri, Feb 11, 2011 at 8:41 PM, Blue Swirl <blauwirbel at gmail.com> wrote:
> On Fri, Feb 11, 2011 at 9:35 PM, Artyom Tarasenko <atar4qemu at gmail.com> wrote:
>>  __switch_context_nosave shall not write to __context, only read it.
>>
>> Signed-off-by: Artyom Tarasenko <atar4qemu at gmail.com>
>> --- arch/sparc32/switch.S       (revision 1024)
>> +++ arch/sparc32/switch.S       (working copy)
>> @@ -79,11 +79,15 @@
>>        set     (PSR_PS | PSR_S | PSR_PIL | PSR_EF), %g2
>>        wr      %g2, 0x0, %psr
>>  #endif
>> -
>> -__switch_context_nosave:
>> -       set     __context, %g1
>> +        set     __context, %g1
>>         /* Swap ctx pointer with %fp */
>>         swap      [%g1], %fp
>> +        ba     __set_context
>
> This will execute also 'sethi' part of the following 'set', please add
> a 'nop' (with indent increased by one space).

Maybe just switch them?
ba     __set_context
swap      [%g1], %fp

Indentation is broken in the original file I guess. It has mixed tabs
and spaces.

>> +__switch_context_nosave:
>> +        set     __context, %g1
>> +        /* Load %fp from ctx pointer */
>> +        ld      [%g1], %fp
>> +__set_context:
>>        /* Load all registers */
>>         /* offset 0: %g0, no need to load */
>>         ld      [%fp + 4], %g1
>> ---


-- 
Regards,
Artyom Tarasenko

solaris/sparc under qemu blog: http://tyom.blogspot.com/



More information about the OpenBIOS mailing list