This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][ping][Ada] Add sa_handler_pos to s-linux to handle mipsel-linux


Ping.

Laurent

On Tue, 2009-02-17 at 20:21 +0100, Laurent GUERBY wrote:
> On Thu, 2009-02-05 at 21:13 +0100, Laurent GUERBY wrote:
> > Hi,
> > 
> > On mipsel-linux a few ACATS tasking test abort during runtime:
> > 
> > http://gcc.gnu.org/ml/gcc-testresults/2009-02/msg00069.html
> > 
> > The struct sigaction has yet a different layout on mipsel-linux as shown 
> > in this extract from /usr/include/bits/sigaction.h:
> > 
> > /* Structure describing the action to be taken when a signal arrives.  */
> > struct sigaction
> >   {
> >     /* Special flags.  */
> >     unsigned int sa_flags;
> > 
> >     /* Signal handler.  */
> > #ifdef __USE_POSIX199309
> >     union
> >       {
> > 	/* Used if SA_SIGINFO is not set.  */
> > 	__sighandler_t sa_handler;
> > 	/* Used if SA_SIGINFO is set.  */
> > 	void (*sa_sigaction) (int, siginfo_t *, void *);
> >       }
> >     __sigaction_handler;
> > # define sa_handler    __sigaction_handler.sa_handler
> > # define sa_sigaction  __sigaction_handler.sa_sigaction
> > #else
> >     __sighandler_t sa_handler;
> > #endif
> >     /* Additional set of signals to be blocked.  */
> >     __sigset_t sa_mask;
> > 
> >     /* The ABI says here are two unused ints following. */
> >     /* Restore handler.  */
> >     void (*sa_restorer) (void);
> > 
> > #if _MIPS_SZPTR < 64
> >     int sa_resv[1];
> > #endif
> >   };
> > 
> > So this needs adding a constant to s-linux to relocate sa_handler in s-osinte-linux
> > which is no longer the first field on all linux platforms.
> > 
> > Ok for trunk if testing passes on x86_64-linux and mips-linux?
> > 
> > After this one, there should be only one FAIL for ACATS on mipsel-linux.
> 
> Here is the testresult with the (complete below) patch, only one Ada
> FAIL left as expected:
> 
> http://gcc.gnu.org/ml/gcc-testresults/2009-02/msg01635.html
> 
> Ok to commit?
> 
> Laurent
> 
> 2009-02-05  Laurent GUERBY  <laurent@guerby.net>
> 
>         * s-linux.ads, s-linux-alpha.ads, s-linux-hppa.ads, 
>         osinte-linux.ads: Define sa_handler_pos.
>         * s-osinte-linux.ads: Use it.
>         * s-linux-mipsel.ads: New.
>         * gcc-interface/Makefile.in: Use it.
> 
> Index: gcc/ada/s-linux.ads
> ===================================================================
> --- gcc/ada/s-linux.ads	(revision 144242)
> +++ gcc/ada/s-linux.ads	(working copy)
> @@ -95,8 +95,9 @@
>  
>     --  struct_sigaction offsets
>  
> -   sa_mask_pos  : constant := Standard'Address_Size / 8;
> -   sa_flags_pos : constant := 128 + sa_mask_pos;
> +   sa_handler_pos : constant := 0;
> +   sa_mask_pos    : constant := Standard'Address_Size / 8;
> +   sa_flags_pos   : constant := 128 + sa_mask_pos;
>  
>     SA_SIGINFO  : constant := 16#04#;
>     SA_ONSTACK  : constant := 16#08000000#;
> Index: gcc/ada/s-osinte-linux.ads
> ===================================================================
> --- gcc/ada/s-osinte-linux.ads	(revision 144242)
> +++ gcc/ada/s-osinte-linux.ads	(working copy)
> @@ -510,9 +510,9 @@
>  
>     pragma Warnings (Off);
>     for struct_sigaction use record
> -      sa_handler at                  0 range 0 .. Standard'Address_Size - 1;
> -      sa_mask    at Linux.sa_mask_pos  range 0 .. 1023;
> -      sa_flags   at Linux.sa_flags_pos range 0 .. Standard'Address_Size - 1;
> +      sa_handler at Linux.sa_handler_pos range 0 .. Standard'Address_Size - 1;
> +      sa_mask    at Linux.sa_mask_pos    range 0 .. 1023;
> +      sa_flags   at Linux.sa_flags_pos   range 0 .. Standard'Address_Size - 1;
>     end record;
>     --  We intentionally leave sa_restorer unspecified and let the compiler
>     --  append it after the last field, so disable corresponding warning.
> Index: gcc/ada/s-linux-hppa.ads
> ===================================================================
> --- gcc/ada/s-linux-hppa.ads	(revision 144242)
> +++ gcc/ada/s-linux-hppa.ads	(working copy)
> @@ -97,8 +97,9 @@
>  
>     --  struct_sigaction offsets
>  
> -   sa_flags_pos : constant := Standard'Address_Size / 8;
> -   sa_mask_pos  : constant := sa_flags_pos * 2;
> +   sa_handler_pos : constant := 0;
> +   sa_flags_pos   : constant := Standard'Address_Size / 8;
> +   sa_mask_pos    : constant := sa_flags_pos * 2;
>  
>     SA_SIGINFO : constant := 16#10#;
>     SA_ONSTACK : constant := 16#01#;
> Index: gcc/ada/gcc-interface/Makefile.in
> ===================================================================
> --- gcc/ada/gcc-interface/Makefile.in	(revision 144242)
> +++ gcc/ada/gcc-interface/Makefile.in	(working copy)
> @@ -1451,7 +1451,7 @@
>    a-intnam.ads<a-intnam-linux.ads \
>    s-inmaop.adb<s-inmaop-posix.adb \
>    s-intman.adb<s-intman-posix.adb \
> -  s-linux.ads<s-linux.ads \
> +  s-linux.ads<s-linux-mipsel.ads \
>    s-osinte.adb<s-osinte-posix.adb \
>    s-osinte.ads<s-osinte-linux.ads \
>    s-osprim.adb<s-osprim-posix.adb \
> Index: gcc/ada/s-linux-alpha.ads
> ===================================================================
> --- gcc/ada/s-linux-alpha.ads	(revision 144242)
> +++ gcc/ada/s-linux-alpha.ads	(working copy)
> @@ -105,8 +105,9 @@
>  
>     --  struct_sigaction offsets
>  
> -   sa_mask_pos  : constant := Standard'Address_Size / 8;
> -   sa_flags_pos : constant := 128 + sa_mask_pos;
> +   sa_handler_pos : constant := 0;
> +   sa_mask_pos    : constant := Standard'Address_Size / 8;
> +   sa_flags_pos   : constant := 128 + sa_mask_pos;
>  
>     SA_SIGINFO  : constant := 16#40#;
>     SA_ONSTACK  : constant := 16#01#;
> Index: gcc/ada/s-linux-mipsel.ads
> ===================================================================
> --- gcc/ada/s-linux-mipsel.ads	(revision 0)
> +++ gcc/ada/s-linux-mipsel.ads	(revision 0)
> @@ -0,0 +1,120 @@
> +------------------------------------------------------------------------------
> +--                                                                          --
> +--                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
> +--                                                                          --
> +--                          S Y S T E M .  L I N U X                        --
> +--                                                                          --
> +--                                  S p e c                                 --
> +--                                                                          --
> +--             Copyright (C) 2009, Free Software Foundation, Inc.           --
> +--                                                                          --
> +-- GNARL is free software; you can  redistribute it  and/or modify it under --
> +-- terms of the  GNU General Public License as published  by the Free Soft- --
> +-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
> +-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
> +-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
> +-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
> +-- for  more details.  You should have  received  a copy of the GNU General --
> +-- Public License  distributed with GNARL; see file COPYING.  If not, write --
> +-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
> +-- Boston, MA 02110-1301, USA.                                              --
> +--                                                                          --
> +-- As a special exception,  if other files  instantiate  generics from this --
> +-- unit, or you link  this unit with other files  to produce an executable, --
> +-- this  unit  does not  by itself cause  the resulting  executable  to  be --
> +-- covered  by the  GNU  General  Public  License.  This exception does not --
> +-- however invalidate  any other reasons why  the executable file  might be --
> +-- covered by the  GNU Public License.                                      --
> +--                                                                          --
> +------------------------------------------------------------------------------
> +
> +--  This is the mipsel version of this package
> +
> +--  This package encapsulates cpu specific differences between implementations
> +--  of GNU/Linux, in order to share s-osinte-linux.ads.
> +
> +--  PLEASE DO NOT add any with-clauses to this package or remove the pragma
> +--  Preelaborate. This package is designed to be a bottom-level (leaf) package
> +
> +package System.Linux is
> +   pragma Preelaborate;
> +
> +   -----------
> +   -- Errno --
> +   -----------
> +
> +   EAGAIN    : constant := 11;
> +   EINTR     : constant := 4;
> +   EINVAL    : constant := 22;
> +   ENOMEM    : constant := 12;
> +   EPERM     : constant := 1;
> +   ETIMEDOUT : constant := 110;
> +
> +   -------------
> +   -- Signals --
> +   -------------
> +
> +   SIGHUP     : constant := 1; --  hangup
> +   SIGINT     : constant := 2; --  interrupt (rubout)
> +   SIGQUIT    : constant := 3; --  quit (ASCD FS)
> +   SIGILL     : constant := 4; --  illegal instruction (not reset)
> +   SIGTRAP    : constant := 5; --  trace trap (not reset)
> +   SIGIOT     : constant := 6; --  IOT instruction
> +   SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
> +   SIGFPE     : constant := 8; --  floating point exception
> +   SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
> +   SIGBUS     : constant := 7; --  bus error
> +   SIGSEGV    : constant := 11; --  segmentation violation
> +   SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
> +   SIGALRM    : constant := 14; --  alarm clock
> +   SIGTERM    : constant := 15; --  software termination signal from kill
> +   SIGUSR1    : constant := 10; --  user defined signal 1
> +   SIGUSR2    : constant := 12; --  user defined signal 2
> +   SIGCLD     : constant := 17; --  alias for SIGCHLD
> +   SIGCHLD    : constant := 17; --  child status change
> +   SIGPWR     : constant := 30; --  power-fail restart
> +   SIGWINCH   : constant := 28; --  window size change
> +   SIGURG     : constant := 23; --  urgent condition on IO channel
> +   SIGPOLL    : constant := 29; --  pollable event occurred
> +   SIGIO      : constant := 29; --  I/O now possible (4.2 BSD)
> +   SIGLOST    : constant := 29; --  File lock lost
> +   SIGSTOP    : constant := 19; --  stop (cannot be caught or ignored)
> +   SIGTSTP    : constant := 20; --  user stop requested from tty
> +   SIGCONT    : constant := 18; --  stopped process has been continued
> +   SIGTTIN    : constant := 21; --  background tty read attempted
> +   SIGTTOU    : constant := 22; --  background tty write attempted
> +   SIGVTALRM  : constant := 26; --  virtual timer expired
> +   SIGPROF    : constant := 27; --  profiling timer expired
> +   SIGXCPU    : constant := 24; --  CPU time limit exceeded
> +   SIGXFSZ    : constant := 25; --  filesize limit exceeded
> +   SIGUNUSED  : constant := 31; --  unused signal (GNU/Linux)
> +   SIGSTKFLT  : constant := 16; --  coprocessor stack fault (Linux)
> +   SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
> +   SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
> +   SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
> +
> +   --  struct_sigaction offsets
> +
> +   sa_handler_pos : constant := Standard'Address_Size / 8;
> +   sa_mask_pos    : constant := 2 * Standard'Address_Size / 8;
> +   sa_flags_pos   : constant := 0;
> +
> +   SA_SIGINFO  : constant := 16#04#;
> +   SA_ONSTACK  : constant := 16#08000000#;
> +
> +   type struct_pthread_fast_lock is record
> +      status   : Long_Integer;
> +      spinlock : Integer;
> +   end record;
> +   pragma Convention (C, struct_pthread_fast_lock);
> +
> +   type pthread_mutex_t is record
> +      m_reserved : Integer;
> +      m_count    : Integer;
> +      m_owner    : System.Address;
> +      m_kind     : Integer;
> +      m_lock     : struct_pthread_fast_lock;
> +   end record;
> +   pragma Convention (C, pthread_mutex_t);
> +
> +end System.Linux;
> 
> 
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]