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

Blue Swirl blauwirbel at gmail.com
Fri Feb 11 21:19:34 CET 2011


On Fri, Feb 11, 2011 at 9:50 PM, Artyom Tarasenko <atar4qemu at gmail.com> wrote:
> 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

That's even better.

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

Well, the formatting convention for instructions in delay slots is
that they should be indented slightly to make them stand out.



More information about the OpenBIOS mailing list