[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 13 Nov 2015 11:18:17 +0000 (12:18 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 13 Nov 2015 11:18:17 +0000 (12:18 +0100)
2015-11-13  Ed Schonberg  <schonberg@adacore.com>

* sem_ch4.adb (Constant_Indexing_OK): If the indexing is the
prefix of a procedure call assume that constant indexing is
not chosen.

2015-11-13  Eric Botcazou  <ebotcazou@adacore.com>

* sigtramp.h: Fix formatting throughout, do not include other
headers, add missing preprocessor condition and 'extern' keywords.
* sigtramp-armdroid.c: Include <sys/ucontext.h>.
* init.c [Android]: Likewise.

From-SVN: r230304

gcc/ada/ChangeLog
gcc/ada/init.c
gcc/ada/sem_ch4.adb
gcc/ada/sigtramp-armdroid.c
gcc/ada/sigtramp.h

index 22fa12f..90910ca 100644 (file)
@@ -1,3 +1,16 @@
+2015-11-13  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch4.adb (Constant_Indexing_OK): If the indexing is the
+       prefix of a procedure call assume that constant indexing is
+       not chosen.
+
+2015-11-13  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * sigtramp.h: Fix formatting throughout, do not include other
+       headers, add missing preprocessor condition and 'extern' keywords.
+       * sigtramp-armdroid.c: Include <sys/ucontext.h>.
+       * init.c [Android]: Likewise.
+
 2015-11-13  Eric Botcazou  <ebotcazou@adacore.com>
 
        * init.c [Darwin/arm64] (__gnat_sigtramp): Do not increment PC,
index 65761b0..f0afc40 100644 (file)
@@ -2530,6 +2530,7 @@ __gnat_install_handler (void)
 /*******************/
 
 #include <signal.h>
+#include <sys/ucontext.h>
 #include "sigtramp.h"
 
 #define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
index 373c9e8..1b14550 100644 (file)
@@ -7296,7 +7296,8 @@ package body Sem_Ch4 is
 
             --  If the indexed component is a prefix it may be the first actual
             --  of a prefixed call. Retrieve the called entity, if any, and
-            --  check its first formal.
+            --  check its first formal. Determine if the context is a procedure
+            --  or function call.
 
             elsif Nkind (Parent (Par)) = N_Selected_Component then
                declare
@@ -7306,9 +7307,19 @@ package body Sem_Ch4 is
                begin
                   if Present (Nam)
                     and then Is_Overloadable (Nam)
-                    and then Present (First_Formal (Nam))
                   then
-                     return Ekind (First_Formal (Nam)) = E_In_Parameter;
+                     if Nkind (Parent (Parent (Par)))
+                        = N_Procedure_Call_Statement
+                     then
+                        return False;
+
+                     else
+                        if Ekind (Nam) = E_Function
+                          and then Present (First_Formal (Nam))
+                        then
+                           return Ekind (First_Formal (Nam)) = E_In_Parameter;
+                        end if;
+                     end if;
                   end if;
                end;
 
index a538064..d4f61b6 100644 (file)
@@ -33,6 +33,8 @@
  * ARM-Android version of the __gnat_sigtramp service *
  ******************************************************/
 
+#include <sys/ucontext.h>
+
 #include "sigtramp.h"
 /* See sigtramp.h for a general explanation of functionality.  */
 
index 7af6be3..930365f 100644 (file)
  *                                                                          *
  ****************************************************************************/
 
-/* On targets where this is implemented, we resort to a signal handler
-   trampoline to set-up the DWARF Call Frame Information that let unwinders
-   walk through the signal frame up into the interrupted application code.
-   This file introduces the relevant declarations.  */
-
-/* This file should only be #included on targets that do implement the
-   trampoline, which needs to expose the following interface:  */
+/* On targets where this is implemented, we resort to a signal trampoline to
+   set up the DWARF Call Frame Information that lets unwinders walk through
+   the signal frame up into the interrupted user code.  This file introduces
+   the relevant declarations.  It should only be #included on targets that do
+   implement the signal trampoline.  */
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#ifdef __ANDROID__
-#include <stdlib.h>
-#include <sys/ucontext.h>
-#endif
-
-  /* This typedef signature sometimes conflicts with the sighandler_t from
-     system headers so call it something unique.  */
-  typedef void __sigtramphandler_t (int signo, void *siginfo, void *sigcontext);
+/* This typedef signature sometimes conflicts with the sighandler_t from
+   system headers so call it something unique.  */
+typedef void __sigtramphandler_t (int signo, void *siginfo, void *sigcontext);
 
-#if CPU == SIMNT || CPU == SIMPENTIUM || CPU == SIMLINUX
-  /* Vxsim requires a specially compiled handler.  */
-  void __gnat_sigtramp_vxsim  (int signo, void *siginfo, void *sigcontext,
-                        __sigtramphandler_t * handler);
+#if defined(__vxworks) && (CPU == SIMNT || CPU == SIMPENTIUM || CPU == SIMLINUX)
+/* Vxsim requires a specially compiled handler.  */
+extern void __gnat_sigtramp_vxsim (int signo, void *siginfo, void *sigcontext,
+                                  __sigtramphandler_t * handler);
 #else
-  void __gnat_sigtramp  (int signo, void *siginfo, void *sigcontext,
-                        __sigtramphandler_t * handler);
+extern void __gnat_sigtramp (int signo, void *siginfo, void *sigcontext,
+                            __sigtramphandler_t * handler);
 #endif
 
-  /* To be called from an established signal handler.  Setup the DWARF CFI
-     bits letting unwinders walk through the signal frame up into the
-     interrupted application code, and then call HANDLER (SIGNO, SIGINFO,
-     SIGCONTEXT).
+/* The signal trampoline is to be called from an established signal handler.
+   It sets up the DWARF CFI and calls HANDLER (SIGNO, SIGINFO, SIGCONTEXT).
 
-     The sigtramp construct makes it so that the unwinder jumps over it + the
-     signal handler + the kernel frame. For a typical backtrace from the raise
-     function:
+   The trampoline construct makes it so that the unwinder jumps over it + the
+   signal handler + the kernel frame.  For a typical backtrace from the raise
+   function:
 
      #0  __gnat_Unwind_RaiseException
      #1  Raise_From_Signal_Handler
@@ -76,11 +67,11 @@ extern "C" {
      #5  <kernel frame>
      #6  interrupted function
 
-     The unwinder will unwind frames 0, 1 and 2 as usual. But the CFI of frame
-     3 is set up as if the caller of frame 3 was frame 6 so, when frame 3 is
-     unwound, the unwinder ends up in frame 6 directly. It's possible to do so
-     since the kernel has saved the context of frame 6 and passed it on to
-     __gnat_sigtramp.  */
+   The unwinder will unwind frames 0, 1 and 2 as usual.  But the CFI of frame
+   3 is set up as if the caller of frame 3 was frame 6 so, when frame 3 is
+   unwound, the unwinder ends up in frame 6 directly.  It's possible to do so
+   because the kernel has saved the context of frame 6 and passed it on to
+   __gnat_error_handler and __gnat_sigtramp.  */
 
 #ifdef __cplusplus
 }