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