diff --git a/share/libc/__fc_machdep.h b/share/libc/__fc_machdep.h
index 6af1bbe7c382e329b9a0add976dda89b1e1feb4a..4e49988157b50ac08aabc7f15db64180c89054d7 100644
--- a/share/libc/__fc_machdep.h
+++ b/share/libc/__fc_machdep.h
@@ -774,7 +774,8 @@
 //NOT IN MSVC: #define __FC_ERFKILL
 //NOT IN MSVC: #define __FC_EHWPOISON
 
-
+/* signal.h */
+#define __FC_NSIG 23
 
 // End of MSVC_X86_64
 #else
diff --git a/share/libc/__fc_machdep_linux_shared.h b/share/libc/__fc_machdep_linux_shared.h
index 03639befe95c9d1f3bb0a270cef3d2ff08830410..a050f99a3adf7fd5297e7f2b8e75296e1aaef5b2 100644
--- a/share/libc/__fc_machdep_linux_shared.h
+++ b/share/libc/__fc_machdep_linux_shared.h
@@ -271,4 +271,8 @@
 /* time.h */
 #define __FC_TIME_T long
 
+/* signal.h */
+#define __FC_NSIG 65
+#define __FC__NSIG __FC_NSIG
+
 #endif
diff --git a/share/libc/signal.h b/share/libc/signal.h
index 37749792bb6187579df6a8e994f804b9bfd99e7f..4d2102c0fe945b2152a17c5108f3a10af6fe31f2 100644
--- a/share/libc/signal.h
+++ b/share/libc/signal.h
@@ -27,6 +27,7 @@
 
 #include "features.h"
 __PUSH_FC_STDLIB
+#include "__fc_machdep.h"
 #include "__fc_define_pid_t.h"
 #include "__fc_define_uid_and_gid.h"
 #include "__fc_define_pthread_types.h"
@@ -101,6 +102,11 @@ extern void __fc_sig_err(int);
 #define SIGRTMIN 32
 #define SIGRTMAX 64
 
+#define NSIG __FC_NSIG
+#ifdef __FC__NSIG
+#define _NSIG __FC__NSIG
+#endif
+
 #define SA_NOCLDSTOP	0x00000001
 #define SA_NOCLDWAIT	0x00000002
 #define SA_SIGINFO	0x00000004
diff --git a/tests/libc/oracle/signal_h.res.oracle b/tests/libc/oracle/signal_h.res.oracle
index 2b9a206e15cb5859893318f65f3b4cf19a8f200b..aa2b3157f65fd3ce79deff218dce25daf54b5585 100644
--- a/tests/libc/oracle/signal_h.res.oracle
+++ b/tests/libc/oracle/signal_h.res.oracle
@@ -126,7 +126,7 @@
   function sigaction: precondition 'valid_read_act_or_null' got status valid.
 [eva] tests/libc/signal_h.c:48: 
   function sigaction: precondition 'separation,separated_acts' got status valid.
-[eva] share/libc/signal.h:216: 
+[eva] share/libc/signal.h:222: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic coercion struct sigaction -> set<struct sigaction>
 [eva] Done for function sigaction
 [eva] computing for function sigaction <- main.
@@ -142,6 +142,7 @@
 [eva:invalid-assigns] tests/libc/signal_h.c:51: 
   Completely invalid destination for assigns clause *oldact. Ignoring.
 [eva] Done for function sigaction
+[eva] tests/libc/signal_h.c:55: assertion 'valid_nsig' got status valid.
 [eva] Recording results for main
 [eva] done for function main
 [eva] ====== VALUES COMPUTED ======
diff --git a/tests/libc/signal_h.c b/tests/libc/signal_h.c
index c0d539f925a32964ca7764d56389e9467bf68d3d..bfb2fb979f9a27cfa6932a29b6430b9caeb9df99 100644
--- a/tests/libc/signal_h.c
+++ b/tests/libc/signal_h.c
@@ -52,5 +52,7 @@ int main() {
     return -1;
   }
 
+  //@ assert valid_nsig: NSIG >= 0;
+
   return 0;
 }