diff mbox series

Add conditional include of vxWorks.h for kernel mode

Message ID orsg7xilwh.fsf@lxoliva.fsfla.org
State New
Headers show
Series Add conditional include of vxWorks.h for kernel mode | expand

Commit Message

Alexandre Oliva Dec. 22, 2020, 9:14 p.m. UTC
In kernel mode, an application must include vxWorks.h before any other
system header, this patch adds exactly that to the test that were
failing due to a missing declaration that was found in vxWorks.h.

Regstrapped on x86_64-linux-gnu, and tested with -x-arm-wrs-vxworks7r2.
Ok to install?


from Corentin Gay <gay@adacore.com>
for  gcc/testsuite/ChangeLog

	* gcc.c-torture/execute/ieee/fp-cmp-1.c: Adds conditional
	include directive for VxWorks kernel mode.
	* gcc.c-torture/execute/ieee/fp-cmp-2.c: Likewise.
	* gcc.c-torture/execute/ieee/fp-cmp-3.c: Likewise.
	* gcc.c-torture/execute/pr56982.c: Likewise.
	* gcc.dg/vect/tree-vect.h: Add conditional #include of base
	vxWorks header file required before inclusion of other
	system header file, here signal.h.
	* gcc.dg/c99-stdint-1.c: Likewise.
	* gcc.dg/c99-stdint-2.c: Likewise.
	* gcc.dg/c99-stdint-5.c: Likewise.
	* gcc.dg/declspec-18.c: Likewise.
	* gcc.dg/pr57287-2.c: Likewise.
	* gcc.dg/pr57287.c: Likewise.
	* gcc.dg/pr59920-1.c: Likewise.
	* gcc.dg/pr63748.c: Likewise.
	* gcc.dg/pr78582.c: Likewise.
	* gcc.dg/setjmp-1.c: Likewise.
	* gcc.dg/setjmp-3.c: Likewise.
	* gcc.dg/setjmp-4.c: Likewise.
	* gcc.dg/setjmp-5.c: Likewise.
	* gcc.dg/setjmp-6.c: Likewise.
	* gcc.dg/stdint-width-1.c: Likewise.
	* gcc.dg/torture/pr48542.c: Likewise.
	* gcc.dg/torture/pr59993.c: Likewise.
	* gcc.dg/torture/pr63738.c: Likewise.
	* gcc.dg/torture/pr64728.c: Likewise.
	* gcc.dg/torture/pr66101.c: Likewise.
	* gcc.dg/torture/stackalign/setjmp-3.c: Likewise.
	* gcc.dg/torture/stackalign/setjmp-4.c: Likewise.
---
 .../gcc.c-torture/execute/ieee/fp-cmp-1.c          |    6 ++++++
 .../gcc.c-torture/execute/ieee/fp-cmp-2.c          |    7 +++++++
 .../gcc.c-torture/execute/ieee/fp-cmp-3.c          |    7 +++++++
 gcc/testsuite/gcc.c-torture/execute/pr56982.c      |    7 +++++++
 gcc/testsuite/gcc.dg/c99-stdint-1.c                |    6 ++++++
 gcc/testsuite/gcc.dg/c99-stdint-2.c                |    7 +++++++
 gcc/testsuite/gcc.dg/c99-stdint-5.c                |    6 ++++++
 gcc/testsuite/gcc.dg/declspec-18.c                 |    6 ++++++
 gcc/testsuite/gcc.dg/pr57287-2.c                   |    6 ++++++
 gcc/testsuite/gcc.dg/pr57287.c                     |    6 ++++++
 gcc/testsuite/gcc.dg/pr59920-1.c                   |    6 ++++++
 gcc/testsuite/gcc.dg/pr63748.c                     |    6 ++++++
 gcc/testsuite/gcc.dg/pr78582.c                     |    6 ++++++
 gcc/testsuite/gcc.dg/setjmp-1.c                    |    6 ++++++
 gcc/testsuite/gcc.dg/setjmp-3.c                    |    6 ++++++
 gcc/testsuite/gcc.dg/setjmp-4.c                    |    6 ++++++
 gcc/testsuite/gcc.dg/setjmp-5.c                    |    6 ++++++
 gcc/testsuite/gcc.dg/setjmp-6.c                    |    6 ++++++
 gcc/testsuite/gcc.dg/stdint-width-1.c              |   14 +++++++++++++-
 gcc/testsuite/gcc.dg/torture/pr48542.c             |    6 ++++++
 gcc/testsuite/gcc.dg/torture/pr59993.c             |    6 ++++++
 gcc/testsuite/gcc.dg/torture/pr63738.c             |    6 ++++++
 gcc/testsuite/gcc.dg/torture/pr64728.c             |    6 ++++++
 gcc/testsuite/gcc.dg/torture/pr66101.c             |    6 ++++++
 gcc/testsuite/gcc.dg/torture/stackalign/setjmp-3.c |    6 ++++++
 gcc/testsuite/gcc.dg/torture/stackalign/setjmp-4.c |    6 ++++++
 gcc/testsuite/gcc.dg/vect/tree-vect.h              |    8 ++++++++
 gcc/testsuite/gcc.target/powerpc/pr87466.c         |    6 ++++++
 28 files changed, 181 insertions(+), 1 deletion(-)

