2005-01-27 Hans-Peter Nilsson <hp@axis.com>
* configure.host: Add support for cris-*-* and crisv32-*-*. * libc/include/machine/ieeefp.h: Ditto. * libc/include/machine/setjmp.h: Ditto. * libc/machine/cris/configure.in, libc/machine/cris/Makefile.am, libc/machine/cris/libcdtor.c, libc/machine/cris/setjmp.c, libc/machine/cris/memmove.c, libc/machine/cris/memcpy.c, libc/machine/cris/memset.c, libc/machine/cris/include/pthread.h, libc/machine/cris/sys/signal.h, libc/machine/cris/sys/fcntl.h, libc/machine/cris/sys/errno.h, libc/machine/cris/aclocal.m4, libc/machine/cris/configure, libc/machine/cris/Makefile.in: New files.
This commit is contained in:
parent
3a26703803
commit
1815fdeab4
|
@ -1,3 +1,17 @@
|
||||||
|
2005-01-27 Hans-Peter Nilsson <hp@axis.com>
|
||||||
|
|
||||||
|
* configure.host: Add support for cris-*-* and crisv32-*-*.
|
||||||
|
* libc/include/machine/ieeefp.h: Ditto.
|
||||||
|
* libc/include/machine/setjmp.h: Ditto.
|
||||||
|
* libc/machine/cris/configure.in, libc/machine/cris/Makefile.am,
|
||||||
|
libc/machine/cris/libcdtor.c, libc/machine/cris/setjmp.c,
|
||||||
|
libc/machine/cris/memmove.c, libc/machine/cris/memcpy.c,
|
||||||
|
libc/machine/cris/memset.c, libc/machine/cris/include/pthread.h,
|
||||||
|
libc/machine/cris/sys/signal.h, libc/machine/cris/sys/fcntl.h,
|
||||||
|
libc/machine/cris/sys/errno.h, libc/machine/cris/aclocal.m4,
|
||||||
|
libc/machine/cris/configure, libc/machine/cris/Makefile.in: New
|
||||||
|
files.
|
||||||
|
|
||||||
2005-01-27 Hans-Peter Nilsson <hp@axis.com>
|
2005-01-27 Hans-Peter Nilsson <hp@axis.com>
|
||||||
|
|
||||||
* testsuite/newlib.string/memmove1.c: New test.
|
* testsuite/newlib.string/memmove1.c: New test.
|
||||||
|
|
|
@ -93,6 +93,9 @@ case "${host_cpu}" in
|
||||||
avr*)
|
avr*)
|
||||||
newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED -mcall-prologues"
|
newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED -mcall-prologues"
|
||||||
;;
|
;;
|
||||||
|
cris | crisv32)
|
||||||
|
machine_dir=cris
|
||||||
|
;;
|
||||||
crx*)
|
crx*)
|
||||||
machine_dir=crx
|
machine_dir=crx
|
||||||
;;
|
;;
|
||||||
|
@ -502,6 +505,10 @@ case "${host}" in
|
||||||
avr*)
|
avr*)
|
||||||
newlib_cflags="${newlib_cflags} -DNO_EXEC -DSMALL_MEMORY -DMISSING_SYSCALL_NAMES"
|
newlib_cflags="${newlib_cflags} -DNO_EXEC -DSMALL_MEMORY -DMISSING_SYSCALL_NAMES"
|
||||||
;;
|
;;
|
||||||
|
cris-*-* | crisv32-*-*)
|
||||||
|
newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DHAVE_GETTIMEOFDAY -D_USE_WRITE"
|
||||||
|
syscall_dir=syscalls
|
||||||
|
;;
|
||||||
crx-*-*)
|
crx-*-*)
|
||||||
newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DMISSING_SYSCALL_NAMES"
|
newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DMISSING_SYSCALL_NAMES"
|
||||||
syscall_dir=
|
syscall_dir=
|
||||||
|
|
|
@ -265,6 +265,10 @@
|
||||||
#endif /* __ARMEL__ */
|
#endif /* __ARMEL__ */
|
||||||
#endif /* __MAVERICK__ */
|
#endif /* __MAVERICK__ */
|
||||||
|
|
||||||
|
#ifdef __CRIS__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __IEEE_BIG_ENDIAN
|
#ifndef __IEEE_BIG_ENDIAN
|
||||||
#ifndef __IEEE_LITTLE_ENDIAN
|
#ifndef __IEEE_LITTLE_ENDIAN
|
||||||
#error Endianess not declared!!
|
#error Endianess not declared!!
|
||||||
|
|
|
@ -205,6 +205,10 @@ _BEGIN_STD_C
|
||||||
#define _JBLEN 8
|
#define _JBLEN 8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CRIS__
|
||||||
|
#define _JBLEN 18
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _JBLEN
|
#ifdef _JBLEN
|
||||||
#ifdef _JBTYPE
|
#ifdef _JBTYPE
|
||||||
typedef _JBTYPE jmp_buf[_JBLEN];
|
typedef _JBTYPE jmp_buf[_JBLEN];
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
## Process this file with automake to generate Makefile.in
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
|
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
||||||
|
|
||||||
|
noinst_LIBRARIES = lib.a
|
||||||
|
|
||||||
|
# We also make a library with just the useful
|
||||||
|
# machine-but-not-system-specific functions, usable as an add-on
|
||||||
|
# by itself together with e.g. uclibc.
|
||||||
|
toollib_LIBRARIES = libic.a
|
||||||
|
|
||||||
|
lib_a_SOURCES = setjmp.c memcpy.c memset.c memmove.c libcdtor.c
|
||||||
|
|
||||||
|
libic_a_SOURCES = setjmp.c memcpy.c memset.c memmove.c libcdtor.c
|
||||||
|
tooldir = $(exec_prefix)/$(host_alias)
|
||||||
|
toollibdir = $(tooldir)/lib$(MULTISUBDIR)
|
||||||
|
|
||||||
|
ACLOCAL_AMFLAGS = -I ../../..
|
||||||
|
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
|
|
@ -0,0 +1,382 @@
|
||||||
|
# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
|
||||||
|
|
||||||
|
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
|
||||||
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
|
SHELL = @SHELL@
|
||||||
|
|
||||||
|
srcdir = @srcdir@
|
||||||
|
top_srcdir = @top_srcdir@
|
||||||
|
VPATH = @srcdir@
|
||||||
|
prefix = @prefix@
|
||||||
|
exec_prefix = @exec_prefix@
|
||||||
|
|
||||||
|
bindir = @bindir@
|
||||||
|
sbindir = @sbindir@
|
||||||
|
libexecdir = @libexecdir@
|
||||||
|
datadir = @datadir@
|
||||||
|
sysconfdir = @sysconfdir@
|
||||||
|
sharedstatedir = @sharedstatedir@
|
||||||
|
localstatedir = @localstatedir@
|
||||||
|
libdir = @libdir@
|
||||||
|
infodir = @infodir@
|
||||||
|
mandir = @mandir@
|
||||||
|
includedir = @includedir@
|
||||||
|
oldincludedir = /usr/include
|
||||||
|
|
||||||
|
DESTDIR =
|
||||||
|
|
||||||
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
|
|
||||||
|
top_builddir = .
|
||||||
|
|
||||||
|
ACLOCAL = @ACLOCAL@
|
||||||
|
AUTOCONF = @AUTOCONF@
|
||||||
|
AUTOMAKE = @AUTOMAKE@
|
||||||
|
AUTOHEADER = @AUTOHEADER@
|
||||||
|
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
|
||||||
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
|
transform = @program_transform_name@
|
||||||
|
|
||||||
|
NORMAL_INSTALL = :
|
||||||
|
PRE_INSTALL = :
|
||||||
|
POST_INSTALL = :
|
||||||
|
NORMAL_UNINSTALL = :
|
||||||
|
PRE_UNINSTALL = :
|
||||||
|
POST_UNINSTALL = :
|
||||||
|
build_alias = @build_alias@
|
||||||
|
build_triplet = @build@
|
||||||
|
host_alias = @host_alias@
|
||||||
|
host_triplet = @host@
|
||||||
|
target_alias = @target_alias@
|
||||||
|
target_triplet = @target@
|
||||||
|
AR = @AR@
|
||||||
|
AS = @AS@
|
||||||
|
CC = @CC@
|
||||||
|
CPP = @CPP@
|
||||||
|
EXEEXT = @EXEEXT@
|
||||||
|
LDFLAGS = @LDFLAGS@
|
||||||
|
MAINT = @MAINT@
|
||||||
|
MAKEINFO = @MAKEINFO@
|
||||||
|
NEWLIB_CFLAGS = @NEWLIB_CFLAGS@
|
||||||
|
OBJEXT = @OBJEXT@
|
||||||
|
PACKAGE = @PACKAGE@
|
||||||
|
RANLIB = @RANLIB@
|
||||||
|
VERSION = @VERSION@
|
||||||
|
aext = @aext@
|
||||||
|
libm_machine_dir = @libm_machine_dir@
|
||||||
|
machine_dir = @machine_dir@
|
||||||
|
newlib_basedir = @newlib_basedir@
|
||||||
|
oext = @oext@
|
||||||
|
sys_dir = @sys_dir@
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
|
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
||||||
|
|
||||||
|
noinst_LIBRARIES = lib.a
|
||||||
|
|
||||||
|
# We also make a library with just the useful
|
||||||
|
# machine-but-not-system-specific functions, usable as an add-on
|
||||||
|
# by itself together with e.g. uclibc.
|
||||||
|
toollib_LIBRARIES = libic.a
|
||||||
|
|
||||||
|
lib_a_SOURCES = setjmp.c memcpy.c memset.c memmove.c libcdtor.c
|
||||||
|
|
||||||
|
libic_a_SOURCES = setjmp.c memcpy.c memset.c memmove.c libcdtor.c
|
||||||
|
tooldir = $(exec_prefix)/$(host_alias)
|
||||||
|
toollibdir = $(tooldir)/lib$(MULTISUBDIR)
|
||||||
|
|
||||||
|
ACLOCAL_AMFLAGS = -I ../../..
|
||||||
|
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
|
||||||
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../../../../mkinstalldirs
|
||||||
|
CONFIG_CLEAN_FILES =
|
||||||
|
LIBRARIES = $(noinst_LIBRARIES) $(toollib_LIBRARIES)
|
||||||
|
|
||||||
|
|
||||||
|
DEFS = @DEFS@ -I. -I$(srcdir)
|
||||||
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
LIBS = @LIBS@
|
||||||
|
lib_a_LIBADD =
|
||||||
|
lib_a_OBJECTS = setjmp.o memcpy.o memset.o memmove.o libcdtor.o
|
||||||
|
libic_a_LIBADD =
|
||||||
|
libic_a_OBJECTS = setjmp.o memcpy.o memset.o memmove.o libcdtor.o
|
||||||
|
CFLAGS = @CFLAGS@
|
||||||
|
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
|
CCLD = $(CC)
|
||||||
|
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
|
DIST_COMMON = Makefile.am Makefile.in aclocal.m4 configure configure.in
|
||||||
|
|
||||||
|
|
||||||
|
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
|
|
||||||
|
TAR = gtar
|
||||||
|
GZIP_ENV = --best
|
||||||
|
SOURCES = $(lib_a_SOURCES) $(libic_a_SOURCES)
|
||||||
|
OBJECTS = $(lib_a_OBJECTS) $(libic_a_OBJECTS)
|
||||||
|
|
||||||
|
all: all-redirect
|
||||||
|
.SUFFIXES:
|
||||||
|
.SUFFIXES: .S .c .o .s
|
||||||
|
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||||
|
cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
|
||||||
|
|
||||||
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
|
cd $(top_builddir) \
|
||||||
|
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
|
|
||||||
|
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in \
|
||||||
|
../../../acinclude.m4 ../../../aclocal.m4 \
|
||||||
|
../../../libtool.m4
|
||||||
|
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||||
|
|
||||||
|
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||||
|
$(SHELL) ./config.status --recheck
|
||||||
|
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
|
||||||
|
cd $(srcdir) && $(AUTOCONF)
|
||||||
|
|
||||||
|
mostlyclean-noinstLIBRARIES:
|
||||||
|
|
||||||
|
clean-noinstLIBRARIES:
|
||||||
|
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||||
|
|
||||||
|
distclean-noinstLIBRARIES:
|
||||||
|
|
||||||
|
maintainer-clean-noinstLIBRARIES:
|
||||||
|
|
||||||
|
mostlyclean-toollibLIBRARIES:
|
||||||
|
|
||||||
|
clean-toollibLIBRARIES:
|
||||||
|
-test -z "$(toollib_LIBRARIES)" || rm -f $(toollib_LIBRARIES)
|
||||||
|
|
||||||
|
distclean-toollibLIBRARIES:
|
||||||
|
|
||||||
|
maintainer-clean-toollibLIBRARIES:
|
||||||
|
|
||||||
|
install-toollibLIBRARIES: $(toollib_LIBRARIES)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(toollibdir)
|
||||||
|
@list='$(toollib_LIBRARIES)'; for p in $$list; do \
|
||||||
|
if test -f $$p; then \
|
||||||
|
echo " $(INSTALL_DATA) $$p $(DESTDIR)$(toollibdir)/$$p"; \
|
||||||
|
$(INSTALL_DATA) $$p $(DESTDIR)$(toollibdir)/$$p; \
|
||||||
|
else :; fi; \
|
||||||
|
done
|
||||||
|
@$(POST_INSTALL)
|
||||||
|
@list='$(toollib_LIBRARIES)'; for p in $$list; do \
|
||||||
|
if test -f $$p; then \
|
||||||
|
echo " $(RANLIB) $(DESTDIR)$(toollibdir)/$$p"; \
|
||||||
|
$(RANLIB) $(DESTDIR)$(toollibdir)/$$p; \
|
||||||
|
else :; fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-toollibLIBRARIES:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
list='$(toollib_LIBRARIES)'; for p in $$list; do \
|
||||||
|
rm -f $(DESTDIR)$(toollibdir)/$$p; \
|
||||||
|
done
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.s.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.S.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
mostlyclean-compile:
|
||||||
|
-rm -f *.o core *.core
|
||||||
|
|
||||||
|
clean-compile:
|
||||||
|
|
||||||
|
distclean-compile:
|
||||||
|
-rm -f *.tab.c
|
||||||
|
|
||||||
|
maintainer-clean-compile:
|
||||||
|
|
||||||
|
lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES)
|
||||||
|
-rm -f lib.a
|
||||||
|
$(AR) cru lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD)
|
||||||
|
$(RANLIB) lib.a
|
||||||
|
|
||||||
|
libic.a: $(libic_a_OBJECTS) $(libic_a_DEPENDENCIES)
|
||||||
|
-rm -f libic.a
|
||||||
|
$(AR) cru libic.a $(libic_a_OBJECTS) $(libic_a_LIBADD)
|
||||||
|
$(RANLIB) libic.a
|
||||||
|
|
||||||
|
tags: TAGS
|
||||||
|
|
||||||
|
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||||
|
list='$(SOURCES) $(HEADERS)'; \
|
||||||
|
unique=`for i in $$list; do echo $$i; done | \
|
||||||
|
awk ' { files[$$0] = 1; } \
|
||||||
|
END { for (i in files) print i; }'`; \
|
||||||
|
here=`pwd` && cd $(srcdir) \
|
||||||
|
&& mkid -f$$here/ID $$unique $(LISP)
|
||||||
|
|
||||||
|
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||||
|
tags=; \
|
||||||
|
here=`pwd`; \
|
||||||
|
list='$(SOURCES) $(HEADERS)'; \
|
||||||
|
unique=`for i in $$list; do echo $$i; done | \
|
||||||
|
awk ' { files[$$0] = 1; } \
|
||||||
|
END { for (i in files) print i; }'`; \
|
||||||
|
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||||
|
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||||
|
|
||||||
|
mostlyclean-tags:
|
||||||
|
|
||||||
|
clean-tags:
|
||||||
|
|
||||||
|
distclean-tags:
|
||||||
|
-rm -f TAGS ID
|
||||||
|
|
||||||
|
maintainer-clean-tags:
|
||||||
|
|
||||||
|
distdir = $(PACKAGE)-$(VERSION)
|
||||||
|
top_distdir = $(distdir)
|
||||||
|
|
||||||
|
# This target untars the dist file and tries a VPATH configuration. Then
|
||||||
|
# it guarantees that the distribution is self-contained by making another
|
||||||
|
# tarfile.
|
||||||
|
distcheck: dist
|
||||||
|
-rm -rf $(distdir)
|
||||||
|
GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
|
||||||
|
mkdir $(distdir)/=build
|
||||||
|
mkdir $(distdir)/=inst
|
||||||
|
dc_install_base=`cd $(distdir)/=inst && pwd`; \
|
||||||
|
cd $(distdir)/=build \
|
||||||
|
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) dist
|
||||||
|
-rm -rf $(distdir)
|
||||||
|
@banner="$(distdir).tar.gz is ready for distribution"; \
|
||||||
|
dashes=`echo "$$banner" | sed s/./=/g`; \
|
||||||
|
echo "$$dashes"; \
|
||||||
|
echo "$$banner"; \
|
||||||
|
echo "$$dashes"
|
||||||
|
dist: distdir
|
||||||
|
-chmod -R a+r $(distdir)
|
||||||
|
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
||||||
|
-rm -rf $(distdir)
|
||||||
|
dist-all: distdir
|
||||||
|
-chmod -R a+r $(distdir)
|
||||||
|
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
||||||
|
-rm -rf $(distdir)
|
||||||
|
distdir: $(DISTFILES)
|
||||||
|
-rm -rf $(distdir)
|
||||||
|
mkdir $(distdir)
|
||||||
|
-chmod 777 $(distdir)
|
||||||
|
@for file in $(DISTFILES); do \
|
||||||
|
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||||
|
if test -d $$d/$$file; then \
|
||||||
|
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||||
|
else \
|
||||||
|
test -f $(distdir)/$$file \
|
||||||
|
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||||
|
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
info-am:
|
||||||
|
info: info-am
|
||||||
|
dvi-am:
|
||||||
|
dvi: dvi-am
|
||||||
|
check-am:
|
||||||
|
check: check-am
|
||||||
|
installcheck-am:
|
||||||
|
installcheck: installcheck-am
|
||||||
|
install-info-am:
|
||||||
|
install-info: install-info-am
|
||||||
|
install-exec-am:
|
||||||
|
install-exec: install-exec-am
|
||||||
|
|
||||||
|
install-data-am: install-toollibLIBRARIES
|
||||||
|
install-data: install-data-am
|
||||||
|
|
||||||
|
install-am: all-am
|
||||||
|
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||||
|
install: install-am
|
||||||
|
uninstall-am: uninstall-toollibLIBRARIES
|
||||||
|
uninstall: uninstall-am
|
||||||
|
all-am: Makefile $(LIBRARIES)
|
||||||
|
all-redirect: all-am
|
||||||
|
install-strip:
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
|
||||||
|
installdirs:
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(toollibdir)
|
||||||
|
|
||||||
|
|
||||||
|
mostlyclean-generic:
|
||||||
|
|
||||||
|
clean-generic:
|
||||||
|
|
||||||
|
distclean-generic:
|
||||||
|
-rm -f Makefile $(CONFIG_CLEAN_FILES)
|
||||||
|
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||||
|
|
||||||
|
maintainer-clean-generic:
|
||||||
|
mostlyclean-am: mostlyclean-noinstLIBRARIES \
|
||||||
|
mostlyclean-toollibLIBRARIES mostlyclean-compile \
|
||||||
|
mostlyclean-tags mostlyclean-generic
|
||||||
|
|
||||||
|
mostlyclean: mostlyclean-am
|
||||||
|
|
||||||
|
clean-am: clean-noinstLIBRARIES clean-toollibLIBRARIES clean-compile \
|
||||||
|
clean-tags clean-generic mostlyclean-am
|
||||||
|
|
||||||
|
clean: clean-am
|
||||||
|
|
||||||
|
distclean-am: distclean-noinstLIBRARIES distclean-toollibLIBRARIES \
|
||||||
|
distclean-compile distclean-tags distclean-generic \
|
||||||
|
clean-am
|
||||||
|
|
||||||
|
distclean: distclean-am
|
||||||
|
-rm -f config.status
|
||||||
|
|
||||||
|
maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
|
||||||
|
maintainer-clean-toollibLIBRARIES \
|
||||||
|
maintainer-clean-compile maintainer-clean-tags \
|
||||||
|
maintainer-clean-generic distclean-am
|
||||||
|
@echo "This command is intended for maintainers to use;"
|
||||||
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
|
|
||||||
|
maintainer-clean: maintainer-clean-am
|
||||||
|
-rm -f config.status
|
||||||
|
|
||||||
|
.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
|
||||||
|
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
|
||||||
|
mostlyclean-toollibLIBRARIES distclean-toollibLIBRARIES \
|
||||||
|
clean-toollibLIBRARIES maintainer-clean-toollibLIBRARIES \
|
||||||
|
uninstall-toollibLIBRARIES install-toollibLIBRARIES mostlyclean-compile \
|
||||||
|
distclean-compile clean-compile maintainer-clean-compile tags \
|
||||||
|
mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \
|
||||||
|
distdir info-am info dvi-am dvi check check-am installcheck-am \
|
||||||
|
installcheck install-info-am install-info install-exec-am install-exec \
|
||||||
|
install-data-am install-data install-am install uninstall-am uninstall \
|
||||||
|
all-redirect all-am all installdirs mostlyclean-generic \
|
||||||
|
distclean-generic clean-generic maintainer-clean-generic clean \
|
||||||
|
mostlyclean distclean maintainer-clean
|
||||||
|
|
||||||
|
|
||||||
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
.NOEXPORT:
|
|
@ -0,0 +1,366 @@
|
||||||
|
dnl aclocal.m4 generated automatically by aclocal 1.4-p6
|
||||||
|
|
||||||
|
dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl This program is distributed in the hope that it will be useful,
|
||||||
|
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
dnl PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
dnl This provides configure definitions used by all the newlib
|
||||||
|
dnl configure.in files.
|
||||||
|
|
||||||
|
dnl Basic newlib configury. This calls basic introductory stuff,
|
||||||
|
dnl including AM_INIT_AUTOMAKE and AC_CANONICAL_HOST. It also runs
|
||||||
|
dnl configure.host. The only argument is the relative path to the top
|
||||||
|
dnl newlib directory.
|
||||||
|
|
||||||
|
AC_DEFUN(NEWLIB_CONFIGURE,
|
||||||
|
[
|
||||||
|
dnl Default to --enable-multilib
|
||||||
|
AC_ARG_ENABLE(multilib,
|
||||||
|
[ --enable-multilib build many library versions (default)],
|
||||||
|
[case "${enableval}" in
|
||||||
|
yes) multilib=yes ;;
|
||||||
|
no) multilib=no ;;
|
||||||
|
*) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
|
||||||
|
esac], [multilib=yes])dnl
|
||||||
|
|
||||||
|
dnl Support --enable-target-optspace
|
||||||
|
AC_ARG_ENABLE(target-optspace,
|
||||||
|
[ --enable-target-optspace optimize for space],
|
||||||
|
[case "${enableval}" in
|
||||||
|
yes) target_optspace=yes ;;
|
||||||
|
no) target_optspace=no ;;
|
||||||
|
*) AC_MSG_ERROR(bad value ${enableval} for target-optspace option) ;;
|
||||||
|
esac], [target_optspace=])dnl
|
||||||
|
|
||||||
|
dnl Support --enable-malloc-debugging - currently only supported for Cygwin
|
||||||
|
AC_ARG_ENABLE(malloc-debugging,
|
||||||
|
[ --enable-malloc-debugging indicate malloc debugging requested],
|
||||||
|
[case "${enableval}" in
|
||||||
|
yes) malloc_debugging=yes ;;
|
||||||
|
no) malloc_debugging=no ;;
|
||||||
|
*) AC_MSG_ERROR(bad value ${enableval} for malloc-debugging option) ;;
|
||||||
|
esac], [malloc_debugging=])dnl
|
||||||
|
|
||||||
|
dnl Support --enable-newlib-multithread
|
||||||
|
AC_ARG_ENABLE(newlib-multithread,
|
||||||
|
[ --enable-newlib-multithread enable support for multiple threads],
|
||||||
|
[case "${enableval}" in
|
||||||
|
yes) newlib_multithread=yes ;;
|
||||||
|
no) newlib_multithread=no ;;
|
||||||
|
*) AC_MSG_ERROR(bad value ${enableval} for newlib-multithread option) ;;
|
||||||
|
esac], [newlib_multithread=yes])dnl
|
||||||
|
|
||||||
|
dnl Support --enable-newlib-iconv
|
||||||
|
AC_ARG_ENABLE(newlib-iconv,
|
||||||
|
[ --enable-newlib-iconv enable iconv library support],
|
||||||
|
[if test "${newlib_iconv+set}" != set; then
|
||||||
|
case "${enableval}" in
|
||||||
|
yes) newlib_iconv=yes ;;
|
||||||
|
no) newlib_iconv=no ;;
|
||||||
|
*) AC_MSG_ERROR(bad value ${enableval} for newlib-iconv option) ;;
|
||||||
|
esac
|
||||||
|
fi], [newlib_iconv=${newlib_iconv}])dnl
|
||||||
|
|
||||||
|
dnl Support --enable-newlib-elix-level
|
||||||
|
AC_ARG_ENABLE(newlib-elix-level,
|
||||||
|
[ --enable-newlib-elix-level supply desired elix library level (1-4)],
|
||||||
|
[case "${enableval}" in
|
||||||
|
0) newlib_elix_level=0 ;;
|
||||||
|
1) newlib_elix_level=1 ;;
|
||||||
|
2) newlib_elix_level=2 ;;
|
||||||
|
3) newlib_elix_level=3 ;;
|
||||||
|
4) newlib_elix_level=4 ;;
|
||||||
|
*) AC_MSG_ERROR(bad value ${enableval} for newlib-elix-level option) ;;
|
||||||
|
esac], [newlib_elix_level=0])dnl
|
||||||
|
|
||||||
|
dnl Support --disable-newlib-io-float
|
||||||
|
AC_ARG_ENABLE(newlib-io-float,
|
||||||
|
[ --disable-newlib-io-float disable printf/scanf family float support],
|
||||||
|
[case "${enableval}" in
|
||||||
|
yes) newlib_io_float=yes ;;
|
||||||
|
no) newlib_io_float=no ;;
|
||||||
|
*) AC_MSG_ERROR(bad value ${enableval} for newlib-io-float option) ;;
|
||||||
|
esac], [newlib_io_float=yes])dnl
|
||||||
|
|
||||||
|
dnl Support --disable-newlib-supplied-syscalls
|
||||||
|
AC_ARG_ENABLE(newlib-supplied-syscalls,
|
||||||
|
[ --disable-newlib-supplied-syscalls disable newlib from supplying syscalls],
|
||||||
|
[case "${enableval}" in
|
||||||
|
yes) newlib_may_supply_syscalls=yes ;;
|
||||||
|
no) newlib_may_supply_syscalls=no ;;
|
||||||
|
*) AC_MSG_ERROR(bad value ${enableval} for newlib-supplied-syscalls option) ;;
|
||||||
|
esac], [newlib_may_supply_syscalls=yes])dnl
|
||||||
|
|
||||||
|
AM_CONDITIONAL(MAY_SUPPLY_SYSCALLS, test x[$]{newlib_may_supply_syscalls} = xyes)
|
||||||
|
|
||||||
|
dnl We may get other options which we don't document:
|
||||||
|
dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
|
||||||
|
|
||||||
|
test -z "[$]{with_target_subdir}" && with_target_subdir=.
|
||||||
|
|
||||||
|
if test "[$]{srcdir}" = "."; then
|
||||||
|
if test "[$]{with_target_subdir}" != "."; then
|
||||||
|
newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
|
||||||
|
else
|
||||||
|
newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
newlib_basedir="[$]{srcdir}/$1"
|
||||||
|
fi
|
||||||
|
AC_SUBST(newlib_basedir)
|
||||||
|
|
||||||
|
AC_CANONICAL_SYSTEM
|
||||||
|
|
||||||
|
AM_INIT_AUTOMAKE(newlib, 1.13.0)
|
||||||
|
|
||||||
|
# FIXME: We temporarily define our own version of AC_PROG_CC. This is
|
||||||
|
# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
|
||||||
|
# are probably using a cross compiler, which will not be able to fully
|
||||||
|
# link an executable. This should really be fixed in autoconf
|
||||||
|
# itself.
|
||||||
|
|
||||||
|
AC_DEFUN(LIB_AC_PROG_CC,
|
||||||
|
[AC_BEFORE([$0], [AC_PROG_CPP])dnl
|
||||||
|
AC_CHECK_PROG(CC, gcc, gcc)
|
||||||
|
if test -z "$CC"; then
|
||||||
|
AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
|
||||||
|
test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_PROG_CC_GNU
|
||||||
|
|
||||||
|
if test $ac_cv_prog_gcc = yes; then
|
||||||
|
GCC=yes
|
||||||
|
dnl Check whether -g works, even if CFLAGS is set, in case the package
|
||||||
|
dnl plays around with CFLAGS (such as to build both debugging and
|
||||||
|
dnl normal versions of a library), tasteless as that idea is.
|
||||||
|
ac_test_CFLAGS="${CFLAGS+set}"
|
||||||
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS=
|
||||||
|
AC_PROG_CC_G
|
||||||
|
if test "$ac_test_CFLAGS" = set; then
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
elif test $ac_cv_prog_cc_g = yes; then
|
||||||
|
CFLAGS="-g -O2"
|
||||||
|
else
|
||||||
|
CFLAGS="-O2"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
GCC=
|
||||||
|
test "${CFLAGS+set}" = set || CFLAGS="-g"
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
LIB_AC_PROG_CC
|
||||||
|
|
||||||
|
AC_CHECK_TOOL(AS, as)
|
||||||
|
AC_CHECK_TOOL(AR, ar)
|
||||||
|
AC_CHECK_TOOL(RANLIB, ranlib, :)
|
||||||
|
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
|
||||||
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
|
# We need AC_EXEEXT to keep automake happy in cygnus mode. However,
|
||||||
|
# at least currently, we never actually build a program, so we never
|
||||||
|
# need to use $(EXEEXT). Moreover, the test for EXEEXT normally
|
||||||
|
# fails, because we are probably configuring with a cross compiler
|
||||||
|
# which can't create executables. So we include AC_EXEEXT to keep
|
||||||
|
# automake happy, but we don't execute it, since we don't care about
|
||||||
|
# the result.
|
||||||
|
if false; then
|
||||||
|
AC_EXEEXT
|
||||||
|
fi
|
||||||
|
|
||||||
|
. [$]{newlib_basedir}/configure.host
|
||||||
|
|
||||||
|
newlib_cflags="[$]{newlib_cflags} -fno-builtin"
|
||||||
|
|
||||||
|
NEWLIB_CFLAGS=${newlib_cflags}
|
||||||
|
AC_SUBST(NEWLIB_CFLAGS)
|
||||||
|
|
||||||
|
LDFLAGS=${ldflags}
|
||||||
|
AC_SUBST(LDFLAGS)
|
||||||
|
|
||||||
|
AM_CONDITIONAL(ELIX_LEVEL_0, test x[$]{newlib_elix_level} = x0)
|
||||||
|
AM_CONDITIONAL(ELIX_LEVEL_1, test x[$]{newlib_elix_level} = x1)
|
||||||
|
AM_CONDITIONAL(ELIX_LEVEL_2, test x[$]{newlib_elix_level} = x2)
|
||||||
|
AM_CONDITIONAL(ELIX_LEVEL_3, test x[$]{newlib_elix_level} = x3)
|
||||||
|
AM_CONDITIONAL(ELIX_LEVEL_4, test x[$]{newlib_elix_level} = x4)
|
||||||
|
|
||||||
|
AM_CONDITIONAL(USE_LIBTOOL, test x[$]{use_libtool} = xyes)
|
||||||
|
|
||||||
|
# Hard-code OBJEXT. Normally it is set by AC_OBJEXT, but we
|
||||||
|
# use oext, which is set in configure.host based on the target platform.
|
||||||
|
OBJEXT=${oext}
|
||||||
|
|
||||||
|
AC_SUBST(OBJEXT)
|
||||||
|
AC_SUBST(oext)
|
||||||
|
AC_SUBST(aext)
|
||||||
|
|
||||||
|
AC_SUBST(libm_machine_dir)
|
||||||
|
AC_SUBST(machine_dir)
|
||||||
|
AC_SUBST(sys_dir)
|
||||||
|
])
|
||||||
|
|
||||||
|
# Do all the work for Automake. This macro actually does too much --
|
||||||
|
# some checks are only needed if your package does certain things.
|
||||||
|
# But this isn't really a big deal.
|
||||||
|
|
||||||
|
# serial 1
|
||||||
|
|
||||||
|
dnl Usage:
|
||||||
|
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
|
||||||
|
|
||||||
|
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||||
|
[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_INSTALL])
|
||||||
|
PACKAGE=[$1]
|
||||||
|
AC_SUBST(PACKAGE)
|
||||||
|
VERSION=[$2]
|
||||||
|
AC_SUBST(VERSION)
|
||||||
|
dnl test to see if srcdir already configured
|
||||||
|
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
|
||||||
|
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||||
|
fi
|
||||||
|
ifelse([$3],,
|
||||||
|
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||||
|
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
|
||||||
|
AC_REQUIRE([AM_SANITY_CHECK])
|
||||||
|
AC_REQUIRE([AC_ARG_PROGRAM])
|
||||||
|
dnl FIXME This is truly gross.
|
||||||
|
missing_dir=`cd $ac_aux_dir && pwd`
|
||||||
|
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir)
|
||||||
|
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
||||||
|
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir)
|
||||||
|
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
||||||
|
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
||||||
|
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
||||||
|
|
||||||
|
# Copyright 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, 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 General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
|
||||||
|
# AM_AUTOMAKE_VERSION(VERSION)
|
||||||
|
# ----------------------------
|
||||||
|
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||||
|
# generated from the m4 files accompanying Automake X.Y.
|
||||||
|
AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.4"])
|
||||||
|
|
||||||
|
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
||||||
|
# -------------------------------
|
||||||
|
# Call AM_AUTOMAKE_VERSION so it can be traced.
|
||||||
|
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
||||||
|
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||||
|
[AM_AUTOMAKE_VERSION([1.4-p6])])
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check to make sure that the build environment is sane.
|
||||||
|
#
|
||||||
|
|
||||||
|
AC_DEFUN([AM_SANITY_CHECK],
|
||||||
|
[AC_MSG_CHECKING([whether build environment is sane])
|
||||||
|
# Just in case
|
||||||
|
sleep 1
|
||||||
|
echo timestamp > conftestfile
|
||||||
|
# Do `set' in a subshell so we don't clobber the current shell's
|
||||||
|
# arguments. Must try -L first in case configure is actually a
|
||||||
|
# symlink; some systems play weird games with the mod time of symlinks
|
||||||
|
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||||
|
# directory).
|
||||||
|
if (
|
||||||
|
set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
|
||||||
|
if test "[$]*" = "X"; then
|
||||||
|
# -L didn't work.
|
||||||
|
set X `ls -t $srcdir/configure conftestfile`
|
||||||
|
fi
|
||||||
|
if test "[$]*" != "X $srcdir/configure conftestfile" \
|
||||||
|
&& test "[$]*" != "X conftestfile $srcdir/configure"; then
|
||||||
|
|
||||||
|
# If neither matched, then we have a broken ls. This can happen
|
||||||
|
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||||
|
# broken ls alias from the environment. This has actually
|
||||||
|
# happened. Such a system could not be considered "sane".
|
||||||
|
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||||
|
alias in your environment])
|
||||||
|
fi
|
||||||
|
|
||||||
|
test "[$]2" = conftestfile
|
||||||
|
)
|
||||||
|
then
|
||||||
|
# Ok.
|
||||||
|
:
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR([newly created file is older than distributed files!
|
||||||
|
Check your system clock])
|
||||||
|
fi
|
||||||
|
rm -f conftest*
|
||||||
|
AC_MSG_RESULT(yes)])
|
||||||
|
|
||||||
|
dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
|
||||||
|
dnl The program must properly implement --version.
|
||||||
|
AC_DEFUN([AM_MISSING_PROG],
|
||||||
|
[AC_MSG_CHECKING(for working $2)
|
||||||
|
# Run test in a subshell; some versions of sh will print an error if
|
||||||
|
# an executable is not found, even if stderr is redirected.
|
||||||
|
# Redirect stdin to placate older versions of autoconf. Sigh.
|
||||||
|
if ($2 --version) < /dev/null > /dev/null 2>&1; then
|
||||||
|
$1=$2
|
||||||
|
AC_MSG_RESULT(found)
|
||||||
|
else
|
||||||
|
$1="$3/missing $2"
|
||||||
|
AC_MSG_RESULT(missing)
|
||||||
|
fi
|
||||||
|
AC_SUBST($1)])
|
||||||
|
|
||||||
|
# Define a conditional.
|
||||||
|
|
||||||
|
AC_DEFUN([AM_CONDITIONAL],
|
||||||
|
[AC_SUBST($1_TRUE)
|
||||||
|
AC_SUBST($1_FALSE)
|
||||||
|
if $2; then
|
||||||
|
$1_TRUE=
|
||||||
|
$1_FALSE='#'
|
||||||
|
else
|
||||||
|
$1_TRUE='#'
|
||||||
|
$1_FALSE=
|
||||||
|
fi])
|
||||||
|
|
||||||
|
# Add --enable-maintainer-mode option to configure.
|
||||||
|
# From Jim Meyering
|
||||||
|
|
||||||
|
# serial 1
|
||||||
|
|
||||||
|
AC_DEFUN([AM_MAINTAINER_MODE],
|
||||||
|
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
|
||||||
|
dnl maintainer-mode is disabled by default
|
||||||
|
AC_ARG_ENABLE(maintainer-mode,
|
||||||
|
[ --enable-maintainer-mode enable make rules and dependencies not useful
|
||||||
|
(and sometimes confusing) to the casual installer],
|
||||||
|
USE_MAINTAINER_MODE=$enableval,
|
||||||
|
USE_MAINTAINER_MODE=no)
|
||||||
|
AC_MSG_RESULT($USE_MAINTAINER_MODE)
|
||||||
|
AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
|
||||||
|
MAINT=$MAINTAINER_MODE_TRUE
|
||||||
|
AC_SUBST(MAINT)dnl
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,12 @@
|
||||||
|
dnl This is the newlib/libc/machine/cris configure.in file.
|
||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
|
AC_PREREQ(2.5)
|
||||||
|
AC_INIT(setjmp.c)
|
||||||
|
|
||||||
|
dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
|
||||||
|
AC_CONFIG_AUX_DIR(../../../..)
|
||||||
|
|
||||||
|
NEWLIB_CONFIGURE(../../..)
|
||||||
|
|
||||||
|
AC_OUTPUT(Makefile)
|
|
@ -0,0 +1,93 @@
|
||||||
|
/* pthread.h dummy.
|
||||||
|
Copyright (C) 2001, 2004, 2005 Axis Communications AB.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Neither the name of Axis Communications nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY AXIS COMMUNICATIONS AND ITS CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AXIS
|
||||||
|
COMMUNICATIONS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE. */
|
||||||
|
|
||||||
|
/* Simple fallback-include to enable thread-enabled exception support
|
||||||
|
for libgcc, but with posix-interface to a default-dummy, so a posix
|
||||||
|
library can optionally be linked in, which isn't possible if
|
||||||
|
gthr-single.h is used. No other use is supported; *DO NOT* think
|
||||||
|
this gives you a valid pthread interface to use in your applications. */
|
||||||
|
|
||||||
|
#ifndef _PTHREAD_FAKE
|
||||||
|
#define _PTHREAD_FAKE
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
# ifndef __THROW
|
||||||
|
# define __THROW throw ()
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# ifndef __THROW
|
||||||
|
# define __THROW
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef int pthread_once_t;
|
||||||
|
typedef unsigned int pthread_key_t;
|
||||||
|
|
||||||
|
/* This must be layout-compatible with the linuxthreads type. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int a, b;
|
||||||
|
void *c;
|
||||||
|
int d;
|
||||||
|
struct { long int e; int f; } g;
|
||||||
|
} pthread_mutex_t;
|
||||||
|
|
||||||
|
/* This give bits equal to the linuxthreads initializer. */
|
||||||
|
#define PTHREAD_MUTEX_INITIALIZER \
|
||||||
|
{0, 0, 0, 0, {0, 0}}
|
||||||
|
|
||||||
|
#define PTHREAD_ONCE_INIT 0
|
||||||
|
|
||||||
|
/* This isn't the right prototype, but it let's us get away with not
|
||||||
|
defining a lot of datatypes. */
|
||||||
|
extern int pthread_create (void) __THROW;
|
||||||
|
|
||||||
|
extern int pthread_once (pthread_once_t *, void (*) (void)) __THROW;
|
||||||
|
|
||||||
|
extern int pthread_key_create (pthread_key_t *, void (*) (void *)) __THROW;
|
||||||
|
|
||||||
|
extern int pthread_setspecific (pthread_key_t, const void *) __THROW;
|
||||||
|
|
||||||
|
extern void *pthread_getspecific (pthread_key_t) __THROW;
|
||||||
|
|
||||||
|
extern int pthread_mutex_lock (pthread_mutex_t *) __THROW;
|
||||||
|
|
||||||
|
extern int pthread_key_delete (pthread_key_t) __THROW;
|
||||||
|
|
||||||
|
extern int pthread_mutex_trylock (pthread_mutex_t *) __THROW;
|
||||||
|
|
||||||
|
extern int pthread_mutex_unlock (pthread_mutex_t *) __THROW;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef __THROW
|
||||||
|
|
||||||
|
#endif /* not _PTHREAD_FAKE */
|
|
@ -0,0 +1,88 @@
|
||||||
|
/* Call ctors and dtors from elinux a.out shared libraries.
|
||||||
|
Copyright (C) 1999, 2000, 2003, 2004, 2005 Axis Communications.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Neither the name of Axis Communications nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY AXIS COMMUNICATIONS AND ITS CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AXIS
|
||||||
|
COMMUNICATIONS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE. */
|
||||||
|
|
||||||
|
typedef void (*vfnp) (void);
|
||||||
|
|
||||||
|
/* The guts of the _Libctors and _Libdtors is "optimized" away into
|
||||||
|
empty functions when the definition is visible as well. Simplest
|
||||||
|
solution is to emit the definitions as asm. We have no .previous
|
||||||
|
directive in a.out, so we rely on the fact that everything in this
|
||||||
|
file goes into the .text section. */
|
||||||
|
__asm__
|
||||||
|
(
|
||||||
|
".text\n\t.global .$global.lib.ctors\n.$global.lib.ctors:\n\t.dword 0"
|
||||||
|
);
|
||||||
|
__asm__
|
||||||
|
(
|
||||||
|
".text\n\t.global .$global.lib.dtors\n.$global.lib.dtors:\n\t.dword 0"
|
||||||
|
);
|
||||||
|
|
||||||
|
extern vfnp * const _Ctors asm(".$global.lib.ctors");
|
||||||
|
extern vfnp * const _Dtors asm(".$global.lib.dtors");
|
||||||
|
|
||||||
|
/* We better provide weak empty ctor and dtor lists, since they are not
|
||||||
|
created if the main program does not have ctor/dtors. */
|
||||||
|
|
||||||
|
static vfnp const defaultors[] = {0, 0};
|
||||||
|
|
||||||
|
extern vfnp * __CTOR_LIST__ __attribute__ ((weak, alias ("defaultors")));
|
||||||
|
extern vfnp * __DTOR_LIST__ __attribute__ ((weak, alias ("defaultors")));
|
||||||
|
|
||||||
|
void
|
||||||
|
_Libctors (void)
|
||||||
|
{
|
||||||
|
const vfnp *firstor = _Ctors;
|
||||||
|
const vfnp *ctors;
|
||||||
|
|
||||||
|
/* Have to find the last ctor; they will run in opposite order as in
|
||||||
|
the table. */
|
||||||
|
if (firstor != 0 && *firstor != 0)
|
||||||
|
{
|
||||||
|
for (ctors = firstor; *ctors != 0; ctors++)
|
||||||
|
;
|
||||||
|
|
||||||
|
while (--ctors != firstor)
|
||||||
|
{
|
||||||
|
(**ctors)();
|
||||||
|
}
|
||||||
|
|
||||||
|
(**ctors)();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_Libdtors(void)
|
||||||
|
{
|
||||||
|
const vfnp *dtors = _Dtors;
|
||||||
|
|
||||||
|
if (dtors)
|
||||||
|
while (*dtors != 0)
|
||||||
|
{
|
||||||
|
(**dtors++) ();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,236 @@
|
||||||
|
/* A memcpy for CRIS.
|
||||||
|
Copyright (C) 1994-2005 Axis Communications.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Neither the name of Axis Communications nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY AXIS COMMUNICATIONS AND ITS CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AXIS
|
||||||
|
COMMUNICATIONS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE. */
|
||||||
|
|
||||||
|
/* FIXME: This file should really only be used for reference, as the
|
||||||
|
result is somewhat depending on gcc generating what we expect rather
|
||||||
|
than what we describe. An assembly file should be used instead. */
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* Break even between movem and move16 is really at 38.7 * 2, but
|
||||||
|
modulo 44, so up to the next multiple of 44, we use ordinary code. */
|
||||||
|
#define MEMCPY_BY_BLOCK_THRESHOLD (44 * 2)
|
||||||
|
|
||||||
|
/* No name ambiguities in this file. */
|
||||||
|
__asm__ (".syntax no_register_prefix");
|
||||||
|
|
||||||
|
void *
|
||||||
|
memcpy(void *pdst, const void *psrc, size_t pn)
|
||||||
|
{
|
||||||
|
/* Now we want the parameters put in special registers.
|
||||||
|
Make sure the compiler is able to make something useful of this.
|
||||||
|
As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
|
||||||
|
|
||||||
|
If gcc was allright, it really would need no temporaries, and no
|
||||||
|
stack space to save stuff on. */
|
||||||
|
|
||||||
|
register void *return_dst __asm__ ("r10") = pdst;
|
||||||
|
register unsigned char *dst __asm__ ("r13") = pdst;
|
||||||
|
register unsigned const char *src __asm__ ("r11") = psrc;
|
||||||
|
register int n __asm__ ("r12") = pn;
|
||||||
|
|
||||||
|
/* When src is aligned but not dst, this makes a few extra needless
|
||||||
|
cycles. I believe it would take as many to check that the
|
||||||
|
re-alignment was unnecessary. */
|
||||||
|
if (((unsigned long) dst & 3) != 0
|
||||||
|
/* Don't align if we wouldn't copy more than a few bytes; so we
|
||||||
|
don't have to check further for overflows. */
|
||||||
|
&& n >= 3)
|
||||||
|
{
|
||||||
|
if ((unsigned long) dst & 1)
|
||||||
|
{
|
||||||
|
n--;
|
||||||
|
*dst = *src;
|
||||||
|
src++;
|
||||||
|
dst++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((unsigned long) dst & 2)
|
||||||
|
{
|
||||||
|
n -= 2;
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
src += 2;
|
||||||
|
dst += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Decide which copying method to use. */
|
||||||
|
if (n >= MEMCPY_BY_BLOCK_THRESHOLD)
|
||||||
|
{
|
||||||
|
/* It is not optimal to tell the compiler about clobbering any
|
||||||
|
registers; that will move the saving/restoring of those registers
|
||||||
|
to the function prologue/epilogue, and make non-movem sizes
|
||||||
|
suboptimal. */
|
||||||
|
__asm__ volatile
|
||||||
|
("\
|
||||||
|
;; GCC does promise correct register allocations, but let's \n\
|
||||||
|
;; make sure it keeps its promises. \n\
|
||||||
|
.ifnc %0-%1-%2,$r13-$r11-$r12 \n\
|
||||||
|
.error \"GCC reg alloc bug: %0-%1-%4 != $r13-$r12-$r11\" \n\
|
||||||
|
.endif \n\
|
||||||
|
\n\
|
||||||
|
;; Save the registers we'll use in the movem process \n\
|
||||||
|
;; on the stack. \n\
|
||||||
|
subq 11*4,sp \n\
|
||||||
|
movem r10,[sp] \n\
|
||||||
|
\n\
|
||||||
|
;; Now we've got this: \n\
|
||||||
|
;; r11 - src \n\
|
||||||
|
;; r13 - dst \n\
|
||||||
|
;; r12 - n \n\
|
||||||
|
\n\
|
||||||
|
;; Update n for the first loop. \n\
|
||||||
|
subq 44,r12 \n\
|
||||||
|
0: \n\
|
||||||
|
"
|
||||||
|
#ifdef __arch_common_v10_v32
|
||||||
|
/* Cater to branch offset difference between v32 and v10. We
|
||||||
|
assume the branch below has an 8-bit offset. */
|
||||||
|
" setf\n"
|
||||||
|
#endif
|
||||||
|
" movem [r11+],r10 \n\
|
||||||
|
subq 44,r12 \n\
|
||||||
|
bge 0b \n\
|
||||||
|
movem r10,[r13+] \n\
|
||||||
|
\n\
|
||||||
|
;; Compensate for last loop underflowing n. \n\
|
||||||
|
addq 44,r12 \n\
|
||||||
|
\n\
|
||||||
|
;; Restore registers from stack. \n\
|
||||||
|
movem [sp+],r10"
|
||||||
|
|
||||||
|
/* Outputs. */
|
||||||
|
: "=r" (dst), "=r" (src), "=r" (n)
|
||||||
|
|
||||||
|
/* Inputs. */
|
||||||
|
: "0" (dst), "1" (src), "2" (n));
|
||||||
|
}
|
||||||
|
|
||||||
|
while (n >= 16)
|
||||||
|
{
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
|
||||||
|
n -= 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (n)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
*(short *) dst = *(short *) src; dst += 2; src += 2;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
*(long *) dst = *(long *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src; dst += 2; src += 2;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 10:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 11:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src; dst += 2; src += 2;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 12:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 13:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 14:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 15:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src; dst += 2; src += 2;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return return_dst;
|
||||||
|
}
|
|
@ -0,0 +1,257 @@
|
||||||
|
/* A memmove for CRIS.
|
||||||
|
Copyright (C) 2000-2005 Axis Communications.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Neither the name of Axis Communications nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY AXIS COMMUNICATIONS AND ITS CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AXIS
|
||||||
|
COMMUNICATIONS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE. */
|
||||||
|
|
||||||
|
/* FIXME: This file should really only be used for reference, as the
|
||||||
|
result is somewhat depending on gcc generating what we expect rather
|
||||||
|
than what we describe. An assembly file should be used instead.
|
||||||
|
|
||||||
|
Even worse, we base it on memcpy, on the assumption that overlapping
|
||||||
|
moves are rare, and we will do no worse than the generic memmove. */
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* Break even between movem and move16 is really at 38.7 * 2, but
|
||||||
|
modulo 44, so up to the next multiple of 44, we use ordinary code. */
|
||||||
|
#define MEMMOVE_BY_BLOCK_THRESHOLD (44 * 2)
|
||||||
|
|
||||||
|
/* No name ambiguities in this file. */
|
||||||
|
__asm__ (".syntax no_register_prefix");
|
||||||
|
|
||||||
|
void *
|
||||||
|
memmove(void *pdst, const void *psrc, size_t pn)
|
||||||
|
{
|
||||||
|
/* Now we want the parameters put in special registers.
|
||||||
|
Make sure the compiler is able to make something useful of this.
|
||||||
|
As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
|
||||||
|
|
||||||
|
If gcc was allright, it really would need no temporaries, and no
|
||||||
|
stack space to save stuff on. */
|
||||||
|
|
||||||
|
register void *return_dst __asm__ ("r10") = pdst;
|
||||||
|
register unsigned char *dst __asm__ ("r13") = pdst;
|
||||||
|
register unsigned const char *src __asm__ ("r11") = psrc;
|
||||||
|
register int n __asm__ ("r12") = pn;
|
||||||
|
|
||||||
|
/* Check and handle overlap. */
|
||||||
|
if (src < dst && dst < src + n)
|
||||||
|
{
|
||||||
|
/* Destructive overlap. We could optimize this, but we don't (for
|
||||||
|
the moment). */
|
||||||
|
src += n;
|
||||||
|
dst += n;
|
||||||
|
while (n--)
|
||||||
|
{
|
||||||
|
*--dst = *--src;
|
||||||
|
}
|
||||||
|
|
||||||
|
return return_dst;
|
||||||
|
}
|
||||||
|
/* Whew, no overlap. Proceed as with memcpy. We could call it instead
|
||||||
|
of having a copy here. That would spoil some of the optimization, so
|
||||||
|
we take the trouble with having two copies. */
|
||||||
|
|
||||||
|
/* When src is aligned but not dst, this makes a few extra needless
|
||||||
|
cycles. I believe it would take as many to check that the
|
||||||
|
re-alignment was unnecessary. */
|
||||||
|
if (((unsigned long) dst & 3) != 0
|
||||||
|
/* Don't align if we wouldn't copy more than a few bytes; so we
|
||||||
|
don't have to check further for overflows. */
|
||||||
|
&& n >= 3)
|
||||||
|
{
|
||||||
|
if ((unsigned long) dst & 1)
|
||||||
|
{
|
||||||
|
n--;
|
||||||
|
*dst = *src;
|
||||||
|
src++;
|
||||||
|
dst++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((unsigned long) dst & 2)
|
||||||
|
{
|
||||||
|
n -= 2;
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
src += 2;
|
||||||
|
dst += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Decide which copying method to use. */
|
||||||
|
if (n >= MEMMOVE_BY_BLOCK_THRESHOLD)
|
||||||
|
{
|
||||||
|
/* It is not optimal to tell the compiler about clobbering any
|
||||||
|
registers; that will move the saving/restoring of those registers
|
||||||
|
to the function prologue/epilogue, and make non-movem sizes
|
||||||
|
suboptimal. */
|
||||||
|
__asm__ volatile
|
||||||
|
("\
|
||||||
|
;; GCC does promise correct register allocations, but let's \n\
|
||||||
|
;; make sure it keeps its promises. \n\
|
||||||
|
.ifnc %0-%1-%2,$r13-$r11-$r12 \n\
|
||||||
|
.error \"GCC reg alloc bug: %0-%1-%4 != $r13-$r12-$r11\" \n\
|
||||||
|
.endif \n\
|
||||||
|
\n\
|
||||||
|
;; Save the registers we'll use in the movem process \n\
|
||||||
|
;; on the stack. \n\
|
||||||
|
subq 11*4,sp \n\
|
||||||
|
movem r10,[sp] \n\
|
||||||
|
\n\
|
||||||
|
;; Now we've got this: \n\
|
||||||
|
;; r11 - src \n\
|
||||||
|
;; r13 - dst \n\
|
||||||
|
;; r12 - n \n\
|
||||||
|
\n\
|
||||||
|
;; Update n for the first loop. \n\
|
||||||
|
subq 44,r12 \n\
|
||||||
|
0: \n\
|
||||||
|
"
|
||||||
|
#ifdef __arch_common_v10_v32
|
||||||
|
/* Cater to branch offset difference between v32 and v10. We
|
||||||
|
assume the branch below has an 8-bit offset. */
|
||||||
|
" setf\n"
|
||||||
|
#endif
|
||||||
|
" movem [r11+],r10 \n\
|
||||||
|
subq 44,r12 \n\
|
||||||
|
bge 0b \n\
|
||||||
|
movem r10,[r13+] \n\
|
||||||
|
\n\
|
||||||
|
;; Compensate for last loop underflowing n. \n\
|
||||||
|
addq 44,r12 \n\
|
||||||
|
\n\
|
||||||
|
;; Restore registers from stack. \n\
|
||||||
|
movem [sp+],r10"
|
||||||
|
|
||||||
|
/* Outputs. */
|
||||||
|
: "=r" (dst), "=r" (src), "=r" (n)
|
||||||
|
|
||||||
|
/* Inputs. */
|
||||||
|
: "0" (dst), "1" (src), "2" (n));
|
||||||
|
}
|
||||||
|
|
||||||
|
while (n >= 16)
|
||||||
|
{
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
|
||||||
|
n -= 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (n)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
*(short *) dst = *(short *) src; dst += 2; src += 2;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
*(long *) dst = *(long *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src; dst += 2; src += 2;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 10:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 11:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src; dst += 2; src += 2;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 12:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 13:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 14:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 15:
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(long *) dst = *(long *) src; dst += 4; src += 4;
|
||||||
|
*(short *) dst = *(short *) src; dst += 2; src += 2;
|
||||||
|
*dst = *src;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return return_dst;
|
||||||
|
}
|
|
@ -0,0 +1,259 @@
|
||||||
|
/* A memset for CRIS.
|
||||||
|
Copyright (C) 1999-2005 Axis Communications.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Neither the name of Axis Communications nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY AXIS COMMUNICATIONS AND ITS CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AXIS
|
||||||
|
COMMUNICATIONS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE. */
|
||||||
|
|
||||||
|
/* FIXME: This file should really only be used for reference, as the
|
||||||
|
result is somewhat depending on gcc generating what we expect rather
|
||||||
|
than what we describe. An assembly file should be used instead. */
|
||||||
|
|
||||||
|
/* Note the multiple occurrence of the expression "12*4", including the
|
||||||
|
asm. It is hard to get it into the asm in a good way. Thus better to
|
||||||
|
expose the problem everywhere: no macro. */
|
||||||
|
|
||||||
|
/* Assuming one cycle per dword written or read (ok, not really true; the
|
||||||
|
world is not ideal), and one cycle per instruction, then 43+3*(n/48-1)
|
||||||
|
<= 24+24*(n/48-1) so n >= 45.7; n >= 0.9; we win on the first full
|
||||||
|
48-byte block to set. */
|
||||||
|
|
||||||
|
#define MEMSET_BY_BLOCK_THRESHOLD (1 * 48)
|
||||||
|
|
||||||
|
/* No name ambiguities in this file. */
|
||||||
|
__asm__ (".syntax no_register_prefix");
|
||||||
|
|
||||||
|
void *memset(void *pdst, int c, unsigned int plen)
|
||||||
|
{
|
||||||
|
/* Now we want the parameters in special registers. Make sure the
|
||||||
|
compiler does something usable with this. */
|
||||||
|
|
||||||
|
register char *return_dst __asm__ ("r10") = pdst;
|
||||||
|
register int n __asm__ ("r12") = plen;
|
||||||
|
register int lc __asm__ ("r11") = c;
|
||||||
|
|
||||||
|
/* Most apps use memset sanely. Memsetting about 3..4 bytes or less get
|
||||||
|
penalized here compared to the generic implementation. */
|
||||||
|
|
||||||
|
/* This is fragile performancewise at best. Check with newer GCC
|
||||||
|
releases, if they compile cascaded "x |= x << 8" to sane code. */
|
||||||
|
__asm__("movu.b %0,r13 \n\
|
||||||
|
lslq 8,r13 \n\
|
||||||
|
move.b %0,r13 \n\
|
||||||
|
move.d r13,%0 \n\
|
||||||
|
lslq 16,r13 \n\
|
||||||
|
or.d r13,%0"
|
||||||
|
: "=r" (lc) /* Inputs. */
|
||||||
|
: "0" (lc) /* Outputs. */
|
||||||
|
: "r13"); /* Trash. */
|
||||||
|
|
||||||
|
{
|
||||||
|
register char *dst __asm__ ("r13") = pdst;
|
||||||
|
|
||||||
|
if (((unsigned long) pdst & 3) != 0
|
||||||
|
/* Oops! n = 0 must be a valid call, regardless of alignment. */
|
||||||
|
&& n >= 3)
|
||||||
|
{
|
||||||
|
if ((unsigned long) dst & 1)
|
||||||
|
{
|
||||||
|
*dst = (char) lc;
|
||||||
|
n--;
|
||||||
|
dst++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((unsigned long) dst & 2)
|
||||||
|
{
|
||||||
|
*(short *) dst = lc;
|
||||||
|
n -= 2;
|
||||||
|
dst += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Decide which setting method to use. */
|
||||||
|
if (n >= MEMSET_BY_BLOCK_THRESHOLD)
|
||||||
|
{
|
||||||
|
/* It is not optimal to tell the compiler about clobbering any
|
||||||
|
registers; that will move the saving/restoring of those registers
|
||||||
|
to the function prologue/epilogue, and make non-block sizes
|
||||||
|
suboptimal. */
|
||||||
|
__asm__ volatile
|
||||||
|
("\
|
||||||
|
;; GCC does promise correct register allocations, but let's \n\
|
||||||
|
;; make sure it keeps its promises. \n\
|
||||||
|
.ifnc %0-%1-%4,$r13-$r12-$r11 \n\
|
||||||
|
.error \"GCC reg alloc bug: %0-%1-%4 != $r13-$r12-$r11\" \n\
|
||||||
|
.endif \n\
|
||||||
|
\n\
|
||||||
|
;; Save the registers we'll clobber in the movem process \n\
|
||||||
|
;; on the stack. Don't mention them to gcc, it will only be \n\
|
||||||
|
;; upset. \n\
|
||||||
|
subq 11*4,sp \n\
|
||||||
|
movem r10,[sp] \n\
|
||||||
|
\n\
|
||||||
|
move.d r11,r0 \n\
|
||||||
|
move.d r11,r1 \n\
|
||||||
|
move.d r11,r2 \n\
|
||||||
|
move.d r11,r3 \n\
|
||||||
|
move.d r11,r4 \n\
|
||||||
|
move.d r11,r5 \n\
|
||||||
|
move.d r11,r6 \n\
|
||||||
|
move.d r11,r7 \n\
|
||||||
|
move.d r11,r8 \n\
|
||||||
|
move.d r11,r9 \n\
|
||||||
|
move.d r11,r10 \n\
|
||||||
|
\n\
|
||||||
|
;; Now we've got this: \n\
|
||||||
|
;; r13 - dst \n\
|
||||||
|
;; r12 - n \n\
|
||||||
|
\n\
|
||||||
|
;; Update n for the first loop \n\
|
||||||
|
subq 12*4,r12 \n\
|
||||||
|
0: \n\
|
||||||
|
"
|
||||||
|
#ifdef __arch_common_v10_v32
|
||||||
|
/* Cater to branch offset difference between v32 and v10. We
|
||||||
|
assume the branch below has an 8-bit offset. */
|
||||||
|
" setf\n"
|
||||||
|
#endif
|
||||||
|
" subq 12*4,r12 \n\
|
||||||
|
bge 0b \n\
|
||||||
|
movem r11,[r13+] \n\
|
||||||
|
\n\
|
||||||
|
;; Compensate for last loop underflowing n. \n\
|
||||||
|
addq 12*4,r12 \n\
|
||||||
|
\n\
|
||||||
|
;; Restore registers from stack. \n\
|
||||||
|
movem [sp+],r10"
|
||||||
|
|
||||||
|
/* Outputs. */
|
||||||
|
: "=r" (dst), "=r" (n)
|
||||||
|
|
||||||
|
/* Inputs. */
|
||||||
|
: "0" (dst), "1" (n), "r" (lc));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* An ad-hoc unroll, used for 4*12-1..16 bytes. */
|
||||||
|
while (n >= 16)
|
||||||
|
{
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
n -= 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (n)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
*dst = (char) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
*(short *) dst = (short) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
*(short *) dst = (short) lc; dst += 2;
|
||||||
|
*dst = (char) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
*(long *) dst = lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*dst = (char) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(short *) dst = (short) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(short *) dst = (short) lc; dst += 2;
|
||||||
|
*dst = (char) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*dst = (char) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 10:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(short *) dst = (short) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 11:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(short *) dst = (short) lc; dst += 2;
|
||||||
|
*dst = (char) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 12:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 13:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*dst = (char) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 14:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(short *) dst = (short) lc;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 15:
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(long *) dst = lc; dst += 4;
|
||||||
|
*(short *) dst = (short) lc; dst += 2;
|
||||||
|
*dst = (char) lc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return return_dst;
|
||||||
|
}
|
|
@ -0,0 +1,212 @@
|
||||||
|
/* A setjmp.c for CRIS
|
||||||
|
Copyright (C) 1993-2005 Axis Communications.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Neither the name of Axis Communications nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY AXIS COMMUNICATIONS AND ITS CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AXIS
|
||||||
|
COMMUNICATIONS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE. */
|
||||||
|
|
||||||
|
/* For benefit of CRIS v0..v3, we save and restore CCR to be able to
|
||||||
|
correctly handle DI/EI; otherwise there would be no reason to save it.
|
||||||
|
Note also that the "move x,ccr" does NOT affect
|
||||||
|
the DMA enable bits (E and D) of v0..v3.
|
||||||
|
|
||||||
|
We do not save mof; it is call-clobbered. It also does not exist in
|
||||||
|
v0..v8; it should be safe to read or write to it there, but better not.
|
||||||
|
|
||||||
|
jmp_buf[0] - PC
|
||||||
|
jmp_buf[1] - SP (R14)
|
||||||
|
jmp_buf[2] - R13
|
||||||
|
jmp_buf[3] - R12
|
||||||
|
jmp_buf[4] - R11
|
||||||
|
jmp_buf[5] - R10
|
||||||
|
jmp_buf[6] - R9
|
||||||
|
jmp_buf[7] - R8
|
||||||
|
jmp_buf[8] - R7
|
||||||
|
jmp_buf[9] - R6
|
||||||
|
jmp_buf[10] - R5
|
||||||
|
jmp_buf[11] - R4
|
||||||
|
jmp_buf[12] - R3
|
||||||
|
jmp_buf[13] - R2
|
||||||
|
jmp_buf[14] - R1
|
||||||
|
jmp_buf[15] - R0
|
||||||
|
jmp_buf[16] - SRP
|
||||||
|
jmp_buf[17] - CCR
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
setjmp (jmp_buf buf)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
#if defined (__arch_common_v10_v32) || defined (__arch_v32)
|
||||||
|
/* No offsets in the compatibility mode. Also, movem saves in
|
||||||
|
different order on v10 than on v32, so we use single move
|
||||||
|
instructions instead, this not being a speed-prioritized operation.
|
||||||
|
And we don't save CCR or CCS; since long unuseful. */
|
||||||
|
__asm__ __volatile__
|
||||||
|
("move.d %1,$r13 \n\
|
||||||
|
move 0f,$mof \n\
|
||||||
|
move $mof,[$r13+] \n\
|
||||||
|
move.d $sp,[$r13+] \n\
|
||||||
|
clear.d [$r13+] \n\
|
||||||
|
move.d $r12,[$r13+] \n\
|
||||||
|
move.d $r11,[$r13+] \n\
|
||||||
|
move.d $r10,[$r13+] \n\
|
||||||
|
moveq 1,$r9 \n\
|
||||||
|
move.d $r9,[$r13+] \n\
|
||||||
|
move.d $r8,[$r13+] \n\
|
||||||
|
move.d $r7,[$r13+] \n\
|
||||||
|
move.d $r6,[$r13+] \n\
|
||||||
|
move.d $r5,[$r13+] \n\
|
||||||
|
move.d $r4,[$r13+] \n\
|
||||||
|
move.d $r3,[$r13+] \n\
|
||||||
|
move.d $r2,[$r13+] \n\
|
||||||
|
move.d $r1,[$r13+] \n\
|
||||||
|
move.d $r0,[$r13+] \n\
|
||||||
|
move $srp,[$r13+] \n\
|
||||||
|
clear.d [$r13+] \n\
|
||||||
|
clear.d $r9 \n\
|
||||||
|
0: \n\
|
||||||
|
move.d $r9,%0"
|
||||||
|
|
||||||
|
/* Output. */
|
||||||
|
: "=&r" (ret)
|
||||||
|
|
||||||
|
/* Input. */
|
||||||
|
: "r" (buf)
|
||||||
|
|
||||||
|
/* Clobber. */
|
||||||
|
: "r9", "r13", "memory");
|
||||||
|
#else /* not __arch_common_v10_v32 or __arch_v32 */
|
||||||
|
#ifdef __PIC__
|
||||||
|
__asm__ __volatile__
|
||||||
|
("moveq 1,$r9 \n\
|
||||||
|
movem $sp,[%1+1*4] \n\
|
||||||
|
move.d $pc,$r9 \n\
|
||||||
|
addq 0f-.,$r9 \n\
|
||||||
|
move.d $r9,[%1] \n\
|
||||||
|
move $srp,[%1+16*4] \n\
|
||||||
|
move $ccr,[%1+17*4] \n\
|
||||||
|
clear.d $r9 \n\
|
||||||
|
0: \n\
|
||||||
|
move.d $r9,%0"
|
||||||
|
|
||||||
|
/* Output. */
|
||||||
|
: "=&r" (ret)
|
||||||
|
|
||||||
|
/* Input. */
|
||||||
|
: "r" (buf)
|
||||||
|
|
||||||
|
/* Clobber. */
|
||||||
|
: "r9", "memory");
|
||||||
|
#else /* not PIC */
|
||||||
|
__asm__ __volatile__
|
||||||
|
("moveq 1,$r9 \n\
|
||||||
|
movem $sp,[%1+1*4] \n\
|
||||||
|
move.d 0f,$r9 \n\
|
||||||
|
move.d $r9,[%1] \n\
|
||||||
|
move $srp,[%1+16*4] \n\
|
||||||
|
move $ccr,[%1+17*4] \n\
|
||||||
|
clear.d $r9 \n\
|
||||||
|
0: \n\
|
||||||
|
move.d $r9,%0"
|
||||||
|
|
||||||
|
/* Output. */
|
||||||
|
: "=&r" (ret)
|
||||||
|
|
||||||
|
/* Input. */
|
||||||
|
: "r" (buf)
|
||||||
|
|
||||||
|
/* Clobber. */
|
||||||
|
: "r9");
|
||||||
|
#endif /* not PIC */
|
||||||
|
#endif /* not __arch_common_v10_v32 or __arch_v32 */
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
longjmp(jmp_buf buf, int val)
|
||||||
|
{
|
||||||
|
#if defined (__arch_common_v10_v32) || defined (__arch_v32)
|
||||||
|
__asm__ __volatile__
|
||||||
|
("cmpq 0,%1 \n\
|
||||||
|
beq 0f \n\
|
||||||
|
move.d %0,$r13 ; In delay-slot. \n\
|
||||||
|
addq 6*4,$r13 \n\
|
||||||
|
move.d %1,[$r13] \n\
|
||||||
|
subq 6*4,$r13 \n\
|
||||||
|
0:\n"
|
||||||
|
#ifdef __arch_common_v10_v32
|
||||||
|
/* Cater to branch offset difference between v32 and v10. We
|
||||||
|
assume the branch above is 8-bit. */
|
||||||
|
" setf\n"
|
||||||
|
#endif
|
||||||
|
" move [$r13+],$mof \n\
|
||||||
|
move.d [$r13+],$sp \n\
|
||||||
|
addq 4,$r13 \n\
|
||||||
|
move.d [$r13+],$r12 \n\
|
||||||
|
move.d [$r13+],$r11 \n\
|
||||||
|
move.d [$r13+],$r10 \n\
|
||||||
|
move.d [$r13+],$r9 \n\
|
||||||
|
move.d [$r13+],$r8 \n\
|
||||||
|
move.d [$r13+],$r7 \n\
|
||||||
|
move.d [$r13+],$r6 \n\
|
||||||
|
move.d [$r13+],$r5 \n\
|
||||||
|
move.d [$r13+],$r4 \n\
|
||||||
|
move.d [$r13+],$r3 \n\
|
||||||
|
move.d [$r13+],$r2 \n\
|
||||||
|
move.d [$r13+],$r1 \n\
|
||||||
|
move.d [$r13+],$r0 \n\
|
||||||
|
move [$r13+],$srp \n\
|
||||||
|
move $mof,$r13 \n\
|
||||||
|
jump $r13 \n\
|
||||||
|
setf"
|
||||||
|
|
||||||
|
/* No outputs. */
|
||||||
|
:
|
||||||
|
|
||||||
|
/* Inputs. */
|
||||||
|
: "r" (buf), "r" (val)
|
||||||
|
: "r13", "memory");
|
||||||
|
|
||||||
|
#else /* not __arch_common_v10_v32 or __arch_v32 */
|
||||||
|
__asm__ __volatile__
|
||||||
|
("move [%0+17*4],$ccr \n\
|
||||||
|
move [%0+16*4],$srp \n\
|
||||||
|
test.d %1 \n\
|
||||||
|
beq 0f \n\
|
||||||
|
nop \n\
|
||||||
|
move.d %1,[%0+6*4] ; Offset for r9. \n\
|
||||||
|
0: \n\
|
||||||
|
movem [%0],$pc"
|
||||||
|
|
||||||
|
/* No outputs. */
|
||||||
|
:
|
||||||
|
|
||||||
|
/* Inputs. */
|
||||||
|
: "r" (buf), "r" (val)
|
||||||
|
: "memory");
|
||||||
|
#endif /* not __arch_common_v10_v32 or __arch_v32 */
|
||||||
|
}
|
|
@ -0,0 +1,166 @@
|
||||||
|
/* This file is to be kept in sync with newlib/libc/include/sys/errno.h
|
||||||
|
on which it is based, except values used or returned by syscalls must
|
||||||
|
be those of the Linux/CRIS kernel. */
|
||||||
|
|
||||||
|
/* errno is not a global variable, because that would make using it
|
||||||
|
non-reentrant. Instead, its address is returned by the function
|
||||||
|
__errno. */
|
||||||
|
|
||||||
|
#ifndef _SYS_ERRNO_H_
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
#define _SYS_ERRNO_H_
|
||||||
|
|
||||||
|
#include <sys/reent.h>
|
||||||
|
|
||||||
|
#ifndef _REENT_ONLY
|
||||||
|
#define errno (*__errno())
|
||||||
|
extern int *__errno _PARAMS ((void));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Please don't use these variables directly.
|
||||||
|
Use strerror instead. */
|
||||||
|
extern _CONST char * _CONST _sys_errlist[];
|
||||||
|
extern int _sys_nerr;
|
||||||
|
|
||||||
|
#define __errno_r(ptr) ((ptr)->_errno)
|
||||||
|
|
||||||
|
/* Adjusted to the linux asm/errno.h */
|
||||||
|
#define EPERM 1 /* Operation not permitted */
|
||||||
|
#define ENOENT 2 /* No such file or directory */
|
||||||
|
#define ESRCH 3 /* No such process */
|
||||||
|
#define EINTR 4 /* Interrupted system call */
|
||||||
|
#define EIO 5 /* I/O error */
|
||||||
|
#define ENXIO 6 /* No such device or address */
|
||||||
|
#define E2BIG 7 /* Arg list too long */
|
||||||
|
#define ENOEXEC 8 /* Exec format error */
|
||||||
|
#define EBADF 9 /* Bad file number */
|
||||||
|
#define ECHILD 10 /* No child processes */
|
||||||
|
#define EAGAIN 11 /* Try again */
|
||||||
|
#define ENOMEM 12 /* Out of memory */
|
||||||
|
#define EACCES 13 /* Permission denied */
|
||||||
|
#define EFAULT 14 /* Bad address */
|
||||||
|
#define ENOTBLK 15 /* Block device required */
|
||||||
|
#define EBUSY 16 /* Device or resource busy */
|
||||||
|
#define EEXIST 17 /* File exists */
|
||||||
|
#define EXDEV 18 /* Cross-device link */
|
||||||
|
#define ENODEV 19 /* No such device */
|
||||||
|
#define ENOTDIR 20 /* Not a directory */
|
||||||
|
#define EISDIR 21 /* Is a directory */
|
||||||
|
#define EINVAL 22 /* Invalid argument */
|
||||||
|
#define ENFILE 23 /* File table overflow */
|
||||||
|
#define EMFILE 24 /* Too many open files */
|
||||||
|
#define ENOTTY 25 /* Not a typewriter */
|
||||||
|
#define ETXTBSY 26 /* Text file busy */
|
||||||
|
#define EFBIG 27 /* File too large */
|
||||||
|
#define ENOSPC 28 /* No space left on device */
|
||||||
|
#define ESPIPE 29 /* Illegal seek */
|
||||||
|
#define EROFS 30 /* Read-only file system */
|
||||||
|
#define EMLINK 31 /* Too many links */
|
||||||
|
#define EPIPE 32 /* Broken pipe */
|
||||||
|
#define EDOM 33 /* Math argument out of domain of func */
|
||||||
|
#define ERANGE 34 /* Math result not representable */
|
||||||
|
#define EDEADLK 35 /* Resource deadlock would occur */
|
||||||
|
#define ENAMETOOLONG 36 /* File name too long */
|
||||||
|
#define ENOLCK 37 /* No record locks available */
|
||||||
|
#define ENOSYS 38 /* Function not implemented */
|
||||||
|
#define ENOTEMPTY 39 /* Directory not empty */
|
||||||
|
#define ELOOP 40 /* Too many symbolic links encountered */
|
||||||
|
#define EWOULDBLOCK EAGAIN /* Operation would block */
|
||||||
|
#define ENOMSG 42 /* No message of desired type */
|
||||||
|
#define EIDRM 43 /* Identifier removed */
|
||||||
|
#define ECHRNG 44 /* Channel number out of range */
|
||||||
|
#define EL2NSYNC 45 /* Level 2 not synchronized */
|
||||||
|
#define EL3HLT 46 /* Level 3 halted */
|
||||||
|
#define EL3RST 47 /* Level 3 reset */
|
||||||
|
#define ELNRNG 48 /* Link number out of range */
|
||||||
|
#define EUNATCH 49 /* Protocol driver not attached */
|
||||||
|
#define ENOCSI 50 /* No CSI structure available */
|
||||||
|
#define EL2HLT 51 /* Level 2 halted */
|
||||||
|
#define EBADE 52 /* Invalid exchange */
|
||||||
|
#define EBADR 53 /* Invalid request descriptor */
|
||||||
|
#define EXFULL 54 /* Exchange full */
|
||||||
|
#define ENOANO 55 /* No anode */
|
||||||
|
#define EBADRQC 56 /* Invalid request code */
|
||||||
|
#define EBADSLT 57 /* Invalid slot */
|
||||||
|
|
||||||
|
#define EDEADLOCK EDEADLK
|
||||||
|
|
||||||
|
#define EBFONT 59 /* Bad font file format */
|
||||||
|
/* This is only used internally in newlib; not returned by the kernel.
|
||||||
|
EBFONT seems the closest match for a "bad file format" error. */
|
||||||
|
#define EFTYPE EBFONT /* Inappropriate file type or format */
|
||||||
|
#define ENOSTR 60 /* Device not a stream */
|
||||||
|
#define ENODATA 61 /* No data available */
|
||||||
|
#define ETIME 62 /* Timer expired */
|
||||||
|
#define ENOSR 63 /* Out of streams resources */
|
||||||
|
#define ENONET 64 /* Machine is not on the network */
|
||||||
|
#define ENOPKG 65 /* Package not installed */
|
||||||
|
#define EREMOTE 66 /* Object is remote */
|
||||||
|
#define ENOLINK 67 /* Link has been severed */
|
||||||
|
#define EADV 68 /* Advertise error */
|
||||||
|
#define ESRMNT 69 /* Srmount error */
|
||||||
|
#define ECOMM 70 /* Communication error on send */
|
||||||
|
#define EPROTO 71 /* Protocol error */
|
||||||
|
#define EMULTIHOP 72 /* Multihop attempted */
|
||||||
|
#define EDOTDOT 73 /* RFS specific error */
|
||||||
|
#define EBADMSG 74 /* Not a data message */
|
||||||
|
#define EOVERFLOW 75 /* Value too large for defined data type */
|
||||||
|
#define ENOTUNIQ 76 /* Name not unique on network */
|
||||||
|
#define EBADFD 77 /* File descriptor in bad state */
|
||||||
|
#define EREMCHG 78 /* Remote address changed */
|
||||||
|
#define ELIBACC 79 /* Can not access a needed shared library */
|
||||||
|
#define ELIBBAD 80 /* Accessing a corrupted shared library */
|
||||||
|
#define ELIBSCN 81 /* .lib section in a.out corrupted */
|
||||||
|
#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
|
||||||
|
#define ELIBEXEC 83 /* Cannot exec a shared library directly */
|
||||||
|
#define EILSEQ 84 /* Illegal byte sequence */
|
||||||
|
#define ERESTART 85 /* Interrupted system call should be restarted */
|
||||||
|
#define ESTRPIPE 86 /* Streams pipe error */
|
||||||
|
#define EUSERS 87 /* Too many users */
|
||||||
|
#define ENOTSOCK 88 /* Socket operation on non-socket */
|
||||||
|
#define EDESTADDRREQ 89 /* Destination address required */
|
||||||
|
#define EMSGSIZE 90 /* Message too long */
|
||||||
|
#define EPROTOTYPE 91 /* Protocol wrong type for socket */
|
||||||
|
#define ENOPROTOOPT 92 /* Protocol not available */
|
||||||
|
#define EPROTONOSUPPORT 93 /* Protocol not supported */
|
||||||
|
#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
|
||||||
|
#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
|
||||||
|
#define EPFNOSUPPORT 96 /* Protocol family not supported */
|
||||||
|
#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
|
||||||
|
#define EADDRINUSE 98 /* Address already in use */
|
||||||
|
#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
|
||||||
|
#define ENETDOWN 100 /* Network is down */
|
||||||
|
#define ENETUNREACH 101 /* Network is unreachable */
|
||||||
|
#define ENETRESET 102 /* Network dropped connection because of reset */
|
||||||
|
#define ECONNABORTED 103 /* Software caused connection abort */
|
||||||
|
#define ECONNRESET 104 /* Connection reset by peer */
|
||||||
|
#define ENOBUFS 105 /* No buffer space available */
|
||||||
|
#define EISCONN 106 /* Transport endpoint is already connected */
|
||||||
|
#define ENOTCONN 107 /* Transport endpoint is not connected */
|
||||||
|
#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
|
||||||
|
#define ETOOMANYREFS 109 /* Too many references: cannot splice */
|
||||||
|
#define ETIMEDOUT 110 /* Connection timed out */
|
||||||
|
#define ECONNREFUSED 111 /* Connection refused */
|
||||||
|
#define EHOSTDOWN 112 /* Host is down */
|
||||||
|
#define EHOSTUNREACH 113 /* No route to host */
|
||||||
|
#define EALREADY 114 /* Operation already in progress */
|
||||||
|
#define EINPROGRESS 115 /* Operation now in progress */
|
||||||
|
#define ESTALE 116 /* Stale NFS file handle */
|
||||||
|
#define EUCLEAN 117 /* Structure needs cleaning */
|
||||||
|
#define ENOTNAM 118 /* Not a XENIX named type file */
|
||||||
|
#define ENAVAIL 119 /* No XENIX semaphores available */
|
||||||
|
#define EISNAM 120 /* Is a named type file */
|
||||||
|
#define EREMOTEIO 121 /* Remote I/O error */
|
||||||
|
#define EDQUOT 122 /* Quota exceeded */
|
||||||
|
|
||||||
|
#define ENOMEDIUM 123 /* No medium found */
|
||||||
|
#define EMEDIUMTYPE 124 /* Wrong medium type */
|
||||||
|
|
||||||
|
#define __ELASTERROR 2000 /* Users can add values starting here */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* _SYS_ERRNO_H */
|
|
@ -0,0 +1,163 @@
|
||||||
|
/* This file is to be kept in sync with newlib/libc/include/sys/fcntl.h,
|
||||||
|
on which it is based, except values used or returned by syscalls must
|
||||||
|
be those of the Linux/CRIS kernel. */
|
||||||
|
|
||||||
|
#ifndef _FCNTL_
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
#define _FCNTL_
|
||||||
|
#include <_ansi.h>
|
||||||
|
#define _FOPEN (-1) /* from sys/file.h, kernel use only */
|
||||||
|
#define _FREAD 0x0001 /* read enabled */
|
||||||
|
#define _FWRITE 0x0002 /* write enabled */
|
||||||
|
#define _FNDELAY 0x0800 /* non blocking I/O (4.2 style) */
|
||||||
|
#define _FAPPEND 0x0400 /* append (writes guaranteed at the end) */
|
||||||
|
#define _FMARK 0x0010 /* internal; mark during gc() */
|
||||||
|
#define _FDEFER 0x0020 /* internal; defer for next gc pass */
|
||||||
|
#define _FASYNC 0x2000 /* signal pgrp when data ready */
|
||||||
|
#define _FCREAT 0x0040 /* open with file create */
|
||||||
|
#define _FTRUNC 0x0200 /* open with truncation */
|
||||||
|
#define _FEXCL 0x0080 /* error on open if file exists */
|
||||||
|
#define _FNBIO _FNONBLOCK /* non blocking I/O (sys5 style) */
|
||||||
|
#define _FSYNC 0x1000 /* do all writes synchronously */
|
||||||
|
#define _FNONBLOCK 0x0800 /* non blocking I/O (POSIX style) */
|
||||||
|
#define _FNOCTTY 0x0100 /* don't assign a ctty on this open */
|
||||||
|
|
||||||
|
#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Flag values for open(2) and fcntl(2)
|
||||||
|
* The kernel adds 1 to the open modes to turn it into some
|
||||||
|
* combination of FREAD and FWRITE.
|
||||||
|
*/
|
||||||
|
#define O_RDONLY 0 /* +1 == FREAD */
|
||||||
|
#define O_WRONLY 1 /* +1 == FWRITE */
|
||||||
|
#define O_RDWR 2 /* +1 == FREAD|FWRITE */
|
||||||
|
#define O_APPEND _FAPPEND
|
||||||
|
#define O_CREAT _FCREAT
|
||||||
|
#define O_TRUNC _FTRUNC
|
||||||
|
#define O_EXCL _FEXCL
|
||||||
|
/* O_SYNC _FSYNC not posix, defined below */
|
||||||
|
/* O_NDELAY _FNDELAY set in include/fcntl.h */
|
||||||
|
/* O_NDELAY _FNBIO set in 5include/fcntl.h */
|
||||||
|
#define O_NONBLOCK _FNONBLOCK
|
||||||
|
#define O_NOCTTY _FNOCTTY
|
||||||
|
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
|
||||||
|
#define O_SYNC _FSYNC
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Flags that work for fcntl(fd, F_SETFL, FXXXX)
|
||||||
|
*/
|
||||||
|
#define FAPPEND _FAPPEND
|
||||||
|
#define FSYNC _FSYNC
|
||||||
|
#define FASYNC _FASYNC
|
||||||
|
#define FNBIO _FNBIO
|
||||||
|
#define FNONBIO _FNONBLOCK /* XXX fix to be NONBLOCK everywhere */
|
||||||
|
#define FNDELAY _FNDELAY
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Flags that are disallowed for fcntl's (FCNTLCANT);
|
||||||
|
* used for opens, internal state, or locking.
|
||||||
|
*/
|
||||||
|
#define FREAD _FREAD
|
||||||
|
#define FWRITE _FWRITE
|
||||||
|
#define FMARK _FMARK
|
||||||
|
#define FDEFER _FDEFER
|
||||||
|
#define FSHLOCK _FSHLOCK
|
||||||
|
#define FEXLOCK _FEXLOCK
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The rest of the flags, used only for opens
|
||||||
|
*/
|
||||||
|
#define FOPEN _FOPEN
|
||||||
|
#define FCREAT _FCREAT
|
||||||
|
#define FTRUNC _FTRUNC
|
||||||
|
#define FEXCL _FEXCL
|
||||||
|
#define FNOCTTY _FNOCTTY
|
||||||
|
|
||||||
|
#endif /* !_POSIX_SOURCE */
|
||||||
|
|
||||||
|
/* XXX close on exec request; must match UF_EXCLOSE in user.h */
|
||||||
|
#define FD_CLOEXEC 1 /* posix */
|
||||||
|
|
||||||
|
/* fcntl(2) requests */
|
||||||
|
#define F_DUPFD 0 /* dup */
|
||||||
|
#define F_GETFD 1 /* get f_flags */
|
||||||
|
#define F_SETFD 2 /* set f_flags */
|
||||||
|
#define F_GETFL 3 /* more flags (cloexec) */
|
||||||
|
#define F_SETFL 4
|
||||||
|
#define F_GETLK 5
|
||||||
|
#define F_SETLK 6
|
||||||
|
#define F_SETLKW 7
|
||||||
|
|
||||||
|
#define F_SETOWN 8 /* for sockets. */
|
||||||
|
#define F_GETOWN 9 /* for sockets. */
|
||||||
|
|
||||||
|
/* for F_[GET|SET]FL */
|
||||||
|
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
|
||||||
|
|
||||||
|
/* for posix fcntl() and lockf() */
|
||||||
|
#define F_RDLCK 0
|
||||||
|
#define F_WRLCK 1
|
||||||
|
#define F_UNLCK 2
|
||||||
|
|
||||||
|
/* for old implementation of bsd flock () */
|
||||||
|
#define F_EXLCK 4 /* or 3 */
|
||||||
|
#define F_SHLCK 8 /* or 4 */
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
|
|
||||||
|
/* file segment locking set data type - information passed to system by user */
|
||||||
|
struct flock {
|
||||||
|
short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
|
||||||
|
short l_whence; /* flag to choose starting offset */
|
||||||
|
long l_start; /* relative offset, in bytes */
|
||||||
|
long l_len; /* length, in bytes; 0 means lock to EOF */
|
||||||
|
short l_pid; /* returned with F_GETLK */
|
||||||
|
short l_xxx; /* reserved for future use */
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
/* extended file segment locking set data type */
|
||||||
|
struct eflock {
|
||||||
|
short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
|
||||||
|
short l_whence; /* flag to choose starting offset */
|
||||||
|
long l_start; /* relative offset, in bytes */
|
||||||
|
long l_len; /* length, in bytes; 0 means lock to EOF */
|
||||||
|
short l_pid; /* returned with F_GETLK */
|
||||||
|
short l_xxx; /* reserved for future use */
|
||||||
|
long l_rpid; /* Remote process id wanting this lock */
|
||||||
|
long l_rsys; /* Remote system id wanting this lock */
|
||||||
|
};
|
||||||
|
#endif /* !_POSIX_SOURCE */
|
||||||
|
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h> /* sigh. for the mode bits for open/creat */
|
||||||
|
|
||||||
|
extern int open _PARAMS ((const char *, int, ...));
|
||||||
|
extern int creat _PARAMS ((const char *, mode_t));
|
||||||
|
extern int fcntl _PARAMS ((int, int, ...));
|
||||||
|
|
||||||
|
/* Provide _<systemcall> prototypes for functions provided by some versions
|
||||||
|
of newlib. */
|
||||||
|
#ifdef _COMPILING_NEWLIB
|
||||||
|
extern int _open _PARAMS ((const char *, int, ...));
|
||||||
|
extern int _fcntl _PARAMS ((int, int, ...));
|
||||||
|
#ifdef __LARGE64_FILES
|
||||||
|
extern int _open64 _PARAMS ((const char *, int, ...));
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !_FCNTL_ */
|
|
@ -0,0 +1,89 @@
|
||||||
|
/* This file is to be kept in sync (well, reasonably so, it's quite
|
||||||
|
different) with newlib/libc/include/sys/signal.h on which it is
|
||||||
|
based, except values used or returned by syscalls must be those of
|
||||||
|
the Linux/CRIS kernel. */
|
||||||
|
|
||||||
|
/* sys/signal.h */
|
||||||
|
|
||||||
|
#ifndef _SYS_SIGNAL_H
|
||||||
|
#define _SYS_SIGNAL_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "_ansi.h"
|
||||||
|
|
||||||
|
typedef unsigned long sigset_t;
|
||||||
|
|
||||||
|
/* Adjusted to linux, has unused sa_restorer field and unsigned long
|
||||||
|
sa_flags; relatively unimportant though. */
|
||||||
|
/* Type of a signal handler. */
|
||||||
|
typedef void (*__sighandler_t)(int);
|
||||||
|
|
||||||
|
/* The type used in newlib sources. */
|
||||||
|
typedef __sighandler_t _sig_func_ptr;
|
||||||
|
|
||||||
|
struct sigaction {
|
||||||
|
__sighandler_t sa_handler;
|
||||||
|
sigset_t sa_mask;
|
||||||
|
unsigned long sa_flags;
|
||||||
|
void (*sa_restorer)(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Adjusted to glibc; other values. */
|
||||||
|
#define SA_NOCLDSTOP 1 /* only value supported now for sa_flags */
|
||||||
|
#define SIG_SETMASK 2 /* set mask with sigprocmask() */
|
||||||
|
#define SIG_BLOCK 0 /* set of signals to block */
|
||||||
|
#define SIG_UNBLOCK 1 /* set of signals to, well, unblock */
|
||||||
|
|
||||||
|
/* These depend upon the type of sigset_t, which right now
|
||||||
|
is always a long.. They're in the POSIX namespace, but
|
||||||
|
are not ANSI. */
|
||||||
|
#define sigaddset(what,sig) (*(what) |= (1<<(sig)))
|
||||||
|
#define sigemptyset(what) (*(what) = 0)
|
||||||
|
|
||||||
|
int sigprocmask (int __how, const sigset_t *__a, sigset_t *__b);
|
||||||
|
|
||||||
|
#define SIGHUP 1
|
||||||
|
#define SIGINT 2
|
||||||
|
#define SIGQUIT 3
|
||||||
|
#define SIGILL 4
|
||||||
|
#define SIGTRAP 5
|
||||||
|
#define SIGABRT 6
|
||||||
|
#define SIGIOT 6
|
||||||
|
#define SIGBUS 7
|
||||||
|
#define SIGFPE 8
|
||||||
|
#define SIGKILL 9
|
||||||
|
#define SIGUSR1 10
|
||||||
|
#define SIGSEGV 11
|
||||||
|
#define SIGUSR2 12
|
||||||
|
#define SIGPIPE 13
|
||||||
|
#define SIGALRM 14
|
||||||
|
#define SIGTERM 15
|
||||||
|
#define SIGSTKFLT 16
|
||||||
|
#define SIGCHLD 17
|
||||||
|
#define SIGCONT 18
|
||||||
|
#define SIGSTOP 19
|
||||||
|
#define SIGTSTP 20
|
||||||
|
#define SIGTTIN 21
|
||||||
|
#define SIGTTOU 22
|
||||||
|
#define SIGURG 23
|
||||||
|
#define SIGXCPU 24
|
||||||
|
#define SIGXFSZ 25
|
||||||
|
#define SIGVTALRM 26
|
||||||
|
#define SIGPROF 27
|
||||||
|
#define SIGWINCH 28
|
||||||
|
#define SIGIO 29
|
||||||
|
#define SIGPOLL SIGIO
|
||||||
|
#define SIGPWR 30
|
||||||
|
#define NSIG 31
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifndef _SIGNAL_H_
|
||||||
|
/* Some applications take advantage of the fact that <sys/signal.h>
|
||||||
|
* and <signal.h> are equivalent in glibc. Allow for that here. */
|
||||||
|
#include <signal.h>
|
||||||
|
#endif
|
||||||
|
#endif /* _SYS_SIGNAL_H */
|
Loading…
Reference in New Issue