summaryrefslogtreecommitdiff
path: root/tests/tst-errno-abi.c
blob: 1d7dcd5932beade104f2480952b0815de6d8a75e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
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() */