Comments

Mike Stump Dec. 29, 2020, 6:15 p.m. UTC | #1
On Dec 22, 2020, at 1:14 PM, Alexandre Oliva <oliva@adacore.com> wrote:
> 
> In kernel mode, an application must include vxWorks.h before any other
> system header, this patch adds exactly that to the test that were
> failing due to a missing declaration that was found in vxWorks.h.

I'm inclined to rather have a -include vxWorks.h method where you figure out when this should be done and add it to the command line flags as necessary, that, or have the gcc includes mechanism automatically include the file itself when those conditions are present.  Although, yet more possibilities exist, like knowing what from that file is necessary, and builtinizing that content so that the tests pass anyway.

Thoughts?
Alexandre Oliva Jan. 13, 2021, 4:49 p.m. UTC | #2
On Dec 29, 2020, Mike Stump <mikestump@comcast.net> wrote:

> On Dec 22, 2020, at 1:14 PM, Alexandre Oliva <oliva@adacore.com> wrote:
>> 
>> In kernel mode, an application must include vxWorks.h before any other
>> system header, this patch adds exactly that to the test that were
>> failing due to a missing declaration that was found in vxWorks.h.

> I'm inclined to rather have a -include vxWorks.h method where you
> figure out when this should be done and add it to the command line
> flags as necessary, that, or have the gcc includes mechanism
> automatically include the file itself when those conditions are
> present.  Although, yet more possibilities exist, like knowing what
> from that file is necessary, and builtinizing that content so that the
> tests pass anyway.

> Thoughts?

I've looked into some alternatives, but in the end realized that this
patch was only needed for legacy versions of the target system, so we
might as well keep it internal and eventually phase it out.  Patch
withdrawn.  Thanks,
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c
index 0655c73a1f8b8..4664d7258c06b 100644
--- a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c
+++ b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c
@@ -1,3 +1,9 @@ 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #ifndef SIGNAL_SUPPRESS
 #include <signal.h>
 #endif
diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c
index 0f4c6f145f1a2..60ca7461cd993 100644
--- a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c
+++ b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c
@@ -1,3 +1,10 @@ 
+
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #ifndef SIGNAL_SUPPRESS
 #include <signal.h>
 #endif
diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c
index 710b85ccb2a95..62de1f1fbf2a3 100644
--- a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c
+++ b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c
@@ -1,3 +1,10 @@ 
+
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #ifndef SIGNAL_SUPPRESS
 #include <signal.h>
 #endif
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr56982.c b/gcc/testsuite/gcc.c-torture/execute/pr56982.c
index 0fa9c8ab4ba82..b5f54d6c192ef 100644
--- a/gcc/testsuite/gcc.c-torture/execute/pr56982.c
+++ b/gcc/testsuite/gcc.c-torture/execute/pr56982.c
@@ -1,4 +1,11 @@ 
 /* { dg-require-effective-target indirect_jumps } */
