[PATCH 2/2] SPARC: add syscall 1 (exit) function entry point

Joel Sherrill joel.sherrill at OARcorp.com
Fri May 23 14:02:21 UTC 2014


This looks ok.

If no one else comments, I will commit these two.
On 5/23/2014 8:52 AM, Daniel Hellstrom wrote:
> The exit SPARC system call doesn't have a function entry
> point like the others do. This is probably why people use
> TA 0x0 instruction directly for shutting down the system.
> ---
>  c/src/lib/libcpu/sparc/syscall/syscall.S   |   13 +++++++++++++
>  cpukit/score/cpu/sparc/rtems/score/sparc.h |   25 +++++++++++++++++++++++++
>  2 files changed, 38 insertions(+), 0 deletions(-)
>
> diff --git a/c/src/lib/libcpu/sparc/syscall/syscall.S b/c/src/lib/libcpu/sparc/syscall/syscall.S
> index 2d53ebe..a0a860c 100644
> --- a/c/src/lib/libcpu/sparc/syscall/syscall.S
> +++ b/c/src/lib/libcpu/sparc/syscall/syscall.S
> @@ -29,6 +29,10 @@
>           *    l1 = pc
>           *    l2 = npc
>           *    g1 = system call id
> +         *
> +         *  System Call 1 (exit):
> +         *    g2 = additional exit code 1
> +         *    g3 = additional exit code 2
>           */
>  
>          PUBLIC(syscall)
> @@ -70,4 +74,13 @@ SYM(sparc_enable_interrupts):
>  	retl
>  	 ta	0
>  
> +        PUBLIC(sparc_syscall_exit)
> +
> +SYM(sparc_syscall_exit):
> +
> +	mov	SYS_exit, %g1
> +	mov	%o0, %g2	! Additional exit code 1
> +	mov	%o1, %g3	! Additional exit code 2
> +	ta	0
> +
>  /* end of file */
> diff --git a/cpukit/score/cpu/sparc/rtems/score/sparc.h b/cpukit/score/cpu/sparc/rtems/score/sparc.h
> index 4568300..75f6d96 100644
> --- a/cpukit/score/cpu/sparc/rtems/score/sparc.h
> +++ b/cpukit/score/cpu/sparc/rtems/score/sparc.h
> @@ -266,6 +266,31 @@ uint32_t sparc_disable_interrupts(void);
>  void sparc_enable_interrupts(uint32_t psr);
>  
>  /**
> + * @brief SPARC exit through system call 1
> + *
> + * This method is invoked to go into system error halt. The optional
> + * arguments can be given to hypervisor, hardware debugger, simulator or
> + * similar.
> + *
> + * System error mode is entered when taking a trap when traps have been
> + * disabled. What happens when error mode is entered depends on the motherboard.
> + * In a typical development systems the CPU relingish control to the debugger,
> + * simulator, hypervisor or similar. The following steps are taken:
> + *
> + * 1. Going into system error mode by Software Trap 0
> + * 2. %g1=1 (syscall 1 - Exit)
> + * 3. %g2=Primary exit code
> + * 4. %g3=Secondary exit code. Dependends on %g2 exit type.
> + *
> + * This function never returns.
> + *
> + * @param[in] exitcode1 Primary exit code stored in CPU g2 register after exit
> + * @param[in] exitcode2 Primary exit code stored in CPU g3 register after exit
> + */
> +void sparc_syscall_exit(uint32_t exitcode1, uint32_t exitcode2)
> +  RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
> +
> +/**
>   * @brief SPARC flash processor interrupts.
>   *
>   * This method is invoked to temporarily enable all maskable interrupts.

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985




More information about the devel mailing list