On Wed, Jun 17, 2020 at 11:17 PM Utkarsh Rai <utkarsh.ra...@gmail.com> wrote:
>
> Hello,
> For my GSoC project, I need to set/unset the memory attributes of the thread 
> stacks on each context switch.
> Right now I am making changes to the CPU-specific context switch assembly 
> code. The arm/../cpu.h file has the Context_Control structure, which is used 
> to store the relevant registers at each context switch.
>  I have been trying to add the stack attributes to this structure from the 
> 'rtems/score/stackmanagement.h' header (This header has been defined by me 
> and has the stack attributes structure).

When you change the context structure, there might be other places you
need to update besides the context switch itself. One that comes to
mind is _CPU_Context_validate. Maybe chase down where the context is
referenced.

>  After that, I would initialize the stack attributes in 
> _CPU_Context_Initialize.
>  For unsetting stack memories, I plan on making changes to 
> _CPU_Context_Switch().
> The problem is when I try to include the header in cpu.h it breaks the build 
> with the following error -
>
> '.......
> ........
> /home/utkarsh/sandbox/rtems/5/arm-rtems5/include/machine/_default_types.h: 
> Assembler messages:
> /home/utkarsh/sandbox/rtems/cpukit/include/rtems/score/stackmanagement.h:42: 
> Error: junk at end of line, first unrecognized character is `}'
> /home/utkarsh/sandbox/rtems/cpukit/include/rtems/score/stackmanagement.h:44: 
> Error: bad instruction `typedef struct stack_attr_prot'
> /home/utkarsh/sandbox/rtems/cpukit/include/rtems/score/stackmanagement.h:45: 
> Error: junk at end of line, first unrecognized character is `{'
> /home/utkarsh/sandbox/rtems/cpukit/include/rtems/score/stackmanagement.h:46: 
> Error: bad instruction `stack_attr_shared *shared_stacks'
> /home/utkarsh/sandbox/rtems/cpukit/include/rtems/score/stackmanagement.h:47: 
> Error: bad instruction `stack_attr Base'
> /home/utkarsh/sandbox/rtems/cpukit/include/rtems/score/stackmanagement.h:48: 
> Error: bad instruction `_bool current_stack'
> {standard input}: Error: invalid operands (*UND* and *ABS* sections) for `*' 
> when setting `iter'
> Makefile:11563: recipe for target 'score/cpu/arm/arm-context-validate.o' 
> failed
> make[4]: *** [score/cpu/arm/arm-context-validate.o] Error 1
> '
> I have defined the stackmanagement.h header in the cpukit/headers.am and this 
> is obviously an assembler error.  Can someone point out what is it that I am 
> doing wrong?
>

When a .h file can be included in both C and ASM, you need to separate
some of it, and disable some of it in ASM scope that doesn't
understand C data types. See, for example,
cpukit/include/rtems/score/percpu.h

> I also would like to verify if the above way of handling context switching is 
> the appropriate way to proceed.

Seems like the right general idea. We probably need a CPP switch to
enable/disable this stuff though.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to