[PATCH] libgloss/arm: Remove abort.

Jeff Johnston jjohnstn@redhat.com
Thu May 25 19:45:00 GMT 2006


I have one comment about the patch.  It appears you have changed the 
non-RDI behavior.  Currently, non-RDI abort calls _exit(17) which ends 
up being a call to _kill(17, -1).  In your new scheme, the non-RDI abort 
will end up calling _kill with some pid and a sig set to SIGABRT.  This 
doesn't match.  I believe a simple check for SIGABRT in the non-RDI 
section of _kill would allow exiting with the previous behavior if that 
is truly intended.

-- Jeff J.

Shaun Jackman wrote:
> This patch removes abort(3) from libgloss for the ARM target, using
> instead the stdlib definition provided by newlib. It maintains the
> previous semantics of abort(3) on RDI by throwing a
> ADP_Stopped_RunTimeError error if SIGABRT is passed to kill(2).
> 
> My reason for this patch is to remove the need for libgloss to provide 
> abort.
> 
> Cheers,
> Shaun
> 
> 2006-05-24  Shaun Jackman  <sjackman@gmail.com>
> 
>     * newlib/configure.host    (newlib_cflags): Remove -DABORT_PROVIDED.
>     * libgloss/arm/syscalls.c (kill) [ARM_RDI_MONITOR]: Use the signal
>     argument to choose a suitable ADP exception.
>     * libgloss/arm/libcfunc.c (abort): Remove this function.
> 
> Index: newlib/configure.host
> ===================================================================
> RCS file: /cvs/src/src/newlib/configure.host,v
> retrieving revision 1.79
> diff -u -r1.79 configure.host
> --- newlib/configure.host    21 Mar 2006 20:02:13 -0000    1.79
> +++ newlib/configure.host    24 May 2006 19:08:41 -0000
> @@ -511,7 +513,7 @@
>     ;;
>   arm-*-*)
>      syscall_dir=syscalls
> -    newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
> +    newlib_cflags="${newlib_cflags} -DHAVE_GETTIMEOFDAY"
>  # If newlib is supplying syscalls, select which debug protocol is being 
> used.
> # ARM_RDP_MONITOR selects the Demon monitor.
> # ARM_RDI_MONITOR selects the Angel monitor.
> Index: libgloss/arm/syscalls.c
> ===================================================================
> RCS file: /cvs/src/src/libgloss/arm/syscalls.c,v
> retrieving revision 1.9
> diff -u -r1.9 syscalls.c
> --- libgloss/arm/syscalls.c    7 Feb 2006 18:46:23 -0000    1.9
> +++ libgloss/arm/syscalls.c    24 May 2006 19:08:41 -0000
> @@ -13,6 +13,7 @@
> #include <sys/times.h>
> #include <errno.h>
> #include <reent.h>
> +#include <signal.h>
> #include <unistd.h>
>  #include "swi.h"
> 
> @@ -463,9 +464,15 @@
> {
>   (void)pid; (void)sig;
>  #ifdef ARM_RDI_MONITOR
> -  /* Note: Both arguments are thrown away.  */
> -  return do_AngelSWI (AngelSWI_Reason_ReportException,
> -              (void *) ADP_Stopped_ApplicationExit);
> +  /* Note: The pid argument is thrown away.  */
> +  switch (sig) {
> +      case SIGABRT:
> +          return do_AngelSWI (AngelSWI_Reason_ReportException,
> +                  (void *) ADP_Stopped_RunTimeError);
> +      default:
> +          return do_AngelSWI (AngelSWI_Reason_ReportException,
> +                  (void *) ADP_Stopped_ApplicationExit);
> +  }
> #else
>   asm ("swi %a0" :: "i" (SWI_Exit));
>  #endif
> Index: libgloss/arm/libcfunc.c
> ===================================================================
> RCS file: /cvs/src/src/libgloss/arm/libcfunc.c,v
> retrieving revision 1.7
> diff -u -r1.7 libcfunc.c
> --- libgloss/arm/libcfunc.c    7 Feb 2006 18:46:23 -0000    1.7
> +++ libgloss/arm/libcfunc.c    24 May 2006 19:08:41 -0000
> @@ -24,18 +24,6 @@
> }
>  #endif /* ARM_RDI_MONITOR */
> 
> -void
> -abort (void)
> -{
> -  extern void _exit (int n);
> -#ifdef ARM_RDI_MONITOR
> -  do_AngelSWI (AngelSWI_Reason_ReportException,
> -          (void *) ADP_Stopped_RunTimeError);
> -#else
> -  _exit(17);
> -#endif
> -}
> -
> unsigned __attribute__((weak))
> alarm (unsigned seconds)
> {
> 
> 
> ------------------------------------------------------------------------
> 
> 2006-05-24  Shaun Jackman  <sjackman@gmail.com>
> 
> 	* newlib/configure.host	(newlib_cflags): Remove -DABORT_PROVIDED.
> 	* libgloss/arm/syscalls.c (kill) [ARM_RDI_MONITOR]: Use the signal
> 	argument to choose an ADP exception reason.
> 	* libgloss/arm/libcfunc.c (abort): Remove this function.
> 
> Index: newlib/configure.host
> ===================================================================
> RCS file: /cvs/src/src/newlib/configure.host,v
> retrieving revision 1.79
> diff -u -r1.79 configure.host
> --- newlib/configure.host	21 Mar 2006 20:02:13 -0000	1.79
> +++ newlib/configure.host	24 May 2006 19:08:41 -0000
> @@ -511,7 +513,7 @@
>  	;;
>    arm-*-*)
>  	syscall_dir=syscalls
> -	newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
> +	newlib_cflags="${newlib_cflags} -DHAVE_GETTIMEOFDAY"
>  # If newlib is supplying syscalls, select which debug protocol is being used.
>  # ARM_RDP_MONITOR selects the Demon monitor.
>  # ARM_RDI_MONITOR selects the Angel monitor.
> Index: libgloss/arm/syscalls.c
> ===================================================================
> RCS file: /cvs/src/src/libgloss/arm/syscalls.c,v
> retrieving revision 1.9
> diff -u -r1.9 syscalls.c
> --- libgloss/arm/syscalls.c	7 Feb 2006 18:46:23 -0000	1.9
> +++ libgloss/arm/syscalls.c	24 May 2006 19:08:41 -0000
> @@ -13,6 +13,7 @@
>  #include <sys/times.h>
>  #include <errno.h>
>  #include <reent.h>
> +#include <signal.h>
>  #include <unistd.h>
>  #include "swi.h"
>  
> @@ -463,9 +464,15 @@
>  {
>    (void)pid; (void)sig;
>  #ifdef ARM_RDI_MONITOR
> -  /* Note: Both arguments are thrown away.  */
> -  return do_AngelSWI (AngelSWI_Reason_ReportException,
> -		      (void *) ADP_Stopped_ApplicationExit);
> +  /* Note: The pid argument is thrown away.  */
> +  switch (sig) {
> +	  case SIGABRT:
> +		  return do_AngelSWI (AngelSWI_Reason_ReportException,
> +				  (void *) ADP_Stopped_RunTimeError);
> +	  default:
> +		  return do_AngelSWI (AngelSWI_Reason_ReportException,
> +				  (void *) ADP_Stopped_ApplicationExit);
> +  }
>  #else
>    asm ("swi %a0" :: "i" (SWI_Exit));
>  #endif
> Index: libgloss/arm/libcfunc.c
> ===================================================================
> RCS file: /cvs/src/src/libgloss/arm/libcfunc.c,v
> retrieving revision 1.7
> diff -u -r1.7 libcfunc.c
> --- libgloss/arm/libcfunc.c	7 Feb 2006 18:46:23 -0000	1.7
> +++ libgloss/arm/libcfunc.c	24 May 2006 19:08:41 -0000
> @@ -24,18 +24,6 @@
>  }
>  #endif /* ARM_RDI_MONITOR */
>  
> -void
> -abort (void)
> -{
> -  extern void _exit (int n);
> -#ifdef ARM_RDI_MONITOR
> -  do_AngelSWI (AngelSWI_Reason_ReportException,
> -	      (void *) ADP_Stopped_RunTimeError);
> -#else
> -  _exit(17);
> -#endif
> -}
> -
>  unsigned __attribute__((weak))
>  alarm (unsigned seconds)
>  {
> 
> 
> 



More information about the Newlib mailing list