diff options
Diffstat (limited to 'libgloss/arm')
-rw-r--r-- | libgloss/arm/Makefile.in | 167 | ||||
-rw-r--r-- | libgloss/arm/coff-iq80310.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/coff-pid.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/coff-rdimon.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/coff-rdpmon.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/coff-redboot.ld | 54 | ||||
-rw-r--r-- | libgloss/arm/coff-redboot.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/configure | 1239 | ||||
-rw-r--r-- | libgloss/arm/configure.in | 117 | ||||
-rw-r--r-- | libgloss/arm/crt0.S | 397 | ||||
-rw-r--r-- | libgloss/arm/elf-iq80310.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/elf-pid.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/elf-rdimon.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/elf-rdpmon.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/elf-redboot.ld | 220 | ||||
-rw-r--r-- | libgloss/arm/elf-redboot.specs | 8 | ||||
-rw-r--r-- | libgloss/arm/libcfunc.c | 88 | ||||
-rw-r--r-- | libgloss/arm/redboot-crt0.S | 127 | ||||
-rw-r--r-- | libgloss/arm/redboot-syscalls.c | 284 | ||||
-rw-r--r-- | libgloss/arm/swi.h | 68 | ||||
-rw-r--r-- | libgloss/arm/syscall.h | 54 | ||||
-rw-r--r-- | libgloss/arm/syscalls.c | 663 | ||||
-rw-r--r-- | libgloss/arm/trap.S | 95 |
23 files changed, 0 insertions, 3653 deletions
diff --git a/libgloss/arm/Makefile.in b/libgloss/arm/Makefile.in deleted file mode 100644 index 436db13ed..000000000 --- a/libgloss/arm/Makefile.in +++ /dev/null @@ -1,167 +0,0 @@ -# -# -DESTDIR = -VPATH = @srcdir@ @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) - -objtype = @objtype@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTISRCTOP = -MULTIBUILDTOP = -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -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` - -@BUILD_CRT0_TRUE@CRT0 = crt0.o -@BUILD_CRT0_TRUE@CRT0_INSTALL = install-crt0 -@BUILD_CRT0_FALSE@CRT0 = -@BUILD_CRT0_FALSE@CRT0_INSTALL = - -REDBOOT_CRT0 = redboot-crt0.o -REDBOOT_OBJS = redboot-syscalls.o -REDBOOT_SCRIPTS = redboot.ld redboot.specs -REDBOOT_INSTALL = install-redboot - -RDPMON_CRT0 = rdpmon-crt0.o -RDPMON_BSP = librdpmon.a -RDPMON_OBJS = syscalls.o libcfunc.o trap.o -RDPMON_SCRIPTS = rdpmon.specs -RDPMON_INSTALL = install-rdpmon - -RDIMON_CRT0 = rdimon-crt0.o -RDIMON_BSP = librdimon.a -RDIMON_OBJS = rdimon-syscalls.o rdimon-libcfunc.o rdimon-trap.o -RDIMON_SCRIPTS = rdimon.specs -RDIMON_INSTALL = install-rdimon - -CFLAGS = -g - -# Here is all of the eval board stuff -PID_SCRIPTS = pid.specs -PID_INSTALL = install-pid - -IQ80310_SCRIPTS = iq80310.specs -IQ80310_INSTALL = install-iq80310 - - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# 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. -# -all: ${CRT0} ${REDBOOT_CRT0} ${REDBOOT_OBJS} ${RDPMON_CRT0} ${RDPMON_BSP} ${RDIMON_CRT0} ${RDIMON_BSP} - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: - -# -crt0.o: crt0.S -redboot-crt0.o: redboot-crt0.S -redboot-syscalls.o: redboot-syscalls.c $(srcdir)/../syscall.h - -rdpmon-crt0.o: crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDP_MONITOR -o $@ -c $< - -rdimon-crt0.o: crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-trap.o: trap.S - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-syscalls.o: syscalls.c - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-libcfunc.o: libcfunc.c - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -$(RDPMON_BSP): $(RDPMON_OBJS) - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - -$(RDIMON_BSP): $(RDIMON_OBJS) - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) $(IQ80310_BSP) - -distclean maintainer-clean realclean: clean - rm -f Makefile config.status *~ - -.PHONY: install info install-info clean-info -install: ${CRT0_INSTALL} ${REDBOOT_INSTALL} ${RDPMON_INSTALL} ${RDIMON_INSTALL} ${IQ80310_INSTALL} ${PID_INSTALL} - -install-crt0: - ${INSTALL_DATA} ${CRT0} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x - -install-redboot: - set -e; for x in ${REDBOOT_CRT0} ${REDBOOT_OBJS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${REDBOOT_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-rdpmon: - set -e; for x in ${RDPMON_CRT0} ${RDPMON_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${RDPMON_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-rdimon: - set -e; for x in ${RDIMON_CRT0} ${RDIMON_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${RDIMON_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - - -install-pid: - set -e; for x in ${PID_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-iq80310: - set -e; for x in ${IQ80310_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - - -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 diff --git a/libgloss/arm/coff-iq80310.specs b/libgloss/arm/coff-iq80310.specs deleted file mode 100644 index 2cd2d8704..000000000 --- a/libgloss/arm/coff-iq80310.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: --T redboot.ld%s -Ttext 0xA0020000 %(old_link) - -*startfile: -%{!pg:redboot-crt0%O%s} %{pg:redboot-crt0%O%s} redboot-syscalls%O%s - diff --git a/libgloss/arm/coff-pid.specs b/libgloss/arm/coff-pid.specs deleted file mode 100644 index 61bec3e1e..000000000 --- a/libgloss/arm/coff-pid.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: --T redboot.ld%s -Ttext 0x10000 %(old_link) - -*startfile: -redboot-crt0%O%s redboot-syscalls%O%s - diff --git a/libgloss/arm/coff-rdimon.specs b/libgloss/arm/coff-rdimon.specs deleted file mode 100644 index ace550614..000000000 --- a/libgloss/arm/coff-rdimon.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: -%(old_link) -lrdimon - -*startfile: -rdimon-crt0%O%s - diff --git a/libgloss/arm/coff-rdpmon.specs b/libgloss/arm/coff-rdpmon.specs deleted file mode 100644 index 661461229..000000000 --- a/libgloss/arm/coff-rdpmon.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: -%(old_link) -lrdpmon - -*startfile: -rdpmon-crt0%O%s - diff --git a/libgloss/arm/coff-redboot.ld b/libgloss/arm/coff-redboot.ld deleted file mode 100644 index 0c33c3b94..000000000 --- a/libgloss/arm/coff-redboot.ld +++ /dev/null @@ -1,54 +0,0 @@ -OUTPUT_FORMAT("coff-arm-little", "coff-arm-big", "coff-arm-little") - SEARCH_DIR(/toolbin/xscale-coff/lib); -ENTRY(_start) -SECTIONS -{ - /* We start at 0x8000 because gdb assumes it (see FRAME_CHAIN). - This is an artifact of the ARM Demon monitor using the bottom 32k - as workspace (shared with the FP instruction emulator if - present): */ - .text 0x8000 : { - *(.init) - *(.text*) - *(.glue_7t) - *(.glue_7) - *(.rdata) - ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; - LONG (-1); *(.ctors); *(.ctor); LONG (0); - ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; - LONG (-1); *(.dtors); *(.dtor); LONG (0); - *(.fini) - etext = .; - _etext = .; - } - .data 0x40000 + (. & 0xfffc0fff) : { - __data_start__ = . ; - *(.data*) - *(.gcc_exc*) - ___EH_FRAME_BEGIN__ = . ; - *(.eh_fram*) - ___EH_FRAME_END__ = . ; - LONG(0); - __data_end__ = . ; - edata = .; - _edata = .; - } - .bss SIZEOF(.data) + ADDR(.data) : - { - __bss_start__ = . ; - *(.bss) - *(COMMON) - __bss_end__ = . ; - } - end = .; - _end = .; - __end__ = .; - .stab 0 (NOLOAD) : - { - [ .stab ] - } - .stabstr 0 (NOLOAD) : - { - [ .stabstr ] - } -} diff --git a/libgloss/arm/coff-redboot.specs b/libgloss/arm/coff-redboot.specs deleted file mode 100644 index 21977617c..000000000 --- a/libgloss/arm/coff-redboot.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: --T redboot.ld%s -Ttext 0x20000 %(old_link) - -*startfile: -redboot-crt0%O%s redboot-syscalls%O%s - diff --git a/libgloss/arm/configure b/libgloss/arm/configure deleted file mode 100644 index 47d91ec30..000000000 --- a/libgloss/arm/configure +++ /dev/null @@ -1,1239 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: -ac_help="$ac_help - --disable-newlib-supplied-syscalls disable newlib from supplying syscalls" - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.13" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=redboot-crt0.S - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -ac_exeext= -ac_objext=o -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - - -# Check whether --enable-newlib-supplied-syscalls or --disable-newlib-supplied-syscalls was given. -if test "${enable_newlib_supplied_syscalls+set}" = set; then - enableval="$enable_newlib_supplied_syscalls" - case "${enableval}" in - yes) newlib_may_supply_syscalls=yes ;; - no) newlib_may_supply_syscalls=no ;; - *) { echo "configure: error: bad value ${enableval} for newlib-supplied-syscalls option" 1>&2; exit 1; } ;; - esac -else - newlib_may_supply_syscalls=yes -fi - -if test "x$newlib_may_supply_syscalls" = "xyes"; then - BUILD_CRT0_TRUE='#' - BUILD_CRT0_FALSE= -else - BUILD_CRT0_TRUE= - BUILD_CRT0_FALSE='#' -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_aux_dir= -for ac_dir in $libgloss_topdir $srcdir/$libgloss_topdir; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $libgloss_topdir $srcdir/$libgloss_topdir" 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - - - -# Do some error checking and defaulting for the host and target type. -# The inputs are: -# configure --host=HOST --target=TARGET --build=BUILD NONOPT -# -# The rules are: -# 1. You are not allowed to specify --host, --target, and nonopt at the -# same time. -# 2. Host defaults to nonopt. -# 3. If nonopt is not specified, then host defaults to the current host, -# as determined by config.guess. -# 4. Target and build default to nonopt. -# 5. If nonopt is not specified, then target and build default to host. - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -case $host---$target---$nonopt in -NONE---*---* | *---NONE---* | *---*---NONE) ;; -*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; -esac - - -# Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } -fi - -echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:608: checking host system type" >&5 - -host_alias=$host -case "$host_alias" in -NONE) - case $nonopt in - NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : - else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } - fi ;; - *) host_alias=$nonopt ;; - esac ;; -esac - -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$host" 1>&6 - -echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:629: checking target system type" >&5 - -target_alias=$target -case "$target_alias" in -NONE) - case $nonopt in - NONE) target_alias=$host_alias ;; - *) target_alias=$nonopt ;; - esac ;; -esac - -target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` -target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$target" 1>&6 - -echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:647: checking build system type" >&5 - -build_alias=$build -case "$build_alias" in -NONE) - case $nonopt in - NONE) build_alias=$host_alias ;; - *) build_alias=$nonopt ;; - esac ;; -esac - -build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` -build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$build" 1>&6 - -test "$host_alias" != "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -if test "$program_transform_name" = s,x,x,; then - program_transform_name= -else - # Double any \ or $. echo might interpret backslashes. - cat <<\EOF_SED > conftestsed -s,\\,\\\\,g; s,\$,$$,g -EOF_SED - program_transform_name="`echo $program_transform_name|sed -f conftestsed`" - rm -f conftestsed -fi -test "$program_prefix" != NONE && - program_transform_name="s,^,${program_prefix},; $program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" - -# sed with no file args requires a program. -test "$program_transform_name" = "" && program_transform_name="s,x,x," - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:701: checking for a BSD compatible install" >&5 -if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ac_t""$INSTALL" 1>&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - -# 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. - - - -# 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:765: 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 - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -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:795: 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 - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_prog_rejected=no - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:844: 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 - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:853: \"$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 -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 - -if test $ac_cv_prog_gcc = yes; then - GCC=yes - ac_test_CFLAGS="${CFLAGS+set}" - ac_save_CFLAGS="$CFLAGS" - CFLAGS= - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:868: 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 - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_cc_g=yes -else - ac_cv_prog_cc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 - 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 - -AS=${AS-as} - -AR=${AR-ar} - -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:904: 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 - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - -case "${target}" in - *-*-elf | *-*-eabi) - objtype=elf- - ;; - *-*-coff) - objtype=coff- - ;; -esac - - - -host_makefile_frag=${srcdir}/../config/default.mh - -host_makefile_frag_path=$host_makefile_frag - - - -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -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. -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. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.13" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@SHELL@%$SHELL%g -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@FFLAGS@%$FFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@BUILD_CRT0_TRUE@%$BUILD_CRT0_TRUE%g -s%@BUILD_CRT0_FALSE@%$BUILD_CRT0_FALSE%g -s%@host@%$host%g -s%@host_alias@%$host_alias%g -s%@host_cpu@%$host_cpu%g -s%@host_vendor@%$host_vendor%g -s%@host_os@%$host_os%g -s%@target@%$target%g -s%@target_alias@%$target_alias%g -s%@target_cpu@%$target_cpu%g -s%@target_vendor@%$target_vendor%g -s%@target_os@%$target_os%g -s%@build@%$build%g -s%@build_alias@%$build_alias%g -s%@build_cpu@%$build_cpu%g -s%@build_vendor@%$build_vendor%g -s%@build_os@%$build_os%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@CC@%$CC%g -s%@AS@%$AS%g -s%@AR@%$AR%g -s%@LD@%$LD%g -s%@RANLIB@%$RANLIB%g -s%@objtype@%$objtype%g -s%@host_makefile_frag_path@%$host_makefile_frag_path%g -/@host_makefile_frag@/r $host_makefile_frag -s%@host_makefile_frag@%%g - -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - case "$ac_given_INSTALL" in - [/$]*) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* - -EOF -cat >> $CONFIG_STATUS <<EOF -srcdir=${srcdir} -target=${target} -ac_configure_args="${ac_configure_args} --enable-multilib" -CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -libgloss_topdir=${libgloss_topdir} - -EOF -cat >> $CONFIG_STATUS <<\EOF -. ${libgloss_topdir}/config-ml.in -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - - diff --git a/libgloss/arm/configure.in b/libgloss/arm/configure.in deleted file mode 100644 index 71595998a..000000000 --- a/libgloss/arm/configure.in +++ /dev/null @@ -1,117 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_PREREQ(2.5)dnl -AC_INIT(redboot-crt0.S) - -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 - -if test "x$newlib_may_supply_syscalls" = "xyes"; then - BUILD_CRT0_TRUE='#' - BUILD_CRT0_FALSE= -else - BUILD_CRT0_TRUE= - BUILD_CRT0_FALSE='#' -fi - -AC_SUBST(BUILD_CRT0_TRUE) -AC_SUBST(BUILD_CRT0_FALSE) - -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 - -case "${target}" in - *-*-elf | *-*-eabi) - objtype=elf- - ;; - *-*-coff) - objtype=coff- - ;; -esac - -AC_SUBST(objtype) - -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} -) - diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S deleted file mode 100644 index 823f409a4..000000000 --- a/libgloss/arm/crt0.S +++ /dev/null @@ -1,397 +0,0 @@ -#include "newlib.h" -#include "swi.h" - -/* ANSI concatenation macros. */ -#define CONCAT(a, b) CONCAT2(a, b) -#define CONCAT2(a, b) a ## b - -#ifdef __USER_LABEL_PREFIX__ -#define FUNCTION( name ) CONCAT (__USER_LABEL_PREFIX__, name) -#else -#error __USER_LABEL_PREFIX is not defined -#endif - -#ifdef HAVE_INITFINI_ARRAY -#define _init __libc_init_array -#define _fini __libc_fini_array -#endif - -/* .text is used instead of .section .text so it works with arm-aout too. */ - .text -#if defined(__thumb2__) - .syntax unified - .thumb -.macro FUNC_START name - .global \name - .thumb_func -\name: -.endm -#else - .code 32 -.macro FUNC_START name - .global \name -\name: -.endm -#endif - .align 0 - - FUNC_START _mainCRTStartup - FUNC_START _start - FUNC_START start -#if defined(__ELF__) && !defined(__USING_SJLJ_EXCEPTIONS__) - /* Annotation for EABI unwinding tables. */ - .fnstart -#endif - -/* Start by setting up a stack */ -#ifdef ARM_RDP_MONITOR - /* Issue Demon SWI to read stack info */ - swi SWI_GetEnv /* Returns command line in r0 */ - mov sp,r1 /* and the highest memory address in r1 */ - ldr sl, .LC2 /* stack limit is at end of data */ - add sl, sl, #256 /* allow slop for stack overflow handling */ - /* and small frames */ -#else -#ifdef ARM_RDI_MONITOR - /* Issue Angel SWI to read stack info */ - mov r0, #AngelSWI_Reason_HeapInfo - adr r1, .LC0 /* point at ptr to 4 words to receive data */ -#if defined(__thumb2__) - bkpt AngelSWI -#else - /* We are always in ARM mode for startup */ - AngelSWIAsm AngelSWI_ARM -#endif - ldr r0, .LC0 /* point at values read */ - ldr sp, [r0, #8] - ldr sl, [r0, #12] - add sl, sl, #256 /* allow slop for stack overflow handling */ - /* and small frames */ -#else - /* Set up the stack pointer to a fixed value */ - /* Changes by toralf: - - Allow linker script to provide stack via __stack symbol - see - defintion of .Lstack - - Provide "hooks" that may be used by the application to add - custom init code - see .Lhwinit and .Lswinit - - Go through all execution modes and set up stack for each of them. - Loosely based on init.s from ARM/Motorola example code. - Note: Mode switch via CPSR is not allowed once in non-privileged - mode, so we take care not to enter "User" to set up its sp, - and also skip most operations if already in that mode. */ - - ldr r3, .Lstack - cmp r3, #0 - ldreq r3, .LC0 - /* Note: This 'mov' is essential when starting in User, and ensures we - always get *some* sp value for the initial mode, even if we - have somehow missed it below (in which case it gets the same - value as FIQ - not ideal, but better than nothing.) */ - mov sp, r3 - mrs r2, CPSR - tst r2, #0x0F /* Test mode bits - in User of all are 0 */ - beq .LC23 /* "eq" means r2 AND #0x0F is 0 */ - msr CPSR_c, #0xD1 /* FIRQ mode, interrupts disabled */ - mov sp, r3 - sub sl, sp, #0x1000 /* This mode also has its own sl (see below) */ - - mov r3, sl - msr CPSR_c, #0xD7 /* Abort mode, interrupts disabled */ - mov sp, r3 - sub r3, r3, #0x1000 - - msr CPSR_c, #0xDB /* Undefined mode, interrupts disabled */ - mov sp, r3 - sub r3, r3, #0x1000 - - msr CPSR_c, #0xD2 /* IRQ mode, interrupts disabled */ - mov sp, r3 - sub r3, r3, #0x2000 - - msr CPSR_c, #0xD3 /* Supervisory mode, interrupts disabled */ - mov sp, r3 - sub r3, r3, #0x8000 /* Min size 32k */ - bic r3, r3, #0x00FF /* Align with current 64k block */ - bic r3, r3, #0xFF00 - - str r3, [r3, #-4] /* Move value into user mode sp without */ - ldmdb r3, {sp}^ /* changing modes, via '^' form of ldm */ - - orr r2, r2, #0xC0 /* Back to original mode, presumably SVC, */ - msr CPSR_c, r2 /* with FIQ/IRQ disable bits forced to 1 */ -.LC23: - /* Setup a default stack-limit in-case the code has been - compiled with "-mapcs-stack-check". Hard-wiring this value - is not ideal, since there is currently no support for - checking that the heap and stack have not collided, or that - this default 64k is enough for the program being executed. - However, it ensures that this simple crt0 world will not - immediately cause an overflow event: */ - sub sl, r3, #64 << 10 /* Still assumes 256bytes below sl */ -#endif -#endif - /* Zero the memory in the .bss section. */ - mov a2, #0 /* Second arg: fill value */ - mov fp, a2 /* Null frame pointer */ - mov r7, a2 /* Null frame pointer for Thumb */ - - ldr a1, .LC1 /* First arg: start of memory block */ - ldr a3, .LC2 - sub a3, a3, a1 /* Third arg: length of block */ - - -#if defined(__thumb__) && !defined(__thumb2__) - /* Enter Thumb mode.... */ - add a4, pc, #1 /* Get the address of the Thumb block */ - bx a4 /* Go there and start Thumb decoding */ - - .code 16 - .global __change_mode - .thumb_func -__change_mode: -#endif - - bl FUNCTION (memset) -#if !defined (ARM_RDP_MONITOR) && !defined (ARM_RDI_MONITOR) -/* Changes by toralf: Taken from libgloss/m68k/crt0.S - * initialize target specific stuff. Only execute these - * functions it they exist. - */ - ldr r3, .Lhwinit - cmp r3, #0 - beq .LC24 - mov lr, pc - mov pc, r3 -.LC24: - ldr r3, .Lswinit - cmp r3, #0 - beq .LC25 - mov lr, pc - mov pc, r3 -.LC25: - mov r0, #0 /* no arguments */ - mov r1, #0 /* no argv either */ -#else - /* Need to set up standard file handles */ - bl FUNCTION (initialise_monitor_handles) - -#ifdef ARM_RDP_MONITOR - swi SWI_GetEnv /* sets r0 to point to the command line */ - mov r1, r0 -#else - mov r0, #AngelSWI_Reason_GetCmdLine - adr r1, .LC30 /* Space for command line */ - AngelSWIAsm AngelSWI - ldr r1, .LC30 -#endif - /* Parse string at r1 */ - mov r0, #0 /* count of arguments so far */ - /* Push a NULL argument onto the end of the list. */ -#ifdef __thumb__ - push {r0} -#else - stmfd sp!, {r0} -#endif -.LC10: -/* Skip leading blanks */ -#ifdef __thumb__ - ldrb r3, [r1] - add r1, #1 -#else - ldrb r3, [r1], #1 -#endif - cmp r3, #0 - beq .LC12 - cmp r3, #' ' - beq .LC10 - -/* See whether we are scanning a string */ - cmp r3, #'"' -#ifdef __thumb__ - beq .LC20 - cmp r3, #'\'' - bne .LC21 -.LC20: - mov r2, r3 - b .LC22 - -.LC21: - mov r2, #' ' /* terminator type */ - sub r1, r1, #1 /* adjust back to point at start char */ -.LC22: -#else - cmpne r3, #'\'' - moveq r2, r3 - movne r2, #' ' /* terminator type */ - subne r1, r1, #1 /* adjust back to point at start char */ -#endif - -/* Stack a pointer to the current argument */ -#ifdef __thumb__ - push {r1} -#else - stmfd sp!, {r1} -#endif - add r0, r0, #1 -.LC11: -#ifdef __thumb__ - ldrb r3, [r1] - add r1, #1 -#else - ldrb r3, [r1], #1 -#endif - cmp r3, #0 - beq .LC12 - cmp r2, r3 /* reached terminator? */ - bne .LC11 - mov r2, #0 - sub r3, r1, #1 - strb r2, [r3] /* terminate the arg string */ - b .LC10 - -.LC12: - mov r1, sp /* point at stacked arg pointers */ - /* We've now got the stacked args in order reverse the */ -#ifdef __thumb__ - mov r2, r0 - lsl r2, #2 - add r2, sp - mov r3, sp -.LC15: cmp r2, r3 - bls .LC14 - sub r2, #4 - ldr r4, [r2] - ldr r5, [r3] - str r5, [r2] - str r4, [r3] - add r3, #4 - b .LC15 -.LC14: - /* Ensure doubleword stack alignment. */ - mov r4, sp - mov r5, #7 - bic r4, r5 - mov sp, r4 -#else - add r2, sp, r0, LSL #2 /* End of args */ - mov r3, sp /* Start of args */ -.LC13: cmp r2, r3 - ldrhi r4,[r2, #-4] /* Reverse ends of list */ - ldrhi r5, [r3] - strhi r5, [r2, #-4]! - strhi r4, [r3], #4 - bhi .LC13 - /* Ensure doubleword stack alignment. */ - bic sp, sp, #7 -#endif -#endif - -#ifdef __USES_INITFINI__ - /* Some arm/elf targets use the .init and .fini sections - to create constructors and destructors, and for these - targets we need to call the _init function and arrange - for _fini to be called at program exit. */ - mov r4, r0 - mov r5, r1 - ldr r0, .Lfini - bl FUNCTION (atexit) - bl FUNCTION (_init) - mov r0, r4 - mov r1, r5 -#endif - bl FUNCTION (main) - - bl FUNCTION (exit) /* Should not return. */ - -#if defined(__thumb__) && !defined(__thumb2__) - /* Come out of Thumb mode. This code should be redundant. */ - - mov a4, pc - bx a4 - - .code 32 - .global change_back -change_back: - /* Halt the execution. This code should never be executed. */ - /* With no debug monitor, this probably aborts (eventually). - With a Demon debug monitor, this halts cleanly. - With an Angel debug monitor, this will report 'Unknown SWI'. */ - swi SWI_Exit -#endif - - /* For Thumb, constants must be after the code since only - positive offsets are supported for PC relative addresses. */ - - .align 0 -.LC0: -#ifdef ARM_RDI_MONITOR - .word HeapBase -#else -#ifndef ARM_RDP_MONITOR - /* Changes by toralf: Provide alternative "stack" variable whose value - may be defined externally; .Lstack will be used instead of .LC0 if - it points to a non-0 value. Also set up references to "hooks" that - may be used by the application to provide additional init code. */ - -#ifdef __pe__ - .word 0x800000 -#else - .word 0x80000 /* Top of RAM on the PIE board. */ -#endif -.Lstack: - .word __stack -.Lhwinit: - .word FUNCTION (hardware_init_hook) -.Lswinit: - .word FUNCTION (software_init_hook) - - /* Set up defaults for the above variables in the form of weak symbols - - so that application will link correctly, and get value 0 in - runtime (meaning "ignore setting") for the variables, when the user - does not provide the symbols. (The linker uses a weak symbol if, - and only if, a normal version of the same symbol isn't provided - e.g. by a linker script or another object file.) */ - - .set __stack, 0 - .set FUNCTION (hardware_init_hook), 0 - .set FUNCTION (software_init_hook), 0 - - .weak __stack - .weak FUNCTION (hardware_init_hook) - .weak FUNCTION (software_init_hook) -#endif - -#endif -#if defined(__ELF__) && !defined(__USING_SJLJ_EXCEPTIONS__) - /* Protect against unhandled exceptions. */ - .cantunwind - .fnend -#endif -.LC1: - .word __bss_start__ -.LC2: - .word __bss_end__ -#ifdef __USES_INITFINI__ -.Lfini: - .word FUNCTION(_fini) -#endif -#ifdef ARM_RDI_MONITOR -.LC30: - .word CommandLine - .word 255 - -/* Workspace for Angel calls. */ - .data -/* Data returned by monitor SWI. */ -.global __stack_base__ -HeapBase: .word 0 -HeapLimit: .word 0 -__stack_base__: .word 0 -StackLimit: .word 0 -CommandLine: .space 256,0 /* Maximum length of 255 chars handled. */ -#endif - -#ifdef __pe__ - .section .idata$3 - .long 0,0,0,0,0,0,0,0 -#endif diff --git a/libgloss/arm/elf-iq80310.specs b/libgloss/arm/elf-iq80310.specs deleted file mode 100644 index a016e887f..000000000 --- a/libgloss/arm/elf-iq80310.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: --T redboot.ld%s -Ttext 0xA0020000 %(old_link) - -*startfile: -crti%O%s crtbegin%O%s %{!pg:redboot-crt0%O%s} %{pg:redboot-crt0%O%s} redboot-syscalls%O%s - diff --git a/libgloss/arm/elf-pid.specs b/libgloss/arm/elf-pid.specs deleted file mode 100644 index c8a9f14c9..000000000 --- a/libgloss/arm/elf-pid.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: --T redboot.ld%s -Ttext 0x10000 %(old_link) - -*startfile: -crti%O%s crtbegin%O%s %{!pg:redboot-crt0%O%s} %{pg:redboot-crt0%O%s} redboot-syscalls%O%s - diff --git a/libgloss/arm/elf-rdimon.specs b/libgloss/arm/elf-rdimon.specs deleted file mode 100644 index 153cf0c1c..000000000 --- a/libgloss/arm/elf-rdimon.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: -%(old_link) -lrdimon - -*startfile: -crti%O%s crtbegin%O%s %{!pg:rdimon-crt0%O%s} %{pg:rdimon-crt0%O%s} - diff --git a/libgloss/arm/elf-rdpmon.specs b/libgloss/arm/elf-rdpmon.specs deleted file mode 100644 index 903db1fb1..000000000 --- a/libgloss/arm/elf-rdpmon.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: -%(old_link) -lrdpmon - -*startfile: -crti%O%s crtbegin%O%s %{!pg:rdpmon-crt0%O%s} %{pg:rdpmon-crt0%O%s} - diff --git a/libgloss/arm/elf-redboot.ld b/libgloss/arm/elf-redboot.ld deleted file mode 100644 index 3d1f8d806..000000000 --- a/libgloss/arm/elf-redboot.ld +++ /dev/null @@ -1,220 +0,0 @@ -OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", - "elf32-littlearm") -OUTPUT_ARCH(arm) -ENTRY(_start) -/* Do we need any of these for elf? - __DYNAMIC = 0; */ -SECTIONS -{ - /* Read-only sections, merged into text segment: */ - . = 0x00020000; - .interp : { *(.interp) } - .hash : { *(.hash) } - .dynsym : { *(.dynsym) } - .dynstr : { *(.dynstr) } - .gnu.version : { *(.gnu.version) } - .gnu.version_d : { *(.gnu.version_d) } - .gnu.version_r : { *(.gnu.version_r) } - .rel.init : { *(.rel.init) } - .rela.init : { *(.rela.init) } - .rel.text : - { - *(.rel.text) - *(.rel.text.*) - *(.rel.gnu.linkonce.t*) - } - .rela.text : - { - *(.rela.text) - *(.rela.text.*) - *(.rela.gnu.linkonce.t*) - } - .rel.fini : { *(.rel.fini) } - .rela.fini : { *(.rela.fini) } - .rel.rodata : - { - *(.rel.rodata) - *(.rel.rodata.*) - *(.rel.gnu.linkonce.r*) - } - .rela.rodata : - { - *(.rela.rodata) - *(.rela.rodata.*) - *(.rela.gnu.linkonce.r*) - } - .rel.data : - { - *(.rel.data) - *(.rel.data.*) - *(.rel.gnu.linkonce.d*) - } - .rela.data : - { - *(.rela.data) - *(.rela.data.*) - *(.rela.gnu.linkonce.d*) - } - .rel.ctors : { *(.rel.ctors) } - .rela.ctors : { *(.rela.ctors) } - .rel.dtors : { *(.rel.dtors) } - .rela.dtors : { *(.rela.dtors) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.sdata : - { - *(.rel.sdata) - *(.rel.sdata.*) - *(.rel.gnu.linkonce.s*) - } - .rela.sdata : - { - *(.rela.sdata) - *(.rela.sdata.*) - *(.rela.gnu.linkonce.s*) - } - .rel.sbss : { *(.rel.sbss) } - .rela.sbss : { *(.rela.sbss) } - .rel.bss : { *(.rel.bss) } - .rela.bss : { *(.rela.bss) } - .rel.plt : { *(.rel.plt) } - .rela.plt : { *(.rela.plt) } - .plt : { *(.plt) } - .text : - { - *(.text) - *(.text.*) - *(.stub) - /* .gnu.warning sections are handled specially by elf32.em. */ - *(.gnu.warning) - *(.gnu.linkonce.t*) - *(.glue_7t) *(.glue_7) - } =0 - .init : - { - KEEP (*(.init)) - } =0 - _etext = .; - PROVIDE (etext = .); - .fini : - { - KEEP (*(.fini)) - } =0 - .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) } - .rodata1 : { *(.rodata1) } - .eh_frame_hdr : { *(.eh_frame_hdr) } - /* Adjust the address for the data segment. We want to adjust up to - the same address within the page on the next page up. */ - . = ALIGN(256) + (. & (256 - 1)); - .data : - { - *(.data) - *(.data.*) - *(.gnu.linkonce.d*) - SORT(CONSTRUCTORS) - } - .data1 : { *(.data1) } - .eh_frame : { KEEP (*(.eh_frame)) } - .gcc_except_table : { *(.gcc_except_table) } - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - /* We don't want to include the .ctor section from - from the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } - .jcr : { KEEP (*(.jcr)) } - .got : { *(.got.plt) *(.got) } - .dynamic : { *(.dynamic) } - /* We want the small data sections together, so single-instruction offsets - can access them all, and initialized data all before uninitialized, so - we can shorten the on-disk segment size. */ - .sdata : - { - *(.sdata) - *(.sdata.*) - *(.gnu.linkonce.s.*) - } - _edata = .; - PROVIDE (edata = .); - __bss_start = .; - __bss_start__ = .; - .sbss : - { - *(.dynsbss) - *(.sbss) - *(.sbss.*) - *(.scommon) - } - .bss : - { - *(.dynbss) - *(.bss) - *(.bss.*) - *(COMMON) - /* Align here to ensure that the .bss section occupies space up to - _end. Align after .bss to ensure correct alignment even if the - .bss section disappears because there are no input sections. */ - . = ALIGN(32 / 8); - } - . = ALIGN(32 / 8); - _end = .; - _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; - PROVIDE (end = .); - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - .debug_ranges 0 : { *(.debug_ranges) } - /* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } - .stack 0x80000 : { _stack = .; *(.stack) } - /* These must appear regardless of . */ -} diff --git a/libgloss/arm/elf-redboot.specs b/libgloss/arm/elf-redboot.specs deleted file mode 100644 index 8a00c3b6d..000000000 --- a/libgloss/arm/elf-redboot.specs +++ /dev/null @@ -1,8 +0,0 @@ -%rename link old_link - -*link: --T redboot.ld%s -Ttext 0x20000 %(old_link) - -*startfile: -crti%O%s crtbegin%O%s %{!pg:redboot-crt0%O%s} %{pg:redboot-crt0%O%s} redboot-syscalls%O%s - diff --git a/libgloss/arm/libcfunc.c b/libgloss/arm/libcfunc.c deleted file mode 100644 index 4f131939a..000000000 --- a/libgloss/arm/libcfunc.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Support files for GNU libc. Files in the C namespace go here. - Files in the system namespace (ie those that start with an underscore) - go in syscalls.c. - - Note: These functions are in a seperate file so that OS providers can - overrride the system call stubs (defined in syscalls.c) without having - to provide libc funcitons as well. */ - -#include "swi.h" -#include <errno.h> -#include <unistd.h> - -#ifdef ARM_RDI_MONITOR -static inline int -do_AngelSWI (int reason, void * arg) -{ - int value; - asm volatile ("mov r0, %1; mov r1, %2; " AngelSWIInsn " %a3; mov %0, r0" - : "=r" (value) /* Outputs */ - : "r" (reason), "r" (arg), "i" (AngelSWI) /* Inputs */ - : "r0", "r1", "lr" - /* Clobbers r0 and r1, and lr if in supervisor mode */); - return value; -} -#endif /* ARM_RDI_MONITOR */ - -void -abort (void) -{ - extern void _exit (int n); -#ifdef ARM_RDI_MONITOR - do_AngelSWI (AngelSWI_Reason_ReportException, - (void *) ADP_Stopped_RunTimeError); -#else - _exit(17); -#endif -} - -unsigned __attribute__((weak)) -alarm (unsigned seconds) -{ - (void)seconds; - return 0; -} - -clock_t _clock(void); -clock_t __attribute__((weak)) -clock(void) -{ - return _clock(); -} - -int _isatty(int fildes); -int __attribute__((weak)) -isatty(int fildes) -{ - return _isatty(fildes); -} - -int __attribute__((weak)) -pause(void) -{ - errno = ENOSYS; - return -1; -} - -#include <sys/types.h> -#include <time.h> - -unsigned __attribute__((weak)) -sleep(unsigned seconds) -{ - clock_t t0 = _clock(); - clock_t dt = seconds * CLOCKS_PER_SEC; - - while (_clock() - t0 < dt); - return 0; -} - -int __attribute__((weak)) -usleep(useconds_t useconds) -{ - clock_t t0 = _clock(); - clock_t dt = useconds / (1000000/CLOCKS_PER_SEC); - - while (_clock() - t0 < dt); - return 0; -} diff --git a/libgloss/arm/redboot-crt0.S b/libgloss/arm/redboot-crt0.S deleted file mode 100644 index 2499ac091..000000000 --- a/libgloss/arm/redboot-crt0.S +++ /dev/null @@ -1,127 +0,0 @@ - - .file "crt0.S" - -#define XGLUE(a,b) a##b -#define GLUE(a,b) XGLUE(a,b) - -#ifdef __USER_LABEL_PREFIX__ -#define SYM_NAME( name ) GLUE (__USER_LABEL_PREFIX__, name) -#else -#error __USER_LABEL_PREFIX is not defined -#endif - - .text - /* Setup the assembly entry point. */ -#ifdef __thumb2__ -.macro FUNC_START name - .global \name - .thumb_func -\name: -.endm - .syntax unified - .thumb -#else -.macro FUNC_START name - .global \name -\name: -.endm - .code 32 -#endif - FUNC_START SYM_NAME(start) - FUNC_START SYM_NAME(_start) - mov fp, #0 /* Null frame pointer. */ - mov r7, #0 /* Null frame pointer for Thumb. */ - - /* Enable interrupts for gdb debugging. */ -#ifdef __thumb2__ - cpsie if -#else - mrs r0, cpsr - bic r0, r0, #0xC0 - msr cpsr, r0 -#endif - - mov a2, #0 /* Second arg: fill value. */ - ldr a1, .LC1 /* First arg: start of memory block. */ - ldr a3, .LC2 - sub a3, a3, a1 /* Third arg: length of block. */ - -#ifdef GCRT0 - /* Zero out the bss without using memset. - Using memset is bad because it may be instrumented for - profiling, but at this point, the profiling data structures - have not been set up. - FIXME: This loop could be a lot more efficient. */ - subs a3, a3, #0 - beq 2f -1: strb a2, [a1] - subs a3, a3, #1 - add a1, a1, #1 - bne 1b -2: - /* Nothing to left to clear. */ -#endif - -#if defined(__thumb__) && !defined(__thumb2__) /* Enter Thumb mode. */ - add a4, pc, #1 /* Get the address of the Thumb block. */ - bx a4 /* Go there and start Thumb decoding. */ - - .code 16 - .global __change_mode - .thumb_func -__change_mode: -#endif - -#ifndef GCRT0 - bl SYM_NAME(memset) -#endif - bl SYM_NAME(__get_memtop) - sub r0, r0, #32 - mov sp, r0 - -#ifdef __USES_INITFINI__ - /* Some arm/elf targets use the .init and .fini sections - to create constructors and destructors, and for these - targets we need to call the _init function and arrange - for _fini to be called at program exit. */ - ldr r0, .Lfini - bl SYM_NAME (atexit) - bl SYM_NAME (_init) -#endif - - mov a1, #0 - ldr a2, .LC3 - mov a3, a2 - bl SYM_NAME(main) - 1: bl SYM_NAME(exit) - b 1b - .align 2 -.LC1: - .word __bss_start__ -.LC2: - .word __bss_end__ -.LC3: - .word 0 -#ifdef __USES_INITFINI__ -.Lfini: - .word SYM_NAME(_fini) -#endif -#if 0 -#ifdef __thumb__ - .code 16 -#endif - .global SYM_NAME(__syscall) -#ifdef __thumb__ - .thumb_func -#else - .align 4 -#endif -SYM_NAME(__syscall): - mov r12, lr -#ifdef __thumb__ - swi 0x18 -#else - swi 0x180001 -#endif - mov pc, r12 -#endif diff --git a/libgloss/arm/redboot-syscalls.c b/libgloss/arm/redboot-syscalls.c deleted file mode 100644 index 3b5a02b27..000000000 --- a/libgloss/arm/redboot-syscalls.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - * redboot-syscalls.c -- provide system call support for RedBoot - * - * Copyright (c) 1997, 2001, 2002 Red Hat, Inc. - * - * The authors hereby grant permission to use, copy, modify, distribute, - * and license this software and its documentation for any purpose, provided - * that existing copyright notices are retained in all copies and that this - * notice is included verbatim in any distributions. No written agreement, - * license, or royalty fee is required for any of the authorized uses. - * Modifications to this software may be copyrighted by their authors - * and need not follow the licensing terms described here, provided that - * the new terms are clearly indicated on the first page of each file where - * they apply. - * - */ - -#include <stdlib.h> -#include <sys/stat.h> -#include <sys/times.h> -#include <errno.h> -#include "syscall.h" - -// Use "naked" attribute to suppress C prologue/epilogue -static int __attribute__ ((naked)) __syscall(int func_no, ...) -{ - asm ("mov r12, lr\n"); -#ifdef __thumb__ - asm ("swi 0x18\n"); -#else - asm ("swi 0x180001\n"); -#endif - asm ("mov pc, r12\n"); -} - -int -_close(int fd) -{ - int err; - err = __syscall(SYS_close, fd); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - - -void -_exit(int stat) -{ - while (1) - __syscall(SYS_exit, stat); -} - - -int -_stat (const char *filename, struct stat *st) -{ - int err; - err = __syscall(SYS_stat, filename, st); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - -int -_fstat (int file, struct stat *st) -{ - int err; - err = __syscall(SYS_fstat, file, st); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - -int -_getpid(void) -{ - return 1; -} - - -int -_gettimeofday (void * tp, void * tzp) -{ - int err; - err = __syscall(SYS_gettimeofday, tp, tzp); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - - -int -isatty(int fd) -{ - int err; - err = __syscall(SYS_isatty, fd); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - - -int -_kill(int pid, int sig) -{ - if(pid == 1) - _exit(sig); - return 0; -} - - -off_t -_lseek(int fd, off_t offset, int whence) -{ - int err; - err = __syscall(SYS_lseek, fd, offset, whence); - if (err<0) - { - errno = -err; - return (off_t)-1; - } - return err; -} - - -int -_open(const char *buf, int flags, int mode) -{ - int err ; - err = __syscall(SYS_open, buf, flags, mode); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - - -int -_write(int fd, const char *buf, int nbytes) -{ - int err; - - err = __syscall(SYS_write, fd, buf, nbytes); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - - -void -print(char *ptr) -{ - char *p = ptr; - - while (*p != '\0') - p++; - - _write (1, ptr, p-ptr); -} - -void -_raise (void) -{ - return; -} - - -int -_read(int fd, char *buf, int nbytes) -{ - int err; - err = __syscall(SYS_read, fd, buf, nbytes); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - - -extern char end[]; /* end is set in the linker command file */ - -char *heap_ptr; - -char * -_sbrk (int nbytes) -{ - char *base; - - if (!heap_ptr) - heap_ptr = (char *)&end; - base = heap_ptr; - heap_ptr += nbytes; - - return base; -} - - -clock_t -_times(struct tms * tp) -{ - clock_t utime; - int err; - err = __syscall(SYS_times, &utime); - if (err) - utime = 0; - - if (tp) { - tp->tms_utime = utime; - tp->tms_stime = 0; - tp->tms_cutime = 0; - tp->tms_cstime = 0; - } - - return utime; -} - -int -_rename (const char *oldpath, const char *newpath) -{ - int err ; - err = __syscall(SYS_rename, oldpath, newpath); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - -int -_unlink (const char *pathname) -{ - int err ; - err = __syscall(SYS_unlink, pathname); - if (err<0) - { - errno = -err; - return -1; - } - return err; -} - -int -_system (const char *command) -{ - int err ; - err = __syscall(SYS_system, command); - return err; -} - -#define SYS_meminfo 1001 - -void * -__get_memtop(void) -{ - unsigned long totmem = 0, topmem = 0; - int numbanks; - - __syscall(SYS_meminfo, (unsigned long)&totmem, (unsigned long)&topmem, 0); - return (void*)topmem; -} diff --git a/libgloss/arm/swi.h b/libgloss/arm/swi.h deleted file mode 100644 index f5c910313..000000000 --- a/libgloss/arm/swi.h +++ /dev/null @@ -1,68 +0,0 @@ -/* SWI numbers for RDP (Demon) monitor. */ -#define SWI_WriteC 0x0 -#define SWI_Write0 0x2 -#define SWI_ReadC 0x4 -#define SWI_CLI 0x5 -#define SWI_GetEnv 0x10 -#define SWI_Exit 0x11 -#define SWI_EnterOS 0x16 - -#define SWI_GetErrno 0x60 -#define SWI_Clock 0x61 -#define SWI_Time 0x63 -#define SWI_Remove 0x64 -#define SWI_Rename 0x65 -#define SWI_Open 0x66 - -#define SWI_Close 0x68 -#define SWI_Write 0x69 -#define SWI_Read 0x6a -#define SWI_Seek 0x6b -#define SWI_Flen 0x6c - -#define SWI_IsTTY 0x6e -#define SWI_TmpNam 0x6f -#define SWI_InstallHandler 0x70 -#define SWI_GenerateError 0x71 - - -/* Now the SWI numbers and reason codes for RDI (Angel) monitors. */ -#define AngelSWI_ARM 0x123456 -#ifdef __thumb__ -#define AngelSWI 0xAB -#else -#define AngelSWI AngelSWI_ARM -#endif -/* For Thumb-2 code use the BKPT instruction instead of SWI. */ -#ifdef __thumb2__ -#define AngelSWIInsn "bkpt" -#define AngelSWIAsm bkpt -#else -#define AngelSWIInsn "swi" -#define AngelSWIAsm swi -#endif - -/* The reason codes: */ -#define AngelSWI_Reason_Open 0x01 -#define AngelSWI_Reason_Close 0x02 -#define AngelSWI_Reason_WriteC 0x03 -#define AngelSWI_Reason_Write0 0x04 -#define AngelSWI_Reason_Write 0x05 -#define AngelSWI_Reason_Read 0x06 -#define AngelSWI_Reason_ReadC 0x07 -#define AngelSWI_Reason_IsTTY 0x09 -#define AngelSWI_Reason_Seek 0x0A -#define AngelSWI_Reason_FLen 0x0C -#define AngelSWI_Reason_TmpNam 0x0D -#define AngelSWI_Reason_Remove 0x0E -#define AngelSWI_Reason_Rename 0x0F -#define AngelSWI_Reason_Clock 0x10 -#define AngelSWI_Reason_Time 0x11 -#define AngelSWI_Reason_System 0x12 -#define AngelSWI_Reason_Errno 0x13 -#define AngelSWI_Reason_GetCmdLine 0x15 -#define AngelSWI_Reason_HeapInfo 0x16 -#define AngelSWI_Reason_EnterSVC 0x17 -#define AngelSWI_Reason_ReportException 0x18 -#define ADP_Stopped_ApplicationExit ((2 << 16) + 38) -#define ADP_Stopped_RunTimeError ((2 << 16) + 35) diff --git a/libgloss/arm/syscall.h b/libgloss/arm/syscall.h deleted file mode 100644 index 759801f4f..000000000 --- a/libgloss/arm/syscall.h +++ /dev/null @@ -1,54 +0,0 @@ -/* General use syscall.h file. - The more ports that use this file, the simpler sim/common/nltvals.def - remains. */ - -#ifndef LIBGLOSS_SYSCALL_H -#define LIBGLOSS_SYSCALL_H - -/* Note: This file may be included by assembler source. */ - -/* These should be as small as possible to allow a port to use a trap type - instruction, which the system call # as the trap (the d10v for instance - supports traps 0..31). An alternative would be to define one trap for doing - system calls, and put the system call number in a register that is not used - for the normal calling sequence (so that you don't have to shift down the - arguments to add the system call number). Obviously, if these system call - numbers are ever changed, all of the simulators and potentially user code - will need to be updated. */ - -/* There is no current need for the following: SYS_execv, SYS_creat, SYS_wait, - etc. etc. Don't add them. */ - -/* These are required by the ANSI C part of newlib (excluding system() of - course). */ -#define SYS_exit 1 -#define SYS_open 2 -#define SYS_close 3 -#define SYS_read 4 -#define SYS_write 5 -#define SYS_lseek 6 -#define SYS_unlink 7 -#define SYS_getpid 8 -#define SYS_kill 9 -#define SYS_fstat 10 -/*#define SYS_sbrk 11 - not currently a system call, but reserved. */ - -/* ARGV support. */ -#define SYS_argvlen 12 -#define SYS_argv 13 - -/* These are extras added for one reason or another. */ -#define SYS_chdir 14 -#define SYS_stat 15 -#define SYS_chmod 16 -#define SYS_utime 17 -#define SYS_time 18 -#define SYS_gettimeofday 19 -#define SYS_times 20 -#define SYS_link 21 -/* These are additional syscalls in RedBoot. */ -#define SYS_rename 3001 -#define SYS_isatty 3002 -#define SYS_system 3003 - -#endif diff --git a/libgloss/arm/syscalls.c b/libgloss/arm/syscalls.c deleted file mode 100644 index a6d2f747e..000000000 --- a/libgloss/arm/syscalls.c +++ /dev/null @@ -1,663 +0,0 @@ -/* Support files for GNU libc. Files in the system namespace go here. - Files in the C namespace (ie those that do not start with an - underscore) go in .c. */ - -#include <_ansi.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/fcntl.h> -#include <stdio.h> -#include <string.h> -#include <time.h> -#include <sys/time.h> -#include <sys/times.h> -#include <errno.h> -#include <reent.h> -#include <unistd.h> -#include "swi.h" - -/* Forward prototypes. */ -int _system _PARAMS ((const char *)); -int _rename _PARAMS ((const char *, const char *)); -int _isatty _PARAMS ((int)); -clock_t _times _PARAMS ((struct tms *)); -int _gettimeofday _PARAMS ((struct timeval *, struct timezone *)); -int _unlink _PARAMS ((const char *)); -int _link _PARAMS ((void)); -int _stat _PARAMS ((const char *, struct stat *)); -int _fstat _PARAMS ((int, struct stat *)); -caddr_t _sbrk _PARAMS ((int)); -int _getpid _PARAMS ((int)); -int _kill _PARAMS ((int, int)); -void _exit _PARAMS ((int)); -int _close _PARAMS ((int)); -clock_t _clock _PARAMS ((void)); -int _swiclose _PARAMS ((int)); -int _open _PARAMS ((const char *, int, ...)); -int _swiopen _PARAMS ((const char *, int)); -int _write _PARAMS ((int, char *, int)); -int _swiwrite _PARAMS ((int, char *, int)); -int _lseek _PARAMS ((int, int, int)); -int _swilseek _PARAMS ((int, int, int)); -int _read _PARAMS ((int, char *, int)); -int _swiread _PARAMS ((int, char *, int)); -void initialise_monitor_handles _PARAMS ((void)); - -static int wrap _PARAMS ((int)); -static int error _PARAMS ((int)); -static int get_errno _PARAMS ((void)); -static int remap_handle _PARAMS ((int)); -static int do_AngelSWI _PARAMS ((int, void *)); -static int findslot _PARAMS ((int)); - -/* Register name faking - works in collusion with the linker. */ -register char * stack_ptr asm ("sp"); - - -/* following is copied from libc/stdio/local.h to check std streams */ -extern void _EXFUN(__sinit,(struct _reent *)); -#define CHECK_INIT(ptr) \ - do \ - { \ - if ((ptr) && !(ptr)->__sdidinit) \ - __sinit (ptr); \ - } \ - while (0) - -/* Adjust our internal handles to stay away from std* handles. */ -#define FILE_HANDLE_OFFSET (0x20) - -static int monitor_stdin; -static int monitor_stdout; -static int monitor_stderr; - -/* Struct used to keep track of the file position, just so we - can implement fseek(fh,x,SEEK_CUR). */ -typedef struct -{ - int handle; - int pos; -} -poslog; - -#define MAX_OPEN_FILES 20 -static poslog openfiles [MAX_OPEN_FILES]; - -static int -findslot (int fh) -{ - int i; - for (i = 0; i < MAX_OPEN_FILES; i ++) - if (openfiles[i].handle == fh) - break; - return i; -} - -#ifdef ARM_RDI_MONITOR - -static inline int -do_AngelSWI (int reason, void * arg) -{ - int value; - asm volatile ("mov r0, %1; mov r1, %2; " AngelSWIInsn " %a3; mov %0, r0" - : "=r" (value) /* Outputs */ - : "r" (reason), "r" (arg), "i" (AngelSWI) /* Inputs */ - : "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc" - /* Clobbers r0 and r1, and lr if in supervisor mode */); - /* Accordingly to page 13-77 of ARM DUI 0040D other registers - can also be clobbered. Some memory positions may also be - changed by a system call, so they should not be kept in - registers. Note: we are assuming the manual is right and - Angel is respecting the APCS. */ - return value; -} -#endif /* ARM_RDI_MONITOR */ - -/* Function to convert std(in|out|err) handles to internal versions. */ -static int -remap_handle (int fh) -{ - CHECK_INIT(_REENT); - - if (fh == STDIN_FILENO) - return monitor_stdin; - if (fh == STDOUT_FILENO) - return monitor_stdout; - if (fh == STDERR_FILENO) - return monitor_stderr; - - return fh - FILE_HANDLE_OFFSET; -} - -void -initialise_monitor_handles (void) -{ - int i; - - /* Open the standard file descriptors by opening the special - * teletype device, ":tt", read-only to obtain a descritpor for - * standard input and write-only to obtain a descriptor for standard - * output. Finally, open ":tt" in append mode to obtain a descriptor - * for standard error. Since this is a write mode, most kernels will - * probably return the same value as for standard output, but the - * kernel can differentiate the two using the mode flag and return a - * different descriptor for standard error. - */ - -#ifdef ARM_RDI_MONITOR - int volatile block[3]; - - block[0] = (int) ":tt"; - block[2] = 3; /* length of filename */ - block[1] = 0; /* mode "r" */ - monitor_stdin = do_AngelSWI (AngelSWI_Reason_Open, (void *) block); - - block[0] = (int) ":tt"; - block[2] = 3; /* length of filename */ - block[1] = 4; /* mode "w" */ - monitor_stdout = do_AngelSWI (AngelSWI_Reason_Open, (void *) block); - - block[0] = (int) ":tt"; - block[2] = 3; /* length of filename */ - block[1] = 8; /* mode "a" */ - monitor_stderr = do_AngelSWI (AngelSWI_Reason_Open, (void *) block); -#else - int fh; - const char * name; - - name = ":tt"; - asm ("mov r0,%2; mov r1, #0; swi %a1; mov %0, r0" - : "=r"(fh) - : "i" (SWI_Open),"r"(name) - : "r0","r1"); - monitor_stdin = fh; - - name = ":tt"; - asm ("mov r0,%2; mov r1, #4; swi %a1; mov %0, r0" - : "=r"(fh) - : "i" (SWI_Open),"r"(name) - : "r0","r1"); - monitor_stdout = fh; - - name = ":tt"; - asm ("mov r0,%2; mov r1, #8; swi %a1; mov %0, r0" - : "=r"(fh) - : "i" (SWI_Open),"r"(name) - : "r0","r1"); - monitor_stderr = fh; -#endif - - for (i = 0; i < MAX_OPEN_FILES; i ++) - openfiles[i].handle = -1; - - openfiles[0].handle = monitor_stdin; - openfiles[0].pos = 0; - openfiles[1].handle = monitor_stdout; - openfiles[1].pos = 0; - openfiles[2].handle = monitor_stderr; - openfiles[2].pos = 0; -} - -static int -get_errno (void) -{ -#ifdef ARM_RDI_MONITOR - return do_AngelSWI (AngelSWI_Reason_Errno, NULL); -#else - register r0 asm("r0"); - asm ("swi %a1" : "=r"(r0) : "i" (SWI_GetErrno)); - return r0; -#endif -} - -static int -error (int result) -{ - errno = get_errno (); - return result; -} - -static int -wrap (int result) -{ - if (result == -1) - return error (-1); - return result; -} - -/* Returns # chars not! written. */ -int -_swiread (int file, - char * ptr, - int len) -{ - int fh = remap_handle (file); -#ifdef ARM_RDI_MONITOR - int block[3]; - - block[0] = fh; - block[1] = (int) ptr; - block[2] = len; - - return do_AngelSWI (AngelSWI_Reason_Read, block); -#else - asm ("mov r0, %1; mov r1, %2;mov r2, %3; swi %a0" - : /* No outputs */ - : "i"(SWI_Read), "r"(fh), "r"(ptr), "r"(len) - : "r0","r1","r2"); -#endif -} - -int -_read (int file, - char * ptr, - int len) -{ - int slot = findslot (remap_handle (file)); - int x = _swiread (file, ptr, len); - - if (x < 0) - return error (-1); - - if (slot != MAX_OPEN_FILES) - openfiles [slot].pos += len - x; - - /* x == len is not an error, at least if we want feof() to work. */ - return len - x; -} - -int -_swilseek (int file, - int ptr, - int dir) -{ - int res; - int fh = remap_handle (file); - int slot = findslot (fh); -#ifdef ARM_RDI_MONITOR - int block[2]; -#endif - - if (dir == SEEK_CUR) - { - if (slot == MAX_OPEN_FILES) - return -1; - ptr = openfiles[slot].pos + ptr; - dir = SEEK_SET; - } - -#ifdef ARM_RDI_MONITOR - if (dir == SEEK_END) - { - block[0] = fh; - ptr += do_AngelSWI (AngelSWI_Reason_FLen, block); - } - - /* This code only does absolute seeks. */ - block[0] = remap_handle (file); - block[1] = ptr; - res = do_AngelSWI (AngelSWI_Reason_Seek, block); -#else - if (dir == SEEK_END) - { - asm ("mov r0, %2; swi %a1; mov %0, r0" - : "=r" (res) - : "i" (SWI_Flen), "r" (fh) - : "r0"); - ptr += res; - } - - /* This code only does absolute seeks. */ - asm ("mov r0, %2; mov r1, %3; swi %a1; mov %0, r0" - : "=r" (res) - : "i" (SWI_Seek), "r" (fh), "r" (ptr) - : "r0", "r1"); -#endif - - if (slot != MAX_OPEN_FILES && res == 0) - openfiles[slot].pos = ptr; - - /* This is expected to return the position in the file. */ - return res == 0 ? ptr : -1; -} - -int -_lseek (int file, - int ptr, - int dir) -{ - return wrap (_swilseek (file, ptr, dir)); -} - -/* Returns #chars not! written. */ -int -_swiwrite ( - int file, - char * ptr, - int len) -{ - int fh = remap_handle (file); -#ifdef ARM_RDI_MONITOR - int block[3]; - - block[0] = fh; - block[1] = (int) ptr; - block[2] = len; - - return do_AngelSWI (AngelSWI_Reason_Write, block); -#else - asm ("mov r0, %1; mov r1, %2;mov r2, %3; swi %a0" - : /* No outputs */ - : "i"(SWI_Write), "r"(fh), "r"(ptr), "r"(len) - : "r0","r1","r2"); -#endif -} - -int -_write (int file, - char * ptr, - int len) -{ - int slot = findslot (remap_handle (file)); - int x = _swiwrite (file, ptr,len); - - if (x == -1 || x == len) - return error (-1); - - if (slot != MAX_OPEN_FILES) - openfiles[slot].pos += len - x; - - return len - x; -} - -int -_swiopen (const char * path, - int flags) -{ - int aflags = 0, fh; -#ifdef ARM_RDI_MONITOR - int block[3]; -#endif - - int i = findslot (-1); - - if (i == MAX_OPEN_FILES) - return -1; - - /* The flags are Unix-style, so we need to convert them. */ -#ifdef O_BINARY - if (flags & O_BINARY) - aflags |= 1; -#endif - - if (flags & O_RDWR) - aflags |= 2; - - if (flags & O_CREAT) - aflags |= 4; - - if (flags & O_TRUNC) - aflags |= 4; - - if (flags & O_APPEND) - { - aflags &= ~4; /* Can't ask for w AND a; means just 'a'. */ - aflags |= 8; - } - -#ifdef ARM_RDI_MONITOR - block[0] = (int) path; - block[2] = strlen (path); - block[1] = aflags; - - fh = do_AngelSWI (AngelSWI_Reason_Open, block); - -#else - asm ("mov r0,%2; mov r1, %3; swi %a1; mov %0, r0" - : "=r"(fh) - : "i" (SWI_Open),"r"(path),"r"(aflags) - : "r0","r1"); -#endif - - if (fh >= 0) - { - openfiles[i].handle = fh; - openfiles[i].pos = 0; - } - - return fh >= 0 ? fh + FILE_HANDLE_OFFSET : error (fh); -} - -int -_open (const char * path, - int flags, - ...) -{ - return wrap (_swiopen (path, flags)); -} - -int -_swiclose (int file) -{ - int myhan = remap_handle (file); - int slot = findslot (myhan); - - if (slot != MAX_OPEN_FILES) - openfiles[slot].handle = -1; - -#ifdef ARM_RDI_MONITOR - return do_AngelSWI (AngelSWI_Reason_Close, & myhan); -#else - asm ("mov r0, %1; swi %a0" :: "i" (SWI_Close),"r"(myhan):"r0"); -#endif -} - -int -_close (int file) -{ - return wrap (_swiclose (file)); -} - -int -_kill (int pid, int sig) -{ - (void)pid; (void)sig; -#ifdef ARM_RDI_MONITOR - /* Note: Both arguments are thrown away. */ - return do_AngelSWI (AngelSWI_Reason_ReportException, - (void *) ADP_Stopped_ApplicationExit); -#else - asm ("swi %a0" :: "i" (SWI_Exit)); -#endif -} - -void -_exit (int status) -{ - /* There is only one SWI for both _exit and _kill. For _exit, call - the SWI with the second argument set to -1, an invalid value for - signum, so that the SWI handler can distinguish the two calls. - Note: The RDI implementation of _kill throws away both its - arguments. */ - _kill(status, -1); -} - -int __attribute__((weak)) -_getpid (int n) -{ - return 1; - n = n; -} - -caddr_t -_sbrk (int incr) -{ - extern char end asm ("end"); /* Defined by the linker. */ - static char * heap_end; - char * prev_heap_end; - - if (heap_end == NULL) - heap_end = & end; - - prev_heap_end = heap_end; - - if (heap_end + incr > stack_ptr) - { - /* Some of the libstdc++-v3 tests rely upon detecting - out of memory errors, so do not abort here. */ -#if 0 - extern void abort (void); - - _write (1, "_sbrk: Heap and stack collision\n", 32); - - abort (); -#else - errno = ENOMEM; - return (caddr_t) -1; -#endif - } - - heap_end += incr; - - return (caddr_t) prev_heap_end; -} - -int __attribute__((weak)) -_fstat (int file, struct stat * st) -{ - memset (st, 0, sizeof (* st)); - st->st_mode = S_IFCHR; - st->st_blksize = 1024; - return 0; - file = file; -} - -int __attribute__((weak)) -_stat (const char *fname, struct stat *st) -{ - int file; - - /* The best we can do is try to open the file readonly. If it exists, - then we can guess a few things about it. */ - if ((file = _open (fname, O_RDONLY)) < 0) - return -1; - - memset (st, 0, sizeof (* st)); - st->st_mode = S_IFREG | S_IREAD; - st->st_blksize = 1024; - _swiclose (file); /* Not interested in the error. */ - return 0; -} - -int __attribute__((weak)) -_link (void) -{ - errno = ENOSYS; - return -1; -} - -int -_unlink (const char *path) -{ -#ifdef ARM_RDI_MONITOR - return do_AngelSWI (AngelSWI_Reason_Remove, &path); -#else - (void)path; - asm ("swi %a0" :: "i" (SWI_Remove)); -#endif -} - -int -_gettimeofday (struct timeval * tp, struct timezone * tzp) -{ - - if (tp) - { - /* Ask the host for the seconds since the Unix epoch. */ -#ifdef ARM_RDI_MONITOR - tp->tv_sec = do_AngelSWI (AngelSWI_Reason_Time,NULL); -#else - { - int value; - asm ("swi %a1; mov %0, r0" : "=r" (value): "i" (SWI_Time) : "r0"); - tp->tv_sec = value; - } -#endif - tp->tv_usec = 0; - } - - /* Return fixed data for the timezone. */ - if (tzp) - { - tzp->tz_minuteswest = 0; - tzp->tz_dsttime = 0; - } - - return 0; -} - -/* Return a clock that ticks at 100Hz. */ -clock_t -_clock (void) -{ - clock_t timeval; - -#ifdef ARM_RDI_MONITOR - timeval = do_AngelSWI (AngelSWI_Reason_Clock,NULL); -#else - asm ("swi %a1; mov %0, r0" : "=r" (timeval): "i" (SWI_Clock) : "r0"); -#endif - return timeval; -} - -/* Return a clock that ticks at 100Hz. */ -clock_t -_times (struct tms * tp) -{ - clock_t timeval = _clock(); - - if (tp) - { - tp->tms_utime = timeval; /* user time */ - tp->tms_stime = 0; /* system time */ - tp->tms_cutime = 0; /* user time, children */ - tp->tms_cstime = 0; /* system time, children */ - } - - return timeval; -}; - - -int -_isatty (int fd) -{ -#ifdef ARM_RDI_MONITOR - return do_AngelSWI (AngelSWI_Reason_IsTTY, &fd); -#else - (void)fd; - asm ("swi %a0" :: "i" (SWI_IsTTY)); -#endif -} - -int -_system (const char *s) -{ -#ifdef ARM_RDI_MONITOR - return do_AngelSWI (AngelSWI_Reason_System, &s); -#else - (void)s; - asm ("swi %a0" :: "i" (SWI_CLI)); -#endif -} - -int -_rename (const char * oldpath, const char * newpath) -{ -#ifdef ARM_RDI_MONITOR - const char *block[2] = {oldpath, newpath}; - return do_AngelSWI (AngelSWI_Reason_Rename, block); -#else - (void)oldpath; (void)newpath; - asm ("swi %a0" :: "i" (SWI_Rename)); -#endif -} diff --git a/libgloss/arm/trap.S b/libgloss/arm/trap.S deleted file mode 100644 index 21b6937f9..000000000 --- a/libgloss/arm/trap.S +++ /dev/null @@ -1,95 +0,0 @@ - /* Run-time exception support */ -#if !defined(__thumb2__) -#include "swi.h" - -/* .text is used instead of .section .text so it works with arm-aout too. */ - .text - .align 0 - .global __rt_stkovf_split_big - .global __rt_stkovf_split_small - -/* The following functions are provided for software stack checking. - If hardware stack-checking is being used then the code can be - compiled without the PCS entry checks, and simply rely on VM - management to extend the stack for a thread. - - The stack extension event occurs when the PCS function entry code - would result in a stack-pointer beneath the stack-limit register - value. The system relies on the following map: - - +-----------------------------------+ <-- end of stack block - | ... | - | ... | - | active stack | - | ... | <-- sp (stack-pointer) somewhere in here - | ... | - +-----------------------------------+ <-- sl (stack-limit) - | stack-extension handler workspace | - +-----------------------------------+ <-- base of stack block - - The "stack-extension handler workspace" is an amount of memory in - which the stack overflow support code must execute. It must be - large enough to deal with the worst case path through the extension - code. At the moment the compiler expects this to be AT LEAST - 256bytes. It uses this fact to code functions with small local - data usage within the overflow space. - - In a true target environment We may need to increase the space - between sl and the true limit to allow for the stack extension - code, SWI handlers and for undefined instruction handlers of the - target environment. */ - -__rt_stkovf_split_small: - mov ip,sp @ Ensure we can calculate the stack required - @ and fall through to... -__rt_stkovf_split_big: - @ in: sp = current stack-pointer (beneath stack-limit) - @ sl = current stack-limit - @ ip = low stack point we require for the current function - @ lr = return address into the current function - @ fp = frame-pointer - @ original sp --> +----------------------------------+ - @ | pc (12 ahead of PCS entry store) | - @ current fp ---> +----------------------------------+ - @ | lr (on entry) pc (on exit) | - @ +----------------------------------+ - @ | sp ("original sp" on entry) | - @ +----------------------------------+ - @ | fp (on entry to function) | - @ +----------------------------------+ - @ | | - @ | ..argument and work registers.. | - @ | | - @ current sp ---> +----------------------------------+ - @ - @ The "current sl" is somewhere between "original sp" and "current sp" - @ but above "true sl". The "current sl" should be at least 256bytes - @ above the "true sl". The 256byte stack guard should be large enough - @ to deal with the worst case function entry stacking (160bytes) plus - @ the stack overflow handler stacking requirements, plus the stack - @ required for the memory allocation routines. - @ - @ Normal PCS entry (before stack overflow check) can stack 16 - @ standard registers (64bytes) and 8 floating point registers - @ (96bytes). This gives a minimum stack guard of 160bytes (excluding - @ the stack required for the code). (Actually only a maximum of - @ 14standard registers are ever stacked on entry to a function). - @ - @ NOTE: Structure returns are performed by the caller allocating a - @ dummy space on the stack and passing in a "phantom" arg1 into - @ the function. This means that we do not need to worry about - @ preserving the stack under "sp" even on function return. - @ - @ Code should never poke values beneath sp. The sp register - @ should always be "dropped" first to cover the data. This - @ protects the data against any events that may try and use - @ the stack. - - SUB ip, sp, ip @ extra stack required for function - @ Add stack extension code here. If desired a new stack chunk - @ can be allocated, and the register state updated suitably. - - @ We now know how much extra stack the function requires. - @ Terminate the program for the moment: - swi SWI_Exit -#endif |