diff options
author | Eric Andersen <andersen@codepoet.org> | 2002-06-18 01:10:28 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2002-06-18 01:10:28 +0000 |
commit | b34e006872e0c6c6f851ca36eda46d01e3ca0e6b (patch) | |
tree | 8206ca5739109e6482643cbea01975601c39b3b0 | |
parent | 33a9fd74f98749da869c8d649f0a148768205867 (diff) |
Patch from Martin Proulx <mproulx@okiok.com> to support
the i960 architecture.
-rw-r--r-- | extra/Configs/Config.i960 | 219 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/AUTHORS | 4 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/Makefile | 80 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/README | 72 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/_mmap.S | 52 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/bits/endian.h | 15 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/bits/fcntl.h | 179 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/bits/mman.h | 93 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/bits/setjmp.h | 33 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/bits/syscalls.h | 10 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/bits/wordsize.h | 19 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/clone.S | 62 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/crt0.S | 49 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/setjmp.S | 124 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/specs.uclinux.gcc-2.95.i960-intel-coff | 64 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/sys/procfs.h | 126 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/sys/ucontext.h | 76 | ||||
-rw-r--r-- | libc/sysdeps/linux/i960/vfork.S | 40 |
18 files changed, 1317 insertions, 0 deletions
diff --git a/extra/Configs/Config.i960 b/extra/Configs/Config.i960 new file mode 100644 index 000000000..8ab2cfea4 --- /dev/null +++ b/extra/Configs/Config.i960 @@ -0,0 +1,219 @@ +# Library Configuration rules for uClibc +# +# This file contains rules which are shared between multiple Makefiles. All +# normal configuration options live in the file named "Config". You probably +# should not mess with this file unless you know what you are doing... +# +# Copyright (C) 2000 by Lineo, inc. +# Copyright (C) 2000,2001 Erik Andersen <andersee@debian.org> +# +# This program 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. +# +# This program 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 this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Derived in part from the Linux-8086 C library, the GNU C Library, and several +# other sundry sources. Files within this library are copyright by their +# respective copyright holders. + +NATIVE_CC = gcc + +# If you are running a cross compiler, you may want to set this +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. +CROSS = i960-intel-coff- +CC = $(CROSS)gcc +AR = $(CROSS)ar +LD = $(CROSS)ld +NM = $(CROSS)nm +STRIPTOOL = $(CROSS)strip +#STRIPTOOL = /bin/true + +# Set the following to `true' to make a debuggable build, and `false' for +# production builds. +DODEBUG = false + +# Compiler warnings you want to see +WARNINGS=-Wall + +# Note that the kernel source you use to compile with should be the same as the +# Linux kernel you run your apps on. uClibc doesn't even try to achieve binary +# compatibility across kernel versions. So don't expect, for example, uClibc +# compiled with Linux kernel 2.0.x to implement lchown properly, since 2.0.x +# can't do that. Similarly, if you compile uClibc vs Linux 2.4.x kernel headers, +# but then run on Linux 2.0.x, lchown will be compiled into uClibc, but won't +# work at all. You have been warned. +KERNEL_SOURCE=/home/mproulx/uClinux/linux-2.0.x + +# Set this to `false' if your CPU doesn't have a memory management unit (MMU). +# Set it to `true' otherwise. +HAS_MMU = false + +# Set this to `false' if you don't have/need basic floating point support +# support in libc (strtod, printf, scanf). Set it to `true' otherwise. +# If this is not true, then libm will not be built. +HAS_FLOATING_POINT = false + +# Set to `true' if you want the math library to contain the full set +# of C99 math library features. Costs an extra 35k or so on x86. +DO_C99_MATH = false + +# Set this to `false' if you don't have/need "(unsigned) long long int" support. +# Set it to `true' otherwise. +# Affects *printf and *scanf functions. +# Also omits strto(u)ll, and (u)lltostr from the library if `false'. +HAS_LONG_LONG = true + +# Set this to 'false if you don't need shadow password support. +HAS_SHADOW = false + +# Set this to `false' if you don't have/need locale support; `true' otherwise. +# Note: Currently only affects the ctype functions. You must also generate +# a locale file for anything but the C locale. See directory extra/locale for +# a utility to do so. Also see the following option. +HAS_LOCALE = false + +# Set this to the path of your uClibc locale file directory. +# Warning! This must be different than the glibc locale directory to avoid +# name conflicts, as the locale files are entirely different in format! +LOCALE_DIR = "/usr/share/uClibc-locale/" + +# This specifies which malloc implementation is used. +# "malloc-simple" is very, very small, but is also very, very dumb +# and does not try to make good use of memory or clean up after itself. +# +# "malloc" on the other hand is a bit bigger, but is pretty smart thereby +# minimizing memory wastage and reusing already allocated memory. This +# can be lots faster and safer IMHO. +# +# "malloc-930716" is from libc-5.3.12 and was/is the standard gnu malloc. +# It is actually smaller than "malloc", at least on i386. Right now, it +# only works on i386 (and maybe m68k) because it needs sbrk. +#MALLOC = malloc-simple +MALLOC = malloc +#MALLOC = malloc-930716 + +# Having brk allows one to use malloc-930716, which is an order +# of magnitude faster then "malloc" for most allocations, but +# will do very bad things on MMU-less systems... +EXCLUDE_BRK=true + +# If you want to collect common syscall code into one function, set to this to +# `true'. Set it to false otherwise. +# On i386 this saves about than 2.8k over all syscalls. +# The idea came from the implementation in dietlibc. +# At present, only affects i386. +UNIFIED_SYSCALL = false + +# If you want large file support (greater then 2 GiB) turn this on. +# Do not enable this unless your kernel provides large file support. +DOLFS = false + +# Posix regular expression code is really big -- 27k all by itself. +# If you don't use regular expressions, turn this off and save space. +# Of course, if you only staticly link, leave this on, since it will +# only be included in your apps if you use regular expressions. +INCLUDE_REGEX=true + +# If you want to include RPC support, enable this. RPC is almost never used +# for anything except NFS support, so unless you plan to use NFS, leave this +# disabled. This is off by default. +INCLUDE_RPC = true + +# If you want to include support for the next version of the Internet +# Protocol: IP version 6, enable this. This is off by default. +INCLUDE_IPV6 = false + +# If you want to include threads support, enable this. The C library will +# be compiled thread-safe, and the libpthread library will be built. +INCLUDE_THREADS = false + +# If you want to support only Unix 98 PTYs enable this. Some older +# applications may need this disabled. For most current programs, +# you can generally leave this true. +UNIX98PTY_ONLY = false + +# Enable this if /dev/pts is on a devpts or devfs file system. Both +# these filesystems automatically manage permissions on the /dev/pts +# devices. You may need to mount this fs on /dev/pts for this to work. +# This is true by default. +ASSUME_DEVPTS = true + + +# If you want to compile the library as PIC code, turn this on. +# This is automagically enabled when HAVE_SHARED is true +DOPIC = false + +# +# ARCH_CFLAGS if your have something special to add to the CFLAGS +# +ARCH_CFLAGS = -mrp +# +# +# get this from elsewhere, maybe +# +OPTIMIZATION = -O2 $(DEBUG_CFLAGS) + +# This is a COFF compiler (ick), so disable all the cool stuff +HAVE_ELF = false + + + +# Enable support for shared libraries? If this is false, you can +# ignore all the rest of the options in this file... +HAVE_SHARED = false + +# uClibc has a native shared library loader for some architectures. +BUILD_UCLIBC_LDSO=false + +# If you are using shared libraries, but do not want/have a native +# uClibc shared library loader, please specify the name of your +# system's shared library loader here... +#SYSTEM_LDSO=/lib/ld-linux.so.2 + +# When using shared libraries, this path is the location where the +# shared library will be invoked. This value will be compiled into +# every binary compiled with uClibc. +# +# BIG FAT WARNING: +# If you do not have a shared library loader with the correct name +# sitting in the directory this points to, your binaries will not run. +#SHARED_LIB_LOADER_PATH=$(DEVEL_PREFIX)/lib + +# DEVEL_PREFIX is the directory into which the uClibc development +# environment will be installed. The result will look something +# like the following: +# DEVEL_PREFIX/ +# bin/ <contains gcc, ld, etc> +# lib/ <contains all runtime and static libs> +# include/ <Where all the header files go> +# This value is used by the 'make install' Makefile target. Since this +# directory is compiled into the uclibc cross compiler spoofer, you +# have to recompile if you change this value... +DEVEL_PREFIX = /usr/local/cross-compilers/i960-intel-coff + +# SYSTEM_DEVEL_PREFIX is the directory prefix used when installing +# usr/bin/arch-uclibc-gcc, usr/bin/arch-uclibc-ld, etc. This is only +# used by the 'make install' target, and is not compiled into anything. +# This defaults to $DEVEL_PREFIX, but makers of .rpms and .debs will +# want to set this to "/" instead. +#SYSTEM_DEVEL_PREFIX = $(DEVEL_PREFIX) +SYSTEM_DEVEL_PREFIX = /tmp/uclibc-trashed + +# If you want 'make install' to install everything under a temporary +# directory, the define PREFIX during the install step, +# i.e., 'make PREFIX=/var/tmp/uClibc install'. +#PREFIX = $(TOPDIR)/_install + +# C defiend symbols prefix charactor +C_SYMBOL_PREFIX = _ + diff --git a/libc/sysdeps/linux/i960/AUTHORS b/libc/sysdeps/linux/i960/AUTHORS new file mode 100644 index 000000000..0d6554927 --- /dev/null +++ b/libc/sysdeps/linux/i960/AUTHORS @@ -0,0 +1,4 @@ +The initial support (inspired by what was done in an old i960 port of uC-libc): + +Martin Proulx <mproulx at okiok.com> +http://www.okiok.com diff --git a/libc/sysdeps/linux/i960/Makefile b/libc/sysdeps/linux/i960/Makefile new file mode 100644 index 000000000..83ca37213 --- /dev/null +++ b/libc/sysdeps/linux/i960/Makefile @@ -0,0 +1,80 @@ +# Makefile for uClibc +# +# Copyright (C) 2000 by Lineo, inc. +# Copyright (C) 2000,2001 Erik Andersen <andersen@uclibc.org> +# +# This program 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. +# +# This program 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 this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Derived in part from the Linux-8086 C library, the GNU C Library, and several +# other sundry sources. Files within this library are copyright by their +# respective copyright holders. + +USE_CRT0_C=false + +TOPDIR=../../../../ +include $(TOPDIR)Rules.mak +ASFLAGS=$(CFLAGS) + +ifeq ($(USE_CRT0_C),true) +CRT0=crt0.c +CRT0_OBJ=$(patsubst %.c,%.o, $(CRT0)) +else +CRT0=crt0.S +CRT0_OBJ=$(patsubst %.S,%.o, $(CRT0)) +endif + +SSRC=clone.S _mmap.S setjmp.S vfork.S +ifeq ($(UNIFIED_SYSCALL),true) + SSRC += __uClibc_syscall.S +endif +SOBJS=$(patsubst %.S,%.o, $(SSRC)) + +CSRC= +COBJS=$(patsubst %.c,%.o, $(CSRC)) + +OBJS=$(SOBJS) $(COBJS) + + +all: $(OBJS) $(LIBC) + +$(LIBC): ar-target + +ar-target: $(OBJS) $(CRT0_OBJ) + $(AR) $(ARFLAGS) $(LIBC) $(OBJS) + cp $(CRT0_OBJ) $(TOPDIR)lib/$(CRT0_OBJ) + +ifeq ($(USE_CRT0_C),true) +$(CRT0_OBJ): %.o : %.c +else +$(CRT0_OBJ): %.o : %.S +endif + $(CC) $(CFLAGS) -c $< -o $@ + $(STRIPTOOL) -x -R .note -R .comment $*.o + +$(SOBJS): %.o : %.S + $(CC) $(CFLAGS) -c $< -o $@ + $(STRIPTOOL) -x -R .note -R .comment $*.o + +$(COBJS): %.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + $(STRIPTOOL) -x -R .note -R .comment $*.o + +headers: + + +clean: + rm -f *.[oa] *~ core + rm -f bits/syscall.h + diff --git a/libc/sysdeps/linux/i960/README b/libc/sysdeps/linux/i960/README new file mode 100644 index 000000000..db4567a55 --- /dev/null +++ b/libc/sysdeps/linux/i960/README @@ -0,0 +1,72 @@ +Overview +--------------------------------------------------------------------------- + +This is the README file for the i960 support in uClibc. + +This has been tested with gcc 2.95.3 and i960-intel-coff target. + +There is no support at all to compile with the intel CTOOLS, as this would +have required too many changes to uClibc. So you won't see any support +in the asm files for position independent data or code. + +Quirks needed +--------------------------------------------------------------------------- + +prepended underscore +-------------------- + +As the i960 compiler prepends an underscore to symbols, it is critical that +the Config file define C_SYMBOL_PREFIX as + C_SYMBOL_PREFIX = _ +to make sure that underscores are applied to symbol names when needed. + + +__va_copy in va-i960.h +---------------------- + +When compiled with gcc-2.95, the __va_copy macro in va-i960.h seems to be broken +and it has to be modified in order for uClibc to compile correctly. + +Change: + +#define __va_copy(dest, src) (dest) = (src) + +To: + +#define __va_copy(dest, src) dest[0] = src[0]; dest[1] = src[1] + + +gcc integration +--------------------------------------------------------------------------- + +I'm personnaly not using the gcc-uClibc wrapper. +I've preferred modifying the specs file so that the i960-intel-coff compiler +directly compiles with uClibc. + +First, compile and install the standard i960-intel-coff compiler, which is meant +to be used with newlib. + +Then, compile uClibc, installing over the newlib include files and libraries. + +Update the specs file with the included specs.uclinux.gcc-2.95.i960-intel-coff + +This specs file always build relocatable objects, which has the disadvantage +of not letting you know if the link is missing any symbols. + +coff2flt +--------------------------------------------------------------------------- + +In order to run the executables under uClinux, fully relocatable binaries +need to be built using coff2flt. + +We have built a working coff2flt that works with the i960 and the current version +of binfmt_flat with uClinux. + +Contact Martin Proulx <mproulx at okiok.com> for further informations. + + + + + +Check: + _mmap.S: besoin??? diff --git a/libc/sysdeps/linux/i960/_mmap.S b/libc/sysdeps/linux/i960/_mmap.S new file mode 100644 index 000000000..bc4267948 --- /dev/null +++ b/libc/sysdeps/linux/i960/_mmap.S @@ -0,0 +1,52 @@ +# +# __mmap.S, part of the i960 support for the uClibc library. +# +# Copyright (C) 2002 by Okiok Data Ltd. http://www.okiok.com/ +# +# This program 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. +# +# This program 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 this program; if not, write to the Free Software Foundation, Inc., +# at 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Derived from an old port of uC-libc to the i960 by Keith Adams (kma@cse.ogi.edu). +# + +#include <sys/syscall.h> + +/* This is a plain system call. The 6 arguments are already set up correctly */ +/* void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset) */ + + + .globl _mmap +_mmap: + mov g13, r3 + ldconst __NR_mmap, g13 + calls 0 + mov r3, g13 + + /* We now need to check if the return value is a small negative integer. */ + /* This is somewhat tricky as the return code (normally an address) is an */ + /* unsigned type, or an ordinal in i960 assembler. */ + /* We'll use the fact that, integers from -256 to -1 are ordinals 0xFFFFFF00 to 0xFFFFFFFF. */ + /* So by checking that the return address is in the top range of the ordinals, we'll */ + /* in fact be checking if it's not an encoded negated erro code. */ + + /* The range -256 to -1 should be enough since that in uClinux 2.0.39, there are */ + /* 124 system calls for the i960. */ + + ldconst 0xFFFFFF00, r3 /* This is the integer's -256 representation */ + cmpobl g0, r3, 1f /* Something smaller than this means it's out of the range, and a valid address */ + subi g0, 0, r3 /* If it's an errno, save its negated (now positive) value in _errno. */ + st r3, _errno + subi 1, 0, g0 /* And return -1. */ +1: + ret diff --git a/libc/sysdeps/linux/i960/bits/endian.h b/libc/sysdeps/linux/i960/bits/endian.h new file mode 100644 index 000000000..e2b13161c --- /dev/null +++ b/libc/sysdeps/linux/i960/bits/endian.h @@ -0,0 +1,15 @@ +/* This file should define __BYTE_ORDER as appropriate for the machine + in question. See string/endian.h for how to define it. + + If only the stub bits/endian.h applies to a particular configuration, + bytesex.h is generated by running a program on the host machine. + So if cross-compiling to a machine with a different byte order, + the bits/endian.h file for that machine must exist. */ + +#ifndef _ENDIAN_H +# error "Never use <bits/endian.h> directly; include <endian.h> instead." +#endif + +#define __BYTE_ORDER __LITTLE_ENDIAN + + diff --git a/libc/sysdeps/linux/i960/bits/fcntl.h b/libc/sysdeps/linux/i960/bits/fcntl.h new file mode 100644 index 000000000..36b504a54 --- /dev/null +++ b/libc/sysdeps/linux/i960/bits/fcntl.h @@ -0,0 +1,179 @@ +/* O_*, F_*, FD_* bit values for Linux. + Copyright (C) 1995, 1996, 1997, 1998, 2000 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; 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/libc/sysdeps/linux/i960/bits/mman.h b/libc/sysdeps/linux/i960/bits/mman.h new file mode 100644 index 000000000..45663c963 --- /dev/null +++ b/libc/sysdeps/linux/i960/bits/mman.h @@ -0,0 +1,93 @@ +/* Definitions for POSIX memory map interface. Linux/i960 version. + Copyright (C) 1997, 2000 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; 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/libc/sysdeps/linux/i960/bits/setjmp.h b/libc/sysdeps/linux/i960/bits/setjmp.h new file mode 100644 index 000000000..29fe2439f --- /dev/null +++ b/libc/sysdeps/linux/i960/bits/setjmp.h @@ -0,0 +1,33 @@ +/* Define the machine-dependent type `jmp_buf'. i960 version. */ + +#ifndef _SETJMP_H +# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." +#endif + +/* + * assume that every single local and global register + * must be saved. + * + * ___SAVEREGS is the number of quads to save. + * + * Using the structure will guarantee quad-word alignment for the + * jmp_buf type. + */ + +#define ___SAVEREGS 8 + +typedef struct __jmp_buf__ { + long _q0; + long _q1; + long _q2; + long _q3; +} __attribute__ ((aligned (16))) __jmp_buf[___SAVEREGS] ; + +/* I have not yet figured out what this should be for the i960... */ + +#if 0 +/* Test if longjmp to JMPBUF would unwind the frame + containing a local variable at ADDRESS. */ +#define _JMPBUF_UNWINDS(jmpbuf, address) \ + ((void *) (address) < (jmpbuf)[0].__sp) +#endif diff --git a/libc/sysdeps/linux/i960/bits/syscalls.h b/libc/sysdeps/linux/i960/bits/syscalls.h new file mode 100644 index 000000000..5c30e2193 --- /dev/null +++ b/libc/sysdeps/linux/i960/bits/syscalls.h @@ -0,0 +1,10 @@ +/* + * nothing needed here until we want pthread support or similar + */ + +#include <features.h> +/* Do something very evil for now. Until we include our out syscall + * macros, short circuit bits/syscall.h and use asm/unistd.h instead */ +#define _BITS_SYSCALL_H +#include <asm/unistd.h> + diff --git a/libc/sysdeps/linux/i960/bits/wordsize.h b/libc/sysdeps/linux/i960/bits/wordsize.h new file mode 100644 index 000000000..ba643b60a --- /dev/null +++ b/libc/sysdeps/linux/i960/bits/wordsize.h @@ -0,0 +1,19 @@ +/* Copyright (C) 1999 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#define __WORDSIZE 32 diff --git a/libc/sysdeps/linux/i960/clone.S b/libc/sysdeps/linux/i960/clone.S new file mode 100644 index 000000000..e6d504bb7 --- /dev/null +++ b/libc/sysdeps/linux/i960/clone.S @@ -0,0 +1,62 @@ +# +# clone.S, part of the i960 support for the uClibc library. +# +# Copyright (C) 2002 by Okiok Data Ltd. http://www.okiok.com/ +# +# This program is free software; you can redistribute it and/or |