On Tue, Jul 31, 2018 at 2:52 PM, Amaan Cheval <amaan.che...@gmail.com>
wrote:

> Hi Chris!
>
> I currently have code like this in c/src/lib/libbsp/x86_64/amd64/
> Makefile.am:
>
>     librtemsbsp_a_SOURCES +=
> ../../../../../../bsps/x86_64/amd64/interrupts/handlers.c
>     # XXX: Needed to use GCC "interrupt" attribute directives - can we
> pass these
>     # flags only for the handlers.c source file (compile to an object
> file first and
>     # then link with the rest for librtemsbsp.a?)
>     librtemsbsp_a_CFLAGS = -mgeneral-regs-only
>
> The CFLAGS arg is required to allow us to use
> "__attribute__((interrupt))" to setup interrupt handlers in C. (See
> [1] and ctrl+f "interrupt" for more.)
>
> Is there a way to not force the CFLAGS for _all_ of librtemsbsp, but
> to limit it only to handlers.c?
>
> If not, is the above code something that would be acceptable to have
> upstream?
>
> [1] https://gcc.gnu.org/onlinedocs/gcc/x86-Function-
> Attributes.html#x86-Function-Attributes


Are we basically talking about the outermost layer of your interrupt
dispatching?


Have you looked at the basic approach taken by the other ports? They end
up switching the stack pointer to a dedicated stack on the outermost
interrupt
and, if a context switch/dispatch is needed, arrange for the interrupted
task to call _Thread_Dispatch.But tinker with its stack so some registers
are saved and it looks like it made the call itself.

If you can do it in C, I am ok with an attribute. I just don't think you
can pull off all the stack and return to dispatch magic that way.

--joel
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to