2005-01-27 Hans-Peter Nilsson <hp@axis.com>
* configure.in: Support cris-*-* and crisv32-*-*. * libnosys/configure.in: Ditto. * configure, libnosys/configure: Regenerate. * cris: New directory. * cris/crt0.S, cris/crtn.c, cris/gensyscalls, cris/linunistd.h, cris/outbyte.c, cris/configure.in, cris/crti.c, cris/lcrt0.c, cris/Makefile.in, cris/setup.S, cris/configure: New files.
This commit is contained in:
parent
8cc85fff15
commit
3a26703803
|
@ -1,3 +1,13 @@
|
|||
2005-01-27 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
* configure.in: Support cris-*-* and crisv32-*-*.
|
||||
* libnosys/configure.in: Ditto.
|
||||
* configure, libnosys/configure: Regenerate.
|
||||
* cris: New directory.
|
||||
* cris/crt0.S, cris/crtn.c, cris/gensyscalls, cris/linunistd.h,
|
||||
cris/outbyte.c, cris/configure.in, cris/crti.c, cris/lcrt0.c,
|
||||
cris/Makefile.in, cris/setup.S, cris/configure: New files.
|
||||
|
||||
2005-01-21 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
* libnosys/warning.h (stub_warning): Remove "warning: " prefix.
|
||||
|
|
|
@ -774,6 +774,9 @@ case "${target}" in
|
|||
mn10300-*-*)
|
||||
configdirs="${configdirs} mn10300 testsuite"
|
||||
;;
|
||||
cris-*-* | crisv32-*-*)
|
||||
configdirs="${configdirs} cris testsuite"
|
||||
;;
|
||||
crx-*-*)
|
||||
configdirs="${configdirs} crx"
|
||||
;;
|
||||
|
@ -826,7 +829,7 @@ subdirs="$configdirs"
|
|||
# Extract the first word of "gcc", so it can be a program name with args.
|
||||
set dummy gcc; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:830: checking for $ac_word" >&5
|
||||
echo "configure:833: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -856,7 +859,7 @@ if test -z "$CC"; then
|
|||
# Extract the first word of "cc", so it can be a program name with args.
|
||||
set dummy cc; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:860: checking for $ac_word" >&5
|
||||
echo "configure:863: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -905,7 +908,7 @@ fi
|
|||
fi
|
||||
|
||||
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
||||
echo "configure:909: checking whether we are using GNU C" >&5
|
||||
echo "configure:912: checking whether we are using GNU C" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -914,7 +917,7 @@ else
|
|||
yes;
|
||||
#endif
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:918: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:921: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||
ac_cv_prog_gcc=yes
|
||||
else
|
||||
ac_cv_prog_gcc=no
|
||||
|
@ -929,7 +932,7 @@ if test $ac_cv_prog_gcc = yes; then
|
|||
ac_save_CFLAGS="$CFLAGS"
|
||||
CFLAGS=
|
||||
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
|
||||
echo "configure:933: checking whether ${CC-cc} accepts -g" >&5
|
||||
echo "configure:936: checking whether ${CC-cc} accepts -g" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -961,7 +964,7 @@ AS=${AS-as}
|
|||
# Extract the first word of "ar", so it can be a program name with args.
|
||||
set dummy ar; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:965: checking for $ac_word" >&5
|
||||
echo "configure:968: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -995,7 +998,7 @@ LD=${LD-ld}
|
|||
# Extract the first word of "ranlib", so it can be a program name with args.
|
||||
set dummy ranlib; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:999: checking for $ac_word" >&5
|
||||
echo "configure:1002: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1096,34 +1099,15 @@ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
|
|||
# Transform confdefs.h into DEFS.
|
||||
# Protect against shell expansion while executing Makefile rules.
|
||||
# Protect against Makefile macro expansion.
|
||||
#
|
||||
# If the first sed substitution is executed (which looks for macros that
|
||||
# take arguments), then we branch to the quote section. Otherwise,
|
||||
# look for a macro that doesn't take arguments.
|
||||
cat >confdef2opt.sed <<\_ACEOF
|
||||
t clear
|
||||
: clear
|
||||
s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
|
||||
t quote
|
||||
s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
|
||||
t quote
|
||||
d
|
||||
: quote
|
||||
s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
|
||||
s,\[,\\&,g
|
||||
s,\],\\&,g
|
||||
s,\$,$$,g
|
||||
p
|
||||
_ACEOF
|
||||
# We use echo to avoid assuming a particular line-breaking character.
|
||||
# The extra dot is to prevent the shell from consuming trailing
|
||||
# line-breaks from the sub-command output. A line-break within
|
||||
# single-quotes doesn't work because, if this script is created in a
|
||||
# platform that uses two characters for line-breaks (e.g., DOS), tr
|
||||
# would break.
|
||||
ac_LF_and_DOT=`echo; echo .`
|
||||
DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
|
||||
rm -f confdef2opt.sed
|
||||
cat > conftest.defs <<\EOF
|
||||
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
|
||||
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
|
||||
s%\[%\\&%g
|
||||
s%\]%\\&%g
|
||||
s%\$%$$%g
|
||||
EOF
|
||||
DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
|
||||
rm -f conftest.defs
|
||||
|
||||
|
||||
# Without the "./", some shells look in PATH for config.status.
|
||||
|
|
|
@ -85,6 +85,9 @@ case "${target}" in
|
|||
mn10300-*-*)
|
||||
configdirs="${configdirs} mn10300 testsuite"
|
||||
;;
|
||||
cris-*-* | crisv32-*-*)
|
||||
configdirs="${configdirs} cris testsuite"
|
||||
;;
|
||||
crx-*-*)
|
||||
configdirs="${configdirs} crx"
|
||||
;;
|
||||
|
|
|
@ -0,0 +1,254 @@
|
|||
#
|
||||
# libgloss Makefile.in for CRIS. Copied and modified from mcore long ago.
|
||||
#
|
||||
|
||||
DESTDIR =
|
||||
VPATH = @srcdir@
|
||||
srcdir = @srcdir@
|
||||
objdir = .
|
||||
srcroot = $(srcdir)/../..
|
||||
objroot = $(objdir)/../..
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
host_alias = @host_alias@
|
||||
target_alias = @target_alias@
|
||||
|
||||
bindir = @bindir@
|
||||
libdir = @libdir@
|
||||
tooldir = $(exec_prefix)/$(target_alias)
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
||||
# Multilib support variables.
|
||||
# TOP is used instead of MULTI{BUILD,SRC}TOP.
|
||||
MULTIDIRS =
|
||||
MULTISUBDIR =
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
CC = @CC@
|
||||
|
||||
AS = @AS@
|
||||
AR = @AR@
|
||||
LD = @LD@
|
||||
RANLIB = @RANLIB@
|
||||
|
||||
OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \
|
||||
then echo ${objroot}/../binutils/objdump ; \
|
||||
else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi`
|
||||
OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
|
||||
then echo ${objroot}/../binutils/objcopy ; \
|
||||
else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`
|
||||
|
||||
CFLAGS = -g
|
||||
SCRIPTS =
|
||||
|
||||
OBJS = outbyte.o
|
||||
|
||||
# Beware: GNU make construct used (shell call). Since GCC at the time
|
||||
# of this writing requires GNU make >= 3.79.1, this should pose no
|
||||
# problem.
|
||||
SYSCALL_CFILES := $(shell sed -ne 's/^cat > \([^ ]*\).*/\1/p' < $(srcdir)/gensyscalls)
|
||||
|
||||
# Here is all of the simulator stuff.
|
||||
# Actually, now it's just the GNU/Linux stuff, as that's also the
|
||||
# simulator ABI. The name of the library is different, though.
|
||||
SIM_SCRIPTS =
|
||||
SIM_LDFLAGS =
|
||||
SIM_BSP = libsyssim.a
|
||||
SIM_CRT0 = $(LIN_CRT0)
|
||||
SIM_OBJS = $(LIN_OBJS)
|
||||
SIM_TEST = sim-test
|
||||
SIM_INSTALL = install-sim
|
||||
|
||||
# Here is all of the GNU/Linux stuff. At present we don't build newlib
|
||||
# and libgloss for cris*-linux-gnu*, but it's nice to keep that as an
|
||||
# option.
|
||||
LIN_PREFIX =
|
||||
LIN_LDFLAGS =
|
||||
LIN_BSP = libsyslinux.a
|
||||
LIN_CRT0 = lcrt0.o
|
||||
LIN_EXTRA = crti.o crtn.o crt1.o
|
||||
LIN_OBJS = close.o execve.o exit.o fcntl.o fork.o fstat.o getpid.o \
|
||||
gettod.o isatty.o kill.o link.o lseek.o open.o read.o \
|
||||
rename.o sbrk.o stat.o times.o unlink.o wait.o write.o ${OBJS}
|
||||
LIN_SCRIPTS =
|
||||
LIN_TEST =
|
||||
LIN_INSTALL = install-lin
|
||||
|
||||
# In (over)due time, here will be all stuff necessary for a development
|
||||
# board.
|
||||
BSP_PREFIX =
|
||||
BSP_LDFLAGS =
|
||||
BSP_BSP = libbsp.a
|
||||
BSP_CRT0 = crt0.o
|
||||
BSP_OBJS = ${OBJS} setup.o
|
||||
BSP_SCRIPTS =
|
||||
BSP_TEST =
|
||||
BSP_INSTALL = install-bsp
|
||||
|
||||
# Host specific makefile fragment comes in here.
|
||||
@host_makefile_frag@
|
||||
|
||||
# Need to augment the definition from host_makefile_frag above.
|
||||
INCLUDES += -I$(srcdir)
|
||||
|
||||
all: ${SIM_CRT0} ${LIN_CRT0} ${BSP_CRT0} ${SIM_BSP} ${LIN_BSP} ${BSP_BSP} \
|
||||
libnosys.a ${LIN_EXTRA}
|
||||
|
||||
#
|
||||
# Here's where we build the board support packages for each target.
|
||||
#
|
||||
${SIM_BSP}: ${SIM_OBJS}
|
||||
${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS}
|
||||
${RANLIB} ${SIM_BSP}
|
||||
|
||||
${BSP_BSP}: ${BSP_OBJS}
|
||||
${AR} ${ARFLAGS} ${BSP_BSP} ${BSP_OBJS}
|
||||
${RANLIB} ${BSP_BSP}
|
||||
|
||||
${LIN_BSP}: ${LIN_OBJS}
|
||||
${AR} ${ARFLAGS} ${LIN_BSP} ${LIN_OBJS}
|
||||
${RANLIB} ${LIN_BSP}
|
||||
|
||||
# We need a link to libnosys.a in this directory, since this is the
|
||||
# directory used when test-compiling for configuration for other parts and
|
||||
# when running the testsuite. By using a symbolic link, it does not
|
||||
# matter whether libnosys.a is built yet when the rule is executed.
|
||||
libnosys.a:
|
||||
ln -s ../libnosys/libnosys.a
|
||||
|
||||
#
|
||||
# Build a test program for each target board. Just trying to get
|
||||
# it to link is a good test, so we ignore all the errors for now.
|
||||
#
|
||||
#
|
||||
# Here's where we build the test programs for each target.
|
||||
#
|
||||
.PHONY: test
|
||||
test: ${SIM_TEST} ${BSP_TEST}
|
||||
|
||||
sim-test: sim-test.x sim-test.dis
|
||||
|
||||
sim-test.x: test.o ${SIM_CRT0} ${SIM_BSP}
|
||||
${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
|
||||
${SIM_CRT0} test.o \
|
||||
-o sim-test.x ${LIBS_FOR_TARGET} -lc ${SIM_BSP}
|
||||
|
||||
sim-test.dis: sim-test.x
|
||||
${OBJDUMP} -d sim-test.x > sim-test.dis
|
||||
|
||||
|
||||
test.o: ${srcdir}/m68k/test.c
|
||||
|
||||
# Debug usage.
|
||||
.c.S:
|
||||
${CC} ${CFLAGS_FOR_TARGET} $(INCLUDES) $(CFLAGS) -c $<
|
||||
|
||||
# Caveat: for the -melinux multilib in cris-axis-aout, crt0.o is the
|
||||
# same as lcrt0.o, while elsewhere (other cris-axis-aout multilib and
|
||||
# cris-axis-elf) it's crt0.c compiled.
|
||||
crt0.o: lcrt0.o crt0.S
|
||||
case "${MULTISUBDIR}" in \
|
||||
*/elinux) \
|
||||
cp -p $< $@; st=$$?;; \
|
||||
*) \
|
||||
case "$?" in \
|
||||
*crt0.S) \
|
||||
$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -xassembler-with-cpp -c $(srcdir)/crt0.S;; \
|
||||
*) touch $@;; \
|
||||
esac; \
|
||||
st=$$?;; \
|
||||
esac; exit $$st
|
||||
|
||||
crt1.o: lcrt0.o
|
||||
cp -p $< $@
|
||||
|
||||
clean mostlyclean:
|
||||
rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) $(BSP_BSP) $(LIN_BSP) libnosys.a
|
||||
|
||||
distclean maintainer-clean realclean: clean
|
||||
rm -f Makefile config.status *~
|
||||
|
||||
.PHONY: install info install-info clean-info
|
||||
install: ${SIM_INSTALL} ${BSP_INSTALL} ${LIN_INSTALL}
|
||||
|
||||
# Note that bsp and elinux objects are exclusive: do not overlap
|
||||
# installed files.
|
||||
install-bsp:
|
||||
case "${MULTISUBDIR}" in \
|
||||
*/elinux) ;; \
|
||||
*) set -e; \
|
||||
for x in ${BSP_CRT0} ${BSP_BSP} ${BSP_SCRIPTS}; do \
|
||||
${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \
|
||||
done;; \
|
||||
esac
|
||||
|
||||
install-sim:
|
||||
set -e; \
|
||||
for x in ${SIM_CRT0} ${SIM_BSP} ${SIM_SCRIPTS}; do \
|
||||
${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \
|
||||
done
|
||||
|
||||
install-lin:
|
||||
case "${MULTISUBDIR}" in \
|
||||
*/elinux) \
|
||||
${INSTALL_DATA} ${LIN_CRT0} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/crt0.o; \
|
||||
set -e; \
|
||||
for x in ${LIN_BSP} ${LIN_SCRIPTS}; do \
|
||||
${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \
|
||||
done;; \
|
||||
*) \
|
||||
set -e; \
|
||||
for x in ${LIN_BSP} ${LIN_SCRIPTS} ${LIN_EXTRA}; do \
|
||||
${INSTALL_DATA} $$x ${tooldir}/lib${MULTISUBDIR}/$$x; \
|
||||
done;; \
|
||||
esac
|
||||
|
||||
doc:
|
||||
info:
|
||||
install-info:
|
||||
clean-info:
|
||||
|
||||
Makefile: Makefile.in config.status @host_makefile_frag_path@
|
||||
$(SHELL) config.status
|
||||
|
||||
config.status: configure
|
||||
$(SHELL) config.status --recheck
|
||||
|
||||
$(SYSCALL_CFILES): syscalls.stamp
|
||||
|
||||
syscalls.stamp: gensyscalls
|
||||
$(SHELL) $(srcdir)/gensyscalls
|
||||
touch $@
|
||||
|
||||
# Dependencies that could and should be auto-generated.
|
||||
close.o: close.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
execve.o: execve.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
exit.o: exit.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
fork.o: fork.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
fstat.o: fstat.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
fcntl.o: fcntl.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
getpid.o: getpid.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
gettod.o: gettod.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
isatty.o: isatty.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
kill.o: kill.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
link.o: link.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
lseek.o: lseek.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
open.o: open.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
read.o: read.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
rename.o: rename.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
sbrk.o: sbrk.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
stat.o: stat.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
times.o: times.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
unlink.o: unlink.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
wait.o: wait.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
write.o: write.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
lcrt0.o: lcrt0.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||
setup.o: setup.S
|
||||
crti.o: crti.c
|
||||
crtn.o: crtn.c
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,90 @@
|
|||
dnl This file is based on ../mcore/configure.in
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_PREREQ(2.5)dnl
|
||||
AC_INIT(Makefile.in)
|
||||
|
||||
if test "${enable_shared}" = "yes" ; then
|
||||
echo "Shared libraries not supported for cross compiling, ignored"
|
||||
fi
|
||||
|
||||
if test "$srcdir" = "." ; then
|
||||
if test "${with_target_subdir}" != "." ; then
|
||||
libgloss_topdir="${srcdir}/${with_multisrctop}../../.."
|
||||
else
|
||||
libgloss_topdir="${srcdir}/${with_multisrctop}../.."
|
||||
fi
|
||||
else
|
||||
libgloss_topdir="${srcdir}/../.."
|
||||
fi
|
||||
AC_CONFIG_AUX_DIR($libgloss_topdir)
|
||||
|
||||
AC_CANONICAL_SYSTEM
|
||||
AC_ARG_PROGRAM
|
||||
|
||||
AC_PROG_INSTALL
|
||||
|
||||
# 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
|
||||
AS=${AS-as}
|
||||
AC_SUBST(AS)
|
||||
AR=${AR-ar}
|
||||
AC_SUBST(AR)
|
||||
LD=${LD-ld}
|
||||
AC_SUBST(LD)
|
||||
AC_PROG_RANLIB
|
||||
|
||||
host_makefile_frag=${srcdir}/../config/default.mh
|
||||
|
||||
dnl We have to assign the same value to other variables because autoconf
|
||||
dnl doesn't provide a mechanism to substitute a replacement keyword with
|
||||
dnl arbitrary data or pathnames.
|
||||
dnl
|
||||
host_makefile_frag_path=$host_makefile_frag
|
||||
AC_SUBST(host_makefile_frag_path)
|
||||
AC_SUBST_FILE(host_makefile_frag)
|
||||
|
||||
AC_OUTPUT(Makefile,
|
||||
. ${libgloss_topdir}/config-ml.in,
|
||||
srcdir=${srcdir}
|
||||
target=${target}
|
||||
ac_configure_args="${ac_configure_args} --enable-multilib"
|
||||
CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
|
||||
libgloss_topdir=${libgloss_topdir}
|
||||
)
|
|
@ -0,0 +1,83 @@
|
|||
/* Generic simplistic start-up-stub for CRIS/CRISv32.
|
||||
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. */
|
||||
|
||||
#undef cris
|
||||
#undef L
|
||||
#ifdef __NO_UNDERSCORES__
|
||||
#define L(x) x
|
||||
#else
|
||||
#define L(x) _ ## x
|
||||
#endif
|
||||
|
||||
; Rudimentary v0..v32-compatible startup stub.
|
||||
|
||||
#ifdef __ELF__
|
||||
.section .startup,"ax"
|
||||
#endif
|
||||
.global __start
|
||||
nop
|
||||
__start:
|
||||
ba 0f
|
||||
nop
|
||||
|
||||
.rept 256 - 2
|
||||
.dword _.int
|
||||
.endr
|
||||
|
||||
_.int:
|
||||
#ifdef __arch_common_v10_v32
|
||||
; This is just to allow the multilib to compile without
|
||||
; hackery: the "common" subset doesn't recognize
|
||||
; interrupt-return insns.
|
||||
#elif __CRIS_arch_version >= 32
|
||||
rete
|
||||
rfe
|
||||
#else
|
||||
reti
|
||||
nop
|
||||
#endif
|
||||
|
||||
0:
|
||||
move.d __setup,$r9
|
||||
jsr $r9
|
||||
nop
|
||||
#ifdef __ELF__
|
||||
jsr L(_init)
|
||||
nop
|
||||
move.d L(_fini),$r10
|
||||
jsr L(atexit)
|
||||
nop
|
||||
#endif
|
||||
jsr L(main)
|
||||
nop
|
||||
jsr L(exit)
|
||||
nop
|
||||
0:
|
||||
nop
|
||||
ba 0b
|
||||
nop
|
|
@ -0,0 +1,77 @@
|
|||
/* Executable and DSO init/fini start for cris*-axis-linux-gnu and simulators
|
||||
Copyright (C) 2000, 2001, 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. */
|
||||
|
||||
#ifdef __ELF__
|
||||
__asm__ (".syntax no_register_prefix");
|
||||
|
||||
__asm__ (".section .init\n"
|
||||
#ifdef __NO_UNDERSCORES__
|
||||
" .globl _init\n"
|
||||
"_init:\n"
|
||||
#else /* not __NO_UNDERSCORES__ */
|
||||
" .globl __init\n"
|
||||
"__init:\n"
|
||||
#endif /* not __NO_UNDERSCORES__ */
|
||||
"\tsubq 4,sp\n"
|
||||
"\tmove srp,[sp]\n"
|
||||
#ifdef __PIC__
|
||||
"\tsubq 4,sp\n"
|
||||
"\tmove.d r0,[sp]\n"
|
||||
#if __CRIS_arch_version >= 32
|
||||
"\tlapc _GLOBAL_OFFSET_TABLE_,$r0\n"
|
||||
#else /* not __CRIS_arch_version >= 32 */
|
||||
"\tmove.d $pc,$r0\n"
|
||||
"\tsub.d .:GOTOFF,$r0\n"
|
||||
#endif /* not __CRIS_arch_version >= 32 */
|
||||
#endif /* __PIC__ */
|
||||
|
||||
"\t.section .fini\n"
|
||||
#ifdef __NO_UNDERSCORES__
|
||||
" .globl _fini\n"
|
||||
"_fini:\n"
|
||||
#else /* not __NO_UNDERSCORES__ */
|
||||
" .globl __fini\n"
|
||||
"__fini:\n"
|
||||
#endif /* not __NO_UNDERSCORES__ */
|
||||
"\tsubq 4,sp\n"
|
||||
"\tmove srp,[sp]\n"
|
||||
#ifdef __PIC__
|
||||
"\tsubq 4,sp\n"
|
||||
"\tmove.d r0,[sp]\n"
|
||||
#if __CRIS_arch_version >= 32
|
||||
"\tlapc _GLOBAL_OFFSET_TABLE_,$r0\n"
|
||||
#else /* not __CRIS_arch_version >= 32 */
|
||||
"\tmove.d $pc,$r0\n"
|
||||
"\tsub.d .:GOTOFF,$r0\n"
|
||||
#endif /* not __CRIS_arch_version >= 32 */
|
||||
#endif /* __PIC__ */
|
||||
);
|
||||
|
||||
#else /* not __ELF__ */
|
||||
extern int Dummy;
|
||||
#endif /* not __ELF__ */
|
|
@ -0,0 +1,51 @@
|
|||
/* Executable and DSO init/fini end for cris*-axis-linux-gnu and simulators
|
||||
Copyright (C) 2000, 2001, 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. */
|
||||
|
||||
#ifdef __ELF__
|
||||
|
||||
__asm__ (".syntax no_register_prefix");
|
||||
|
||||
__asm__ (".section .init\n"
|
||||
#ifdef __PIC__
|
||||
"\tmove.d [sp+],r0\n"
|
||||
#endif
|
||||
"\tmove.d [sp+],r9\n"
|
||||
"\tjump r9\n"
|
||||
"\tnop\n"
|
||||
|
||||
"\t.section .fini\n"
|
||||
#ifdef __PIC__
|
||||
"\tmove.d [sp+],r0\n"
|
||||
#endif
|
||||
"\tmove.d [sp+],r9\n"
|
||||
"\tjump r9\n"
|
||||
"\tnop\n");
|
||||
|
||||
#else
|
||||
extern int Dummy;
|
||||
#endif
|
|
@ -0,0 +1,252 @@
|
|||
#! /bin/sh
|
||||
# Copyright (C) 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.
|
||||
|
||||
# To avoid an abundance of copyright/license messages for boilerplate
|
||||
# code, we instead generate them from this file. Generating the
|
||||
# function code could also be done automatically, but at the cost of
|
||||
# slightly more intricate build machinery and/or scattered syscall
|
||||
# information. Beware that the cat-lines must match the sed regexp
|
||||
# "^cat > \([^ ]*\).*".
|
||||
|
||||
lu='/* -*- buffer-read-only: t -*-
|
||||
THIS FILE IS AUTOMATICALLY GENERATED
|
||||
FROM "'$0'". */
|
||||
#include "linunistd.h"
|
||||
#define R(x) return (x); }
|
||||
'
|
||||
lui="$lu int"
|
||||
r=") { R (_Sys_"
|
||||
|
||||
cat > close.c <<EOF
|
||||
$lui _close (int fd${r}close (fd))
|
||||
EOF
|
||||
cat > execve.c <<EOF
|
||||
$lui _execve (char *path, char **argv, char **env${r}execve (path, argv, env))
|
||||
EOF
|
||||
cat > exit.c <<EOF
|
||||
$lu void _exit (int val) { _Sys_exit (val); /* Appease GCC: */ while (1) ; }
|
||||
EOF
|
||||
cat > fcntl.c <<EOF
|
||||
$lui _fcntl (int fd, int cmd, long arg${r}fcntl (fd, cmd, arg))
|
||||
EOF
|
||||
cat > fork.c <<EOF
|
||||
$lui _fork (void${r}fork ())
|
||||
EOF
|
||||
cat > fstat.c <<EOF
|
||||
$lu#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
int
|
||||
_fstat (int fd, struct stat *buf)
|
||||
{
|
||||
struct new_stat ks;
|
||||
int retval = _Sys_fstat (fd, &ks);
|
||||
|
||||
/* Blank before filling it in. */
|
||||
memset (buf, 0, sizeof (*buf));
|
||||
|
||||
/* We have to translate from the linux struct new_stat.
|
||||
It seems we don't have to translate the contents, though. */
|
||||
buf->st_dev = ks.st_dev;
|
||||
buf->st_ino = ks.st_ino;
|
||||
buf->st_mode = ks.st_mode;
|
||||
buf->st_nlink = ks.st_nlink;
|
||||
buf->st_uid = ks.st_uid;
|
||||
buf->st_gid = ks.st_gid;
|
||||
buf->st_rdev = ks.st_rdev;
|
||||
buf->st_size = ks.st_size;
|
||||
buf->st_blksize = ks.st_blksize;
|
||||
buf->st_blocks = ks.st_blocks;
|
||||
buf->st_atime = ks.st_atime;
|
||||
buf->st_mtime = ks.st_mtime;
|
||||
buf->st_ctime = ks.st_ctime;
|
||||
R (retval)
|
||||
EOF
|
||||
cat > getpid.c <<EOF
|
||||
$lui _getpid (void${r}getpid ())
|
||||
EOF
|
||||
cat > gettod.c <<EOF
|
||||
$lu#include <sys/time.h>
|
||||
#include <sys/times.h>
|
||||
int
|
||||
_gettimeofday (struct timeval *tp, struct timezone *tzp
|
||||
${r}gettimeofday (tp, tzp))
|
||||
EOF
|
||||
cat > isatty.c <<EOF
|
||||
$lu
|
||||
typedef unsigned int tcflag_t;
|
||||
typedef unsigned char cc_t;
|
||||
#define NCCS 19
|
||||
|
||||
struct termios {
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[NCCS]; /* control characters */
|
||||
};
|
||||
|
||||
/* From asm-etrax100/ioctls.h: beware of updates. */
|
||||
#define TCGETS 0x5401
|
||||
|
||||
/* Note that this name does not have a prepended underscore. */
|
||||
int
|
||||
isatty (int fd)
|
||||
{
|
||||
struct termios dummy;
|
||||
int save_errno = errno;
|
||||
int ret = _Sys_ioctl (fd, TCGETS, (unsigned long) &dummy);
|
||||
errno = save_errno;
|
||||
R (ret == 0)
|
||||
EOF
|
||||
cat > kill.c <<EOF
|
||||
$lui _kill (int pid, int sig${r}kill (pid, sig))
|
||||
EOF
|
||||
cat > link.c <<EOF
|
||||
$lui _link (const char *old, const char *new${r}link (old, new))
|
||||
EOF
|
||||
cat > lseek.c <<EOF
|
||||
$lui _lseek (int fd, int offset, int whence${r}lseek (fd, offset, whence))
|
||||
EOF
|
||||
cat > open.c <<EOF
|
||||
$lui _open (const char *fnam, int flags, int mode${r}open (fnam, flags, mode))
|
||||
EOF
|
||||
cat > read.c <<EOF
|
||||
$lui _read (int fd, char *buf, int nbytes${r}read (fd, buf, nbytes))
|
||||
EOF
|
||||
cat > rename.c <<EOF
|
||||
$lui _rename (const char *old, const char *new${r}rename (old, new))
|
||||
EOF
|
||||
cat > sbrk.c <<EOF
|
||||
$lu
|
||||
/* From asm-etrax100/mman.h: beware of updates. */
|
||||
#define PROT_READ 0x1 /* page can be read */
|
||||
#define PROT_WRITE 0x2 /* page can be written */
|
||||
#define MAP_ANONYMOUS 0x20 /* don't use a file */
|
||||
char *
|
||||
_sbrk (int d)
|
||||
{
|
||||
static long last_alloc = 0;
|
||||
|
||||
/* FIXME: Things are a whole lot different than elinux. */
|
||||
#ifdef __elinux__
|
||||
|
||||
/* We can't promise linear memory from a predetermined location.
|
||||
We're NO_MM. We're paria. We have to rely on tweaks and unclean
|
||||
behavior. We abuse the fact that the malloc function in newlib
|
||||
accepts nonlinear chunks in return to its sbrk calls (with a minor
|
||||
patch). */
|
||||
|
||||
/* We use an "old" type mmap, which takes a pointer to a vector of 6
|
||||
longs where the parameters are stored. */
|
||||
long buffer[6];
|
||||
|
||||
/* We can't return memory. Well we could, but we would have to keep a
|
||||
list of previous allocations. FIXME: Seems reasonable to do that
|
||||
later. */
|
||||
if (d < 0)
|
||||
return (char *) last_alloc;
|
||||
|
||||
buffer[3] = MAP_ANONYMOUS; /* Not associated with a file. */
|
||||
buffer[4] = -1; /* No file. */
|
||||
buffer[0] = 0; /* Address 0: let mmap pick one. */
|
||||
buffer[1] = d; /* Length. */
|
||||
buffer[2] = (PROT_READ | PROT_WRITE); /* Protection flags. */
|
||||
buffer[5] = 0; /* Offset into file. */
|
||||
|
||||
last_alloc = _Sys_mmap (buffer);
|
||||
|
||||
return (char *) last_alloc;
|
||||
|
||||
#else /* not __elinux__ */
|
||||
|
||||
long prev_brk;
|
||||
|
||||
if (last_alloc == 0)
|
||||
{
|
||||
last_alloc = _Sys_brk (0);
|
||||
|
||||
if (last_alloc < 0)
|
||||
return (char *) -1;
|
||||
}
|
||||
|
||||
prev_brk = last_alloc;
|
||||
|
||||
if (_Sys_brk (last_alloc + d) < last_alloc + d)
|
||||
return (char *) -1;
|
||||
|
||||
last_alloc += d;
|
||||
|
||||
return (char *) prev_brk;
|
||||
#endif
|
||||
}
|
||||
EOF
|
||||
cat > stat.c <<EOF
|
||||
$lu#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
int
|
||||
_stat (const char *path, struct stat *buf)
|
||||
{
|
||||
struct new_stat ks;
|
||||
int retval = _Sys_stat (path, &ks);
|
||||
|
||||
/* Blank before filling it in. */
|
||||
memset (buf, 0, sizeof (*buf));
|
||||
|
||||
/* We have to translate from the linux struct new_stat.
|
||||
It seems we don't have to translate the contents, though. */
|
||||
buf->st_dev = ks.st_dev;
|
||||
buf->st_ino = ks.st_ino;
|
||||
buf->st_mode = ks.st_mode;
|
||||
buf->st_nlink = ks.st_nlink;
|
||||
buf->st_uid = ks.st_uid;
|
||||
buf->st_gid = ks.st_gid;
|
||||
buf->st_rdev = ks.st_rdev;
|
||||
buf->st_size = ks.st_size;
|
||||
buf->st_blksize = ks.st_blksize;
|
||||
buf->st_blocks = ks.st_blocks;
|
||||
buf->st_atime = ks.st_atime;
|
||||
buf->st_mtime = ks.st_mtime;
|
||||
buf->st_ctime = ks.st_ctime;
|
||||
R (retval)
|
||||
EOF
|
||||
cat > times.c <<EOF
|
||||
$lu#include <sys/times.h>
|
||||
clock_t
|
||||
_times (struct tms * tp${r}times (tp))
|
||||
EOF
|
||||
cat > unlink.c <<EOF
|
||||
$lui _unlink (const char *f${r}unlink (f))
|
||||
EOF
|
||||
cat > wait.c <<EOF
|
||||
$lui _wait (int *status${r}wait4 (_getpid(), status, 0, 0))
|
||||
EOF
|
||||
cat > write.c <<EOF
|
||||
$lui _write (int fd, char *buf, int nbytes${r}write (fd, buf, nbytes))
|
||||
EOF
|
||||
exit 0
|
|
@ -0,0 +1,128 @@
|
|||
/* Support for cris*-axis-linux-gnu and src/sim/cris simulator.
|
||||
Copyright (C) 2000, 2001, 2002, 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. */
|
||||
|
||||
#include "linunistd.h"
|
||||
|
||||
extern void exit (int) __attribute ((__noreturn__));
|
||||
|
||||
__asm__ (".syntax no_register_prefix");
|
||||
|
||||
#ifdef __ELF__
|
||||
/* This simulator magic for an earlier simulator was supposed to be
|
||||
found two bytes before _start. Let's keep it for sake of
|
||||
compatibility. Trying to emit them with an ordinary const char[]
|
||||
and attribute section makes gcc barf; it doesn't like having the
|
||||
same section attribute for both code and data.
|
||||
The code is supposed to cause a crash if someone jumps to 0. */
|
||||
__asm__
|
||||
(
|
||||
" .section .startup,\"ax\",@progbits\n"
|
||||
" .byte 55,55\n"
|
||||
" move.d 0xbadacce5,r9\n"
|
||||
" clear.d [r9]\n"
|
||||
" setf\n"
|
||||
" setf\n"
|
||||
" .previous");
|
||||
#endif
|
||||
|
||||
__asm__
|
||||
(
|
||||
#ifdef __AOUT__
|
||||
" .text\n\t"
|
||||
#elif defined (__ELF__)
|
||||
" .section .startup,\"ax\",@progbits\n"
|
||||
#endif
|
||||
" .global __start\n"
|
||||
"__start:\n"
|
||||
/* SP must be set up by the simulator or the system. */
|
||||
|
||||
/* Find ARGC, ARGV and ENV. */
|
||||
/* ARGC. */
|
||||
" move.d [sp],r10\n"
|
||||
|
||||
/* ARGV. */
|
||||
" move.d sp,r11\n"
|
||||
" addq 4,r11\n"
|
||||
|
||||
/* ENVP. */
|
||||
" move.d sp,r12\n"
|
||||
" addi r10.d,r12\n"
|
||||
" addq 8,r12\n"
|
||||
|
||||
/* Terminate R9 and R6; we don't have a "console_print_etrax" or system
|
||||
call function. */
|
||||
" clear.d r9\n"
|
||||
" clear.d r6\n"
|
||||
" move.d __start1,r13\n"
|
||||
" jump r13\n"
|
||||
" setf\n"
|
||||
#ifndef __AOUT__
|
||||
/* We rely on a.out not being in .data here. Quite fragile, but
|
||||
covered by e.g. running the GCC test-suite for cris-unknown-aout. */
|
||||
" .previous"
|
||||
#endif
|
||||
);
|
||||
|
||||
extern void _Libctors (void);
|
||||
extern void _Libdtors (void);
|
||||
|
||||
extern void __init__start (void) __attribute ((weak));
|
||||
extern void __aout__ctors (void) __attribute ((weak));
|
||||
|
||||
static void start1 () __asm__ ("__start1") __attribute ((__used__));
|
||||
static void
|
||||
start1 (int argc, char **argv, char **env)
|
||||
{
|
||||
#ifdef __ELF__
|
||||
/* For ELF systems, we call _init and register _fini with atexit. */
|
||||
{
|
||||
extern void _init (void);
|
||||
extern void _fini (void);
|
||||
_init ();
|
||||
if (atexit (_fini) != 0)
|
||||
exit (-1);
|
||||
}
|
||||
#else
|
||||
/* Constructors which may get here through the ELF .init section, when
|
||||
linking ELF and producing a.out. */
|
||||
if (__init__start)
|
||||
__init__start ();
|
||||
|
||||
if (__aout__ctors)
|
||||
__aout__ctors ();
|
||||
|
||||
/* Call constructors in shared libraries. */
|
||||
_Libctors ();
|
||||
|
||||
if (atexit (_Libdtors) != 0)
|
||||
exit (-1);
|
||||
#endif
|
||||
|
||||
/* Call the user program. */
|
||||
exit (main (argc, argv, env));
|
||||
}
|
|
@ -0,0 +1,423 @@
|
|||
/* Support for syscalls for cris*-axis-linux-gnu and simulators
|
||||
Copyright (C) 1998-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. */
|
||||
|
||||
/* Derived from asm-etrax100/unistd.h with minor modifications to fit as
|
||||
LOSS for newlib. */
|
||||
|
||||
#ifndef _ASM_ELINUX_UNISTD_H_
|
||||
#define _ASM_ELINUX_UNISTD_H_
|
||||
|
||||
/* Our callers might want to use link_warning, so provide it from here. */
|
||||
#include "../libnosys/config.h"
|
||||
#include "libnosys/warning.h"
|
||||
|
||||
#include <errno.h>
|
||||
#undef errno
|
||||
extern int errno;
|
||||
|
||||
/*
|
||||
* This file contains the system call numbers, and stub macros for libc.
|
||||
*/
|
||||
|
||||
#define __NR_setup 0 /* used only by init, to get system going */
|
||||
#define __NR_exit 1
|
||||
#define __NR_fork 2
|
||||
#define __NR_read 3
|
||||
#define __NR_write 4
|
||||
#define __NR_open 5
|
||||
#define __NR_close 6
|
||||
#define __NR_waitpid 7
|
||||
#define __NR_creat 8
|
||||
#define __NR_link 9
|
||||
#define __NR_unlink 10
|
||||
#define __NR_execve 11
|
||||
#define __NR_chdir 12
|
||||
#define __NR_time 13
|
||||
#define __NR_mknod 14
|
||||
#define __NR_chmod 15
|
||||
#define __NR_chown 16
|
||||
#define __NR_break 17
|
||||
#define __NR_oldstat 18
|
||||
#define __NR_lseek 19
|
||||
#define __NR_getpid 20
|
||||
#define __NR_mount 21
|
||||
#define __NR_umount 22
|
||||
#define __NR_setuid 23
|
||||
#define __NR_getuid 24
|
||||
#define __NR_stime 25
|
||||
#define __NR_ptrace 26
|
||||
#define __NR_alarm 27
|
||||
#define __NR_oldfstat 28
|
||||
#define __NR_pause 29
|
||||
#define __NR_utime 30
|
||||
#define __NR_stty 31
|
||||
#define __NR_gtty 32
|
||||
#define __NR_access 33
|
||||
#define __NR_nice 34
|
||||
#define __NR_ftime 35
|
||||
#define __NR_sync 36
|
||||
#define __NR_kill 37
|
||||
#define __NR_rename 38
|
||||
#define __NR_mkdir 39
|
||||
#define __NR_rmdir 40
|
||||
#define __NR_dup 41
|
||||
#define __NR_pipe 42
|
||||
#define __NR_times 43
|
||||
#define __NR_prof 44
|
||||
#define __NR_brk 45
|
||||
#define __NR_setgid 46
|
||||
#define __NR_getgid 47
|
||||
#define __NR_signal 48
|
||||
#define __NR_geteuid 49
|
||||
#define __NR_getegid 50
|
||||
#define __NR_acct 51
|
||||
#define __NR_phys 52
|
||||
#define __NR_lock 53
|
||||
#define __NR_ioctl 54
|
||||
#define __NR_fcntl 55
|
||||
#define __NR_mpx 56
|
||||
#define __NR_setpgid 57
|
||||
#define __NR_ulimit 58
|
||||
#define __NR_oldolduname 59
|
||||
#define __NR_umask 60
|
||||
#define __NR_chroot 61
|
||||
#define __NR_ustat 62
|
||||
#define __NR_dup2 63
|
||||
#define __NR_getppid 64
|
||||
#define __NR_getpgrp 65
|
||||
#define __NR_setsid 66
|
||||
#define __NR_sigaction 67
|
||||
#define __NR_sgetmask 68
|
||||
#define __NR_ssetmask 69
|
||||
#define __NR_setreuid 70
|
||||
#define __NR_setregid 71
|
||||
#define __NR_sigsuspend 72
|
||||
#define __NR_sigpending 73
|
||||
#define __NR_sethostname 74
|
||||
#define __NR_setrlimit 75
|
||||
#define __NR_getrlimit 76
|
||||
#define __NR_getrusage 77
|
||||
#define __NR_gettimeofday 78
|
||||
#define __NR_settimeofday 79
|
||||
#define __NR_getgroups 80
|
||||
#define __NR_setgroups 81
|
||||
#define __NR_select 82
|
||||
#define __NR_symlink 83
|
||||
#define __NR_oldlstat 84
|
||||
#define __NR_readlink 85
|
||||
#define __NR_uselib 86
|
||||
#define __NR_swapon 87
|
||||
#define __NR_reboot 88
|
||||
#define __NR_readdir 89
|
||||
#define __NR_mmap 90
|
||||
#define __NR_munmap 91
|
||||
#define __NR_truncate 92
|
||||
#define __NR_ftruncate 93
|
||||
#define __NR_fchmod 94
|
||||
#define __NR_fchown 95
|
||||
#define __NR_getpriority 96
|
||||
#define __NR_setpriority 97
|
||||
#define __NR_profil 98
|
||||
#define __NR_statfs 99
|
||||
#define __NR_fstatfs 100
|
||||
#define __NR_ioperm 101
|
||||
#define __NR_socketcall 102
|
||||
#define __NR_syslog 103
|
||||
#define __NR_setitimer 104
|
||||
#define __NR_getitimer 105
|
||||
#define __NR_stat 106
|
||||
#define __NR_lstat 107
|
||||
#define __NR_fstat 108
|
||||
#define __NR_olduname 109
|
||||
#define __NR_iopl 110
|
||||
#define __NR_vhangup 111
|
||||
#define __NR_idle 112
|
||||
#define __NR_vm86 113
|
||||
#define __NR_wait4 114
|
||||
#define __NR_swapoff 115
|
||||
#define __NR_sysinfo 116
|
||||
#define __NR_ipc 117
|
||||
#define __NR_fsync 118
|
||||
#define __NR_sigreturn 119
|
||||
#define __NR_clone 120
|
||||
#define __NR_setdomainname 121
|
||||
#define __NR_uname 122
|
||||
#define __NR_modify_ldt 123
|
||||
#define __NR_adjtimex 124
|
||||
#define __NR_mprotect 125
|
||||
#define __NR_sigprocmask 126
|
||||
#define __NR_create_module 127
|
||||
#define __NR_init_module 128
|
||||
#define __NR_delete_module 129
|
||||
#define __NR_get_kernel_syms 130
|
||||
#define __NR_quotactl 131
|
||||
#define __NR_getpgid 132
|
||||
#define __NR_fchdir 133
|
||||
#define __NR_bdflush 134
|
||||
#define __NR_sysfs 135
|
||||
#define __NR_personality 136
|
||||
#define __NR_afs_syscall 137 /* Syscall for Andrew File System */
|
||||
#define __NR_setfsuid 138
|
||||
#define __NR_setfsgid 139
|
||||
#define __NR__llseek 140
|
||||
#define __NR_getdents 141
|
||||
#define __NR__newselect 142
|
||||
#define __NR_flock 143
|
||||
#define __NR_msync 144
|
||||
#define __NR_readv 145
|
||||
#define __NR_writev 146
|
||||
#define __NR_getsid 147
|
||||
#define __NR_fdatasync 148
|
||||
#define __NR__sysctl 149
|
||||
#define __NR_mlock 150
|
||||
#define __NR_munlock 151
|
||||
#define __NR_mlockall 152
|
||||
#define __NR_munlockall 153
|
||||
#define __NR_sched_setparam 154
|
||||
#define __NR_sched_getparam 155
|
||||
#define __NR_sched_setscheduler 156
|
||||
#define __NR_sched_getscheduler 157
|
||||
#define __NR_sched_yield 158
|
||||
#define __NR_sched_get_priority_max 159
|
||||
#define __NR_sched_get_priority_min 160
|
||||
#define __NR_sched_rr_get_interval 161
|
||||
#define __NR_nanosleep 162
|
||||
#define __NR_mremap 163
|
||||
|
||||
#define __NR_mmap2 192
|
||||
|
||||
#define PASTE(x,y) x##y
|
||||
#define XSTR(x) # x
|
||||
#define STR(x) XSTR (x)
|
||||
|
||||
#ifdef __elinux__
|
||||
# define CRIS_SYSCALL "jir .$System.call"
|
||||
# define CALLNO_REG r1
|
||||
# define ARG5_REG r0
|
||||
# define MOVE_ARG5 "move.d"
|
||||
# define COLON_ARG5_CLOBBER : "r0"
|
||||
#else
|
||||
# define CRIS_SYSCALL "break 13"
|
||||
# define CALLNO_REG r9
|
||||
# define ARG5_REG srp
|
||||
# define MOVE_ARG5 "move"
|
||||
# define COLON_ARG5_CLOBBER
|
||||
#endif
|
||||
|
||||
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
|
||||
#define _syscall0(type,name) \
|
||||
type PASTE(_Sys_,name) (void) \
|
||||
{ \
|
||||
register long __a __asm__ ("r10"); \
|
||||
register long __n_ __asm__ (STR (CALLNO_REG)) = (__NR_##name); \
|
||||
__asm__ __volatile__ (CRIS_SYSCALL \
|
||||
: "=r" (__a) \
|
||||
: "r" (__n_)); \
|
||||
if (__a >= 0) \
|
||||
return (type) __a; \
|
||||
errno = -__a; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define _syscall1(type,name,type1,arg1) \
|
||||
type PASTE(_Sys_,name) (type1 arg1) \
|
||||
{ \
|
||||
register long __a __asm__ ("r10") = (long) arg1; \
|
||||
register long __n_ __asm__ (STR (CALLNO_REG)) = (__NR_##name); \
|
||||
__asm__ __volatile__ (CRIS_SYSCALL \
|
||||
: "=r" (__a) \
|
||||
: "r" (__n_), "0" (__a)); \
|
||||
if (__a >= 0) \
|
||||
return (type) __a; \
|
||||
errno = -__a; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define _syscall2(type,name,type1,arg1,type2,arg2) \
|
||||
type PASTE(_Sys_,name) (type1 arg1,type2 arg2) \
|
||||
{ \
|
||||
register long __a __asm__ ("r10") = (long) arg1; \
|
||||
register long __b __asm__ ("r11") = (long) arg2; \
|
||||
register long __n_ __asm__ (STR (CALLNO_REG)) = (__NR_##name); \
|
||||
__asm__ __volatile__ (CRIS_SYSCALL \
|
||||
: "=r" (__a) \
|
||||
: "r" (__n_), "0" (__a), "r" (__b)); \
|
||||
if (__a >= 0) \
|
||||
return (type) __a; \
|
||||
errno = -__a; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
|
||||
type PASTE(_Sys_,name) (type1 arg1,type2 arg2,type3 arg3) \
|
||||
{ \
|
||||
register long __a __asm__ ("r10") = (long) arg1; \
|
||||
register long __b __asm__ ("r11") = (long) arg2; \
|
||||
register long __c __asm__ ("r12") = (long) arg3; \
|
||||
register long __n_ __asm__ (STR (CALLNO_REG)) = (__NR_##name); \
|
||||
__asm__ __volatile__ (CRIS_SYSCALL \
|
||||
: "=r" (__a) \
|
||||
: "r" (__n_), "0" (__a), "r" (__b), "r" (__c)); \
|
||||
if (__a >= 0) \
|
||||
return (type) __a; \
|
||||
errno = -__a; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
|
||||
type PASTE(_Sys_,name) (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
|
||||
{ \
|
||||
register long __a __asm__ ("r10") = (long) arg1; \
|
||||
register long __b __asm__ ("r11") = (long) arg2; \
|
||||
register long __c __asm__ ("r12") = (long) arg3; \
|
||||
register long __d __asm__ ("r13") = (long) arg4; \
|
||||
register long __n_ __asm__ (STR (CALLNO_REG)) = (__NR_##name); \
|
||||
__asm__ __volatile__ (CRIS_SYSCALL \
|
||||
: "=r" (__a) \
|
||||
: "r" (__n_), "0" (__a), "r" (__b), \
|
||||
"r" (__c), "r" (__d)); \
|
||||
if (__a >= 0) \
|
||||
return (type) __a; \
|
||||
errno = -__a; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
|
||||
type5,arg5) \
|
||||
type PASTE(_Sys_,name) (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
|
||||
{ \
|
||||
register long __a __asm__ ("r10") = (long) arg1; \
|
||||
register long __b __asm__ ("r11") = (long) arg2; \
|
||||
register long __c __asm__ ("r12") = (long) arg3; \
|
||||
register long __d __asm__ ("r13") = (long) arg4; \
|
||||
register long __n_ __asm__ (STR (CALLNO_REG)) = (__NR_##name); \
|
||||
__asm__ __volatile__ (MOVE_ARG5 " %6,$" STR (ARG5_REG) "\n\t" \
|
||||
CRIS_SYSCALL \
|
||||
: "=r" (__a) \
|
||||
: "r" (__n_), "0" (__a), "r" (__b), \
|
||||
"r" (__c), "r" (__d), "g" (arg5) \
|
||||
COLON_ARG5_CLOBBER); \
|
||||
if (__a >= 0) \
|
||||
return (type) __a; \
|
||||
errno = -__a; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
|
||||
type5,arg5,type6,arg6) \
|
||||
type PASTE(_Sys_,name) (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6) \
|
||||
{ \
|
||||
register long __a __asm__ ("r10") = (long) arg1; \
|
||||
register long __b __asm__ ("r11") = (long) arg2; \
|
||||
register long __c __asm__ ("r12") = (long) arg3; \
|
||||
register long __d __asm__ ("r13") = (long) arg4; \
|
||||
register long __n_ __asm__ (STR (CALLNO_REG)) = (__NR_##name); \
|
||||
__asm__ __volatile__ (MOVE_ARG5 " %6,$" STR (ARG5_REG) "\n\t" \
|
||||
"move %7,$mof\n\t" \
|
||||
CRIS_SYSCALL \
|
||||
: "=r" (__a) \
|
||||
: "r" (__n_), "0" (__a), "r" (__b), \
|
||||
"r" (__c), "r" (__d), "g" (arg5), "g" (arg6) \
|
||||
COLON_ARG5_CLOBBER); \
|
||||
if (__a >= 0) \
|
||||
return (type) __a; \
|
||||
errno = -__a; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define __NR__exit __NR_exit
|
||||
static inline _syscall0(int,idle)
|
||||
static inline _syscall0(int,fork)
|
||||
static inline _syscall2(int,clone,unsigned long,flags,char *,esp)
|
||||
static inline _syscall0(int,pause)
|
||||
static inline _syscall0(int,setup)
|
||||
static inline _syscall0(int,sync)
|
||||
static inline _syscall3(int,write,int,fd,const char *,buf,unsigned,count)
|
||||
static inline _syscall1(int,dup,int,fd)
|
||||
static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
|
||||
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
|
||||
static inline _syscall1(int,close,int,fd)
|
||||
static inline _syscall1(int,_exit,int,exitcode)
|
||||
static inline _syscall1(int,exit,int,exitcode)
|
||||
static inline _syscall3(int,waitpid,int,pid,int *,wait_stat,int,options)
|
||||
static inline _syscall3(int,read,int,fd,char *,buf,unsigned,count)
|
||||
static inline _syscall2(int,socketcall,int,call,unsigned long *,args)
|
||||
static inline _syscall3(int,ioctl,unsigned int,fd,unsigned int,cmd,unsigned long,arg)
|
||||
static inline _syscall3(int,fcntl,unsigned int,fd,unsigned int,cmd,unsigned long,arg)
|
||||
static inline _syscall5(int,mount,const char *,a,const char *,b,const char *,c,unsigned long,rwflag,const void *,data)
|
||||
static inline _syscall2(int,rename,const char *,a,const char*,b)
|
||||
|
||||
#ifndef __elinux__
|
||||
/* Make sure these are only used where they are supported. */
|
||||
static inline _syscall6(int,mmap2,unsigned long, addr, unsigned long, len,
|
||||
unsigned long, prot, unsigned long, flags,
|
||||
unsigned long, fd, unsigned long, pgoff)
|
||||
static inline _syscall1(long,brk,long,addr)
|
||||
#endif
|
||||
|
||||
/* This structure is ripped from asm-etrax100/stat.h: beware of updates. */
|
||||
struct new_stat {
|
||||
unsigned short st_dev;
|
||||
unsigned short __pad1;
|
||||
unsigned long st_ino;
|
||||
unsigned short st_mode;
|
||||
unsigned short st_nlink;
|
||||
unsigned short st_uid;
|
||||
unsigned short st_gid;
|
||||
unsigned short st_rdev;
|
||||
unsigned short __pad2;
|
||||
unsigned long st_size;
|
||||
unsigned long st_blksize;
|
||||
unsigned long st_blocks;
|
||||
unsigned long st_atime;
|
||||
unsigned long __unused1;
|
||||
unsigned long st_mtime;
|
||||
unsigned long __unused2;
|
||||
unsigned long st_ctime;
|
||||
unsigned long __unused3;
|
||||
unsigned long __unused4;
|
||||
unsigned long __unused5;
|
||||
};
|
||||
|
||||
static inline _syscall2(int,stat,const char *,path,struct new_stat *,statbuf)
|
||||
static inline _syscall2(int,fstat,int,fd,struct new_stat *,statbuf)
|
||||
static inline _syscall0(int,getpid)
|
||||
static inline _syscall2(int,kill,int,pid,int,sig)
|
||||
static inline _syscall3(int,lseek,int,fd,int,offset,int,whence)
|
||||
struct tms;
|
||||
static inline _syscall1(long,times,struct tms *,tbuf)
|
||||
static inline _syscall1(long,mmap,long *, buf)
|
||||
struct timeval;
|
||||
struct timezone;
|
||||
static inline _syscall2(int,gettimeofday,struct timeval *,tp,
|
||||
struct timezone *, tzp)
|
||||
static inline _syscall2(int,link,const char *,old,const char *,new)
|
||||
static inline _syscall1(int,unlink,const char *, f)
|
||||
struct rusage;
|
||||
static inline _syscall4(int,wait4,int,pid,int *,sa,int,op,struct rusage *,ru)
|
||||
#endif /* _ASM_ELINUX_UNISTD_H_ */
|
|
@ -0,0 +1,9 @@
|
|||
/* Low-level kind-of-support for CRIS. Mostly used as a placeholder
|
||||
function. Too small and obvious to warrant a copyright notice. */
|
||||
|
||||
#include <stdio.h>
|
||||
void
|
||||
outbyte (int ch)
|
||||
{
|
||||
write (1, &ch, 1);
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/* Support for standalone CRIS/CRISv32 code.
|
||||
Copyright (C) 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. */
|
||||
|
||||
.text
|
||||
.global __setup
|
||||
__setup:
|
||||
/* Make sure to save SRP. */
|
||||
#ifdef __arch_common_v10_v32
|
||||
/* Can't do anything if we don't know for which arch. This file is
|
||||
then only a placeholder. Oh, and we can't use the "ret" insn in
|
||||
"common" code. */
|
||||
#else
|
||||
/* Code missing:
|
||||
- Initialize RAM circuits.
|
||||
- Initialize serial output and input.
|
||||
- Set stack-pointer. */
|
||||
ret
|
||||
nop
|
||||
#endif
|
|
@ -755,6 +755,8 @@ case "${target}" in
|
|||
;;
|
||||
strongarm-*-*)
|
||||
;;
|
||||
cris-*-* | crisv32-*-*)
|
||||
;;
|
||||
d10v*)
|
||||
;;
|
||||
h8300*-*-*)
|
||||
|
@ -807,7 +809,7 @@ EOF
|
|||
|
||||
|
||||
echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
|
||||
echo "configure:811: checking for .previous assembler directive" >&5
|
||||
echo "configure:813: checking for .previous assembler directive" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -816,7 +818,7 @@ else
|
|||
.section foo_section
|
||||
.previous
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_asm_previous_directive=yes
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_ASM_PREVIOUS_DIRECTIVE 1
|
||||
|
@ -829,7 +831,7 @@ fi
|
|||
echo "$ac_t""$libc_cv_asm_previous_directive" 1>&6
|
||||
|
||||
echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
|
||||
echo "configure:833: checking for .popsection assembler directive" >&5
|
||||
echo "configure:835: checking for .popsection assembler directive" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -838,7 +840,7 @@ else
|
|||
.pushsection foo_section
|
||||
.popsection
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:842: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:844: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_asm_popsection_directive=yes
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_ASM_POPSECTION_DIRECTIVE 1
|
||||
|
@ -851,7 +853,7 @@ fi
|
|||
echo "$ac_t""$libc_cv_asm_popsection_directive" 1>&6
|
||||
|
||||
echo $ac_n "checking for section attributes""... $ac_c" 1>&6
|
||||
echo "configure:855: checking for section attributes" >&5
|
||||
echo "configure:857: checking for section attributes" >&5
|
||||
if eval "test \"`echo '$''{'libc_cv_section_attributes'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -860,7 +862,7 @@ else
|
|||
int secttest __attribute__ ((section (".gnu.warning.secttest"))) = 10;
|
||||
int main() {}
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.c 1>&5'; { (eval echo configure:864: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.c 1>&5'; { (eval echo configure:866: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
libc_cv_section_attributes=yes
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_SECTION_ATTRIBUTES 1
|
||||
|
@ -875,7 +877,7 @@ echo "$ac_t""$libc_cv_section_attributes" 1>&6
|
|||
esac
|
||||
|
||||
echo $ac_n "checking for symbol prefix""... $ac_c" 1>&6
|
||||
echo "configure:879: checking for symbol prefix" >&5
|
||||
echo "configure:881: checking for symbol prefix" >&5
|
||||
if eval "test \"`echo '$''{'libc_symbol_prefix'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -883,11 +885,11 @@ else
|
|||
foo () { }
|
||||
EOF
|
||||
libc_symbol_prefix=none
|
||||
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo" > /dev/null'; { (eval echo configure:887: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
||||
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo" > /dev/null'; { (eval echo configure:889: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
||||
then
|
||||
libc_symbol_prefix='$'
|
||||
else
|
||||
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "_foo" > /dev/null'; { (eval echo configure:891: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
||||
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "_foo" > /dev/null'; { (eval echo configure:893: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
||||
then
|
||||
libc_symbol_prefix=_
|
||||
fi
|
||||
|
@ -911,7 +913,7 @@ fi
|
|||
# Extract the first word of "gcc", so it can be a program name with args.
|
||||
set dummy gcc; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:915: checking for $ac_word" >&5
|
||||
echo "configure:917: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -941,7 +943,7 @@ if test -z "$CC"; then
|
|||
# Extract the first word of "cc", so it can be a program name with args.
|
||||
set dummy cc; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:945: checking for $ac_word" >&5
|
||||
echo "configure:947: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -990,7 +992,7 @@ fi
|
|||
fi
|
||||
|
||||
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
||||
echo "configure:994: checking whether we are using GNU C" >&5
|
||||
echo "configure:996: checking whether we are using GNU C" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -999,7 +1001,7 @@ else
|
|||
yes;
|
||||
#endif
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1003: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1005: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||
ac_cv_prog_gcc=yes
|
||||
else
|
||||
ac_cv_prog_gcc=no
|
||||
|
@ -1014,7 +1016,7 @@ if test $ac_cv_prog_gcc = yes; then
|
|||
ac_save_CFLAGS="$CFLAGS"
|
||||
CFLAGS=
|
||||
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
|
||||
echo "configure:1018: checking whether ${CC-cc} accepts -g" >&5
|
||||
echo "configure:1020: checking whether ${CC-cc} accepts -g" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1050,7 +1052,7 @@ LD=${LD-ld}
|
|||
# Extract the first word of "ranlib", so it can be a program name with args.
|
||||
set dummy ranlib; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1054: checking for $ac_word" >&5
|
||||
echo "configure:1056: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
|
|
@ -89,6 +89,8 @@ case "${target}" in
|
|||
;;
|
||||
strongarm-*-*)
|
||||
;;
|
||||
cris-*-* | crisv32-*-*)
|
||||
;;
|
||||
d10v*)
|
||||
;;
|
||||
h8300*-*-*)
|
||||
|
|
Loading…
Reference in New Issue