+
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 extern void abort (void);
diff --git a/gcc/testsuite/gcc.dg/c99-stdint-1.c b/gcc/testsuite/gcc.dg/c99-stdint-1.c
index f5c2cda77c9c0..cef8309d8033c 100644
--- a/gcc/testsuite/gcc.dg/c99-stdint-1.c
+++ b/gcc/testsuite/gcc.dg/c99-stdint-1.c
@@ -12,6 +12,12 @@ 
 /* { dg-require-effective-target ptr32plus } */
 /* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <limits.h>
 #include <stdint.h>
 /* This and the later SIG_ATOMIC_* tests should be appropriately
diff --git a/gcc/testsuite/gcc.dg/c99-stdint-2.c b/gcc/testsuite/gcc.dg/c99-stdint-2.c
index 08d9f6023d9f9..8ffb7261a58ff 100644
--- a/gcc/testsuite/gcc.dg/c99-stdint-2.c
+++ b/gcc/testsuite/gcc.dg/c99-stdint-2.c
@@ -7,4 +7,11 @@ 
 
 /* The test is that there are no diagnostics, so just include the
    hosted version.  */
+
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include "c99-stdint-1.c"
diff --git a/gcc/testsuite/gcc.dg/c99-stdint-5.c b/gcc/testsuite/gcc.dg/c99-stdint-5.c
index 60513233a43fc..5899436709c6f 100644
--- a/gcc/testsuite/gcc.dg/c99-stdint-5.c
+++ b/gcc/testsuite/gcc.dg/c99-stdint-5.c
@@ -5,6 +5,12 @@ 
 /* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
 /* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <stdint.h>
 #ifndef SIGNAL_SUPPRESS
 #include <signal.h>
diff --git a/gcc/testsuite/gcc.dg/declspec-18.c b/gcc/testsuite/gcc.dg/declspec-18.c
index 2885692e1f38f..76b0bbeb28ed9 100644
--- a/gcc/testsuite/gcc.dg/declspec-18.c
+++ b/gcc/testsuite/gcc.dg/declspec-18.c
@@ -1,6 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-options "-std=gnu89" } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 static t1 *a;           /* { dg-error "unknown type name 't1'" } */
 
 int z;                  /* { dg-message "previous declaration of 'z'" } */
