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
}