[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