<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jun 18, 2021 at 9:23 AM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de">sebastian.huber@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello,<br>
<br>
I work currently on this ticket:<br>
<br>
<a href="https://devel.rtems.org/ticket/4458" rel="noreferrer" target="_blank">https://devel.rtems.org/ticket/4458</a><br>
<br>
This is also related to the strange set_vector() function.</blockquote><div><br></div><div>set_vector() was added long ago as a BSP wrapper for rtems_interrupt_catch()</div><div>when all that was supported is what we now call simple vectored architectures.</div><div>There were CPUs with a simple interrupt enable/disable bit in the processor but</div><div>the board had an interrupt source mask register. Installing the vector was not </div><div>enough to enable the interrupt. You have to touch the board's interrupt mask</div><div>register. That's where the method came from. </div><div><br></div><div>I count 104 references/uses in bsp/ and one in cpukit/ so it can't go away without</div><div>some work.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> Why do we <br>
have this:<br>
<br>
/**<br>
  * Does the RTEMS invoke the user's ISR with the vector number and<br>
  * a pointer to the saved interrupt frame (1) or just the vector<br>
  * number (0)?<br>
  *<br>
  * The SPARC port does not pass an Interrupt Stack Frame pointer to<br>
  * interrupt handlers.<br>
  */<br>
#define CPU_ISR_PASSES_FRAME_POINTER FALSE<br></blockquote><div><br></div><div>I'm guessing given the age of the SPARC port (started around 1994) that it </div><div>originally did not pass an ISR frame. Quite likely no port did at that point.</div><div>When this macro was added, the SPARC port didn't define or  pass a </div><div>frame pointer.</div><div><br></div><div>At this point, I would say it is wrong.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
I noticed that in bsp_spurious_initialize() we use this default handler:<br>
<br>
static rtems_isr bsp_spurious_handler(<br>
    rtems_vector_number trap,<br>
    CPU_Interrupt_frame *isf<br>
)<br>
{<br>
   CPU_Exception_frame frame = {<br>
     .trap = trap,<br>
     .isf = isf<br>
   };<br>
<br>
We also have in cpu_asm.S:<br>
<br>
         sethi    %hi(SYM(_ISR_Vector_table)), %g4<br>
         or       %g4, %lo(SYM(_ISR_Vector_table)), %g4<br>
         and      %l3, 0xFF, %g5         ! remove synchronous trap indicator<br>
         sll      %g5, 2, %g5            ! g5 = offset into table<br>
         ld       [%g4 + %g5], %g4       ! g4 = _ISR_Vector_table[ vector ]<br>
<br>
<br>
                                         ! o1 = 2nd arg = address of the ISF<br>
                                         !   WAS LOADED WHEN ISF WAS <br>
SAVED!!!<br>
         mov      %l3, %o0               ! o0 = 1st arg = vector number<br>
         call     %g4<br>
<br>
So, why is CPU_ISR_PASSES_FRAME_POINTER set to FALSE when the handler is <br>
actually called with the frame pointer and some handler actually use it?<br></blockquote><div><br></div><div>Looks like someone forgot to change the ifdef when they added the ISR frame.</div><div><br></div><div>Is the macro used anywhere?</div><div><br></div><div>--joel </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
-- <br>
embedded brains GmbH<br>
Herr Sebastian HUBER<br>
Dornierstr. 4<br>
82178 Puchheim<br>
Germany<br>
email: <a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-brains.de</a><br>
phone: +49-89-18 94 741 - 16<br>
fax:   +49-89-18 94 741 - 08<br>
<br>
Registergericht: Amtsgericht München<br>
Registernummer: HRB 157899<br>
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler<br>
Unsere Datenschutzerklärung finden Sie hier:<br>
<a href="https://embedded-brains.de/datenschutzerklaerung/" rel="noreferrer" target="_blank">https://embedded-brains.de/datenschutzerklaerung/</a><br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a></blockquote></div></div>