On Mon, Apr 16, 2012 at 12:46 PM, Stefan Kristiansson
<[email protected]> wrote:
> On Mon, Apr 16, 2012 at 01:58:01PM +0300, Stefan Kristiansson wrote:
>> On Sun, Apr 08, 2012 at 06:33:53AM +0100, Julius Baxter wrote:
>> > diff --git a/arch/openrisc/cpu/cpu.c b/arch/openrisc/cpu/cpu.c
>> > index 25cd624..fa43bf5 100644
>> > --- a/arch/openrisc/cpu/cpu.c
>> > +++ b/arch/openrisc/cpu/cpu.c
>> > @@ -151,7 +151,9 @@ extern void __reset(void);
>> >  int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>> >  {
>> >     disable_interrupts();
>> > -   __reset();
>> > +   __asm__("l.movhi r1,hi(__reset);  \
>> > +                 l.ori r1,r1,lo(__reset); \
>> > +                 l.jr r1");
>>
>> Isn't this jump generated by the compiler?
>> I assume we can count on that doing the right thing?
>>
>
> To clarify, the compiler can of course not know where __reset is,
> but I would have for some reason expected it to emmit a l.jr sequence...
> Checking is knowing, it does not.
> I guess the real issue here is that the current toolchain doesn't complain
> about it.
>
> But I still would like to get that __asm__ statement hidden away somewhere,
> perhaps in a openrisc_jr inline function?
> And/or a comment above it why we are doing it.

I'm still a bit confused why we got this  (a link-time failure due to
the C-compiler emitting a "l.j __reset") and the only way I could fix
it was by putting in an absolute jump. Maybe some C attribute or
something could force the jump to be absolute (put in a register and
then use l.jr)

Julius

>
> Stefan
_______________________________________________
OpenRISC mailing list
[email protected]
http://lists.openrisc.net/listinfo/openrisc

Reply via email to