diff --git a/ChangeLog b/ChangeLog
index e0639e93ec..bfa4ca6df4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -48,6 +48,15 @@
 	* hurd/hurd/signal.h: Include <bits/types/error_t.h>
 	* hurd/hurd/sigpreempt.h: Include <bits/types/error_t.h>
 	* sysdeps/mach/hurd/futimens.c: New file.
+	* bits/sigaction.h: Add include guard.
+	* sysdeps/unix/sysv/linux/alpha/bits/sigaction.h: Likewise.
+	* sysdeps/unix/sysv/linux/bits/sigaction.h: Likewise.
+	* sysdeps/unix/sysv/linux/hppa/bits/sigaction.h: Likewise.
+	* sysdeps/unix/sysv/linux/ia64/bits/sigaction.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Likewise.
+	* sysdeps/unix/sysv/linux/s390/bits/sigaction.h: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/bits/sigaction.h: Likewise.
+	* sysdeps/unix/sysv/linux/tile/bits/sigaction.h: Likewise.
 
 2018-03-03  Andreas Schwab  <schwab@linux-m68k.org>
 
diff --git a/bits/sigaction.h b/bits/sigaction.h
index 97ce95f7b3..a20d382558 100644
--- a/bits/sigaction.h
+++ b/bits/sigaction.h
@@ -15,6 +15,9 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __struct_sigaction_defined
+#define __struct_sigaction_defined 1
+
 #ifndef _SIGNAL_H
 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
 #endif
@@ -77,3 +80,5 @@ struct sigaction
 #define	SIG_BLOCK	1	/* Block signals.  */
 #define	SIG_UNBLOCK	2	/* Unblock signals.  */
 #define	SIG_SETMASK	3	/* Set the set of blocked signals.  */
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h b/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h
index 17003fba20..75afe724a9 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __struct_sigaction_defined
+#define __struct_sigaction_defined 1
+
 #ifndef _SIGNAL_H
 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
 #endif
@@ -73,3 +76,5 @@ struct sigaction
 #define	SIG_BLOCK     1		 /* Block signals.  */
 #define	SIG_UNBLOCK   2		 /* Unblock signals.  */
 #define	SIG_SETMASK   3		 /* Set the set of blocked signals.  */
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/bits/sigaction.h b/sysdeps/unix/sysv/linux/bits/sigaction.h
index fd29373e10..634a0d1659 100644
--- a/sysdeps/unix/sysv/linux/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/bits/sigaction.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __struct_sigaction_defined
+#define __struct_sigaction_defined 1
+
 #ifndef _SIGNAL_H
 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
 #endif
@@ -76,3 +79,5 @@ struct sigaction
 #define	SIG_BLOCK     0		 /* Block signals.  */
 #define	SIG_UNBLOCK   1		 /* Unblock signals.  */
 #define	SIG_SETMASK   2		 /* Set the set of blocked signals.  */
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h b/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h
index 0fa10ef899..1f7d724a0f 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __struct_sigaction_defined
+#define __struct_sigaction_defined 1
+
 #ifndef _SIGNAL_H
 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
 #endif
@@ -79,3 +82,5 @@ struct sigaction
 #define SIG_BLOCK          0	/* for blocking signals */
 #define SIG_UNBLOCK        1	/* for unblocking signals */
 #define SIG_SETMASK        2	/* for setting the signal mask */
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h b/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h
index 2c0f875031..7b11c4825b 100644
--- a/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __struct_sigaction_defined
+#define __struct_sigaction_defined 1
+
 #ifndef _SIGNAL_H
 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
 #endif
@@ -73,3 +76,5 @@ struct sigaction
 #define SIG_BLOCK          0	/* for blocking signals */
 #define SIG_UNBLOCK        1	/* for unblocking signals */
 #define SIG_SETMASK        2	/* for setting the signal mask */
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/mips/bits/sigaction.h b/sysdeps/unix/sysv/linux/mips/bits/sigaction.h
index 67c9aa501e..2bfa47b7a1 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/sigaction.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __struct_sigaction_defined
+#define __struct_sigaction_defined 1
+
 #ifndef _SIGNAL_H
 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
 #endif
@@ -87,3 +90,5 @@ struct sigaction
 # define SIG_SETMASK32 256	/* Goodie from SGI for BSD compatibility:
 				   set only the low 32 bit of the sigset.  */
 #endif
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/s390/bits/sigaction.h b/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
index e5bcf41110..2994bb21cc 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __struct_sigaction_defined
+#define __struct_sigaction_defined 1
+
 #ifndef _SIGNAL_H
 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
 #endif
@@ -110,3 +113,5 @@ struct sigaction
 #define	SIG_BLOCK     0		 /* Block signals.  */
 #define	SIG_UNBLOCK   1		 /* Unblock signals.  */
 #define	SIG_SETMASK   2		 /* Set the set of blocked signals.  */
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
index af9e3dc68a..43022517b3 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __struct_sigaction_defined
+#define __struct_sigaction_defined 1
+
 #ifndef _SIGNAL_H
 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
 #endif
@@ -82,3 +85,5 @@ struct sigaction
 #define	SIG_BLOCK     1		 /* Block signals.  */
 #define	SIG_UNBLOCK   2		 /* Unblock signals.  */
 #define	SIG_SETMASK   4		 /* Set the set of blocked signals.  */
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/tile/bits/sigaction.h b/sysdeps/unix/sysv/linux/tile/bits/sigaction.h
index f0e0474507..ad97a399a0 100644
--- a/sysdeps/unix/sysv/linux/tile/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/tile/bits/sigaction.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __struct_sigaction_defined
+#define __struct_sigaction_defined 1
+
 #ifndef _SIGNAL_H
 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
 #endif
@@ -77,3 +80,5 @@ struct sigaction
 #define	SIG_BLOCK     0		 /* Block signals.  */
 #define	SIG_UNBLOCK   1		 /* Unblock signals.  */
 #define	SIG_SETMASK   2		 /* Set the set of blocked signals.  */
+
+#endif
