[PATCH] add spu sys/errno.h

Jeff Johnston jjohnstn@redhat.com
Wed Apr 25 23:27:00 GMT 2007


Patch applied.

-- Jeff J.

Patrick Mansfield wrote:
> Hi Jeff -
> 
> Can you please apply? Thanks ...
> 
> Add a spu sys/errno.h so spu values match those on ppc linux for assisted
> calls.
> 
> ChangeLog:
> 
> 2007-04-25  Patrick Mansfield <patmans@us.ibm.com>
> 
> 	* libc/machine/spu/sys/errno.h: New file, so spu errno values match
> 	ppu linux values. This file is a copy of the cris/sys/errno.h plus
> 	a few changes (see spu errno.h comments).
> 
> Index: my-base-quilt/newlib/libc/machine/spu/sys/errno.h
> ===================================================================
> --- /dev/null
> +++ my-base-quilt/newlib/libc/machine/spu/sys/errno.h
> @@ -0,0 +1,185 @@
> +/*
> + * The SPU must have these values match those on the PPU linux side, so
> + * the assisted calls (system or library ones) that set errno will use the
> + * same values.
> + *
> + * This file is based on the CRIS file, with these modifications:
> + *
> + * EDEADLOCK  - instead of EDEADLK (35) use 58 (for some reason ppc only does
> + * this, it is not used by ppc kernel code nor glibc code).
> + *
> + * ECANCELED value of 125 added, in linux and posix value of 125, in generic
> + * newlib errno.h, value of 140
> + *
> + * ENOTSUP as EOPNOTSUPP (95) added, in linux and posix value 95, in
> + * generic newlib errno.h, value of 134
> + */
> +
> +/* This file is to be kept in sync with newlib/libc/include/sys/errno.h
> +   on which it is based, except values used or returned by syscalls must
> +   be those of the Linux ppc.  */
> +
> +/* errno is not a global variable, because that would make using it
> +   non-reentrant.  Instead, its address is returned by the function
> +   __errno.  */
> +
> +#ifndef _SYS_ERRNO_H_
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +#define _SYS_ERRNO_H_
> +
> +#include <sys/reent.h>
> +
> +#ifndef _REENT_ONLY
> +#define errno (*__errno())
> +extern int *__errno _PARAMS ((void));
> +#endif
> +
> +/* Please don't use these variables directly.
> +   Use strerror instead. */
> +extern _CONST char * _CONST _sys_errlist[];
> +extern int _sys_nerr;
> +
> +#define __errno_r(ptr) ((ptr)->_errno)
> +
> +/* Adjusted to the linux asm/errno.h */
> +#define	EPERM		 1	/* Operation not permitted */
> +#define	ENOENT		 2	/* No such file or directory */
> +#define	ESRCH		 3	/* No such process */
> +#define	EINTR		 4	/* Interrupted system call */
> +#define	EIO		 5	/* I/O error */
> +#define	ENXIO		 6	/* No such device or address */
> +#define	E2BIG		 7	/* Arg list too long */
> +#define	ENOEXEC		 8	/* Exec format error */
> +#define	EBADF		 9	/* Bad file number */
> +#define	ECHILD		10	/* No child processes */
> +#define	EAGAIN		11	/* Try again */
> +#define	ENOMEM		12	/* Out of memory */
> +#define	EACCES		13	/* Permission denied */
> +#define	EFAULT		14	/* Bad address */
> +#define	ENOTBLK		15	/* Block device required */
> +#define	EBUSY		16	/* Device or resource busy */
> +#define	EEXIST		17	/* File exists */
> +#define	EXDEV		18	/* Cross-device link */
> +#define	ENODEV		19	/* No such device */
> +#define	ENOTDIR		20	/* Not a directory */
> +#define	EISDIR		21	/* Is a directory */
> +#define	EINVAL		22	/* Invalid argument */
> +#define	ENFILE		23	/* File table overflow */
> +#define	EMFILE		24	/* Too many open files */
> +#define	ENOTTY		25	/* Not a typewriter */
> +#define	ETXTBSY		26	/* Text file busy */
> +#define	EFBIG		27	/* File too large */
> +#define	ENOSPC		28	/* No space left on device */
> +#define	ESPIPE		29	/* Illegal seek */
> +#define	EROFS		30	/* Read-only file system */
> +#define	EMLINK		31	/* Too many links */
> +#define	EPIPE		32	/* Broken pipe */
> +#define	EDOM		33	/* Math argument out of domain of func */
> +#define	ERANGE		34	/* Math result not representable */
> +#define	EDEADLK		35	/* Resource deadlock would occur */
> +#define	ENAMETOOLONG	36	/* File name too long */
> +#define	ENOLCK		37	/* No record locks available */
> +#define	ENOSYS		38	/* Function not implemented */
> +#define	ENOTEMPTY	39	/* Directory not empty */
> +#define	ELOOP		40	/* Too many symbolic links encountered */
> +#define	EWOULDBLOCK	EAGAIN	/* Operation would block */
> +#define	ENOMSG		42	/* No message of desired type */
> +#define	EIDRM		43	/* Identifier removed */
> +#define	ECHRNG		44	/* Channel number out of range */
> +#define	EL2NSYNC	45	/* Level 2 not synchronized */
> +#define	EL3HLT		46	/* Level 3 halted */
> +#define	EL3RST		47	/* Level 3 reset */
> +#define	ELNRNG		48	/* Link number out of range */
> +#define	EUNATCH		49	/* Protocol driver not attached */
> +#define	ENOCSI		50	/* No CSI structure available */
> +#define	EL2HLT		51	/* Level 2 halted */
> +#define	EBADE		52	/* Invalid exchange */
> +#define	EBADR		53	/* Invalid request descriptor */
> +#define	EXFULL		54	/* Exchange full */
> +#define	ENOANO		55	/* No anode */
> +#define	EBADRQC		56	/* Invalid request code */
> +#define	EBADSLT		57	/* Invalid slot */
> +
> +#define	EDEADLOCK	58
> +
> +#define	EBFONT		59	/* Bad font file format */
> +/* This is only used internally in newlib; not returned by the kernel.
> +   EBFONT seems the closest match for a "bad file format" error.  */
> +#define EFTYPE		EBFONT	/* Inappropriate file type or format */
> +#define	ENOSTR		60	/* Device not a stream */
> +#define	ENODATA		61	/* No data available */
> +#define	ETIME		62	/* Timer expired */
> +#define	ENOSR		63	/* Out of streams resources */
> +#define	ENONET		64	/* Machine is not on the network */
> +#define	ENOPKG		65	/* Package not installed */
> +#define	EREMOTE		66	/* Object is remote */
> +#define	ENOLINK		67	/* Link has been severed */
> +#define	EADV		68	/* Advertise error */
> +#define	ESRMNT		69	/* Srmount error */
> +#define	ECOMM		70	/* Communication error on send */
> +#define	EPROTO		71	/* Protocol error */
> +#define	EMULTIHOP	72	/* Multihop attempted */
> +#define	EDOTDOT		73	/* RFS specific error */
> +#define	EBADMSG		74	/* Not a data message */
> +#define	EOVERFLOW	75	/* Value too large for defined data type */
> +#define	ENOTUNIQ	76	/* Name not unique on network */
> +#define	EBADFD		77	/* File descriptor in bad state */
> +#define	EREMCHG		78	/* Remote address changed */
> +#define	ELIBACC		79	/* Can not access a needed shared library */
> +#define	ELIBBAD		80	/* Accessing a corrupted shared library */
> +#define	ELIBSCN		81	/* .lib section in a.out corrupted */
> +#define	ELIBMAX		82	/* Attempting to link in too many shared libraries */
> +#define	ELIBEXEC	83	/* Cannot exec a shared library directly */
> +#define	EILSEQ		84	/* Illegal byte sequence */
> +#define	ERESTART	85	/* Interrupted system call should be restarted */
> +#define	ESTRPIPE	86	/* Streams pipe error */
> +#define	EUSERS		87	/* Too many users */
> +#define	ENOTSOCK	88	/* Socket operation on non-socket */
> +#define	EDESTADDRREQ	89	/* Destination address required */
> +#define	EMSGSIZE	90	/* Message too long */
> +#define	EPROTOTYPE	91	/* Protocol wrong type for socket */
> +#define	ENOPROTOOPT	92	/* Protocol not available */
> +#define	EPROTONOSUPPORT	93	/* Protocol not supported */
> +#define	ESOCKTNOSUPPORT	94	/* Socket type not supported */
> +#define	EOPNOTSUPP	95	/* Operation not supported on transport endpoint */
> +#define	ENOTSUP		EOPNOTSUPP
> +#define	EPFNOSUPPORT	96	/* Protocol family not supported */
> +#define	EAFNOSUPPORT	97	/* Address family not supported by protocol */
> +#define	EADDRINUSE	98	/* Address already in use */
> +#define	EADDRNOTAVAIL	99	/* Cannot assign requested address */
> +#define	ENETDOWN	100	/* Network is down */
> +#define	ENETUNREACH	101	/* Network is unreachable */
> +#define	ENETRESET	102	/* Network dropped connection because of reset */
> +#define	ECONNABORTED	103	/* Software caused connection abort */
> +#define	ECONNRESET	104	/* Connection reset by peer */
> +#define	ENOBUFS		105	/* No buffer space available */
> +#define	EISCONN		106	/* Transport endpoint is already connected */
> +#define	ENOTCONN	107	/* Transport endpoint is not connected */
> +#define	ESHUTDOWN	108	/* Cannot send after transport endpoint shutdown */
> +#define	ETOOMANYREFS	109	/* Too many references: cannot splice */
> +#define	ETIMEDOUT	110	/* Connection timed out */
> +#define	ECONNREFUSED	111	/* Connection refused */
> +#define	EHOSTDOWN	112	/* Host is down */
> +#define	EHOSTUNREACH	113	/* No route to host */
> +#define	EALREADY	114	/* Operation already in progress */
> +#define	EINPROGRESS	115	/* Operation now in progress */
> +#define	ESTALE		116	/* Stale NFS file handle */
> +#define	EUCLEAN		117	/* Structure needs cleaning */
> +#define	ENOTNAM		118	/* Not a XENIX named type file */
> +#define	ENAVAIL		119	/* No XENIX semaphores available */
> +#define	EISNAM		120	/* Is a named type file */
> +#define	EREMOTEIO	121	/* Remote I/O error */
> +#define	EDQUOT		122	/* Quota exceeded */
> +
> +#define	ENOMEDIUM	123	/* No medium found */
> +#define	EMEDIUMTYPE	124	/* Wrong medium type */
> +#define	ECANCELED	125	/* Operation Canceled */
> +
> +#define __ELASTERROR 2000	/* Users can add values starting here */
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +#endif /* _SYS_ERRNO_H */



More information about the Newlib mailing list