raw_idt_notify on i386ex

Juergen Zeller juergen.zeller at argovision.de
Mon Feb 16 07:20:46 UTC 2004


Joel Sherrill schrieb:

> Juergen Zeller wrote:
>
>> Hello all, please help, I get frustrated!
>>
>> I'm not very experienced in BSP-porting and I have to run RTEM 4.6.0 
>> on a specific board with an intel i386ex, 512k flash, 1M Ram. I'm not 
>> able to run the hello sample. The initialisation stops with the 
>> message 'raw_idt_notify has been called' after the _Context_Switch. 
>> The init - task never gets reached.
>> When I try to run the ticker sample I also get the message 
>> 'raw_idt_notify has been called'. I read in the list that this should 
>> be some interrupt problem but how can I figure it out? I changed the 
>> console driver for simply polling data out via sio1, therefore the 
>> clock driver should be the only interrupt source. A furher printk 
>> tells me that my clock isr gets invoked. I figured out that the 
>> raw_idt_notify is called by exception 6.
>> I thought the interrupt setting should be ok if my isr gets invoked? 
>> The hello sample uses no clock driver. What goes wrong here?
>
>
> Exception 6 is an illegal instruction. So the question is what
> instruction is at the faulting address?
>
> It might be as simple as you are compiling the BSP with the wrong
> CPU flags to gcc and getting code that this CPU cannot handle.
> Or it could be a piece of assembly that is using some instruction
> that is not there. My guess is the former.
>
> As a learning point, the fact that a message indicating exception 6
> occurred was a BIG hint. :)
>
> --joel
>
>>
>> regards
>>
>> juergen
>>
>>
>>
>
>
>
>
Hello Joel,

sorry for the late answer and thank you for your help.


the problem was the following definition in linkcmds
.init : { _init = .; *(.init) } = 0x9090
.fini : { _fini = .; *(.fini) } = 0x9090

I took this out of the i386ex BSP-linkcmds to avoid compiling error and 
forgot this. As I understood the 0x9090 is just twice nop and without 
definition of .init and .fini section in start.S there must be executed 
an illegal instruction somewhere behind. Am I right?
But why is the Macro __USE_INIT_FINI__ defined per default? Whatfor is 
it used and how can I compile without this macro? I simply comment out 
the code with the macro and everything works fine. But this is not the 
way I want to continue.

best regards

Juergen





More information about the users mailing list