The VxWorks kernel implementation of __gnat_environ was more convoluted
than it needed to be and had an unneeded dependency on ppGlobalEnviron,
a symbol which Wind River has removed in newer versions of VxWorks. This
patch simplifies the implementation and uses a common implementation for
both VxWorks 6 and 7 kernel mode since they both support envGet.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

        * env.c (__gnat_environ): For VxWorks kernel simply return the
        result of the envGet call. Do this for VxWorks 6 and 7 as they
        both support the same API.
diff --git a/gcc/ada/env.c b/gcc/ada/env.c
--- a/gcc/ada/env.c
+++ b/gcc/ada/env.c
@@ -68,18 +68,9 @@
        envLib.h on VxWorks MILS and VxWorks 653.  */
     #include <vThreadsData.h>
     #include <envLib.h>
-  #elif (_WRS_VXWORKS_MAJOR <= 6)
+  #else
+    /* Kernel mode */
     #include <envLib.h>
-    /* In that mode the following symbol is not defined in any VxWorks
-       include files, prior to vxWorks 7, so we declare it as extern.  */
-    extern char** ppGlobalEnviron;
-  #elif (_WRS_VXWORKS_MAJOR >= 7)
-    /* This should work for kernel mode on VxWorks 7.x.  In 7.2 the tcb
-       is made private, so accessor functions must be used, in 7.0 it
-       is optional but there is no way to distinguish between 7.2
-       and 7.0 since the version.h header file was never updated.  */
-    #include <envLib.h>
-    #include <taskLibCommon.h>
   #endif
 #endif
 
@@ -144,17 +135,11 @@ __gnat_environ (void)
   extern char **environ;
   return environ;
 #else
-  #if defined (__RTP__) || defined (VTHREADS) || (_WRS_VXWORKS_MAJOR <= 6)
+  #if defined (__RTP__) || defined (VTHREADS)
     return environ;
-  #elif (_WRS_VXWORKS_MAJOR >= 7)
-    char **task_environ;
-
-    task_environ = envGet (taskIdSelf ());
-
-    if (task_environ == NULL)
-       return ppGlobalEnviron;
-    else
-       return task_environ;
+  #else
+    /* Kernel mode */
+    return envGet (NULL);
   #endif
 #endif
 }


Reply via email to