aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/cris
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-04-09 04:55:59 +0000
committerUlrich Drepper <drepper@redhat.com>2001-04-09 04:55:59 +0000
commiteacde9d0818dac743bc5c2562e35f0a6e949327e (patch)
treed117012b09ea03667334e4fb4be8ab15c41509d5 /sysdeps/unix/sysv/linux/cris
parent4c4505561671f07c4f1b9e39cc0a0fa271a6c8be (diff)
downloadglibc-eacde9d0818dac743bc5c2562e35f0a6e949327e.tar
glibc-eacde9d0818dac743bc5c2562e35f0a6e949327e.tar.gz
glibc-eacde9d0818dac743bc5c2562e35f0a6e949327e.tar.bz2
glibc-eacde9d0818dac743bc5c2562e35f0a6e949327e.zip
Update.
2001-04-08 Hans-Peter Nilsson <hp@axis.com> * sysdeps/unix/sysv/linux/cris/Dist: New file. * sysdeps/unix/sysv/linux/cris/Makefile: New file. * sysdeps/unix/sysv/linux/cris/_G_config.h: New file. * sysdeps/unix/sysv/linux/cris/bits/fcntl.h: New file. * sysdeps/unix/sysv/linux/cris/bits/mman.h: New file. * sysdeps/unix/sysv/linux/cris/bits/resource.h: New file. * sysdeps/unix/sysv/linux/cris/brk.c: New file. * sysdeps/unix/sysv/linux/cris/chown.c: New file. * sysdeps/unix/sysv/linux/cris/clone.S: New file. * sysdeps/unix/sysv/linux/cris/fchown.c: New file. * sysdeps/unix/sysv/linux/cris/fcntl.c: New file. * sysdeps/unix/sysv/linux/cris/fxstat.c: New file. * sysdeps/unix/sysv/linux/cris/getegid.c: New file. * sysdeps/unix/sysv/linux/cris/geteuid.c: New file. * sysdeps/unix/sysv/linux/cris/getgid.c: New file. * sysdeps/unix/sysv/linux/cris/getgroups.c: New file. * sysdeps/unix/sysv/linux/cris/getresgid.c: New file. * sysdeps/unix/sysv/linux/cris/getresuid.c: New file. * sysdeps/unix/sysv/linux/cris/getrlimit.c: New file. * sysdeps/unix/sysv/linux/cris/getrlimit64.c: New file. * sysdeps/unix/sysv/linux/cris/getuid.c: New file. * sysdeps/unix/sysv/linux/cris/lchown.c: New file. * sysdeps/unix/sysv/linux/cris/lockf64.c: New file. * sysdeps/unix/sysv/linux/cris/lxstat.c: New file. * sysdeps/unix/sysv/linux/cris/mmap.S: New file. * sysdeps/unix/sysv/linux/cris/mmap64.S: New file. * sysdeps/unix/sysv/linux/cris/msgctl.c: New file. * sysdeps/unix/sysv/linux/cris/profil-counter.h: New file. * sysdeps/unix/sysv/linux/cris/register-dump.h: New file. * sysdeps/unix/sysv/linux/cris/semctl.c: New file. * sysdeps/unix/sysv/linux/cris/setegid.c: New file. * sysdeps/unix/sysv/linux/cris/seteuid.c: New file. * sysdeps/unix/sysv/linux/cris/setfsgid.c: New file. * sysdeps/unix/sysv/linux/cris/setfsuid.c: New file. * sysdeps/unix/sysv/linux/cris/setgid.c: New file. * sysdeps/unix/sysv/linux/cris/setgroups.c: New file. * sysdeps/unix/sysv/linux/cris/setregid.c: New file. * sysdeps/unix/sysv/linux/cris/setresgid.c: New file. * sysdeps/unix/sysv/linux/cris/setresuid.c: New file. * sysdeps/unix/sysv/linux/cris/setreuid.c: New file. * sysdeps/unix/sysv/linux/cris/setrlimit.c: New file. * sysdeps/unix/sysv/linux/cris/setuid.c: New file. * sysdeps/unix/sysv/linux/cris/shmctl.c: New file. * sysdeps/unix/sysv/linux/cris/socket.S: New file. * sysdeps/unix/sysv/linux/cris/sys/ucontext.h: New file. * sysdeps/unix/sysv/linux/cris/syscall.S: New file. * sysdeps/unix/sysv/linux/cris/sysdep.S: New file. * sysdeps/unix/sysv/linux/cris/sysdep.h: New file. * sysdeps/unix/sysv/linux/cris/vfork.S: New file. * sysdeps/unix/sysv/linux/cris/xstat.c: New file. 2001-04-08 Hans-Peter Nilsson <hp@axis.com> * sysdeps/cris/Dist: New file. * sysdeps/cris/Implies: New file. * sysdeps/cris/Makefile: New file. * sysdeps/cris/__longjmp.S: New file. * sysdeps/cris/_mcount.S: New file. * sysdeps/cris/bits/endian.h: New file. * sysdeps/cris/bits/setjmp.h: New file. * sysdeps/cris/bits/string.h: New file. * sysdeps/cris/dl-machine.h: New file. * sysdeps/cris/elf/start.S: New file. * sysdeps/cris/machine-gmon.h: New file. * sysdeps/cris/memcopy.h: New file. * sysdeps/cris/memusage.h: New file. * sysdeps/cris/setjmp.S: New file. * sysdeps/cris/sysdep.h: New file. * sysdeps/cris/wordcopy.c: New file. 2001-04-08 Hans-Peter Nilsson <hp@axis.com> * elf/elf.h: Add new relocations for CRIS. 2001-04-08 Hans-Peter Nilsson <hp@axis.com> * shlib-versions: Add cases for Linux on CRIS. 2001-04-08 Hans-Peter Nilsson <hp@axis.com> * configure.in (ASM_LINE_SEP tests): Handle CRIS assembly, with ';' for comments and '@' for line separator. 2001-04-08 Hans-Peter Nilsson <hp@axis.com> * sysdeps/unix/sysv/linux/hppa/sysdep.h (INLINE_SYSCALL): Fix typo; s/==/=/ for assignment. 2001-04-08 Hans-Peter Nilsson <hp@axis.com> * malloc/Makefile: Correct comment; mtrace is Perl, not AWK. 2001-04-08 Hans-Peter Nilsson <hp@axis.com> * iconv/gconv_simple.c (internal_ucs4_loop_unaligned): Check for empty input before checking full output. 2001-04-08 Hans-Peter Nilsson <hp@axis.com> * iconv/gconv.c (__gconv): Don't derefer parameter cd before checking if == -1L. 2001-04-08 Ulrich Drepper <drepper@redhat.com> * inet/rexec.c (rexec_af): Avoid calling perror with errno being set.
Diffstat (limited to 'sysdeps/unix/sysv/linux/cris')
-rw-r--r--sysdeps/unix/sysv/linux/cris/Dist5
-rw-r--r--sysdeps/unix/sysv/linux/cris/Makefile8
-rw-r--r--sysdeps/unix/sysv/linux/cris/_G_config.h105
-rw-r--r--sysdeps/unix/sysv/linux/cris/bits/fcntl.h179
-rw-r--r--sysdeps/unix/sysv/linux/cris/bits/mman.h93
-rw-r--r--sysdeps/unix/sysv/linux/cris/bits/resource.h209
-rw-r--r--sysdeps/unix/sysv/linux/cris/brk.c44
-rw-r--r--sysdeps/unix/sysv/linux/cris/chown.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/clone.S88
-rw-r--r--sysdeps/unix/sysv/linux/cris/fchown.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/fcntl.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/fxstat.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/getegid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/geteuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/getgid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/getgroups.c2
-rw-r--r--sysdeps/unix/sysv/linux/cris/getresgid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/getresuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/getrlimit.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/getrlimit64.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/getuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/lchown.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/lockf64.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/lxstat.c2
-rw-r--r--sysdeps/unix/sysv/linux/cris/mmap.S68
-rw-r--r--sysdeps/unix/sysv/linux/cris/mmap64.S91
-rw-r--r--sysdeps/unix/sysv/linux/cris/msgctl.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/profil-counter.h26
-rw-r--r--sysdeps/unix/sysv/linux/cris/register-dump.h117
-rw-r--r--sysdeps/unix/sysv/linux/cris/semctl.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/setegid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/seteuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/setfsgid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/setfsuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/setgid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/setgroups.c2
-rw-r--r--sysdeps/unix/sysv/linux/cris/setregid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/setreuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/setrlimit.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/setuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/shmctl.c1
-rw-r--r--sysdeps/unix/sysv/linux/cris/socket.S96
-rw-r--r--sysdeps/unix/sysv/linux/cris/sys/ucontext.h56
-rw-r--r--sysdeps/unix/sysv/linux/cris/syscall.S40
-rw-r--r--sysdeps/unix/sysv/linux/cris/sysdep.S74
-rw-r--r--sysdeps/unix/sysv/linux/cris/sysdep.h214
-rw-r--r--sysdeps/unix/sysv/linux/cris/vfork.S26
-rw-r--r--sysdeps/unix/sysv/linux/cris/xstat.c1
48 files changed, 1572 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/cris/Dist b/sysdeps/unix/sysv/linux/cris/Dist
new file mode 100644
index 0000000000..1b8a7e61a4
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/Dist
@@ -0,0 +1,5 @@
+clone.S
+setresuid.c
+setresgid.c
+setfsuid.c
+setfsgid.c
diff --git a/sysdeps/unix/sysv/linux/cris/Makefile b/sysdeps/unix/sysv/linux/cris/Makefile
new file mode 100644
index 0000000000..cebaa94134
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/Makefile
@@ -0,0 +1,8 @@
+ifeq ($(subdir),misc)
+sysdep_routines += setfsgid setfsuid setresgid setresuid
+endif
+
+ifeq ($(subdir),signal)
+sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \
+ rt_sigqueueinfo rt_sigaction rt_sigpending
+endif
diff --git a/sysdeps/unix/sysv/linux/cris/_G_config.h b/sysdeps/unix/sysv/linux/cris/_G_config.h
new file mode 100644
index 0000000000..42fef4d288
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/_G_config.h
@@ -0,0 +1,105 @@
+/* This file is needed by libio to define various configuration parameters.
+ These are always the same in the GNU C library. */
+
+/* We have to keep a separate copy for CRIS, because we don't use thunks,
+ and libstdc++-v2 (which we currently use) cares. The C++ ABI is
+ changed totally with GCC 3.0, where we should not need a separate file. */
+
+#ifndef _G_config_h
+#define _G_config_h 1
+
+/* Define types for libio in terms of the standard internal type names. */
+
+#include <bits/types.h>
+#define __need_size_t
+#define __need_wchar_t
+#define __need_wint_t
+#define __need_NULL
+#include <stddef.h>
+#ifndef _WINT_T
+/* Integral type unchanged by default argument promotions that can
+ hold any value corresponding to members of the extended character
+ set, as well as at least one value that does not correspond to any
+ member of the extended character set. */
+# define _WINT_T
+typedef unsigned int wint_t;
+#endif
+#define __need_mbstate_t
+#include <wchar.h>
+#define _G_size_t size_t
+typedef struct
+{
+ __off_t __pos;
+ __mbstate_t __state;
+} _G_fpos_t;
+typedef struct
+{
+ __off64_t __pos;
+ __mbstate_t __state;
+} _G_fpos64_t;
+#define _G_ssize_t __ssize_t
+#define _G_off_t __off_t
+#define _G_off64_t __off64_t
+#define _G_pid_t __pid_t
+#define _G_uid_t __uid_t
+#define _G_wchar_t wchar_t
+#define _G_wint_t wint_t
+#define _G_stat64 stat64
+#include <gconv.h>
+typedef union
+{
+ struct __gconv_info __cd;
+ struct
+ {
+ struct __gconv_info __cd;
+ struct __gconv_step_data __data;
+ } __combined;
+} _G_iconv_t;
+
+typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
+typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
+typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
+typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
+
+#define _G_HAVE_BOOL 1
+
+
+/* These library features are always available in the GNU C library. */
+#define _G_HAVE_ATEXIT 1
+#define _G_HAVE_SYS_CDEFS 1
+#define _G_HAVE_SYS_WAIT 1
+#define _G_NEED_STDARG_H 1
+#define _G_va_list __gnuc_va_list
+
+#define _G_HAVE_PRINTF_FP 1
+#define _G_HAVE_MMAP 1
+#define _G_HAVE_LONG_DOUBLE_IO 1
+#define _G_HAVE_IO_FILE_OPEN 1
+#define _G_HAVE_IO_GETLINE_INFO 1
+
+#define _G_IO_IO_FILE_VERSION 0x20001
+
+#define _G_OPEN64 __open64
+#define _G_LSEEK64 __lseek64
+#define _G_FSTAT64(fd,buf) __fxstat64 (_STAT_VER, fd, buf)
+
+/* This is defined by <bits/stat.h> if `st_blksize' exists. */
+#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
+
+#define _G_BUFSIZ 8192
+
+/* These are the vtbl details for ELF. */
+#define _G_NAMES_HAVE_UNDERSCORE 0
+#define _G_VTABLE_LABEL_HAS_LENGTH 1
+#undef _G_USING_THUNKS
+#define _G_VTABLE_LABEL_PREFIX "_vt."
+#define _G_VTABLE_LABEL_PREFIX_ID _vt.
+
+
+#if defined __cplusplus || defined __STDC__
+# define _G_ARGS(ARGLIST) ARGLIST
+#else
+# define _G_ARGS(ARGLIST) ()
+#endif
+
+#endif /* _G_config.h */
diff --git a/sysdeps/unix/sysv/linux/cris/bits/fcntl.h b/sysdeps/unix/sysv/linux/cris/bits/fcntl.h
new file mode 100644
index 0000000000..87c6c1950c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/bits/fcntl.h
@@ -0,0 +1,179 @@
+/* O_*, F_*, FD_* bit values for Linux.
+ Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _FCNTL_H
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+
+#include <sys/types.h>
+
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+ located on an ext2 file system */
+#define O_ACCMODE 0003
+#define O_RDONLY 00
+#define O_WRONLY 01
+#define O_RDWR 02
+#define O_CREAT 0100 /* not fcntl */
+#define O_EXCL 0200 /* not fcntl */
+#define O_NOCTTY 0400 /* not fcntl */
+#define O_TRUNC 01000 /* not fcntl */
+#define O_APPEND 02000
+#define O_NONBLOCK 04000
+#define O_NDELAY O_NONBLOCK
+#define O_SYNC 010000
+#define O_FSYNC O_SYNC
+#define O_ASYNC 020000
+
+#ifdef __USE_GNU
+# define O_DIRECT 040000 /* Direct disk access. */
+# define O_DIRECTORY 0200000 /* Must be a directory. */
+# define O_NOFOLLOW 0400000 /* Do not follow links. */
+#endif
+
+/* For now Linux has synchronisity options for data and read operations.
+ We define the symbols here but let them do the same as O_SYNC since
+ this is a superset. */
+#if defined __USE_POSIX199309 || defined __USE_UNIX98
+# define O_DSYNC O_SYNC /* Synchronize data. */
+# define O_RSYNC O_SYNC /* Synchronize read operations. */
+#endif
+
+#ifdef __USE_LARGEFILE64
+# define O_LARGEFILE 0100000
+#endif
+
+/* Values for the second argument to `fcntl'. */
+#define F_DUPFD 0 /* Duplicate file descriptor. */
+#define F_GETFD 1 /* Get file descriptor flags. */
+#define F_SETFD 2 /* Set file descriptor flags. */
+#define F_GETFL 3 /* Get file status flags. */
+#define F_SETFL 4 /* Set file status flags. */
+#ifndef __USE_FILE_OFFSET64
+# define F_GETLK 5 /* Get record locking info. */
+# define F_SETLK 6 /* Set record locking info (non-blocking). */
+# define F_SETLKW 7 /* Set record locking info (blocking). */
+#else
+# define F_GETLK F_GETLK64 /* Get record locking info. */
+# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
+# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
+#endif
+#define F_GETLK64 12 /* Get record locking info. */
+#define F_SETLK64 13 /* Set record locking info (non-blocking). */
+#define F_SETLKW64 14 /* Set record locking info (blocking). */
+
+#if defined __USE_BSD || defined __USE_XOPEN2K
+# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */
+# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */
+#endif
+
+#ifdef __USE_GNU
+# define F_SETSIG 10 /* Set number of signal to be sent. */
+# define F_GETSIG 11 /* Get number of signal to be sent. */
+#endif
+
+#ifdef __USE_GNU
+# define F_SETLEASE 1024 /* Set a lease. */
+# define F_GETLEASE 1025 /* Enquire what lease is active. */
+# define F_NOTIFY 1026 /* Request notfications on a directory. */
+#endif
+
+/* For F_[GET|SET]FL. */
+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
+#define F_RDLCK 0 /* Read lock. */
+#define F_WRLCK 1 /* Write lock. */
+#define F_UNLCK 2 /* Remove lock. */
+
+/* For old implementation of bsd flock(). */
+#define F_EXLCK 4 /* or 3 */
+#define F_SHLCK 8 /* or 4 */
+
+#ifdef __USE_BSD
+/* Operations for bsd flock(), also used by the kernel implementation. */
+# define LOCK_SH 1 /* shared lock */
+# define LOCK_EX 2 /* exclusive lock */
+# define LOCK_NB 4 /* or'd with one of the above to prevent
+ blocking */
+# define LOCK_UN 8 /* remove lock */
+#endif
+
+#ifdef __USE_GNU
+# define LOCK_MAND 32 /* This is a mandatory flock: */
+# define LOCK_READ 64 /* ... which allows concurrent read operations. */
+# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
+# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
+#endif
+
+#ifdef __USE_GNU
+/* Types of directory notifications that may be requested with F_NOTIFY. */
+# define DN_ACCESS 0x00000001 /* File accessed. */
+# define DN_MODIFY 0x00000002 /* File modified. */
+# define DN_CREATE 0x00000004 /* File created. */
+# define DN_DELETE 0x00000008 /* File removed. */
+# define DN_RENAME 0x00000010 /* File renamed. */
+# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
+# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
+#endif
+
+struct flock
+ {
+ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
+ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
+#ifndef __USE_FILE_OFFSET64
+ __off_t l_start; /* Offset where the lock begins. */
+ __off_t l_len; /* Size of the locked area; zero means until EOF. */
+#else
+ __off64_t l_start; /* Offset where the lock begins. */
+ __off64_t l_len; /* Size of the locked area; zero means until EOF. */
+#endif
+ __pid_t l_pid; /* Process holding the lock. */
+ };
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+ {
+ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
+ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
+ __off64_t l_start; /* Offset where the lock begins. */
+ __off64_t l_len; /* Size of the locked area; zero means until EOF. */
+ __pid_t l_pid; /* Process holding the lock. */
+ };
+#endif
+
+/* Define some more compatibility macros to be backward compatible with
+ BSD systems which did not managed to hide these kernel macros. */
+#ifdef __USE_BSD
+# define FAPPEND O_APPEND
+# define FFSYNC O_FSYNC
+# define FASYNC O_ASYNC
+# define FNONBLOCK O_NONBLOCK
+# define FNDELAY O_NDELAY
+#endif /* Use BSD. */
+
+/* Advise to `posix_fadvise'. */
+#ifdef __USE_XOPEN2K
+# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
+# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
+# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
+# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
+# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
+# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
+#endif
diff --git a/sysdeps/unix/sysv/linux/cris/bits/mman.h b/sysdeps/unix/sysv/linux/cris/bits/mman.h
new file mode 100644
index 0000000000..f97e84183b
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/bits/mman.h
@@ -0,0 +1,93 @@
+/* Definitions for POSIX memory map interface. Linux/CRIS version.
+ Copyright (C) 1997, 2000, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _SYS_MMAN_H
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+ But the kernel header is not namespace clean. */
+
+
+/* Protections are chosen from these bits, OR'd together. The
+ implementation does not necessarily support PROT_EXEC or PROT_WRITE
+ without PROT_READ. The only guarantees are that no writing will be
+ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ 0x1 /* Page can be read. */
+#define PROT_WRITE 0x2 /* Page can be written. */
+#define PROT_EXEC 0x4 /* Page can be executed. */
+#define PROT_NONE 0x0 /* Page can not be accessed. */
+
+/* Sharing types (must choose one and only one of these). */
+#define MAP_SHARED 0x01 /* Share changes. */
+#define MAP_PRIVATE 0x02 /* Changes are private. */
+#ifdef __USE_MISC
+# define MAP_TYPE 0x0f /* Mask for type of mapping. */
+#endif
+
+/* Other flags. */
+#define MAP_FIXED 0x10 /* Interpret addr exactly. */
+#ifdef __USE_MISC
+# define MAP_FILE 0
+# define MAP_ANONYMOUS 0x20 /* Don't use a file. */
+# define MAP_ANON MAP_ANONYMOUS
+#endif
+
+/* These are Linux-specific. */
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
+# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
+# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
+# define MAP_LOCKED 0x2000 /* Lock the mapping. */
+# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
+#endif
+
+/* Flags to `msync'. */
+#define MS_ASYNC 1 /* Sync memory asynchronously. */
+#define MS_SYNC 4 /* Synchronous memory sync. */
+#define MS_INVALIDATE 2 /* Invalidate the caches. */
+
+/* Flags for `mlockall'. */
+#define MCL_CURRENT 1 /* Lock all currently mapped pages. */
+#define MCL_FUTURE 2 /* Lock all additions to address
+ space. */
+
+/* Flags for `mremap'. */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE 1
+#endif
+
+/* Advice to `madvise'. */
+#ifdef __USE_BSD
+# define MADV_NORMAL 0 /* No further special treatment. */
+# define MADV_RANDOM 1 /* Expect random page references. */
+# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */
+# define MADV_WILLNEED 3 /* Will need these pages. */
+# define MADV_DONTNEED 4 /* Don't need these pages. */
+#endif
+
+/* The POSIX people had to invent similar names for the same things. */
+#ifdef __USE_XOPEN2K
+# define POSIX_MADV_NORMAL 0 /* No further special treatment. */
+# define POSIX_MADV_RANDOM 1 /* Expect random page references. */
+# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */
+# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */
+# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */
+#endif
diff --git a/sysdeps/unix/sysv/linux/cris/bits/resource.h b/sysdeps/unix/sysv/linux/cris/bits/resource.h
new file mode 100644
index 0000000000..f7bfe424e2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/bits/resource.h
@@ -0,0 +1,209 @@
+/* Bit values & structures for resource limits. Linux/CRIS version.
+ Copyright (C) 1994,1996,1997,1998,1999,2000, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _SYS_RESOURCE_H
+# error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Transmute defines to enumerations. The macro re-definitions are
+ necessary because some programs want to test for operating system
+ features with #ifdef RUSAGE_SELF. In ISO C the reflexive
+ definition is a no-op. */
+
+/* Kinds of resource limit. */
+enum __rlimit_resource
+{
+ /* Per-process CPU limit, in seconds. */
+ RLIMIT_CPU = 0,
+#define RLIMIT_CPU RLIMIT_CPU
+
+ /* Largest file that can be created, in bytes. */
+ RLIMIT_FSIZE = 1,
+#define RLIMIT_FSIZE RLIMIT_FSIZE
+
+ /* Maximum size of data segment, in bytes. */
+ RLIMIT_DATA = 2,
+#define RLIMIT_DATA RLIMIT_DATA
+
+ /* Maximum size of stack segment, in bytes. */
+ RLIMIT_STACK = 3,
+#define RLIMIT_STACK RLIMIT_STACK
+
+ /* Largest core file that can be created, in bytes. */
+ RLIMIT_CORE = 4,
+#define RLIMIT_CORE RLIMIT_CORE
+
+ /* Largest resident set size, in bytes.
+ This affects swapping; processes that are exceeding their
+ resident set size will be more likely to have physical memory
+ taken from them. */
+ RLIMIT_RSS = 5,
+#define RLIMIT_RSS RLIMIT_RSS
+
+ /* Number of open files. */
+ RLIMIT_NOFILE = 7,
+ RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */
+#define RLIMIT_NOFILE RLIMIT_NOFILE
+#define RLIMIT_OFILE RLIMIT_OFILE
+
+ /* Address space limit. */
+ RLIMIT_AS = 9,
+#define RLIMIT_AS RLIMIT_AS
+
+ /* Number of processes. */
+ RLIMIT_NPROC = 6,
+#define RLIMIT_NPROC RLIMIT_NPROC
+
+ /* Locked-in-memory address space. */
+ RLIMIT_MEMLOCK = 8,
+#define RLIMIT_MEMLOCK RLIMIT_MEMLOCK
+
+ /* Maximum number of file locks. */
+ RLIMIT_LOCKS = 10,
+#define RLIMIT_LOCKS RLIMIT_LOCKS
+
+ RLIMIT_NLIMITS = 11,
+ RLIM_NLIMITS = RLIMIT_NLIMITS
+#define RLIMIT_NLIMITS RLIMIT_NLIMITS
+#define RLIM_NLIMITS RLIM_NLIMITS
+};
+
+/* Value to indicate that there is no limit. */
+#ifndef __USE_FILE_OFFSET64
+# define RLIM_INFINITY ((unsigned long int)(~0UL))
+#else
+# define RLIM_INFINITY 0xffffffffffffffffuLL
+#endif
+
+#ifdef __USE_LARGEFILE64
+# define RLIM64_INFINITY 0xffffffffffffffffuLL
+#endif
+
+/* We can represent all limits. */
+#define RLIM_SAVED_MAX RLIM_INFINITY
+#define RLIM_SAVED_CUR RLIM_INFINITY
+
+
+/* Type for resource quantity measurement. */
+#ifndef __USE_FILE_OFFSET64
+typedef __rlim_t rlim_t;
+#else
+typedef __rlim64_t rlim_t;
+#endif
+#ifdef __USE_LARGEFILE64
+typedef __rlim64_t rlim64_t;
+#endif
+
+struct rlimit
+ {
+ /* The current (soft) limit. */
+ rlim_t rlim_cur;
+ /* The hard limit. */
+ rlim_t rlim_max;
+ };
+
+#ifdef __USE_LARGEFILE64
+struct rlimit64
+ {
+ /* The current (soft) limit. */
+ rlim64_t rlim_cur;
+ /* The hard limit. */
+ rlim64_t rlim_max;
+ };
+#endif
+
+/* Whose usage statistics do you want? */
+enum __rusage_who
+{
+ /* The calling process. */
+ RUSAGE_SELF = 0,
+#define RUSAGE_SELF RUSAGE_SELF
+
+ /* All of its terminated child processes. */
+ RUSAGE_CHILDREN = -1,
+#define RUSAGE_CHILDREN RUSAGE_CHILDREN
+
+ /* Both. */
+ RUSAGE_BOTH = -2
+#define RUSAGE_BOTH RUSAGE_BOTH
+};
+
+#define __need_timeval
+#include <bits/time.h> /* For `struct timeval'. */
+
+/* Structure which says how much of each resource has been used. */
+struct rusage
+ {
+ /* Total amount of user time used. */
+ struct timeval ru_utime;
+ /* Total amount of system time used. */
+ struct timeval ru_stime;
+ /* Maximum resident set size (in kilobytes). */
+ long int ru_maxrss;
+ /* Amount of sharing of text segment memory
+ with other processes (kilobyte-seconds). */
+ long int ru_ixrss;
+ /* Amount of data segment memory used (kilobyte-seconds). */
+ long int ru_idrss;
+ /* Amount of stack memory used (kilobyte-seconds). */
+ long int ru_isrss;
+ /* Number of soft page faults (i.e. those serviced by reclaiming
+ a page from the list of pages awaiting reallocation. */
+ long int ru_minflt;
+ /* Number of hard page faults (i.e. those that required I/O). */
+ long int ru_majflt;
+ /* Number of times a process was swapped out of physical memory. */
+ long int ru_nswap;
+ /* Number of input operations via the file system. Note: This
+ and `ru_oublock' do not include operations with the cache. */
+ long int ru_inblock;
+ /* Number of output operations via the file system. */
+ long int ru_oublock;
+ /* Number of IPC messages sent. */
+ long int ru_msgsnd;
+ /* Number of IPC messages received. */
+ long int ru_msgrcv;
+ /* Number of signals delivered. */
+ long int ru_nsignals;
+ /* Number of voluntary context switches, i.e. because the process
+ gave up the process before it had to (usually to wait for some
+ resource to be available). */
+ long int ru_nvcsw;
+ /* Number of involuntary context switches, i.e. a higher priority process
+ became runnable or the current process used up its time slice. */
+ long int ru_nivcsw;
+ };
+
+/* Priority limits. */
+#define PRIO_MIN -20 /* Minimum priority a process can have. */
+#define PRIO_MAX 20 /* Maximum priority a process can have. */
+
+/* The type of the WHICH argument to `getpriority' and `setpriority',
+ indicating what flavor of entity the WHO argument specifies. */
+enum __priority_which
+{
+ PRIO_PROCESS = 0, /* WHO is a process ID. */
+#define PRIO_PROCESS PRIO_PROCESS
+ PRIO_PGRP = 1, /* WHO is a process group ID. */
+#define PRIO_PGRP PRIO_PGRP
+ PRIO_USER = 2 /* WHO is a user ID. */
+#define PRIO_USER PRIO_USER
+};
diff --git a/sysdeps/unix/sysv/linux/cris/brk.c b/sysdeps/unix/sysv/linux/cris/brk.c
new file mode 100644
index 0000000000..32a514523d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/brk.c
@@ -0,0 +1,44 @@
+/* brk system call for Linux/CRIS.
+ Copyright (C) 1995, 1996, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <errno.h>
+#include <unistd.h>
+#include <sysdep.h>
+
+/* This must be initialized data because commons can't have aliases. */
+void *__curbrk = 0;
+
+int
+__brk (void *addr)
+{
+ unsigned char *newbrk;
+
+ newbrk = (unsigned char *) INLINE_SYSCALL (brk, 1, addr);
+
+ __curbrk = newbrk;
+
+ if (newbrk < (unsigned char *) addr)
+ {
+ __set_errno (ENOMEM);
+ return -1;
+ }
+
+ return 0;
+}
+weak_alias (__brk, brk)
diff --git a/sysdeps/unix/sysv/linux/cris/chown.c b/sysdeps/unix/sysv/linux/cris/chown.c
new file mode 100644
index 0000000000..1961622564
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/chown.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/m68k/chown.c>
diff --git a/sysdeps/unix/sysv/linux/cris/clone.S b/sysdeps/unix/sysv/linux/cris/clone.S
new file mode 100644
index 0000000000..c501c86627
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/clone.S
@@ -0,0 +1,88 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <sysdep.h>
+#define _ERRNO_H 1
+#include <bits/errno.h>
+
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
+
+ .syntax no_register_prefix
+
+ .text
+ENTRY (__clone)
+ /* Sanity check arguments: No NULL function pointers. Allow a NULL
+ stack pointer though; it makes the kernel allocate stack. */
+ test.d r10
+ beq 1f
+ nop
+
+ /* We need to muck with a few registers. */
+ movem r1,[sp=sp-8]
+
+ /* Save the function pointer and argument. We can't save them
+ onto the new stack since it can be NULL. */
+ move.d r10,r0
+ move.d r13,r1
+
+ /* Move the other arguments into place for the system call. */
+ move.d r11,r10
+ move.d r12,r11
+
+ /* Do the system call. */
+ movu.w SYS_ify (clone),r9
+ break 13
+ test.d r10
+ beq .Lthread_start
+ nop
+
+ /* Jump to error handler if we get (unsigned) -4096 .. 0xffffffff. */
+ cmps.w -4096,r10
+ bhs 0f
+ movem [sp+],r1
+
+ /* In parent, successful return. (Avoid using "ret" - it's a macro.) */
+ Ret
+ nop
+
+.Lthread_start:
+ /* Terminate frame pointers here. */
+ moveq 0,r8
+
+ /* I've told you once. */
+ move.d r1,r10
+ jsr r0
+
+ SETUP_PIC
+ PLTCALL (_exit)
+
+ /* Die horribly. */
+ test.d [6809]
+
+ /* Stop the unstoppable. */
+9:
+ ba 9b
+ nop
+
+/* Local error handler. */
+1:
+ movs.w -EINVAL,r10
+ /* Drop through into the ordinary error handler. */
+PSEUDO_END (__clone)
+
+weak_alias (__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/cris/fchown.c b/sysdeps/unix/sysv/linux/cris/fchown.c
new file mode 100644
index 0000000000..3a69ecc9e7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/fchown.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fchown.c>
diff --git a/sysdeps/unix/sysv/linux/cris/fcntl.c b/sysdeps/unix/sysv/linux/cris/fcntl.c
new file mode 100644
index 0000000000..ea951bc4f9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/fcntl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
diff --git a/sysdeps/unix/sysv/linux/cris/fxstat.c b/sysdeps/unix/sysv/linux/cris/fxstat.c
new file mode 100644
index 0000000000..4f219f0b9d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/fxstat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fxstat.c>
diff --git a/sysdeps/unix/sysv/linux/cris/getegid.c b/sysdeps/unix/sysv/linux/cris/getegid.c
new file mode 100644
index 0000000000..37b4b4a530
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/getegid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getegid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/geteuid.c b/sysdeps/unix/sysv/linux/cris/geteuid.c
new file mode 100644
index 0000000000..ebcb555b5e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/geteuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/geteuid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/getgid.c b/sysdeps/unix/sysv/linux/cris/getgid.c
new file mode 100644
index 0000000000..0a4d6061f0
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/getgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getgid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/getgroups.c b/sysdeps/unix/sysv/linux/cris/getgroups.c
new file mode 100644
index 0000000000..102ea24e14
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/getgroups.c
@@ -0,0 +1,2 @@
+/* We also have to rewrite the kernel gid_t to the user land type. */
+#include <sysdeps/unix/sysv/linux/i386/getgroups.c>
diff --git a/sysdeps/unix/sysv/linux/cris/getresgid.c b/sysdeps/unix/sysv/linux/cris/getresgid.c
new file mode 100644
index 0000000000..b703a414cc
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/getresgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getresgid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/getresuid.c b/sysdeps/unix/sysv/linux/cris/getresuid.c
new file mode 100644
index 0000000000..0b14cefe34
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/getresuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getresuid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/getrlimit.c b/sysdeps/unix/sysv/linux/cris/getrlimit.c
new file mode 100644
index 0000000000..fc06dbd641
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/getrlimit.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getrlimit.c>
diff --git a/sysdeps/unix/sysv/linux/cris/getrlimit64.c b/sysdeps/unix/sysv/linux/cris/getrlimit64.c
new file mode 100644
index 0000000000..fef018f471
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/getrlimit64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/cris/getuid.c b/sysdeps/unix/sysv/linux/cris/getuid.c
new file mode 100644
index 0000000000..d682c79a49
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/getuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getuid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/lchown.c b/sysdeps/unix/sysv/linux/cris/lchown.c
new file mode 100644
index 0000000000..c89de99ba2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/lchown.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/lchown.c>
diff --git a/sysdeps/unix/sysv/linux/cris/lockf64.c b/sysdeps/unix/sysv/linux/cris/lockf64.c
new file mode 100644
index 0000000000..a88f5a784a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/lockf64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/lockf64.c>
diff --git a/sysdeps/unix/sysv/linux/cris/lxstat.c b/sysdeps/unix/sysv/linux/cris/lxstat.c
new file mode 100644
index 0000000000..2371cd9719
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/lxstat.c
@@ -0,0 +1,2 @@
+#include <sysdeps/unix/sysv/linux/i386/lxstat.c>
+
diff --git a/sysdeps/unix/sysv/linux/cris/mmap.S b/sysdeps/unix/sysv/linux/cris/mmap.S
new file mode 100644
index 0000000000..33030f4ee4
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/mmap.S
@@ -0,0 +1,68 @@
+/* Copyright (C) 1995, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <sysdep.h>
+
+#include "kernel-features.h"
+
+#include <asm/errno.h>
+
+/* Rather than dragging in yet another kernel file, <asm/page.h>, we
+ define it here. Provide for easy override. */
+#ifndef PAGE_SHIFT
+#define PAGE_SHIFT 13
+#endif
+
+ .syntax no_register_prefix
+
+/* This is __ptr_t
+ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) */
+
+ ENTRY (__mmap)
+
+ /* Only accept a offset (and address) being a multiple of PAGE_SIZE,
+ since we only pass the page part in the system call. */
+ move.d [sp+4],r9
+ btstq (PAGE_SHIFT - 1),r9
+ bne 1f
+ btstq (PAGE_SHIFT - 1),r10
+
+ bne 1f
+ lsrq PAGE_SHIFT,r9
+
+ move [sp],mof
+ move srp,[sp]
+ move r9,srp
+
+ movu.b SYS_ify (mmap2),r9
+ break 13
+
+ cmps.w -4096,r10
+ bhs 0f
+ move [sp],srp
+
+ Ret
+ nop
+
+/* Local error handler. */
+1:
+ movs.w -EINVAL,r10
+ /* Drop through into the ordinary error handler. */
+PSEUDO_END (__mmap)
+
+weak_alias (__mmap, mmap)
diff --git a/sysdeps/unix/sysv/linux/cris/mmap64.S b/sysdeps/unix/sysv/linux/cris/mmap64.S
new file mode 100644
index 0000000000..acf6ca33bf
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/mmap64.S
@@ -0,0 +1,91 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <sysdep.h>
+
+#include "kernel-features.h"
+
+#include <asm/errno.h>
+
+/* Rather than dragging in yet another kernel file, <asm/page.h>, we
+ define it here. Provide for easy override. */
+#ifndef PAGE_SHIFT
+#define PAGE_SHIFT 13
+#endif
+
+/* This is: __ptr_t
+ __mmap64 (__ptr_t addr, size_t len, int prot, int flags, int fd,
+ off64_t offset); */
+
+/* This was done in C, but the resulting code didn't look anywhere near
+ nice, and mmap64 is important enough to have fast code. Rather than
+ fixing (the generic bits in) gcc, we make sure not to depend on it by
+ writing code that GCC cannot reasonably generate. */
+
+ .syntax no_register_prefix
+
+ENTRY (__mmap64)
+
+ move [sp],mof
+ move.d [sp+4],r9
+
+ /* Only accept an offset being a multiple of PAGE_SIZE, ditto address. */
+ btstq (PAGE_SHIFT - 1),r9
+ bne 1f
+ lsrq PAGE_SHIFT,r9
+
+ btstq (PAGE_SHIFT - 1),r10
+ bne 1f
+ move.d r9,[sp]
+
+ /* We have to store the adjusted part somewhere we can "or" from.
+ No registers available, so let's re-use the incoming low-part
+ parameter location. */
+ move.d [sp+8],r9
+
+ swapwbr r9
+ /* Check if the highest bits (now the lowest bits) are zero. They
+ must be, since we're actually calling a system function
+ specifying the size in *pages* in a single dword. Thus you can
+ mmap64 PAGE_SIZE * 4 Gbyte. */
+ btstq (PAGE_SHIFT - 1),r9
+ bne 1f
+ swapwbr r9
+
+ lslq (32 - PAGE_SHIFT),r9
+ or.d [sp],r9
+ move srp,[sp]
+ move r9,srp
+
+ movu.b SYS_ify (mmap2),r9
+ break 13
+
+ cmps.w -4096,r10
+ bhs 0f
+ move [sp],srp
+
+ Ret
+ nop
+
+/* Local error handler. */
+1:
+ movs.w -EINVAL,r10
+ /* Drop through into the ordinary error handler. */
+PSEUDO_END (__mmap64)
+
+weak_alias (__mmap64, mmap64)
diff --git a/sysdeps/unix/sysv/linux/cris/msgctl.c b/sysdeps/unix/sysv/linux/cris/msgctl.c
new file mode 100644
index 0000000000..9f9b8431a3
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/msgctl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/msgctl.c>
diff --git a/sysdeps/unix/sysv/linux/cris/profil-counter.h b/sysdeps/unix/sysv/linux/cris/profil-counter.h
new file mode 100644
index 0000000000..8bbce544d1
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/profil-counter.h
@@ -0,0 +1,26 @@
+/* Low-level statistical profiling support function. Linux/CRIS version.
+ Copyright (C) 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <signal.h>
+
+static void
+profil_counter (int signo, struct sigcontext *scp)
+{
+ profil_count ((void *) scp->regs.irp);
+}
diff --git a/sysdeps/unix/sysv/linux/cris/register-dump.h b/sysdeps/unix/sysv/linux/cris/register-dump.h
new file mode 100644
index 0000000000..e8a52f73fc
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/register-dump.h
@@ -0,0 +1,117 @@
+/* Dump registers.
+ Copyright (C) 1998, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <stddef.h>
+#include <sys/uio.h>
+#include <stdio-common/_itoa.h>
+
+/* We will print the register dump in this format:
+
+ R0: XXXXXXXX R1: XXXXXXXX R2: XXXXXXXX R3: XXXXXXXX
+ R4: XXXXXXXX R5: XXXXXXXX R6: XXXXXXXX R7: XXXXXXXX
+ R8: XXXXXXXX R9: XXXXXXXX R10: XXXXXXXX R11: XXXXXXXX
+ R12: XXXXXXXX R13: XXXXXXXX SP: XXXXXXXX PC: XXXXXXXX
+DCCR: XXXXXXXX SRP: XXXXXXXX */
+
+static void
+hexvalue (unsigned long int value, char *buf, size_t len)
+{
+ char *cp = _itoa_word (value, buf + len, 16, 0);
+ while (cp > buf)
+ *--cp = '0';
+}
+
+static void register_dump (int fd, struct sigcontext *ctx)
+{
+ char regs[18][8];
+ struct iovec iov[36], *next_iov = iov;
+ struct pt_regs *rx = &ctx->regs;
+
+#define ADD_STRING(str) \
+ next_iov->iov_base = (char *) (str); \
+ next_iov->iov_len = strlen (str); \
+ ++next_iov
+#define ADD_MEM(str, len) \
+ next_iov->iov_base = (str); \
+ next_iov->iov_len = (len); \
+ ++next_iov
+
+ /* Generate strings of register contents. */
+ hexvalue (rx->r0, regs[0], 8);
+ hexvalue (rx->r1, regs[1], 8);
+ hexvalue (rx->r2, regs[2], 8);
+ hexvalue (rx->r3, regs[3], 8);
+ hexvalue (rx->r4, regs[4], 8);
+ hexvalue (rx->r5, regs[5], 8);
+ hexvalue (rx->r6, regs[6], 8);
+ hexvalue (rx->r7, regs[7], 8);
+ hexvalue (rx->r8, regs[8], 8);
+ hexvalue (rx->r9, regs[9], 8);
+ hexvalue (rx->r10, regs[10], 8);
+ hexvalue (rx->r11, regs[11], 8);
+ hexvalue (rx->r12, regs[12], 8);
+ hexvalue (rx->r13, regs[13], 8);
+ hexvalue (ctx->usp, regs[14], 8);
+ hexvalue (rx->irp, regs[17], 8);
+ hexvalue (rx->dccr, regs[15], 8);
+ hexvalue (rx->srp, regs[16], 8);
+
+ /* Generate the output. */
+ ADD_STRING ("Register dump:\n\n R0: ");
+ ADD_MEM (regs[0], 8);
+ ADD_STRING (" R1: ");
+ ADD_MEM (regs[1], 8);
+ ADD_STRING (" R2: ");
+ ADD_MEM (regs[2], 8);
+ ADD_STRING (" R3: ");
+ ADD_MEM (regs[3], 8);
+ ADD_STRING ("\n R4: ");
+ ADD_MEM (regs[4], 8);
+ ADD_STRING (" R5: ");
+ ADD_MEM (regs[5], 8);
+ ADD_STRING (" R6: ");
+ ADD_MEM (regs[6], 8);
+ ADD_STRING (" R7: ");
+ ADD_MEM (regs[7], 8);
+ ADD_STRING ("\n R8: ");
+ ADD_MEM (regs[8], 8);
+ ADD_STRING (" R9: ");
+ ADD_MEM (regs[9], 8);
+ ADD_STRING (" R10: ");
+ ADD_MEM (regs[10], 8);
+ ADD_STRING (" R11: ");
+ ADD_MEM (regs[11], 8);
+ ADD_STRING ("\n R12: ");
+ ADD_MEM (regs[12], 8);
+ ADD_STRING (" R13: ");
+ ADD_MEM (regs[13], 8);
+ ADD_STRING (" SP: ");
+ ADD_MEM (regs[14], 8);
+ ADD_STRING (" PC: ");
+ ADD_MEM (regs[17], 8);
+ ADD_STRING ("\nDCCR: ");
+ ADD_MEM (regs[15], 8);
+ ADD_STRING (" SRP: ");
+ ADD_MEM (regs[16], 4);
+
+ /* Write the stuff out. */
+ writev (fd, iov, next_iov - iov);
+}
+
+#define REGISTER_DUMP register_dump (fd, ctx)
diff --git a/sysdeps/unix/sysv/linux/cris/semctl.c b/sysdeps/unix/sysv/linux/cris/semctl.c
new file mode 100644
index 0000000000..e9b1a483c9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/semctl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/semctl.c>
diff --git a/sysdeps/unix/sysv/linux/cris/setegid.c b/sysdeps/unix/sysv/linux/cris/setegid.c
new file mode 100644
index 0000000000..2e3a54c893
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/setegid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setegid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/seteuid.c b/sysdeps/unix/sysv/linux/cris/seteuid.c
new file mode 100644
index 0000000000..18e41d08c1
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/seteuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/seteuid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/setfsgid.c b/sysdeps/unix/sysv/linux/cris/setfsgid.c
new file mode 100644
index 0000000000..0886712569
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/setfsgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setfsgid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/setfsuid.c b/sysdeps/unix/sysv/linux/cris/setfsuid.c
new file mode 100644
index 0000000000..a9f22eb8ab
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/setfsuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setfsuid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/setgid.c b/sysdeps/unix/sysv/linux/cris/setgid.c
new file mode 100644
index 0000000000..377021d9ec
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/setgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setgid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/setgroups.c b/sysdeps/unix/sysv/linux/cris/setgroups.c
new file mode 100644
index 0000000000..0e7086278f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/setgroups.c
@@ -0,0 +1,2 @@
+/* We also have to rewrite the kernel gid_t to the user land type. */
+#include <sysdeps/unix/sysv/linux/i386/setgroups.c>
diff --git a/sysdeps/unix/sysv/linux/cris/setregid.c b/sysdeps/unix/sysv/linux/cris/setregid.c
new file mode 100644
index 0000000000..99c57ad20f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/setregid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setregid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/setreuid.c b/sysdeps/unix/sysv/linux/cris/setreuid.c
new file mode 100644
index 0000000000..8ad61226e9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/setreuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setreuid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/setrlimit.c b/sysdeps/unix/sysv/linux/cris/setrlimit.c
new file mode 100644
index 0000000000..bfaef74c38
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/setrlimit.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setrlimit.c>
diff --git a/sysdeps/unix/sysv/linux/cris/setuid.c b/sysdeps/unix/sysv/linux/cris/setuid.c
new file mode 100644
index 0000000000..de394379be
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/setuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setuid.c>
diff --git a/sysdeps/unix/sysv/linux/cris/shmctl.c b/sysdeps/unix/sysv/linux/cris/shmctl.c
new file mode 100644
index 0000000000..7eac6380dd
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/shmctl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/shmctl.c>
diff --git a/sysdeps/unix/sysv/linux/cris/socket.S b/sysdeps/unix/sysv/linux/cris/socket.S
new file mode 100644
index 0000000000..06832ec395
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/socket.S
@@ -0,0 +1,96 @@
+/* Copyright (C) 1995, 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <sysdep.h>
+#include <socketcall.h>
+
+#define P(a, b) P2(a, b)
+#define P2(a, b) a##b
+
+/* The socket-oriented system calls are handled unusally in Linux.
+ They are all gated through the single `socketcall' system call number.
+ `socketcall' takes two arguments: the first is the subcode, specifying
+ which socket function is being called; and the second is a pointer to
+ the arguments to the specific function.
+
+ The .S files for the other calls just #define socket and #include this.
+ They also #define a 'number-of-arguments' word in NARGS, which
+ defaults to 3. */
+
+#ifndef NARGS
+#ifdef socket
+#error NARGS not defined
+#endif
+#define NARGS 3
+#endif
+
+ .syntax no_register_prefix
+
+#ifndef __socket
+#define __socket P(__,socket)
+#endif
+
+ENTRY(__socket)
+ subq NARGS*4,sp
+
+#if NARGS >= 2
+ move.d sp,r9
+ move.d r10,[r9+]
+#else
+ move.d r10,[sp]
+#endif
+#if NARGS >= 2
+ move.d r11,[r9+]
+#endif
+#if NARGS >= 3
+ move.d r12,[r9+]
+#endif
+#if NARGS >= 4
+ move.d r13,[r9+]
+#endif
+#if NARGS >= 5
+ move.d [sp+NARGS*4],r13
+ move.d r13,[r9+]
+#endif
+#if NARGS >= 6
+ move.d [sp+NARGS*4+4],r13
+ move.d r13,[r9+]
+#endif
+#if NARGS >= 7
+ move.d [sp+NARGS*4+8],r13
+ move.d r13,[r9+]
+#endif
+#if NARGS >= 8
+ move.d [sp+NARGS*4+12],r13
+ move.d r13,[r9+]
+#endif
+#if NARGS >= 9
+#error Too many arguments!
+#endif
+ moveq P(SOCKOP_,socket),r10
+ move.d sp,r11
+ movu.w SYS_ify(socketcall),r9
+ break 13
+ cmps.w -4096,r10
+ bhs 0f
+ addq NARGS*4,sp
+ Ret
+ nop
+PSEUDO_END (__socket)
+
+weak_alias (__socket, socket)
diff --git a/sysdeps/unix/sysv/linux/cris/sys/ucontext.h b/sysdeps/unix/sysv/linux/cris/sys/ucontext.h
new file mode 100644
index 0000000000..fe4dc7b5c4
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/sys/ucontext.h
@@ -0,0 +1,56 @@
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H 1
+
+#include <features.h>
+#include <signal.h>
+
+#include <bits/sigcontext.h>
+
+
+/* Type for general register. */
+typedef long int greg_t;
+
+/* Number of general registers. */
+#define NGREG 20
+
+/* Container for all general registers. */
+typedef greg_t gregset_t[NGREG];
+
+/* A placeholder type for floating-point register. */
+typedef long int fpreg_t;
+
+/* A placeholder; CRIS does not have any fp regs. */
+typedef unsigned long fpregset_t;
+
+/* A machine context is exactly a sigcontext. */
+typedef struct sigcontext mcontext_t;
+
+/* Userlevel context. */
+typedef struct ucontext
+ {
+ unsigned long int uc_flags;
+ struct ucontext *uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ __sigset_t uc_sigmask;
+ } ucontext_t;
+
+#endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/cris/syscall.S b/sysdeps/unix/sysv/linux/cris/syscall.S
new file mode 100644
index 0000000000..eb5cdcccf9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/syscall.S
@@ -0,0 +1,40 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <sysdep.h>
+
+ .syntax no_register_prefix
+
+/* Make syscall (callno, ...) into a system call. */
+
+ENTRY (syscall)
+ move.d r10,r9
+ move.d r11,r10
+ move.d r12,r11
+ move.d r13,r12
+ move.d [sp],r13
+ move srp,[sp]
+ move [sp+4],mof
+ move [sp+8],srp
+ break 13
+ cmps.w -4096,r10
+ bhs 0f
+ move [sp],srp
+ Ret
+ nop
+PSEUDO_END (syscall)
diff --git a/sysdeps/unix/sysv/linux/cris/sysdep.S b/sysdeps/unix/sysv/linux/cris/sysdep.S
new file mode 100644
index 0000000000..4a108db1f7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/sysdep.S
@@ -0,0 +1,74 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <sysdep.h>
+
+/* Make space for the errno variable. */
+
+ .globl C_SYMBOL_NAME(errno)
+ .type C_SYMBOL_NAME(errno),@object
+ .lcomm C_SYMBOL_NAME(errno),4
+
+weak_alias (errno, _errno)
+
+/* The syscall stubs jump here when they detect an error, bot for PIC and
+ non-PIC. */
+
+ .syntax no_register_prefix
+
+ENTRY (__syscall_error)
+ neg.d r10,r10
+
+#ifdef _LIBC_REENTRANT
+ push r10
+ push srp
+
+ /* Note that __syscall_error is only visible within this library,
+ and no-one passes it on as a pointer, so can assume that R0 (GOT
+ pointer) is correctly set up. */
+ PLTCALL (__errno_location)
+
+ pop srp
+ pop r11
+ move.d r11,[r10]
+
+#else /* not _LIBC_REENTRANT */
+# ifdef __PIC__
+ move.d [r0+C_SYMBOL_NAME(errno:GOT)],r9
+ move.d r10,[r9]
+# else
+ move.d r10,[C_SYMBOL_NAME(errno)]
+# endif
+#endif /* _LIBC_REENTRANT */
+
+#ifdef __PIC__
+/* PIC callers are supposed to have R0 on stack, ready for us to restore.
+ Callers are only allowed from within this DSO, so the GOT in r0 is the
+ one we want to use.
+
+ (Don't use "ret" - it's a macro). */
+
+ moveq -1,r10
+ Ret
+ pop r0
+#else
+ Ret
+ moveq -1,r10
+#endif
+
+END (__syscall_error)
diff --git a/sysdeps/unix/sysv/linux/cris/sysdep.h b/sysdeps/unix/sysv/linux/cris/sysdep.h
new file mode 100644
index 0000000000..d388665286
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/sysdep.h
@@ -0,0 +1,214 @@
+/* Assembler macros for CRIS.
+ Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <asm/unistd.h>
+#include <sysdeps/cris/sysdep.h>
+#include <sys/syscall.h>
+#include "config.h"
+
+#undef SYS_ify
+#define SYS_ify(syscall_name) (__NR_##syscall_name)
+
+
+#ifdef __ASSEMBLER__
+
+/* For Linux we can use the system call table in the header file
+ /usr/include/asm/unistd.h
+ of the kernel. But these symbols do not follow the SYS_* syntax
+ so we have to redefine the `SYS_ify' macro here. */
+#undef SYS_ify
+#define SYS_ify(syscall_name) __NR_##syscall_name
+
+/* ELF-like local names start with `.L'. */
+#undef L
+#define L(name) .L##name
+
+/* Linux uses a negative return value to indicate syscall errors,
+ unlike most Unices, which use the condition codes' carry flag.
+
+ Since version 2.1 the return value of a system call might be
+ negative even if the call succeeded. E.g., the `lseek' system call
+ might return a large offset. Therefore we must not anymore test
+ for < 0, but test for a real error by making sure the value in %eax
+ is a real error number. Linus said he will make sure the no syscall
+ returns a value in -1 .. -4095 as a valid result so we can safely
+ test with -4095. */
+
+/* Syscall wrappers consist of
+ #include <sysdep.h>
+ PSEUDO (...)
+ ret
+ PSEUDO_END (...)
+
+ which expand to the following. */
+
+/* Linux takes system call arguments in registers:
+ syscall number R9
+ arg 1 R10
+ arg 2 R11
+ arg 3 R12
+ arg 4 R13
+ arg 5 MOF
+ arg 6 SRP
+
+ The compiler calls us by the C convention:
+ syscall number in the DO_CALL macro
+ arg 1 R10
+ arg 2 R11
+ arg 3 R12
+ arg 4 R13
+ arg 5 [SP]
+ arg 6 [SP + 4]
+ */
+
+/* Note that we use "bhs", since we want to match
+ (unsigned) -4096 .. 0xffffffff. Using "ble" would match
+ -4096 .. -2**31. */
+#define PSEUDO(name, syscall_name, args) \
+ ENTRY (name) @ \
+ DOARGS_##args @ \
+ movu.w SYS_ify (syscall_name),$r9 @ \
+ break 13 @ \
+ cmps.w -4096,$r10 @ \
+ bhs 0f @ \
+ nop @ \
+ UNDOARGS_return_##args
+
+/* Ouch! We have to remember not to use "ret" in assembly-code.
+ ("Luckily", mnemonics are case-insensitive.)
+ Note that we assume usage is exactly:
+ PSEUDO (...)
+ ret
+ PSEUDO_END (...)
+ so we can put all payload into PSEUDO (except for error handling). */
+
+#define ret
+
+#define PSEUDO_END(name) \
+0: @ \
+ SETUP_PIC @ \
+ PLTJUMP (syscall_error) @ \
+ END (name)
+
+#define DOARGS_0
+#define DOARGS_1
+#define DOARGS_2
+#define DOARGS_3
+#define DOARGS_4
+#define DOARGS_5 \
+ move [$sp],$mof
+
+/* To avoid allocating stack-space, we re-use the arg 5 (MOF) entry by
+ storing SRP into it. If called with too-few arguments, we will crash,
+ but that will happen in the general case too. */
+#define DOARGS_6 \
+ DOARGS_5 @ \
+ move $srp,[$sp] @ \
+ move [$sp+4],$srp
+
+#define UNDOARGS_return_0 \
+ Ret @ \
+ nop
+
+#define UNDOARGS_return_1 UNDOARGS_return_0
+#define UNDOARGS_return_2 UNDOARGS_return_0
+#define UNDOARGS_return_3 UNDOARGS_return_0
+#define UNDOARGS_return_4 UNDOARGS_return_0
+#define UNDOARGS_return_5 UNDOARGS_return_0
+
+/* We assume the following code will be "ret" and "PSEUDO_END". */
+#define UNDOARGS_return_return_6 \
+ jump [$sp]
+
+#else /* not __ASSEMBLER__ */
+
+#undef INLINE_SYSCALL
+#define INLINE_SYSCALL(name, nr, args...) \
+ ({ \
+ unsigned long __sys_res; \
+ register unsigned long __res asm ("r10"); \
+ LOAD_ARGS_c_##nr (args) \
+ register unsigned long __callno asm ("r9") \
+ = SYS_ify (name); \
+ asm volatile (LOAD_ARGS_asm_##nr (args) \
+ "break 13" \
+ : "=r" (__res) \
+ : ASM_ARGS_##nr (args) \
+ : ASM_CLOBBER_##nr); \
+ __sys_res = __res; \
+ \
+ if (__sys_res >= (unsigned long) -4096) \
+ { \
+ __set_errno (- __sys_res); \
+ __sys_res = (unsigned long) -1; \
+ } \
+ __sys_res; \
+ })
+
+#define LOAD_ARGS_c_0()
+#define LOAD_ARGS_asm_0()
+#define ASM_CLOBBER_0 "memory"
+#define ASM_ARGS_0() "r" (__callno)
+
+#define LOAD_ARGS_c_1(r10) \
+ LOAD_ARGS_c_0() \
+ register unsigned long __r10 __asm__ ("r10") = (unsigned long) (r10);
+#define LOAD_ARGS_asm_1(r10) LOAD_ARGS_asm_0 ()
+#define ASM_CLOBBER_1 ASM_CLOBBER_0
+#define ASM_ARGS_1(r10) ASM_ARGS_0 (), "0" (__r10)
+
+#define LOAD_ARGS_c_2(r10, r11) \
+ LOAD_ARGS_c_1(r10) \
+ register unsigned long __r11 __asm__ ("r11") = (unsigned long) (r11);
+#define LOAD_ARGS_asm_2(r10, r11) LOAD_ARGS_asm_1 (r10)
+#define ASM_CLOBBER_2 ASM_CLOBBER_1
+#define ASM_ARGS_2(r10, r11) ASM_ARGS_1 (r10), "r" (__r11)
+
+#define LOAD_ARGS_c_3(r10, r11, r12) \
+ LOAD_ARGS_c_2(r10, r11) \
+ register unsigned long __r12 __asm__ ("r12") = (unsigned long) (r12);
+#define LOAD_ARGS_asm_3(r10, r11, r12) LOAD_ARGS_asm_2 (r10, r11)
+#define ASM_CLOBBER_3 ASM_CLOBBER_2
+#define ASM_ARGS_3(r10, r11, r12) ASM_ARGS_2 (r10, r11), "r" (__r12)
+
+#define LOAD_ARGS_c_4(r10, r11, r12, r13) \
+ LOAD_ARGS_c_3(r10, r11, r12) \
+ register unsigned long __r13 __asm__ ("r13") = (unsigned long) (r13);
+#define LOAD_ARGS_asm_4(r10, r11, r12, r13) LOAD_ARGS_asm_3 (r10, r11, r12)
+#define ASM_CLOBBER_4 ASM_CLOBBER_3
+#define ASM_ARGS_4(r10, r11, r12, r13) ASM_ARGS_3 (r10, r11, r12), "r" (__r13)
+
+#define LOAD_ARGS_c_5(r10, r11, r12, r13, mof) \
+ LOAD_ARGS_c_4(r10, r11, r12, r13)
+#define LOAD_ARGS_asm_5(r10, r11, r12, r13, mof) \
+ LOAD_ARGS_asm_4 (r10, r11, r12, r13) "move %5,$mof\n\t"
+#define ASM_CLOBBER_5 ASM_CLOBBER_4
+#define ASM_ARGS_5(r10, r11, r12, r13, mof) \
+ ASM_ARGS_4 (r10, r11, r12, r13), "g" (mof)
+
+#define LOAD_ARGS_c_6(r10, r11, r12, r13, mof, srp) \
+ LOAD_ARGS_c_5(r10, r11, r12, r13, mof)
+#define LOAD_ARGS_asm_6(r10, r11, r12, r13, mof, srp) \
+ LOAD_ARGS_asm_5(r10, r11, r12, r13, mof) \
+ "move %6,$srp\n\t"
+#define ASM_CLOBBER_6 ASM_CLOBBER_5, "srp"
+#define ASM_ARGS_6(r10, r11, r12, r13, mof, srp) \
+ ASM_ARGS_5 (r10, r11, r12, r13, mof), "g" (srp)
+
+#endif /* not __ASSEMBLER__ */
diff --git a/sysdeps/unix/sysv/linux/cris/vfork.S b/sysdeps/unix/sysv/linux/cris/vfork.S
new file mode 100644
index 0000000000..bb4072f3f6
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/vfork.S
@@ -0,0 +1,26 @@
+/* Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <sysdep.h>
+
+PSEUDO (__vfork, vfork, 0)
+ Ret
+ nop
+PSEUDO_END (__vfork)
+
+weak_alias (__vfork, vfork)
diff --git a/sysdeps/unix/sysv/linux/cris/xstat.c b/sysdeps/unix/sysv/linux/cris/xstat.c
new file mode 100644
index 0000000000..e9869f5508
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cris/xstat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/xstat.c>