diff --git a/gcc/testsuite/gcc.dg/pr57287-2.c b/gcc/testsuite/gcc.dg/pr57287-2.c
index b41ae64f93325..7a2439a5f7308 100644
--- a/gcc/testsuite/gcc.dg/pr57287-2.c
+++ b/gcc/testsuite/gcc.dg/pr57287-2.c
@@ -2,6 +2,12 @@ 
 /* { dg-options "-O2 -Wall" } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 struct node
diff --git a/gcc/testsuite/gcc.dg/pr57287.c b/gcc/testsuite/gcc.dg/pr57287.c
index 47ed5b7988605..bcd567a1a43b3 100644
--- a/gcc/testsuite/gcc.dg/pr57287.c
+++ b/gcc/testsuite/gcc.dg/pr57287.c
@@ -2,6 +2,12 @@ 
 /* { dg-options "-O2 -Wall" } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 jmp_buf buf;
diff --git a/gcc/testsuite/gcc.dg/pr59920-1.c b/gcc/testsuite/gcc.dg/pr59920-1.c
index a2f0727670020..20f3d05654ae9 100644
--- a/gcc/testsuite/gcc.dg/pr59920-1.c
+++ b/gcc/testsuite/gcc.dg/pr59920-1.c
@@ -3,6 +3,12 @@ 
 /* { dg-options "-O0" } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 int bar (void);
diff --git a/gcc/testsuite/gcc.dg/pr63748.c b/gcc/testsuite/gcc.dg/pr63748.c
index cc353a7e5c34f..7595806024509 100644
--- a/gcc/testsuite/gcc.dg/pr63748.c
+++ b/gcc/testsuite/gcc.dg/pr63748.c
@@ -2,6 +2,12 @@ 
 /* { dg-options "-O2 -Wall" } */
 /* { dg-require-effective-target nonlocal_goto } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 jmp_buf *alloc_jmp_buf ();
diff --git a/gcc/testsuite/gcc.dg/pr78582.c b/gcc/testsuite/gcc.dg/pr78582.c
index 6d125cf8bab1c..c2718a94b8204 100644
--- a/gcc/testsuite/gcc.dg/pr78582.c
+++ b/gcc/testsuite/gcc.dg/pr78582.c
@@ -3,6 +3,12 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target nonlocal_goto } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 void reader_loop () {}
diff --git a/gcc/testsuite/gcc.dg/setjmp-1.c b/gcc/testsuite/gcc.dg/setjmp-1.c
index 600fb7f1ca1be..6744f2fc21f7c 100644
--- a/gcc/testsuite/gcc.dg/setjmp-1.c
+++ b/gcc/testsuite/gcc.dg/setjmp-1.c
@@ -5,6 +5,12 @@ 
 /* { dg-options "-O -Wclobbered -Wextra -Wall" } */
 /* { dg-skip-if "" { ! nonlocal_goto } } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 extern void set_float_handler (jmp_buf *);
diff --git a/gcc/testsuite/gcc.dg/setjmp-3.c b/gcc/testsuite/gcc.dg/setjmp-3.c
index 7522242081189..4a72bf5c93f1a 100644
--- a/gcc/testsuite/gcc.dg/setjmp-3.c
+++ b/gcc/testsuite/gcc.dg/setjmp-3.c
@@ -2,6 +2,12 @@ 
 /* { dg-options "-O" } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 extern void abort (void);
diff --git a/gcc/testsuite/gcc.dg/setjmp-4.c b/gcc/testsuite/gcc.dg/setjmp-4.c
index 20765f631d17a..a7b7045a9c80e 100644
--- a/gcc/testsuite/gcc.dg/setjmp-4.c
+++ b/gcc/testsuite/gcc.dg/setjmp-4.c
@@ -2,6 +2,12 @@ 
 /* { dg-options "-O" } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 extern void abort (void);
diff --git a/gcc/testsuite/gcc.dg/setjmp-5.c b/gcc/testsuite/gcc.dg/setjmp-5.c
index 584762915deea..9ac9f8d3dcd95 100644
--- a/gcc/testsuite/gcc.dg/setjmp-5.c
+++ b/gcc/testsuite/gcc.dg/setjmp-5.c
@@ -2,6 +2,12 @@ 
 /* { dg-options "-O2 -Wall" } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 void bar (int);
diff --git a/gcc/testsuite/gcc.dg/setjmp-6.c b/gcc/testsuite/gcc.dg/setjmp-6.c
index d821d230ce0af..2e7926d1d9603 100644
--- a/gcc/testsuite/gcc.dg/setjmp-6.c
+++ b/gcc/testsuite/gcc.dg/setjmp-6.c
@@ -3,6 +3,12 @@ 
 /* { dg-options "-O3" } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 jmp_buf buf;
diff --git a/gcc/testsuite/gcc.dg/stdint-width-1.c b/gcc/testsuite/gcc.dg/stdint-width-1.c
index 3eba9f6cb15b8..e2efdd5276228 100644
--- a/gcc/testsuite/gcc.dg/stdint-width-1.c
+++ b/gcc/testsuite/gcc.dg/stdint-width-1.c
@@ -3,8 +3,20 @@ 
 /* { dg-options "-std=c11 -ffreestanding" } */
 /* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */
 
-#include <stddef.h>
+/* Define __STDC_WANT_IEC_60559_BFP_EXT__ before we (potentially)
+   include <vxWorks.h>, because <vxWorks.h> can cause <stdint.h>
+   to be indirectly included.  Without __STDC_WANT_IEC_60559_BFP_EXT__
+   being defined ahead, stdint.h would not define the macros we are
+   trying to verify, thus causing this test to fail.  */
 #define __STDC_WANT_IEC_60559_BFP_EXT__
+
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
+#include <stddef.h>
 #include <stdint.h>
 #ifndef SIGNAL_SUPPRESS
 #include <signal.h>
diff --git a/gcc/testsuite/gcc.dg/torture/pr48542.c b/gcc/testsuite/gcc.dg/torture/pr48542.c
index 98cff00071d6b..8272c0d429090 100644
--- a/gcc/testsuite/gcc.dg/torture/pr48542.c
+++ b/gcc/testsuite/gcc.dg/torture/pr48542.c
@@ -1,6 +1,12 @@ 
 /* { dg-do run } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 /* The return-address was clobbered.  */
 #include <stdlib.h>
 #include <setjmp.h>
