summaryrefslogtreecommitdiff
path: root/tests/tst-errno-abi.c
diff options
context:
space:
mode:
authorkx <kx@radix-linux.su>2026-10-09 18:00:15 +0300
committerkx <kx@radix-linux.su>2026-10-09 18:00:15 +0300
commit065da3509019b15dd0e678072e6be629e5330bef (patch)
tree69c934c9e786ac048b4fbe8f4c4c5571661521f4 /tests/tst-errno-abi.c
parentd130fe27fa753be02ed76fd9b277aa3c3d928eb9 (diff)
downloadlibmcpu-0.4.0.tar.xz
Version 0.4.00.4.0
Diffstat (limited to 'tests/tst-errno-abi.c')
-rw-r--r--tests/tst-errno-abi.c217
1 files changed, 217 insertions, 0 deletions
diff --git a/tests/tst-errno-abi.c b/tests/tst-errno-abi.c
new file mode 100644
index 0000000..1d7dcd5
--- /dev/null
+++ b/tests/tst-errno-abi.c
@@ -0,0 +1,217 @@
+#include <stdio.h>
+
+#include <libmpu.h>
+
+/* Capture the LibMPU values before the public assembler header is included. */
+enum
+{
+ LIBMPU_EUNKNOWN = __EUNKNOWN__,
+ LIBMPU_I_ESIZE = __I_ESIZE__,
+ LIBMPU_I_ESHIFT = __I_ESHIFT__,
+ LIBMPU_I_ENUMBER = __I_ENUMBER__,
+ LIBMPU_I_ERADIX = __I_ERADIX__,
+ LIBMPU_I_MAX_ERRNO = __I_MAX_ERRNO,
+ LIBMPU_R_ESIZE = __R_ESIZE__,
+ LIBMPU_R_ETRUNC = __R_ETRUNC__,
+ LIBMPU_R_MAX_ERRNO = __R_MAX_ERRNO,
+ LIBMPU_C_EDIVZEROBYZERO = __C_EDIVZEROBYZERO__,
+ LIBMPU_C_ELOGOFZERO = __C_ELOGOFZERO__,
+ LIBMPU_C_EPOWOFZERO = __C_EPOWOFZERO__,
+ LIBMPU_C_MAX_ERRNO = __C_MAX_ERRNO,
+ LIBMPU_DOMAIN = __DOMAIN__,
+ LIBMPU_SING = __SING__,
+ LIBMPU_OVERFLOW = __OVERFLOW__,
+ LIBMPU_UNDERFLOW = __UNDERFLOW__,
+ LIBMPU_TLOSS = __TLOSS__,
+ LIBMPU_PLOSS = __PLOSS__,
+ LIBMPU_INVALID = __INVALID__,
+ LIBMPU_INEXACT = __INEXACT__,
+ LIBMPU_M_MAX_ERRNO = __M_MAX_ERRNO
+};
+
+#include "../cpu/cpu-errno.h"
+#include <sys/asm/errno.h>
+#include <sys/asm/mpu-errno.h>
+
+
+#define CHECK_SYSTEM_ERRNO(name) \
+ do { \
+ if( (name) != (__MCPU_ ## name) ) \
+ { \
+ fprintf( stderr, #name " ABI mismatch: public=%d internal=%d\n", \
+ (int)(name), (int)(__MCPU_ ## name) ); \
+ return( 1 ); \
+ } \
+ } while( 0 )
+
+
+int
+main( void )
+{
+ CHECK_SYSTEM_ERRNO( EPERM );
+ CHECK_SYSTEM_ERRNO( ENOENT );
+ CHECK_SYSTEM_ERRNO( ESRCH );
+ CHECK_SYSTEM_ERRNO( EINTR );
+ CHECK_SYSTEM_ERRNO( EIO );
+ CHECK_SYSTEM_ERRNO( ENXIO );
+ CHECK_SYSTEM_ERRNO( E2BIG );
+ CHECK_SYSTEM_ERRNO( ENOEXEC );
+ CHECK_SYSTEM_ERRNO( EBADF );
+ CHECK_SYSTEM_ERRNO( ECHILD );
+ CHECK_SYSTEM_ERRNO( EAGAIN );
+ CHECK_SYSTEM_ERRNO( ENOMEM );
+ CHECK_SYSTEM_ERRNO( EACCES );
+ CHECK_SYSTEM_ERRNO( EFAULT );
+ CHECK_SYSTEM_ERRNO( ENOTBLK );
+ CHECK_SYSTEM_ERRNO( EBUSY );
+ CHECK_SYSTEM_ERRNO( EEXIST );
+ CHECK_SYSTEM_ERRNO( EXDEV );
+ CHECK_SYSTEM_ERRNO( ENODEV );
+ CHECK_SYSTEM_ERRNO( ENOTDIR );
+ CHECK_SYSTEM_ERRNO( EISDIR );
+ CHECK_SYSTEM_ERRNO( EINVAL );
+ CHECK_SYSTEM_ERRNO( ENFILE );
+ CHECK_SYSTEM_ERRNO( EMFILE );
+ CHECK_SYSTEM_ERRNO( ENOTTY );
+ CHECK_SYSTEM_ERRNO( ETXTBSY );
+ CHECK_SYSTEM_ERRNO( EFBIG );
+ CHECK_SYSTEM_ERRNO( ENOSPC );
+ CHECK_SYSTEM_ERRNO( ESPIPE );
+ CHECK_SYSTEM_ERRNO( EROFS );
+ CHECK_SYSTEM_ERRNO( EMLINK );
+ CHECK_SYSTEM_ERRNO( EPIPE );
+ CHECK_SYSTEM_ERRNO( EDOM );
+ CHECK_SYSTEM_ERRNO( ERANGE );
+ CHECK_SYSTEM_ERRNO( EDEADLK );
+ CHECK_SYSTEM_ERRNO( ENAMETOOLONG );
+ CHECK_SYSTEM_ERRNO( ENOLCK );
+ CHECK_SYSTEM_ERRNO( ENOSYS );
+ CHECK_SYSTEM_ERRNO( ENOTEMPTY );
+ CHECK_SYSTEM_ERRNO( ELOOP );
+ CHECK_SYSTEM_ERRNO( ENOMSG );
+ CHECK_SYSTEM_ERRNO( EIDRM );
+ CHECK_SYSTEM_ERRNO( ECHRNG );
+ CHECK_SYSTEM_ERRNO( EL2NSYNC );
+ CHECK_SYSTEM_ERRNO( EL3HLT );
+ CHECK_SYSTEM_ERRNO( EL3RST );
+ CHECK_SYSTEM_ERRNO( ELNRNG );
+ CHECK_SYSTEM_ERRNO( EUNATCH );
+ CHECK_SYSTEM_ERRNO( ENOCSI );
+ CHECK_SYSTEM_ERRNO( EL2HLT );
+ CHECK_SYSTEM_ERRNO( EBADE );
+ CHECK_SYSTEM_ERRNO( EBADR );
+ CHECK_SYSTEM_ERRNO( EXFULL );
+ CHECK_SYSTEM_ERRNO( ENOANO );
+ CHECK_SYSTEM_ERRNO( EBADRQC );
+ CHECK_SYSTEM_ERRNO( EBADSLT );
+ CHECK_SYSTEM_ERRNO( EBFONT );
+ CHECK_SYSTEM_ERRNO( ENOSTR );
+ CHECK_SYSTEM_ERRNO( ENODATA );
+ CHECK_SYSTEM_ERRNO( ETIME );
+ CHECK_SYSTEM_ERRNO( ENOSR );
+ CHECK_SYSTEM_ERRNO( ENONET );
+ CHECK_SYSTEM_ERRNO( ENOPKG );
+ CHECK_SYSTEM_ERRNO( EREMOTE );
+ CHECK_SYSTEM_ERRNO( ENOLINK );
+ CHECK_SYSTEM_ERRNO( EADV );
+ CHECK_SYSTEM_ERRNO( ESRMNT );
+ CHECK_SYSTEM_ERRNO( ECOMM );
+ CHECK_SYSTEM_ERRNO( EPROTO );
+ CHECK_SYSTEM_ERRNO( EMULTIHOP );
+ CHECK_SYSTEM_ERRNO( EDOTDOT );
+ CHECK_SYSTEM_ERRNO( EBADMSG );
+ CHECK_SYSTEM_ERRNO( EOVERFLOW );
+ CHECK_SYSTEM_ERRNO( ENOTUNIQ );
+ CHECK_SYSTEM_ERRNO( EBADFD );
+ CHECK_SYSTEM_ERRNO( EREMCHG );
+ CHECK_SYSTEM_ERRNO( ELIBACC );
+ CHECK_SYSTEM_ERRNO( ELIBBAD );
+ CHECK_SYSTEM_ERRNO( ELIBSCN );
+ CHECK_SYSTEM_ERRNO( ELIBMAX );
+ CHECK_SYSTEM_ERRNO( ELIBEXEC );
+ CHECK_SYSTEM_ERRNO( EILSEQ );
+ CHECK_SYSTEM_ERRNO( ERESTART );
+ CHECK_SYSTEM_ERRNO( ESTRPIPE );
+ CHECK_SYSTEM_ERRNO( EUSERS );
+ CHECK_SYSTEM_ERRNO( ENOTSOCK );
+ CHECK_SYSTEM_ERRNO( EDESTADDRREQ );
+ CHECK_SYSTEM_ERRNO( EMSGSIZE );
+ CHECK_SYSTEM_ERRNO( EPROTOTYPE );
+ CHECK_SYSTEM_ERRNO( ENOPROTOOPT );
+ CHECK_SYSTEM_ERRNO( EPROTONOSUPPORT );
+ CHECK_SYSTEM_ERRNO( ESOCKTNOSUPPORT );
+ CHECK_SYSTEM_ERRNO( EOPNOTSUPP );
+ CHECK_SYSTEM_ERRNO( EPFNOSUPPORT );
+ CHECK_SYSTEM_ERRNO( EAFNOSUPPORT );
+ CHECK_SYSTEM_ERRNO( EADDRINUSE );
+ CHECK_SYSTEM_ERRNO( EADDRNOTAVAIL );
+ CHECK_SYSTEM_ERRNO( ENETDOWN );
+ CHECK_SYSTEM_ERRNO( ENETUNREACH );
+ CHECK_SYSTEM_ERRNO( ENETRESET );
+ CHECK_SYSTEM_ERRNO( ECONNABORTED );
+ CHECK_SYSTEM_ERRNO( ECONNRESET );
+ CHECK_SYSTEM_ERRNO( ENOBUFS );
+ CHECK_SYSTEM_ERRNO( EISCONN );
+ CHECK_SYSTEM_ERRNO( ENOTCONN );
+ CHECK_SYSTEM_ERRNO( ESHUTDOWN );
+ CHECK_SYSTEM_ERRNO( ETOOMANYREFS );
+ CHECK_SYSTEM_ERRNO( ETIMEDOUT );
+ CHECK_SYSTEM_ERRNO( ECONNREFUSED );
+ CHECK_SYSTEM_ERRNO( EHOSTDOWN );
+ CHECK_SYSTEM_ERRNO( EHOSTUNREACH );
+ CHECK_SYSTEM_ERRNO( EALREADY );
+ CHECK_SYSTEM_ERRNO( EINPROGRESS );
+ CHECK_SYSTEM_ERRNO( ESTALE );
+ CHECK_SYSTEM_ERRNO( EUCLEAN );
+ CHECK_SYSTEM_ERRNO( ENOTNAM );
+ CHECK_SYSTEM_ERRNO( ENAVAIL );
+ CHECK_SYSTEM_ERRNO( EISNAM );
+ CHECK_SYSTEM_ERRNO( EREMOTEIO );
+ CHECK_SYSTEM_ERRNO( EDQUOT );
+ CHECK_SYSTEM_ERRNO( ENOMEDIUM );
+ CHECK_SYSTEM_ERRNO( EMEDIUMTYPE );
+ CHECK_SYSTEM_ERRNO( ECANCELED );
+ CHECK_SYSTEM_ERRNO( ENOKEY );
+ CHECK_SYSTEM_ERRNO( EKEYEXPIRED );
+ CHECK_SYSTEM_ERRNO( EKEYREVOKED );
+ CHECK_SYSTEM_ERRNO( EKEYREJECTED );
+ CHECK_SYSTEM_ERRNO( EOWNERDEAD );
+ CHECK_SYSTEM_ERRNO( ENOTRECOVERABLE );
+ CHECK_SYSTEM_ERRNO( ERFKILL );
+ CHECK_SYSTEM_ERRNO( EHWPOISON );
+ CHECK_SYSTEM_ERRNO( EFTYPE );
+ CHECK_SYSTEM_ERRNO( EUNKNOWN );
+
+ if( EWOULDBLOCK != EAGAIN || __MCPU_EWOULDBLOCK != __MCPU_EAGAIN )
+ return( 1 );
+ if( EDEADLOCK != EDEADLK || __MCPU_EDEADLOCK != __MCPU_EDEADLK )
+ return( 1 );
+ if( ENOTSUP != EOPNOTSUPP || __MCPU_ENOTSUP != __MCPU_EOPNOTSUPP )
+ return( 1 );
+
+ if( __EUNKNOWN__ != LIBMPU_EUNKNOWN ) return( 1 );
+ if( __I_ESIZE__ != LIBMPU_I_ESIZE ||
+ __I_ESHIFT__ != LIBMPU_I_ESHIFT ||
+ __I_ENUMBER__ != LIBMPU_I_ENUMBER ||
+ __I_ERADIX__ != LIBMPU_I_ERADIX ||
+ __I_MAX_ERRNO != LIBMPU_I_MAX_ERRNO )
+ return( 1 );
+ if( __R_ESIZE__ != LIBMPU_R_ESIZE ||
+ __R_ETRUNC__ != LIBMPU_R_ETRUNC ||
+ __R_MAX_ERRNO != LIBMPU_R_MAX_ERRNO )
+ return( 1 );
+ if( __C_EDIVZEROBYZERO__ != LIBMPU_C_EDIVZEROBYZERO ||
+ __C_ELOGOFZERO__ != LIBMPU_C_ELOGOFZERO ||
+ __C_EPOWOFZERO__ != LIBMPU_C_EPOWOFZERO ||
+ __C_MAX_ERRNO != LIBMPU_C_MAX_ERRNO )
+ return( 1 );
+ if( __DOMAIN__ != LIBMPU_DOMAIN || __SING__ != LIBMPU_SING ||
+ __OVERFLOW__ != LIBMPU_OVERFLOW ||
+ __UNDERFLOW__ != LIBMPU_UNDERFLOW || __TLOSS__ != LIBMPU_TLOSS ||
+ __PLOSS__ != LIBMPU_PLOSS || __INVALID__ != LIBMPU_INVALID ||
+ __INEXACT__ != LIBMPU_INEXACT || __M_MAX_ERRNO != LIBMPU_M_MAX_ERRNO )
+ return( 1 );
+
+ return( 0 );
+
+} /* End of main() */