diff --git a/gcc/testsuite/gcc.dg/torture/pr59993.c b/gcc/testsuite/gcc.dg/torture/pr59993.c
index 57ecdde6938c2..30390c46d1c26 100644
--- a/gcc/testsuite/gcc.dg/torture/pr59993.c
+++ b/gcc/testsuite/gcc.dg/torture/pr59993.c
@@ -1,6 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 extern int optind;
diff --git a/gcc/testsuite/gcc.dg/torture/pr63738.c b/gcc/testsuite/gcc.dg/torture/pr63738.c
index 82ac4ff2a638b..7064a980e29f7 100644
--- a/gcc/testsuite/gcc.dg/torture/pr63738.c
+++ b/gcc/testsuite/gcc.dg/torture/pr63738.c
@@ -1,6 +1,12 @@ 
 /*  { dg-do compile } */
 /* { dg-require-effective-target nonlocal_goto } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 struct longjmp_buffer {
diff --git a/gcc/testsuite/gcc.dg/torture/pr64728.c b/gcc/testsuite/gcc.dg/torture/pr64728.c
index 7384d85a9289d..1dc32e0165f9b 100644
--- a/gcc/testsuite/gcc.dg/torture/pr64728.c
+++ b/gcc/testsuite/gcc.dg/torture/pr64728.c
@@ -1,6 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target nonlocal_goto } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 jmp_buf a;
diff --git a/gcc/testsuite/gcc.dg/torture/pr66101.c b/gcc/testsuite/gcc.dg/torture/pr66101.c
index 39d380722b463..e636703d30e4d 100644
--- a/gcc/testsuite/gcc.dg/torture/pr66101.c
+++ b/gcc/testsuite/gcc.dg/torture/pr66101.c
@@ -1,6 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target nonlocal_goto } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 jmp_buf env;
diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/setjmp-3.c b/gcc/testsuite/gcc.dg/torture/stackalign/setjmp-3.c
index 2f9840c14a7e8..d4180f7f8bfa0 100644
--- a/gcc/testsuite/gcc.dg/torture/stackalign/setjmp-3.c
+++ b/gcc/testsuite/gcc.dg/torture/stackalign/setjmp-3.c
@@ -1,6 +1,12 @@ 
 /* { dg-do run } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 extern void abort (void);
diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/setjmp-4.c b/gcc/testsuite/gcc.dg/torture/stackalign/setjmp-4.c
index b180130c40659..2d2af5ad14806 100644
--- a/gcc/testsuite/gcc.dg/torture/stackalign/setjmp-4.c
+++ b/gcc/testsuite/gcc.dg/torture/stackalign/setjmp-4.c
@@ -1,6 +1,12 @@ 
 /* { dg-do run } */
 /* { dg-require-effective-target indirect_jumps } */
 
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <setjmp.h>
 
 extern void abort (void);
diff --git a/gcc/testsuite/gcc.dg/vect/tree-vect.h b/gcc/testsuite/gcc.dg/vect/tree-vect.h
index c4b8144121666..ec145a0890b22 100644
--- a/gcc/testsuite/gcc.dg/vect/tree-vect.h
+++ b/gcc/testsuite/gcc.dg/vect/tree-vect.h
@@ -1,4 +1,12 @@ 
+
 /* Check if system supports SIMD */
+
+#if defined(__vxworks) && !defined(__RTP__)
+  /* A kernel module requires the inclusion of <vxWorks.h>
+     before any other system header.  */
+  #include <vxWorks.h>
+#endif
+
 #include <signal.h>
 
 #if defined(__i386__) || defined(__x86_64__)
diff --git a/gcc/testsuite/gcc.target/powerpc/pr87466.c b/gcc/testsuite/gcc.target/powerpc/pr87466.c
index 2bb292cfed1f8..047bae25821d8 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr87466.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr87466.c
@@ -1,6 +1,12 @@ 
 /* { dg-do compile { target powerpc*-*-* } } */
 /* { dg-options "-O2" } */
 
+/* VxWorks kernel modules require the inclusion of <vxWorks.h>
+   before any other system header.  */
+#if defined(__vxworks) && !defined(__RTP__)
+#include <vxWorks.h>
+#endif
+
 #include <stdlib.h>
 #include <setjmp.h>