diff options
Diffstat (limited to 'libgloss/sparc')
46 files changed, 0 insertions, 10907 deletions
diff --git a/libgloss/sparc/Makefile.in b/libgloss/sparc/Makefile.in deleted file mode 100644 index fcf5448..0000000 --- a/libgloss/sparc/Makefile.in +++ /dev/null @@ -1,286 +0,0 @@ -# Copyright (c) 1995, 1996, 1997 Cygnus Support -# -# 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. - -# Makefile for libgloss/sparc. This is the board support -# code for the various sparc targets. - -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = qrv - -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` - -CYGMON_CRT0 = cygmon-crt0.o -CYGMON_BSP = libcygmon.a -CYGMON_OBJS = cygmon-salib.o - -701_CRT0 = crt0-701.o -701_BSP = libsplet701.a -701_OBJS = sysc-701.o salib-701.o sparclet-stub.o - -930_BSP = libslite930.a -931_BSP = libslite931.a -934_BSP = libslite934.a -86X_BSP = libslite86x.a - -# for the time being, built the stub without hardware breakpoint support -SLITE_OBJS = salib.o sparcl-stub.o cache.o - -# ERC32: SIS simulator, see sim/erc32. -ERC32_CRT0 = erc32-crt0.o -ERC32_BSP = liberc32.a -ERC32_OBJS = erc32-io.o traps.o erc32-stub.o debug.o fixctors.o -ERC32_ALL = $(ERC32_CRT0) $(ERC32_BSP) - -CRT0 = crt0.o -OBJS = close.o fstat.o getpid.o isatty.o kill.o \ - lseek.o open.o print.o putnum.o read.o sbrk.o stat.o \ - unlink.o write.o - -# This is set to one of SPARC, SLITE, or SPLET by configure. -# It's not clear what to do here. -# One could certainly build everything. The assembler supports all cpu -# variants (via runtime switches). However, the compiler [currently] doesn't. -# Of course, it may be the case that there isn't any cpu specific code in -# C source files, but there might be in the future. -CPU = @CPU@ - -# sparc stuff (not sparclite or sparclet) -SPARC_ALL = $(CYGMON_BSP) $(CYGMON_CRT0) $(objdir)/cygmon.ld -SPARC_INSTALL = sparc-install -SPARC_OBJ_FORMAT = sparc -SPARC_RAM_START = 0x4000 - -# sparc 64 stuff -SPARC64_ALL = $(CYGMON_BSP) $(CYGMON_CRT0) $(objdir)/cygmon.ld -SPARC64_INSTALL = sparc-install -SPARC64_OBJ_FORMAT = sparc:v9 -SPARC64_RAM_START = 0x4000 - -# sparclite stuff -SLITE_ALL = $(930_BSP) $(931_BSP) $(CYGMON_BSP) $(CYGMON_CRT0) $(objdir)/cygmon.ld $(934_BSP) $(86X_BSP) -SLITE_INSTALL = slite-install -SLITE_OBJ_FORMAT = sparc -SLITE_RAM_START = 0x40050000 - -# sparclet stuff -SPLET_ALL = $(701_CRT0) $(701_BSP) -SPLET_INSTALL = splet-install - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - -all: ${CRT0} $($(CPU)_ALL) $(ERC32_ALL) - -$(CYGMON_CRT0): cygmon-crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) -DTARGET_CPU_$(CPU) $(INCLUDES) -o $@ -c $(srcdir)/cygmon-crt0.S - -$(CYGMON_BSP): $(CYGMON_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(CYGMON_OBJS) - ${RANLIB} $@ - -#$(STUBLIBS): $(OBJS) $(SLITE_OBJS) $(CRT0) -# ${CC} -nostdlib -r $(SLITE_OBJS) $(SHARED_OBJS) -o $(930_BSP) -# ${CC} -DSL931 -nostdlib -r $(SLITE_OBJS) $(SHARED_OBJS) -o $(931_BSP) -# ${CC} -nostdlib -r $(SLITE_OBJS) $(SHARED_OBJS) -o $(934_BSP) - -$(CRT0): $(srcdir)/crt0.S $(srcdir)/asm.h $(srcdir)/slite.h - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -o $@ -c $(srcdir)/crt0.S - -$(930_BSP) $(931_BSP) $(934_BSP) $(86X_BSP): $(OBJS) $(SLITE_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(OBJS) $(SLITE_OBJS) - ${RANLIB} $@ - -$(701_BSP): $(701_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(701_OBJS) - ${RANLIB} $@ - -erc32-crt0.o: $(srcdir)/erc32-crt0.S $(srcdir)/asm.h $(srcdir)/slite.h - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -o $@ -c $(srcdir)/erc32-crt0.S - -liberc32.a: $(OBJS) $(ERC32_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(OBJS) $(ERC32_OBJS) - ${RANLIB} $@ - -crt0-701.o: crt0-701.S -sysc-701.o: sysc-701.c -salib-701.o: salib-701.c -sparclet-stub.o: sparclet-stub.c -cygmon-salib.o: cygmon-salib.c - $(CC) -DTARGET_CPU_$(CPU) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -o $@ -c $(srcdir)/cygmon-salib.c -cache.o: $(srcdir)/cache.c -salib.o: $(srcdir)/salib.c -win.o: $(srcdir)/win.S -syscalls.o: $(srcdir)/syscalls.c -sparcl-stub.o: $(srcdir)/sparcl-stub.c $(srcdir)/../debug.h $(srcdir)/../debug.c -erc32-stub.o: $(srcdir)/erc32-stub.c $(srcdir)/../debug.h $(srcdir)/../debug.c -fixctors.o : $(srcdir)/fixctors.c - -$(objdir)/cygmon.ld: @CYGMONLDSCRIPTTEMPL@ - sed 's/TARGET_OBJ_FORMAT/$($(CPU)_OBJ_FORMAT)/g;s/TARGET_RAM_START/$($(CPU)_RAM_START)/g;' < $(<) > $(objdir)/cygmon.ld - -install: $($(CPU)_INSTALL) - $(INSTALL_DATA) $(CRT0) $(tooldir)/lib${MULTISUBDIR}/$(CRT0) - -sparc-install: - $(INSTALL_DATA) $(CYGMON_BSP) $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_OBJS) $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(objdir)/cygmon.ld $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_CRT0) $(tooldir)/lib${MULTISUBDIR} - -slite-install: - $(INSTALL_DATA) $(930_BSP) $(tooldir)/lib${MULTISUBDIR}/$(930_BSP) - $(INSTALL_DATA) $(931_BSP) $(tooldir)/lib${MULTISUBDIR}/$(931_BSP) - $(INSTALL_DATA) $(934_BSP) $(tooldir)/lib${MULTISUBDIR}/$(934_BSP) - $(INSTALL_DATA) $(86X_BSP) $(tooldir)/lib${MULTISUBDIR}/$(86X_BSP) - $(INSTALL_DATA) $(srcdir)/ex930.ld $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(srcdir)/ex931.ld $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(srcdir)/ex934.ld $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(srcdir)/sparc86x.ld $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(srcdir)/elfsim.ld $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(ERC32_CRT0) $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(ERC32_BSP) $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(objdir)/traps.o $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_BSP) $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_OBJS) $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(objdir)/cygmon.ld $(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_CRT0) $(tooldir)/lib${MULTISUBDIR} - -splet-install: - $(INSTALL_DATA) $(701_CRT0) $(tooldir)/lib${MULTISUBDIR}/$(701_CRT0) - $(INSTALL_DATA) $(701_BSP) $(tooldir)/lib${MULTISUBDIR}/$(701_BSP) - $(INSTALL_DATA) $(srcdir)/tsc701.ld $(tooldir)/lib${MULTISUBDIR} - -# Make a simple test case to test the linker script, startup code, and -# I/O code -# -test: ex930-test.x ex931-test.x erc32-test.x - @echo Done... - -# compile a fully linked binary. The -N option is for a.out, so the -# base address will be zero, rather than the default of 0x2020. The -# -Wl,-T*.ld is for the linker script. By using -Wl, the linker script -# is put on the proper place in the comand line for ld, and all the -# symbols will get fully resolved. - -erc32-test.x: test.o ${ERC32_CRT0} ${srcdir}/erc32.ld Makefile ${ERC32_BSP} - ${CC} -L${srcdir} -L${objdir} test.o -o $@ $(LDFLAGS_FOR_TARGET) \ - -N -Wl,-Terc32.ld -Wl,-Map -Wl,erc32.map -nostdlib -erc32-test.srec: erc32-test.x - $(OBJCOPY) -O srec erc32-test.x $@ -erc32-test.dis: erc32-test.x - @rm -fr erc32-test.dis - $(OBJDUMP) -d erc32-test.x > $@ -erc32-test: erc32-test.srec erc32-test.dis - -ex930-test.x: test.o ${CRT0} ${srcdir}/ex930.ld Makefile ${930_BSP} - ${CC} -L${srcdir} -L${objdir} test.o -o $@ $(LDFLAGS_FOR_TARGET) \ - -N -Wl,-Tex930.ld -nostdlib -ex930-test.srec: ex930-test.x - $(OBJCOPY) -O srec ex930-test.x $@ -ex930-test.dis: ex930-test.x - @rm -fr ex930-test.dis - $(OBJDUMP) -d ex930-test.x > $@ -ex930-test: ex930-test.srec ex930-test.dis - -ex931-test.x: test.o ${CRT0} ${srcdir}/ex931.ld Makefile ${931_BSP} - ${CC} -L${srcdir} -L${objdir} test.o -o $@ $(LDFLAGS_FOR_TARGET) \ - -N -Wl,-Tex931.ld -nostdlib -ex931-test.srec: ex931-test.x - $(OBJCOPY) -O srec ex931-test.x $@ -ex931-test.dis: ex931-test.x - @rm -fr ex931-test.dis - $(OBJDUMP) -d ex931-test.x > $@ -ex931-test: ex931-test.srec ex931-test.dis - -ex934-test.x: test.o ${CRT0} ${srcdir}/ex934.ld Makefile ${934_BSP} - ${CC} -L${srcdir} -L${objdir} test.o -o $@ $(LDFLAGS_FOR_TARGET) \ - -N -Wl,-Tex934.ld -nostdlib -ex934-test.srec: ex934-test.x - $(OBJCOPY) -O srec ex934-test.x $@ -ex934-test.dis: ex934-test.x - @rm -fr ex934-test.dis - $(OBJDUMP) -d ex934-test.x > $@ -ex934-test: ex934-test.srec ex934-test.dis - -# a C++ test case -dtor.o: $(srcdir)/dtor.C - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -o $@ -c $? -dtor.dis: dtor.x - @rm -fr dtor.dis - $(OBJDUMP) -d dtor.x > $@ -dtor.x: dtor.o ${ERC32_CRT0} ${srcdir}/erc32.ld Makefile ${ERC32_BSP} - ${CC} -L${srcdir} -L${objdir} dtor.o -o $@ $(LIBS_FOR_TARGET) \ - -N -Wl,-Terc32.ld - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -clean mostlyclean: - rm -f *.o *.a *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile config.cache config.log config.status - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in config.status @host_makefile_frag_path@ \ - @target_makefile_frag_path@ - $(SHELL) config.status - -config.status: configure - $(SHELL) config.status --recheck diff --git a/libgloss/sparc/asm.h b/libgloss/sparc/asm.h deleted file mode 100644 index daeff34..0000000 --- a/libgloss/sparc/asm.h +++ /dev/null @@ -1,39 +0,0 @@ -/* asm.h -- macros for sparc asm - * - * Copyright (c) 1996 Cygnus Support - * - * 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. - */ - -#ifndef __SPARC_ASM_h -#define __SPARC_ASM_h - -/* Indicate we are in an assembly file and get the basic CPU definitions. */ -#define ASM - -/* ANSI concatenation macros. */ -#define CONCAT1(a, b) CONCAT2(a, b) -#define CONCAT2(a, b) a ## b - -/* Use the right prefix for global labels. - Note that it's too late to have coff have no underscores - (would break user programs). - One school of thought likes having underscores for both a.out and coff - (simplicity in consistency). */ -#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__,x) - -/* STRINGSYM makes a string out of a symbol name with the proper assembly - prefix. Useful for inline assembly language in C source files. */ -#define STRINGIT2(x) #x -#define STRINGIT1(x) STRINGIT2(x) -#define STRINGSYM(x) STRINGIT1(SYM(x)) - -#endif diff --git a/libgloss/sparc/cache.c b/libgloss/sparc/cache.c deleted file mode 100644 index 5b6e270..0000000 --- a/libgloss/sparc/cache.c +++ /dev/null @@ -1,147 +0,0 @@ -/* Cache code for SPARClite - * - * Copyright (c) 1998 Cygnus Support - * - * 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 "sparclite.h" - -/* Ancillary registers on the DANlite */ - -#define DIAG 30 -#define ICCR 31 - -/* Bits in the DIAG register */ - -#define ICD 0x40000000 /* ICACHE disable */ -#define DCD 0x20000000 /* DCACHE disable */ - -/* Bits in the ICCR register */ - -#define CE 1 /* cache enable*/ - - -/* Forward declarations. */ - -void flush_i_cache (); - - -/* Determine if this is a DANlite (MB8686x), as opposed to an earlier - SPARClite (MB8683x). This is done by examining the impl and ver - fields in the PSR: - - MB8683x: impl(bit31-28)=0x0; ver(bit27-24)=0xf; - MB8686x: impl(bit31-28)=0x1; ver(bit27-24)=0xe; -*/ - -static int -is_danlite () -{ - static int checked = 0; - static int danlite = 0; - - if (!checked) - { - int psr = read_psr (); - danlite = (psr & 0xff000000) == 0x1e000000; - checked = 1; - } - return danlite; -} - -/* This cache code is known to work on both the 930 & 932 processors. It just - cheats and clears the all of the address space that could contain tags, as - opposed to striding the tags at 8 or 16 word intervals, or using the cache - flush registers, which don't exist on all processors. */ - -void -cache_off () -{ - if (is_danlite ()) - { - /* Disable the ICACHE. Disabling the DCACHE crashes the machine. */ - unsigned int diag = read_asr (DIAG); - write_asr (DIAG, diag | ICD); - } - else - { - write_asi (1, 0, 0); - } -} - -void -cache_on () -{ - if (is_danlite ()) - { - unsigned int diag; - - /* Flush the caches. */ - flush_i_cache (); - - /* Enable the ICACHE and DCACHE */ - diag = read_asr (DIAG); - write_asr (DIAG, diag & ~ (ICD | DCD)); - } - else - { - unsigned long addr; - - cache_off (); /* Make sure the cache is off */ - - /* Reset all of the cache line valid bits */ - - for (addr = 0; addr < 0x1000; addr += 8) - { - write_asi (0xc, addr, 0); /* Clear bank 1, icache */ - write_asi (0xc, addr + 0x80000000, 0); /* Clear bank 2, icache */ - - write_asi (0xe, addr, 0); /* Clear bank 1, dcache */ - write_asi (0xe, addr + 0x80000000, 0); /* Clear bank 2, dcache */ - } - - /* turn on the cache */ - - write_asi (1, 0, 0x35); /* Write buf ena, prefetch buf ena, data - & inst caches enab */ - } -} - -/* Flush the instruction cache. We need to do this for the debugger stub so - that breakpoints, et. al. become visible to the instruction stream after - storing them in memory. - */ - -void -flush_i_cache () -{ - if (is_danlite ()) - { - write_asi (0x31, 0, 0); /* Flush entire i/d caches */ - } - else - { - int cache_reg; - unsigned long addr; - - cache_reg = read_asi (1, 0); /* Read cache/bus interface reg */ - - if (!(cache_reg & 1)) - return; /* Just return if cache is already off */ - - for (addr = 0; addr < 0x1000; addr += 8) - { - write_asi (0xc, addr, 0); /* Clear bank 1, icache */ - write_asi (0xc, addr + 0x80000000, 0); /* Clear bank 2, icache */ - } - } -} diff --git a/libgloss/sparc/configure b/libgloss/sparc/configure deleted file mode 100755 index 8c5c76c..0000000 --- a/libgloss/sparc/configure +++ /dev/null @@ -1,1201 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.12.1 -# 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: - -# 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.12.1" - 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=sparc-stub.c - -# 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 $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -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 - - - -if test "${enable_shared}" = "yes" ; then - echo "Shared libraries not supported for cross compiling, ignored" -fi - -if test "$srcdir" = "." ; then - if test "${with_target_subdir}" != "." ; then - libgloss_topdir="${with_multisrctop}../../.." - else - libgloss_topdir="${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. - - -# 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:570: 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="${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_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - - -# 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:649: 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:670: 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:688: 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}- - - -# 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:722: 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="${IFS}:" - for ac_dir in $PATH; 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:751: 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="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; 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:799: 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:808: \"$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:823: 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:859: 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="${IFS}:" - for ac_dir in $PATH; 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_cpu} in -sparclite*) CPU=SLITE ;; -sparclet*) CPU=SPLET ;; -sparc64*) CPU=SPARC64 ;; -sparc86x*) CPU=SLITE ;; -*) CPU=SPARC ;; -esac - - -case ${target_cpu} in -sparc64*) CYGMONLDSCRIPTTEMPL=${srcdir}/cygmon-sparc64-ld.src ;; -*) CYGMONLDSCRIPTTEMPL=${srcdir}/cygmon.ld.src -esac - -host_makefile_frag=${srcdir}/../config/default.mh -target_makefile_frag=${srcdir}/../config/default.mt - -host_makefile_frag_path=$host_makefile_frag - - -target_makefile_frag_path=$target_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) 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.12.1" - 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%@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%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_DATA@%$INSTALL_DATA%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%@CC@%$CC%g -s%@AS@%$AS%g -s%@AR@%$AR%g -s%@LD@%$LD%g -s%@RANLIB@%$RANLIB%g -s%@CPU@%$CPU%g -s%@host_makefile_frag_path@%$host_makefile_frag_path%g -/@host_makefile_frag@/r $host_makefile_frag -s%@host_makefile_frag@%%g -s%@target_makefile_frag_path@%$target_makefile_frag_path%g -/@target_makefile_frag@/r $target_makefile_frag -s%@target_makefile_frag@%%g -s%@CYGMONLDSCRIPTTEMPL@%$CYGMONLDSCRIPTTEMPL%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/sparc/configure.in b/libgloss/sparc/configure.in deleted file mode 100644 index c836f6c..0000000 --- a/libgloss/sparc/configure.in +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright (c) 1995, 1996 Cygnus Support -# -# 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. -dnl Process this file with autoconf to produce a configure script. -AC_PREREQ(2.5)dnl -AC_INIT(sparc-stub.c) - -if test "${enable_shared}" = "yes" ; then - echo "Shared libraries not supported for cross compiling, ignored" -fi - -if test "$srcdir" = "." ; then - if test "${with_target_subdir}" != "." ; then - libgloss_topdir="${with_multisrctop}../../.." - else - libgloss_topdir="${with_multisrctop}../.." - fi -else - libgloss_topdir="${srcdir}/../.." -fi - -AC_CONFIG_AUX_DIR($libgloss_topdir) - -AC_PROG_INSTALL - -AC_CANONICAL_SYSTEM - -# 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_cpu} in -sparclite*) CPU=SLITE ;; -sparclet*) CPU=SPLET ;; -sparc64*) CPU=SPARC64 ;; -sparc86x*) CPU=SLITE ;; -*) CPU=SPARC ;; -esac -AC_SUBST(CPU) - -case ${target_cpu} in -sparc64*) CYGMONLDSCRIPTTEMPL=${srcdir}/cygmon-sparc64-ld.src ;; -*) CYGMONLDSCRIPTTEMPL=${srcdir}/cygmon.ld.src -esac - -host_makefile_frag=${srcdir}/../config/default.mh -target_makefile_frag=${srcdir}/../config/default.mt - -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) -target_makefile_frag_path=$target_makefile_frag -AC_SUBST(target_makefile_frag_path) -AC_SUBST_FILE(target_makefile_frag) -AC_SUBST(CYGMONLDSCRIPTTEMPL) - -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/sparc/crt0-701.S b/libgloss/sparc/crt0-701.S deleted file mode 100644 index 44ffadc..0000000 --- a/libgloss/sparc/crt0-701.S +++ /dev/null @@ -1,105 +0,0 @@ -/* crt0.S for the sparclet 701. - - At the moment, all the necessary syscalls are here. - Convention has them in a separate file but libgloss is still in - too much flux. */ - - .text - - .global start -start: - -! zero bss - - sethi %hi(_end), %o1 - or %o1, %lo(_end), %o1 - sethi %hi(_edata), %o0 - or %o0, %lo (_edata), %o0 - sub %o1, %o0, %o1 -Lzero_bss: - subcc %o1, 4, %o1 - clr [%o0] - bne Lzero_bss - add %o0, 4, %o0 - -! set up argc, argv, envp (?) - - ld [%sp+64], %o0 - sll %o0, 2, %o2 - add %o2, 4, %o2 - add %sp, 68, %o1 - add %o1, %o2, %o2 - sethi %hi(_environ), %o3 - st %o2, [%o3+%lo(_environ)] - -! call main, exit - - call _main - sub %sp, 32, %sp - call _exit - nop - -! void _exit (int rc) - - .global __exit -__exit: - mov 1, %g1 - ta 0 -! If that does not work, just loop forever. -Lloop_forever: - b Lloop_forever - nop - -! int _open (char *, int) - - .global _open -_open: - mov 5, %g1 - ta 0 - bcc Lnoerr - nop - b Lcerror - nop - -! int _close (int) - - .global _close -_close: - mov 6, %g1 - ta 0 - bcc Lnoerr - nop - b Lcerror - nop - -! int read (int, char *, int) - - .global _read -_read: - mov 3, %g1 - ta 0 - bcc Lnoerr - nop - b Lcerror - nop - -! int write (int, char *, int) - - .global _write -_write: - mov 4, %g1 - ta 0 - bcc Lnoerr - nop - b Lcerror - nop - -Lnoerr: - retl - nop - -Lcerror: - sethi %hi(__impure_ptr), %g1 - st %o0, [%g1+%lo(__impure_ptr)] - retl - mov -1, %o0 diff --git a/libgloss/sparc/crt0.S b/libgloss/sparc/crt0.S deleted file mode 100644 index 90e18c5..0000000 --- a/libgloss/sparc/crt0.S +++ /dev/null @@ -1,186 +0,0 @@ -/* - * C startup code for the Fujitsu SPARClite demo board - * - * Copyright (c) 1995, 1996 Cygnus Support - * - * 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 "asm.h" - -.data - .align 8 - .ascii "DaTa" ! this is the first address in the data section - .long SYM(sdata) -SYM(environ): - .long 0 - - .text - .align 8 - - .globl SYM(_start) -SYM(_start): - .globl SYM(start) -SYM(start): - /* see if the stack is already setup. if not, then default - * to using the value of %sp as set by the ROM monitor - */ - sethi %hi(__stack), %g1 - or %g1,%lo(__stack),%g1 - cmp %g0,%g1 - be 1f - mov %g1, %sp ! set the stack pointer - mov %sp, %fp -1: - - /* zero the bss section */ - sethi %hi(__bss_start),%g2 - or %g2,%lo(__bss_start),%g2 ! start of bss - sethi %hi(_end),%g3 - or %g3,%lo(_end),%g3 ! end of bss - mov %g0,%g1 ! so std has two zeros -zerobss: - std %g0,[%g2] - add %g2,8,%g2 - cmp %g2,%g3 - bleu,a zerobss - nop - -/* - * copy prom & trap vectors to sram. - */ - set 0x30000000, %l0 - set 0xfff8, %l1 - tst %l1 ! Set condition codes - -copyloop: - ldd [%l1], %l2 - std %l2, [%l0 + %l1] - bg copyloop - deccc 8, %l1 - - set 0x30000000, %l0 ! Base of new trap vector - mov %l0, %tbr ! Install the new tbr - - set SYM(win_ovf_trap), %l1 ! Setup window overflow trap - ldd [%l1], %l2 - std %l2, [%l0 + 5 * 16] - ldd [%l1 + 8], %l2 - std %l2, [%l0 + 5 * 16 + 8] - - set SYM(win_unf_trap), %l1 ! Setup window underflow trap - ldd [%l1], %l2 - std %l2, [%l0 + 6 * 16] - ldd [%l1 + 8], %l2 - std %l2, [%l0 + 6 * 16 + 8] - -/* - * Try enabling the FPU by setting EF. If that causes a trap, then we probably - * don't have an FPU. - */ - - ldd [%l0 + 2 * 16], %l4 ! Save original trap routine - set SYM(no_fpu_trap), %l1 ! Install new one - ldd [%l1], %l2 - std %l2, [%l0 + 2 * 16] - - mov %psr, %l0 - sethi %hi(0x1000), %l1 - bset %l1, %l0 -! mov %l0, %psr - - std %l4, [2 * 16] ! Restore original trap routine - - -/* - * Move the data segment from it's ROM address to RAM where it - * belongs. - */ - -relocd: -#if 0 /* This code is broken. FIXME */ - set (_sdata),%g2 ! %g2 = start of data in aout file - set SYM(environ),%g4 ! %g4 = actual data base address - set (_edata),%g3 ! %g3 = end of where data should go - subcc %g3, %g4, %g5 ! %g5 = length of data - - subcc %g4, %g2, %g0 ! need to relocate data ? - ble init - ld [%g4], %g6 - subcc %g6, 1, %g0 - be init -mvdata: - subcc %g5, 8, %g5 - ldd [%g2 + %g5], %g6 - bg mvdata -#endif - -/* - * initialize target specific stuff. Only execute these - * functions it they exist. - */ -init: - sethi %hi(SYM(hardware_init_hook)), %g1 - or %g1,%lo(SYM(hardware_init_hook)),%g1 - cmp %g0,%g1 - be 1f - nop - call SYM(hardware_init_hook) - nop - -1: - sethi %hi(SYM(software_init_hook)), %g1 - or %g1,%lo(SYM(software_init_hook)),%g1 - cmp %g0,%g1 - be 2f - nop - call SYM(software_init_hook) - nop -2: - call SYM(main) - nop - - /* call exit from the C library so atexit gets called, and the - * C++ destructors get run. This calls our exit routine below - * when it's done. - */ - call SYM(exit) - nop - -/* - * This should drop control back to the ROM monitor, if there is - * one. - */ - .globl SYM(_exit) -SYM(_exit): - call 0 - nop - -/* - * Trap handlers. - */ - - .align 8 - -SYM(win_ovf_trap): - sethi %hi(SYM(win_ovf)), %l3 - jmpl %lo(SYM(win_ovf))+%l3, %g0 - mov %wim, %l0 - nop - -SYM(win_unf_trap): - sethi %hi(SYM(win_unf)), %l3 - jmpl %lo(SYM(win_unf))+%l3, %g0 - mov %wim, %l0 - nop - -SYM(no_fpu_trap): ! Come here when no fpu exists. - jmpl %l2, %g0 ! This just skips the - rett %l2+4 ! offending instruction. diff --git a/libgloss/sparc/cygmon-crt0.S b/libgloss/sparc/cygmon-crt0.S deleted file mode 100644 index 272c00d..0000000 --- a/libgloss/sparc/cygmon-crt0.S +++ /dev/null @@ -1,144 +0,0 @@ -/* - * C startup code for the Fujitsu SPARClite demo board - * - * Copyright (c) 1995, 1996 Cygnus Support - * - * 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 "asm.h" - -#ifdef TARGET_CPU_SPARC64 -#define STACK_BIAS 2047 -#define SAVE_SIZE -128 -#else -#define SAVE_SIZE -64 -#endif - -.data - .align 8 -SYM(environ): ! this is the first address in the data section - .long 0 - -SYM(argc): - .long 0 - - .text - .align 8 - - .globl SYM(start) - .globl start -SYM(start): -start: - /* see if the stack is already setup. if not, then default - * to using the value of %sp as set by the ROM monitor - */ - sethi %hi(__stack), %g1 - or %g1,%lo(__stack),%g1 - cmp %g0,%g1 - be 1f - nop -#ifdef STACK_BIAS - sub %g1, STACK_BIAS, %g1 -#endif - mov %g1, %sp ! set the stack pointer - mov 0, %fp -1: - - /* zero the bss section */ - sethi %hi(__bss_start),%g2 - or %g2,%lo(__bss_start),%g2 ! start of bss - sethi %hi(_end),%g3 - or %g3,%lo(_end),%g3 ! end of bss - mov %g0,%g1 ! so std has two zeros -zerobss: - std %g0,[%g2] - add %g2,8,%g2 - cmp %g2,%g3 - bleu,a zerobss - nop - -/* - * initialize target specific stuff. Only execute these - * functions it they exist. - */ -init: - sethi %hi(SYM(hardware_init_hook)), %g1 - or %g1,%lo(SYM(hardware_init_hook)),%g1 - cmp %g0,%g1 - be 1f - nop - call SYM(hardware_init_hook) - nop - -1: - sethi %hi(SYM(software_init_hook)), %g1 - or %g1,%lo(SYM(software_init_hook)),%g1 - cmp %g0,%g1 - be 2f - nop - call SYM(software_init_hook) - nop -2: - set SYM(__sigtramp), %o0 - call SYM(__install_signal_handler) - nop - - set do_dtors,%o0 - call SYM(atexit) - nop - - call do_ctors - nop - - set SYM(argc), %o0 - call SYM(__getProgramArgs) - nop - - mov %o0, %o1 - set SYM(argc), %o0 - ld [%o0], %o0 - call SYM(main) - nop - - /* call exit from the C library so atexit gets called, and the - * C++ destructors get run. This calls our exit routine below - * when it's done. - */ - call SYM(exit) - nop - -do_ctors: - save %sp,SAVE_SIZE,%sp - set __CTOR_LIST__,%l0 -our_entry: - ld [%l0],%l1 - add %l0,4,%l0 - tst %l1 -1: - beq 2f - nop - ld [%l0],%l2 - add %l0,4,%l0 - - call %l2 - nop - deccc %l1 - b 1b - nop -2: - ret - restore - -do_dtors: - save %sp,SAVE_SIZE,%sp - set __DTOR_LIST__,%l0 - b our_entry - nop diff --git a/libgloss/sparc/cygmon-salib.c b/libgloss/sparc/cygmon-salib.c deleted file mode 100644 index 4f65c0f..0000000 --- a/libgloss/sparc/cygmon-salib.c +++ /dev/null @@ -1,220 +0,0 @@ -#ifdef TARGET_CPU_SPARC64 -#include <sys/types.h> -#endif -#include <sys/time.h> - -void -putTtyChar(int c) -{ - /* 2 is fork under solaris; bad juju */ - asm(" mov %i0,%o0 - or %g0,2,%g1 - ta 8 - nop"); -} - -int -write(int fd,char *ptr,int amt) -{ - if (fd < 0 || fd > 2) - { - return -1; - } - asm(" or %g0, 4, %g1 - ta 8 - nop"); - return amt; -} - -int -read(int fd,char *ptr,int amt) -{ - if (fd < 0 || fd > 2) - { - return -1; - } - asm(" or %g0, 3, %g1 - ta 8 - nop"); - return amt; -} - -void -_exit(int code) -{ - while(1) { - asm(" or %g0,1,%g1 - ta 8 - nop - ta 1 - nop"); - } -} - -int -setitimer(int which, const struct itimerval *value, struct itimerval *ovalue) -{ - asm(" or %g0, 158, %g1 - ta 8 - nop"); -} - - - -long -sbrk (unsigned long amt) -{ - extern char _end; - static char *ptr = 0; - char *res; - if (ptr == 0) - ptr = &_end; - if (amt == 0) - return (long)ptr; - - if (((long)ptr) % 8) - ptr = ptr + (8 - (((long)(ptr)) % 8)); - res = ptr; - ptr += amt; - return (long)res; -} - -#ifdef TARGET_CPU_SPARC64 -long -_sbrk_r (void *foo, unsigned long amt) -{ - return sbrk(amt); -} - -long -_fstat_r (void *foo, void *bar, void *baz) -{ - return -1; -} - -long -_brk_r (void *foo) -{ - return sbrk(0); -} - -int -_open_r (char *filename, int mode) -{ - return open (filename, mode); -} - -int -_close_r (int fd) -{ - return close(fd); -} -#endif - -int -close (int fd) -{ - return 0; -} - -int -fstat(int des,void *buf) -{ - return -1; -} - -int -lseek(int des,unsigned long offset, int whence) -{ - return -1; -} - -int -isatty(int fd) -{ - return (fd < 3); -} - -int -kill (int pid, int signal) -{ - asm ("or %g0, 37, %g1 - ta 8 - nop"); -} - -int -getpid () -{ - return -1; -} - -int -getitimer (int which, struct itimerval *value) -{ - asm ("or %g0, 157, %g1 - ta 8 - nop"); -} - -void -__install_signal_handler (void *func) -{ - asm ("mov %o0, %o1 - mov %g0, %o0 - or %g0, 48, %g1 - ta 8 - nop"); -} - -int -gettimeofday (struct timeval *tp, struct timezone *tzp) -{ - asm ("or %g0, 156, %g1 - ta 8 - nop"); -} - -int -stime (long *seconds) -{ - asm ("or %g0, 25, %g1 - ta 8 - nop"); -} - -int -add_mapping (long vma, long pma, long size) -{ - asm ("or %g0, 115, %g1 - ta 8 - nop"); -} - -int -remove_mapping (long vma, long vma_end) -{ - asm ("or %g0, 117, %g1 - ta 8 - nop"); -} - -int -open (char *filename, int mode) -{ - return -1; -} - -void * -__getProgramArgs (int *argv) -{ - int *res; - - /* 184 is tsolsys under solaris; bad juju */ - asm ("mov %1, %%o0 - or %%g0, 184, %%g1 - ta 8 - nop - mov %%o0, %0" : "=r" (res) : "r" (argv): "g1"); - return res; -} diff --git a/libgloss/sparc/cygmon-sparc64-ld.src b/libgloss/sparc/cygmon-sparc64-ld.src deleted file mode 100644 index efa0da1..0000000 --- a/libgloss/sparc/cygmon-sparc64-ld.src +++ /dev/null @@ -1,159 +0,0 @@ -/* - *uncomment this if you want the linker to output srecords. -OUTPUT_FORMAT(srec) - * - */ -ENTRY(start) -OUTPUT_ARCH(TARGET_OBJ_FORMAT) -SEARCH_DIR(.) -STARTUP(cygmon-crt0.o) -GROUP(cygmon-salib.o -lc -lgcc -lc) - -/* - * The memory map looks like this: - * +--------------------+ <- low memory - * | .text | - * | _stext | - * | _etext | - * | ctor list | the ctor and dtor lists are for - * | dtor list | C++ support - * | _end_text | - * +--------------------+ - * | .data | initialized data goes here - * | _sdata | - * | _edata | - * +--------------------+ - * | .bss | - * | __bss_start | start of bss, cleared by crt0 - * | _end | start of heap, used by sbrk() - * +--------------------+ - * | heap space | - * | _ENDHEAP | - * | stack space | - * | __stack | top of stack - * +--------------------+ <- high memory - */ - -_STACK_SIZE = (16 * 1024); -_RAM_SIZE = 1M; -_RAM_START = 0x4000; -_RAM_END = _RAM_START + _RAM_SIZE; - -/* - * Setup the standard memory map. The stack grows down towards low memory. - */ -MEMORY -{ - ram : ORIGIN = 0x4000, LENGTH = 1M -} - -__stack = (_RAM_START + _RAM_SIZE - 4 * 16) - _STACK_SIZE; - -/* - * All the symbols that might be accessed from C code need to be - * listed twice, once with an additional underscore. aout format needs - * and extra underscore, whereas coff & elf doesn't. This is to work - * with both. - */ -/* - * Initalize some symbols to be zero so we can reference them in the - * crt0 without core dumping. These functions are all optional, but - * we do this so we can have our crt0 always use them if they exist. - * This is so BSPs work better when using the crt0 installed with gcc. - * We have to initalize them twice, so we cover a.out (which prepends - * an underscore) and coff object file formats. - */ -PROVIDE (hardware_init_hook = 0); -PROVIDE (_hardware_init_hook = 0); -PROVIDE (software_init_hook = 0); -PROVIDE (_software_init_hook = 0); -SECTIONS -{ - .text : { - stext = .; - _stext = .; - CREATE_OBJECT_SYMBOLS - *(.text) - __CTOR_LIST__ = .; - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) - *(.ctors) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) - *(.dtors) - LONG(0) - __DTOR_END__ = .; - *(.init) - *(.lit) - *(.rodata) - *(.shdata) - *(.eh_frame) - *(.gnu.linkonce.t*) - *(.gnu.linkonce.r*) - *(.gcc_except_table) - *(.fini) - _etext = .; - } > ram - .shbss SIZEOF(.text) + ADDR(.text) : { - *(.shbss) - } - .talias : { } > ram - .data : { - sdata = .; - _sdata = .; - *(.data) - *(.gnu.linkonce.d*) - edata = .; - _edata = .; - } > ram - .bss SIZEOF(.data) + ADDR(.data) : { - sbss = . ; - _sbss = . ; - __bss_start = ALIGN(0x8); - __bss_start = ALIGN(0x8); - *(.bss) - *(COMMON) - end = ALIGN(0x8); - _end = ALIGN(0x8); - __end = ALIGN(0x8); - ebss = .; - _ebss = .; - } - .mstack : { } > ram - .rstack : { } > ram - /* 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) } - /* 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) } - /* These must appear regardless of . */ -} diff --git a/libgloss/sparc/cygmon.ld.src b/libgloss/sparc/cygmon.ld.src deleted file mode 100644 index bf06825..0000000 --- a/libgloss/sparc/cygmon.ld.src +++ /dev/null @@ -1,195 +0,0 @@ -/* - *uncomment this if you want the linker to output srecords. -OUTPUT_FORMAT(srec) - * - */ -ENTRY(start) -OUTPUT_ARCH(TARGET_OBJ_FORMAT) -SEARCH_DIR(.) -STARTUP(cygmon-crt0.o) -GROUP(cygmon-salib.o -lc -lgcc -lc) - -/* - * The memory map looks like this: - * +--------------------+ <- low memory - * | .text | - * | _stext | - * | _etext | - * | ctor list | the ctor and dtor lists are for - * | dtor list | C++ support - * | _end_text | - * +--------------------+ - * | .data | initialized data goes here - * | _sdata | - * | _edata | - * +--------------------+ - * | .bss | - * | __bss_start | start of bss, cleared by crt0 - * | _end | start of heap, used by sbrk() - * +--------------------+ - * | heap space | - * | _ENDHEAP | - * | stack space | - * | __stack | top of stack - * +--------------------+ <- high memory - */ - -_STACK_SIZE = (16 * 1024); -_RAM_SIZE = 1M; -_RAM_START = TARGET_RAM_START; -_RAM_END = _RAM_START + _RAM_SIZE; - -/* - * Setup the standard memory map. The stack grows down towards low memory. - */ -MEMORY -{ - ram : ORIGIN = TARGET_RAM_START, LENGTH = 1M -} - -__stack = (_RAM_START + _RAM_SIZE - 4 * 16) - _STACK_SIZE; - -/* - * All the symbols that might be accessed from C code need to be - * listed twice, once with an additional underscore. aout format needs - * and extra underscore, whereas coff & elf doesn't. This is to work - * with both. - */ -/* - * Initalize some symbols to be zero so we can reference them in the - * crt0 without core dumping. These functions are all optional, but - * we do this so we can have our crt0 always use them if they exist. - * This is so BSPs work better when using the crt0 installed with gcc. - * We have to initalize them twice, so we cover a.out (which prepends - * an underscore) and coff object file formats. - */ -PROVIDE (hardware_init_hook = 0); -PROVIDE (_hardware_init_hook = 0); -PROVIDE (software_init_hook = 0); -PROVIDE (_software_init_hook = 0); -SECTIONS -{ - .text : { - stext = .; - _stext = .; - CREATE_OBJECT_SYMBOLS - *(.text) - __CTOR_LIST__ = .; - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) - KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*crtend.o(.ctors)) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) - KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*crtend.o(.dtors)) - LONG(0) - __DTOR_END__ = .; - *(.init) - *(.lit) - *(.rodata) - *(.shdata) - *(.eh_frame) - *(.gnu.linkonce.t*) - *(.gnu.linkonce.r*) - *(.gcc_except_table) - *(.fini) - _etext = .; - } > ram - .shbss SIZEOF(.text) + ADDR(.text) : { - *(.shbss) - } - .talias : { } > ram - .data : { - sdata = .; - _sdata = .; - *(.data) - *(.gnu.linkonce.d*) - edata = .; - _edata = .; - } > ram - .bss SIZEOF(.data) + ADDR(.data) : { - sbss = . ; - _sbss = . ; - __bss_start = ALIGN(0x8); - __bss_start = ALIGN(0x8); - *(.bss) - *(COMMON) - end = ALIGN(0x8); - _end = ALIGN(0x8); - __end = ALIGN(0x8); - ebss = .; - _ebss = .; - } - .mstack : { } > ram - .rstack : { } > ram - .stab 0 (NOLOAD) : { - [ .stab ] - } - .stabstr 0 (NOLOAD) : - { - [ .stabstr ] - } -/* 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 (NOLOAD) : - { - [ .debug ] - } - .line 0 (NOLOAD) : - { - [ .line ] - } -/* GNU DWARF 1 extensions */ - .debug_srcinfo 0 (NOLOAD) : - { - [ .debug_srcinfo ] - } - .debug_sfnames 0 (NOLOAD) : - { - [ .debug_sfnames ] - } -/* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 (NOLOAD) : - { - [ .debug_aranges ] - } - .debug_pubnames 0 (NOLOAD) : - { - [ .debug_pubnames ] - } -/* DWARF 2 */ - .debug_info 0 (NOLOAD) : - { - [ .debug_info ] - } - .debug_abbrev 0 (NOLOAD) : - { - [ .debug_abbrev ] - } - .debug_line 0 (NOLOAD) : - { - [ .debug_line ] - } - .debug_frame 0 (NOLOAD) : - { - [ .debug_frame ] - } - .debug_str 0 (NOLOAD) : - { - [ .debug_str ] - } - .debug_loc 0 (NOLOAD) : - { - [ .debug_loc ] - } - .debug_macinfo 0 (NOLOAD) : - { - [ .debug_macinfo ] - } -} diff --git a/libgloss/sparc/dtor.C b/libgloss/sparc/dtor.C deleted file mode 100644 index abde4f1..0000000 --- a/libgloss/sparc/dtor.C +++ /dev/null @@ -1,25 +0,0 @@ -#include <stdio.h> - -extern "C" void print (char *, ...); - -class foo -{ -public: - foo () { print ("ctor\n"); } - ~foo () { print ("dtor\n"); } -}; - -foo x; - -main () -{ - outbyte ('&'); - outbyte ('@'); - outbyte ('$'); - outbyte ('%'); - print ("FooBar\r\n"); - - /* whew, we made it */ - print ("\r\nDone...\r\n"); -/* fflush(stdout); */ -} diff --git a/libgloss/sparc/elfsim.ld b/libgloss/sparc/elfsim.ld deleted file mode 100644 index d1831be..0000000 --- a/libgloss/sparc/elfsim.ld +++ /dev/null @@ -1,202 +0,0 @@ -/* Linker script for running ELF programs in the Sparc simulator */ - -/* OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparcle") */ -/* OUTPUT_FORMAT("elf32-sparc") */ -OUTPUT_ARCH(sparc) -STARTUP(traps.o) -INPUT(erc32-crt0.o) -ENTRY(_trap_table) -GROUP(-lc -lerc32 -lgcc) /* -lerc32 used to be -lsim */ - -SEARCH_DIR(.) -/* Do we need any of these for elf? - __DYNAMIC = 0; */ - -/* - * The memory map looks like this: - * +--------------------+ <- low memory - * | .text | - * | _stext | - * | _etext | - * | ctor list | the ctor and dtor lists are for - * | dtor list | C++ support - * | _end_text | - * +--------------------+ - * | .data | initialized data goes here - * | _sdata | - * | _edata | - * +--------------------+ - * | .bss | - * | __bss_start | start of bss, cleared by crt0 - * | _end | start of heap, used by sbrk() - * +--------------------+ - * | heap space | - * | _ENDHEAP | - * | stack space | - * | __stack | top of stack - * +--------------------+ <- high memory - */ - -/* - * User modifiable values: - * - * _CLOCK_SPEED in Mhz (used to program the counter/timers) - * - * _PROM_SIZE size of PROM (permissible values are 4K, 8K, 16K - * 32K, 64K, 128K, 256K, and 512K) - * _RAM_SIZE size of RAM (permissible values are 256K, 512K, - * 1MB, 2Mb, 4Mb, 8Mb, 16Mb, and 32Mb) - * - * These symbols are only used in assembler code, so they only need to - * be listed once. They should always be refered to without SYM(). - */ - -_CLOCK_SPEED = 10; - -_PROM_SIZE = 4M; -_RAM_SIZE = 256K; - -_RAM_START = 0x02000000; -_RAM_END = _RAM_START + _RAM_SIZE; -_STACK_SIZE = (16 * 1024); -_PROM_START = 0x00000000; -_PROM_END = _PROM_START + _PROM_SIZE; - - -/* - * Base address of the on-CPU peripherals - */ - -_ERC32_MEC = 0x01f80000; - -/* - * Setup the memory map for the SIS simulator. - * stack grows up towards low memory. - */ - -MEMORY -{ - rom : ORIGIN = 0x00000000, LENGTH = 4M - ram (rwx) : ORIGIN = 0x02000000, LENGTH = 2M -} - -__stack = _RAM_START + _RAM_SIZE - 4 * 16; -__trap_stack = (_RAM_START + _RAM_SIZE - 4 * 16) - _STACK_SIZE; - -/* - * All the symbols that might be accessed from C code need to be - * listed twice, once with an additional underscore. aout format needs - * and extra underscore, whereas coff & elf doesn't. This is to work - * with both. - */ -SECTIONS -{ - .text : - { - _stext = .; - PROVIDE (stext = .); - __EH_FRAME_BEGIN__ = .; - *(.text) - _etext = .; - PROVIDE (etext = .); - - /* For a.out. */ - CONSTRUCTORS - - /* For ELF. */ - __CTOR_LIST__ = .; - LONG(-1) - KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*crtend.o(.ctors)) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG(-1) - KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*crtend.o(.dtors)) - LONG(0) - __DTOR_END__ = .; - - *(.init) - *(.lit) - *(.rodata) - *(.shdata) - *(.eh_frame) - *(.gnu.linkonce.t*) - *(.gnu.linkonce.r*) - *(.gcc_except_table) - *(.fini) - - _endtext = .; - PROVIDE(endtext = .); - } > ram - - .shbss SIZEOF(.text) + ADDR(.text) : - { - *(.shbss) - } - - .talias : { } > ram - - .data : - { - _sdata = .; - PROVIDE (sdata = .); - *(.data) - *(.data.*) - *(.gnu.linkonce.d*) - _edata = .; - PROVIDE (edata = .); - } > ram - - .bss SIZEOF(.data) + ADDR(.data) : - { - _sbss = . ; - PROVIDE (sbss = . ); - __bss_start = ALIGN(0x8); - *(.bss) - *(COMMON) - _ebss = .; - PROVIDE (ebss = .); - _end = ALIGN(0x8); - __end = ALIGN(0x8); - PROVIDE (end = ALIGN(0x8)); - } - - /* 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) } - /* 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) } - /* These must appear regardless of . */ -} diff --git a/libgloss/sparc/erc32-crt0.S b/libgloss/sparc/erc32-crt0.S deleted file mode 100644 index 8f8b1ea..0000000 --- a/libgloss/sparc/erc32-crt0.S +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This is based on the file srt0.s provided with the binary - * distribution of the SPARC Instruction Simulator (SIS) found - * at ftp://ftp.estec.esa.nl/pub/ws/wsd/erc32. - */ - -#include "asm.h" - - .data - .align 8 -SYM(environ): - .long 0 - - .text - - .globl SYM(start) -SYM(start): - sethi %hi(__stack), %g1 - or %g1,%lo(__stack),%g1 - mov %g1, %sp ! set the stack pointer - mov %sp, %fp - - /* clear the bss */ - sethi %hi(__bss_start),%g2 - or %g2,%lo(__bss_start),%g2 ! start of bss - sethi %hi(_end),%g3 - or %g3,%lo(_end),%g3 ! end of bss - mov %g0,%g1 ! so std has two zeros -zerobss: - std %g0,[%g2] - add %g2,8,%g2 - cmp %g2,%g3 - bleu,a zerobss - nop - - /* move data segment to proper location */ - -#if 0 -relocd: - set (_endtext),%g2 ! g2 = start of data in aout file - set (_environ),%g4 ! g4 = start of where data should go - set (_edata),%g3 ! g3 = end of where data should go - subcc %g3, %g4, %g5 ! g5 = length of data - - subcc %g4, %g2, %g0 ! need to relocate data ? - ble initok - ld [%g4], %g6 - subcc %g6, 1, %g0 - be initok -mvdata: - subcc %g5, 8, %g5 - ldd [%g2 + %g5], %g6 - bg mvdata - std %g6, [%g4 + %g5] - -initok: -#endif - - call SYM(__fix_ctors) - nop - call SYM(main) - nop - - /* call exit from the C library so atexit gets called, and the - * C++ destructors get run. This calls our exit routine below * when it's done. - */ - call SYM(exit) - nop - - .globl SYM(_exit) -SYM(_exit): - set 0xdeadd00d, %o1 ! Magic number for simulator. - ta 0 ! Halt if _main returns ... - nop - diff --git a/libgloss/sparc/erc32-io.c b/libgloss/sparc/erc32-io.c deleted file mode 100644 index 082d9f9..0000000 --- a/libgloss/sparc/erc32-io.c +++ /dev/null @@ -1,47 +0,0 @@ -#define USE_PORT_A - -#define RXADATA (int *) 0x01F800E0 -#define RXBDATA (int *) 0x01F800E4 -#define RXSTAT (int *) 0x01F800E8 - -void -outbyte (int c) -{ - volatile int *rxstat; - volatile int *rxadata; - int rxmask; - - rxstat = RXSTAT; -#ifdef USE_PORT_A - rxadata = RXADATA; - rxmask = 6; -#else - rxadata = RXBDATA; - rxmask = 0x60000; -#endif - - while ((*rxstat & rxmask) == 0); - - *rxadata = c; -} - -int -inbyte (void) -{ - volatile int *rxstat; - volatile int *rxadata; - int rxmask; - - rxstat = RXSTAT; -#ifdef USE_PORT_A - rxadata = RXADATA; - rxmask = 1; -#else - rxadata = RXBDATA; - rxmask = 0x10000; -#endif - - while ((*rxstat & rxmask) == 0); - - return *rxadata; -} diff --git a/libgloss/sparc/erc32-stub.c b/libgloss/sparc/erc32-stub.c deleted file mode 100644 index 71a65b2..0000000 --- a/libgloss/sparc/erc32-stub.c +++ /dev/null @@ -1,363 +0,0 @@ -/* - * Copyright (c) 1996 Cygnus Support - * - * 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 <string.h> -#include <signal.h> -#include "debug.h" -#include "asm.h" -#include "slite.h" - -extern unsigned long rdtbr(); -extern struct trap_entry fltr_proto; -extern void trap_low(); -exception_t default_trap_hook = trap_low; -void target_reset(); -void flush_i_cache(); -char *target_read_registers(unsigned long *); -char *target_write_registers(unsigned long *); -char *target_dump_state(unsigned long *); - -#define NUMREGS 72 - -/* Number of bytes of registers. */ -#define NUMREGBYTES (NUMREGS * 4) - -enum regnames {G0, G1, G2, G3, G4, G5, G6, G7, - O0, O1, O2, O3, O4, O5, SP, O7, - L0, L1, L2, L3, L4, L5, L6, L7, - I0, I1, I2, I3, I4, I5, FP, I7, - - F0, F1, F2, F3, F4, F5, F6, F7, - F8, F9, F10, F11, F12, F13, F14, F15, - F16, F17, F18, F19, F20, F21, F22, F23, - F24, F25, F26, F27, F28, F29, F30, F31, - Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR }; - -/* - * Each entry in the trap vector occupies four words, typically a jump - * to the processing routine. - */ -struct trap_entry { - unsigned sethi_filler:10; - unsigned sethi_imm22:22; - unsigned jmpl_filler:19; - unsigned jmpl_simm13:13; - unsigned long filler[2]; -}; - -/* - * This table contains the mapping between SPARC hardware trap types, and - * signals, which are primarily what GDB understands. It also indicates - * which hardware traps we need to commandeer when initializing the stub. - */ -struct trap_info hard_trap_info[] = { - {1, SIGSEGV}, /* instruction access error */ - {2, SIGILL}, /* privileged instruction */ - {3, SIGILL}, /* illegal instruction */ - {4, SIGEMT}, /* fp disabled */ - {36, SIGEMT}, /* cp disabled */ - {7, SIGBUS}, /* mem address not aligned */ - {9, SIGSEGV}, /* data access exception */ - {10, SIGEMT}, /* tag overflow */ - {128+1, SIGTRAP}, /* ta 1 - normal breakpoint instruction */ - {0, 0} /* Must be last */ -}; - -extern struct trap_entry fltr_proto; -void -exception_handler (int tt, unsigned long routine) -{ - struct trap_entry *tb; /* Trap vector base address */ - - DEBUG (1, "Entering exception_handler()"); - if (tt != 256) { - tb = (struct trap_entry *) (rdtbr() & ~0xfff); - } else { - tt = 255; - tb = (struct trap_entry *) 0; - } - - tb[tt] = fltr_proto; - - tb[tt].sethi_imm22 = routine >> 10; - tb[tt].jmpl_simm13 = routine & 0x3ff; - - DEBUG (1, "Leaving exception_handler()"); -} - -/* - * This is so we can trap a memory fault when reading or writing - * directly to memory. - */ -void -set_mem_fault_trap(enable) - int enable; -{ - extern void fltr_set_mem_err(); - - DEBUG (1, "Entering set_mem_fault_trap()"); - - mem_err = 0; - - if (enable) - exception_handler(9, (unsigned long)fltr_set_mem_err); - else - exception_handler(9, (unsigned long)trap_low); - - DEBUG (1, "Leaving set_mem_fault_trap()"); -} - -/* - * This function does all command procesing for interfacing to gdb. It - * returns 1 if you should skip the instruction at the trap address, 0 - * otherwise. - */ -extern void breakinst(); - -void -handle_exception (registers) - unsigned long *registers; -{ - int sigval; - - /* First, we must force all of the windows to be spilled out */ - - DEBUG (1, "Entering handle_exception()"); - -/* asm("mov %g0, %wim ; nop; nop; nop"); */ - asm(" save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - restore - restore - restore - restore - restore - restore - restore - restore -"); - - if (registers[PC] == (unsigned long)breakinst) { - registers[PC] = registers[NPC]; - registers[NPC] += 4; - } - - /* get the last know signal number from the trap register */ - sigval = computeSignal((registers[TBR] >> 4) & 0xff); - - /* call the main command processing loop for gdb */ - gdb_event_loop (sigval, registers); -} - -/* - * This function will generate a breakpoint exception. It is used at the - * beginning of a program to sync up with a debugger and can be used - * otherwise as a quick means to stop program execution and "break" into - * the debugger. - */ -void -breakpoint() -{ - DEBUG (1, "Entering breakpoint()"); - - if (!initialized) - return; - - asm(" .globl " STRINGSYM(breakinst) " - " STRINGSYM(breakinst) ": ta 128+1 - nop - nop - "); -} - -/* - * This is just a test vector for debugging excpetions. - */ -void -bad_trap(tt) -int tt; -{ - print ("Got a bad trap #"); - outbyte (tt); - outbyte ('\n'); - asm("ta 0 - nop - nop - "); -} - -/* - * This is just a test vector for debugging excpetions. - */ -void -soft_trap(tt) -int tt; -{ - print ("Got a soft trap #"); - outbyte (tt); - outbyte ('\n'); - asm("ta 0 - nop - nop - "); -} - -/* - * Flush the instruction cache. We need to do this for the debugger stub so - * that breakpoints, et. al. become visible to the instruction stream after - * storing them in memory. - * - * For the sparclite, we need to do something here, but for a standard - * sparc (which SIS simulates), we don't. - */ - -void -flush_i_cache () -{ -} - -/* - * This will reset the processor, so we never return from here. - */ -void -target_reset() -{ - asm ("call 0 - nop "); -} - -/* - * g - read registers. - * no params. - * returns a vector of words, size is NUM_REGS. - */ -char * -target_read_registers(unsigned long *registers) -{ - char *ptr; - unsigned long *sp; - - DEBUG (1, "In target_read_registers()"); - - ptr = packet_out_buf; - ptr = mem2hex((char *)registers, ptr, 16 * 4, 0); /* G & O regs */ - ptr = mem2hex((unsigned char *)(sp + 0), ptr, 16 * 4, 0); /* L & I regs */ - memset(ptr, '0', 32 * 8); /* Floating point */ - mem2hex((char *)®isters[Y], - ptr + 32 * 4 * 2, - 8 * 4, - 0); /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ - return (ptr); -} - -/* - * G - write registers. - * param is a vector of words, size is NUM_REGS. - * returns an OK or an error number. - */ -char * -target_write_registers(unsigned long *registers) -{ - unsigned char *ptr; - unsigned long *sp; - unsigned long *newsp, psr; - - DEBUG (1, "In target_write_registers()"); - - psr = registers[PSR]; - - ptr = &packet_in_buf[1]; - - hex2mem(ptr, (char *)registers, 16 * 4, 0); /* G & O regs */ - hex2mem(ptr + 16 * 4 * 2, (unsigned char *)(sp + 0), 16 * 4, 0); /* L & I regs */ - hex2mem(ptr + 64 * 4 * 2, (char *)®isters[Y], - 8 * 4, 0); /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ - - /* - * see if the stack pointer has moved. If so, then copy the saved - * locals and ins to the new location. This keeps the window - * overflow and underflow routines happy. - */ - - newsp = (unsigned long *)registers[SP]; - if (sp != newsp) - sp = memcpy(newsp, sp, 16 * 4); - - /* Don't allow CWP to be modified. */ - - if (psr != registers[PSR]) - registers[PSR] = (psr & 0x1f) | (registers[PSR] & ~0x1f); - - return (ptr); -} - -char * -target_dump_state(unsigned long *registers) -{ - int tt; /* Trap type */ - int sigval; - char *ptr; - unsigned long *sp; - - DEBUG (1, "In target_dump_state()"); - - sp = (unsigned long *)registers[SP]; - - tt = (registers[TBR] >> 4) & 0xff; - - /* reply to host that an exception has occurred */ - sigval = computeSignal(tt); - ptr = packet_out_buf; - - *ptr++ = 'T'; - *ptr++ = hexchars[sigval >> 4]; - *ptr++ = hexchars[sigval & 0xf]; - - *ptr++ = hexchars[PC >> 4]; - *ptr++ = hexchars[PC & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((unsigned char *)®isters[PC], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[FP >> 4]; - *ptr++ = hexchars[FP & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((unsigned char *)(sp + 8 + 6), ptr, 4, 0); /* FP */ - *ptr++ = ';'; - - *ptr++ = hexchars[SP >> 4]; - *ptr++ = hexchars[SP & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((unsigned char *)&sp, ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[NPC >> 4]; - - return (packet_out_buf); -} - -void -write_pc(unsigned long *registers, unsigned long addr) -{ - DEBUG (1, "In write_pc"); - - registers[PC] = addr; - registers[NPC] = addr + 4; -} diff --git a/libgloss/sparc/erc32.ld b/libgloss/sparc/erc32.ld deleted file mode 100644 index 179dcc0..0000000 --- a/libgloss/sparc/erc32.ld +++ /dev/null @@ -1,146 +0,0 @@ -/* - *uncomment this if you want the linker to output srecords. -OUTPUT_FORMAT(srec) - * - */ -STARTUP(traps.o) -INPUT(sim-crt0.o) -OUTPUT_ARCH(sparc) -SEARCH_DIR(.) -__DYNAMIC = 0; -GROUP(-lc -lsim -lgcc) - -/* - * The memory map looks like this: - * +--------------------+ <- low memory - * | .text | - * | _stext | - * | _etext | - * | ctor list | the ctor and dtor lists are for - * | dtor list | C++ support - * | _end_text | - * +--------------------+ - * | .data | initialized data goes here - * | _sdata | - * | _edata | - * +--------------------+ - * | .bss | - * | __bss_start | start of bss, cleared by crt0 - * | _end | start of heap, used by sbrk() - * +--------------------+ - * | heap space | - * | _ENDHEAP | - * | stack space | - * | __stack | top of stack - * +--------------------+ <- high memory - */ - -/* - * User modifiable values: - * - * _CLOCK_SPEED in Mhz (used to program the counter/timers) - * - * _PROM_SIZE size of PROM (permissible values are 4K, 8K, 16K - * 32K, 64K, 128K, 256K, and 512K) - * _RAM_SIZE size of RAM (permissible values are 256K, 512K, - * 1MB, 2Mb, 4Mb, 8Mb, 16Mb, and 32Mb) - * - * These symbols are only used in assembler code, so they only need to - * be listed once. They should always be refered to without SYM(). - */ - -_CLOCK_SPEED = 10; - -_PROM_SIZE = 4M; -_RAM_SIZE = 2M; - -_RAM_START = 0x02020000; -_RAM_END = _RAM_START + _RAM_SIZE; -_STACK_SIZE = (16 * 1024); -_PROM_START = 0x00000000; -_PROM_END = _PROM_START + _PROM_SIZE; - - -/* - * Base address of the on-CPU peripherals - */ - -_ERC32_MEC = 0x01f80000; - -/* - * Setup the memory map for the SIS simulator. - * stack grows up towards low memory. - */ -/* -MEMORY -{ - rom : ORIGIN = 0x00000000, LENGTH = 4M - ram (rwx) : ORIGIN = 0x02000000, LENGTH = 2M -} -*/ - -__stack = _RAM_START + _RAM_SIZE - 4 * 16; -__trap_stack = (_RAM_START + _RAM_SIZE - 4 * 16) - _STACK_SIZE; - -/* - * All the symbols that might be accessed from C code need to be - * listed twice, once with an additional underscore. aout format needs - * and extra underscore, whereas coff & elf doesn't. This is to work - * with both. - */ -SECTIONS -{ - .text 0x02000000 : { - stext = .; - _stext = .; - *(.text) - _etext = .; - __CTOR_LIST__ = .; - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) - *(.ctors) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) - *(.dtors) - LONG(0) - __DTOR_END__ = .; - *(.lit) - *(.shdata) - _endtext = .; - } > ram - .shbss SIZEOF(.text) + ADDR(.text) : { - *(.shbss) - } - .talias : { } > ram - .data : { - sdata = .; - _sdata = .; - *(.data) - edata = .; - _edata = .; - } > ram - .bss SIZEOF(.data) + ADDR(.data) : - { - sbss = . ; - _sbss = . ; - __bss_start = ALIGN(0x8); - *(.bss) - *(COMMON) - end = ALIGN(0x8); - _end = ALIGN(0x8); - __end = ALIGN(0x8); - ebss = .; - _ebss = .; - } - .mstack : { } > ram - .rstack : { } > ram - .stab 0 (NOLOAD) : - { - [ .stab ] - } - .stabstr 0 (NOLOAD) : - { - [ .stabstr ] - } -} diff --git a/libgloss/sparc/ex930.ld b/libgloss/sparc/ex930.ld deleted file mode 100644 index b501b2e..0000000 --- a/libgloss/sparc/ex930.ld +++ /dev/null @@ -1,160 +0,0 @@ -/* - *uncomment this if you want the linker to output srecords. -OUTPUT_FORMAT(srec) - * - */ -ENTRY(_start) -STARTUP(crt0.o) -OUTPUT_ARCH(sparc) -SEARCH_DIR(.) -__DYNAMIC = 0; -GROUP (-lc -lslite930 -lgcc) - -/* - * The memory map looks like this: - * +--------------------+ <- low memory - * | .text | - * | _stext | - * | _etext | - * | ctor list | the ctor and dtor lists are for - * | dtor list | C++ support - * | _end_text | - * +--------------------+ - * | .data | initialized data goes here - * | _sdata | - * | _edata | - * +--------------------+ - * | .bss | - * | __bss_start | start of bss, cleared by crt0 - * | _end | start of heap, used by sbrk() - * +--------------------+ - * | heap space | - * | _ENDHEAP | - * | stack space | - * | __stack | top of stack - * +--------------------+ <- high memory - */ - -_STACK_SIZE = (16 * 1024); -_RAM_SIZE = 2M; -_RAM_START = 0x40000000; -_RAM_END = _RAM_START + _RAM_SIZE; - -/* - * Base address of the on-CPU peripherals. This is for compatability - * with the simulator. - */ - -_ERC32_MEC = 0x0; - -/* - * Setup the memory map of the MB86931-EB Board (ex931) - * stack grows down towards low memory. - */ -MEMORY -{ - ram (rwx) : ORIGIN = 0x40000000, LENGTH = 2M -} - -__stack = _RAM_START + _RAM_SIZE - 4 * 16; -__trap_stack = (_RAM_START + _RAM_SIZE - 4 * 16) - _STACK_SIZE; - -/* - * All the symbols that might be accessed from C code need to be - * listed twice, once with an additional underscore. aout format needs - * and extra underscore, whereas coff & elf doesn't. This is to work - * with both. - */ -/* - * Initalize some symbols to be zero so we can reference them in the - * crt0 without core dumping. These functions are all optional, but - * we do this so we can have our crt0 always use them if they exist. - * This is so BSPs work better when using the crt0 installed with gcc. - * We have to initalize them twice, so we cover a.out (which prepends - * an underscore) and coff object file formats. - */ -PROVIDE (hardware_init_hook = 0); -PROVIDE (_hardware_init_hook = 0); -PROVIDE (software_init_hook = 0); -PROVIDE (_software_init_hook = 0); -SECTIONS -{ - .text : { - stext = .; - _stext = .; - CREATE_OBJECT_SYMBOLS - *(.text) - __CTOR_LIST__ = .; - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) - *(.ctors) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) - *(.dtors) - LONG(0) - __DTOR_END__ = .; - _etext = .; - *(.lit) - *(.shdata) - } > ram - .shbss SIZEOF(.text) + ADDR(.text) : { - *(.shbss) - } - .talias : { } > ram - .data : { - sdata = .; - _sdata = .; - *(.data) - edata = .; - _edata = .; - } > ram - .bss SIZEOF(.data) + ADDR(.data) : { - sbss = . ; - _sbss = . ; - __bss_start = ALIGN(0x8); - __bss_start = ALIGN(0x8); - *(.bss) - *(COMMON) - end = ALIGN(0x8); - _end = ALIGN(0x8); - __end = ALIGN(0x8); - ebss = .; - _ebss = .; - } - .mstack : { } > ram - .rstack : { } > ram - .stab 0 (NOLOAD) : { - [ .stab ] - } - .stabstr 0 (NOLOAD) : - { - [ .stabstr ] - } - /* 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) } - /* 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) } - /* These must appear regardless of . */ -} diff --git a/libgloss/sparc/ex931.ld b/libgloss/sparc/ex931.ld deleted file mode 100644 index 26ffb4d..0000000 --- a/libgloss/sparc/ex931.ld +++ /dev/null @@ -1,160 +0,0 @@ -/* - *uncomment this if you want the linker to output srecords. -OUTPUT_FORMAT(srec) - * - */ -ENTRY(_start) -STARTUP(crt0.o) -OUTPUT_ARCH(sparc) -SEARCH_DIR(.) -__DYNAMIC = 0; -GROUP (-lc -lslite931 -lgcc) - -/* - * The memory map looks like this: - * +--------------------+ <- low memory - * | .text | - * | _stext | - * | _etext | - * | ctor list | the ctor and dtor lists are for - * | dtor list | C++ support - * | _end_text | - * +--------------------+ - * | .data | initialized data goes here - * | _sdata | - * | _edata | - * +--------------------+ - * | .bss | - * | __bss_start | start of bss, cleared by crt0 - * | _end | start of heap, used by sbrk() - * +--------------------+ - * | heap space | - * | _ENDHEAP | - * | stack space | - * | __stack | top of stack - * +--------------------+ <- high memory - */ - -_STACK_SIZE = (16 * 1024); -_RAM_SIZE = 2M; -_RAM_START = 0x40000000; -_RAM_END = _RAM_START + _RAM_SIZE; - -/* - * Base address of the on-CPU peripherals. This is for compatability - * with the simulator. - */ - -_ERC32_MEC = 0x0; - -/* - * Setup the memory map of the MB86931-EB Board (ex931) - * stack grows down towards low memory. - */ -MEMORY -{ - ram (rwx) : ORIGIN = 0x40000000, LENGTH = 2M -} - -__stack = _RAM_START + _RAM_SIZE - 4 * 16; -__trap_stack = (_RAM_START + _RAM_SIZE - 4 * 16) - _STACK_SIZE; - -/* - * All the symbols that might be accessed from C code need to be - * listed twice, once with an additional underscore. aout format needs - * and extra underscore, whereas coff & elf doesn't. This is to work - * with both. - */ -/* - * Initalize some symbols to be zero so we can reference them in the - * crt0 without core dumping. These functions are all optional, but - * we do this so we can have our crt0 always use them if they exist. - * This is so BSPs work better when using the crt0 installed with gcc. - * We have to initalize them twice, so we cover a.out (which prepends - * an underscore) and coff object file formats. - */ -PROVIDE (hardware_init_hook = 0); -PROVIDE (_hardware_init_hook = 0); -PROVIDE (software_init_hook = 0); -PROVIDE (_software_init_hook = 0); -SECTIONS -{ - .text : { - stext = .; - _stext = .; - CREATE_OBJECT_SYMBOLS - *(.text) - __CTOR_LIST__ = .; - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) - *(.ctors) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) - *(.dtors) - LONG(0) - __DTOR_END__ = .; - _etext = .; - *(.lit) - *(.shdata) - } > ram - .shbss SIZEOF(.text) + ADDR(.text) : { - *(.shbss) - } - .talias : { } > ram - .data : { - sdata = .; - _sdata = .; - *(.data) - edata = .; - _edata = .; - } > ram - .bss SIZEOF(.data) + ADDR(.data) : { - sbss = . ; - _sbss = . ; - __bss_start = ALIGN(0x8); - __bss_start = ALIGN(0x8); - *(.bss) - *(COMMON) - end = ALIGN(0x8); - _end = ALIGN(0x8); - __end = ALIGN(0x8); - ebss = .; - _ebss = .; - } - .mstack : { } > ram - .rstack : { } > ram - .stab 0 (NOLOAD) : { - [ .stab ] - } - .stabstr 0 (NOLOAD) : - { - [ .stabstr ] - } - /* 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) } - /* 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) } - /* These must appear regardless of . */ -} diff --git a/libgloss/sparc/ex934.ld b/libgloss/sparc/ex934.ld deleted file mode 100644 index 7d1d5ed..0000000 --- a/libgloss/sparc/ex934.ld +++ /dev/null @@ -1,160 +0,0 @@ -/* - *uncomment this if you want the linker to output srecords. -OUTPUT_FORMAT(srec) - * - */ -ENTRY(_start) -STARTUP(crt0.o) -OUTPUT_ARCH(sparc) -SEARCH_DIR(.) -__DYNAMIC = 0; -GROUP (-lc -lslite934 -lgcc) - -/* - * The memory map looks like this: - * +--------------------+ <- low memory - * | .text | - * | _stext | - * | _etext | - * | ctor list | the ctor and dtor lists are for - * | dtor list | C++ support - * | _end_text | - * +--------------------+ - * | .data | initialized data goes here - * | _sdata | - * | _edata | - * +--------------------+ - * | .bss | - * | __bss_start | start of bss, cleared by crt0 - * | _end | start of heap, used by sbrk() - * +--------------------+ - * | heap space | - * | _ENDHEAP | - * | stack space | - * | __stack | top of stack - * +--------------------+ <- high memory - */ - -_STACK_SIZE = (16 * 1024); -_RAM_SIZE = 2M; -_RAM_START = 0x40010000; -_RAM_END = _RAM_START + _RAM_SIZE; - -/* - * Base address of the on-CPU peripherals. This is for compatability - * with the simulator. - */ - -_ERC32_MEC = 0x0; - -/* - * Setup the memory map of the MB86931-EB Board (ex931) - * stack grows down towards low memory. - */ -MEMORY -{ - ram (rwx) : ORIGIN = 0x40010000, LENGTH = 2M -} - -__stack = _RAM_START + _RAM_SIZE - 4 * 16; -__trap_stack = (_RAM_START + _RAM_SIZE - 4 * 16) - _STACK_SIZE; - -/* - * All the symbols that might be accessed from C code need to be - * listed twice, once with an additional underscore. aout format needs - * and extra underscore, whereas coff & elf doesn't. This is to work - * with both. - */ -/* - * Initalize some symbols to be zero so we can reference them in the - * crt0 without core dumping. These functions are all optional, but - * we do this so we can have our crt0 always use them if they exist. - * This is so BSPs work better when using the crt0 installed with gcc. - * We have to initalize them twice, so we cover a.out (which prepends - * an underscore) and coff object file formats. - */ -PROVIDE (hardware_init_hook = 0); -PROVIDE (_hardware_init_hook = 0); -PROVIDE (software_init_hook = 0); -PROVIDE (_software_init_hook = 0); -SECTIONS -{ - .text : { - stext = .; - _stext = .; - CREATE_OBJECT_SYMBOLS - *(.text) - __CTOR_LIST__ = .; - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) - *(.ctors) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) - *(.dtors) - LONG(0) - __DTOR_END__ = .; - _etext = .; - *(.lit) - *(.shdata) - } > ram - .shbss SIZEOF(.text) + ADDR(.text) : { - *(.shbss) - } - .talias : { } > ram - .data : { - sdata = .; - _sdata = .; - *(.data) - edata = .; - _edata = .; - } > ram - .bss SIZEOF(.data) + ADDR(.data) : { - sbss = . ; - _sbss = . ; - __bss_start = ALIGN(0x8); - __bss_start = ALIGN(0x8); - *(.bss) - *(COMMON) - end = ALIGN(0x8); - _end = ALIGN(0x8); - __end = ALIGN(0x8); - ebss = .; - _ebss = .; - } - .mstack : { } > ram - .rstack : { } > ram - .stab 0 (NOLOAD) : { - [ .stab ] - } - .stabstr 0 (NOLOAD) : - { - [ .stabstr ] - } - /* 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) } - /* 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) } - /* These must appear regardless of . */ -} diff --git a/libgloss/sparc/fixctors.c b/libgloss/sparc/fixctors.c deleted file mode 100644 index 484023c..0000000 --- a/libgloss/sparc/fixctors.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Code to byte-swap static constructor/destructor tables on - broken a.out little-endian targets. The startup code should call - __fix_ctors just before calling main. It is safe to use on non-broken - or big-endian targets. */ - -extern long __CTOR_LIST__[]; -extern long __DTOR_LIST__[]; - -static void -byte_swap (long *entry) -{ - unsigned char *p = (unsigned char *)entry; - unsigned char tmp; - - tmp = p[0]; - p[0] = p[3]; - p[3] = tmp; - tmp = p[1]; - p[1] = p[2]; - p[2] = tmp; -} - -static void -fix_table (long *table) -{ - long len = table[0]; - - /* The heuristic for deciding if a table is broken is to examine - the word at the start of the table, which contains the number - of function pointers immediately following. If the low word - is zero, and the high word is non-zero, it's very likely that - it is byte-swapped. This test will fail if the program has - an exact multiple of 64K static constructors or destructors, a very - unlikely situation. */ - if ((len & 0xffff) == 0 && (len & 0xffff0000) != 0) - { - - /* The table looks broken. Byte-swap all the words in the table, up - to a NULL entry, which marks the end of the table. */ - do - { - byte_swap (table); - table++; - } - while (*table); - } -} - -void -__fix_ctors (void) -{ - fix_table (__CTOR_LIST__); - fix_table (__DTOR_LIST__); -} diff --git a/libgloss/sparc/libsys/Makefile.in b/libgloss/sparc/libsys/Makefile.in deleted file mode 100644 index f3a036f..0000000 --- a/libgloss/sparc/libsys/Makefile.in +++ /dev/null @@ -1,167 +0,0 @@ -# Makefile for libgloss/sparc/libsys -# Copyright (c) 1996 Cygnus Support. -# All rights reserved. -# -# Redistribution and use in source and binary forms are permitted -# provided that the above copyright notice and this paragraph are -# duplicated in all such forms and that any documentation, -# advertising materials, and other materials related to such -# distribution and use acknowledge that the software was developed -# at Cygnus Support, Inc. Cygnus Support, Inc. may not be used to -# endorse or promote products derived from this software without -# specific prior written permission. -# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -# _r.o is for the reentrant syscall stubs. -# The .S_r.o/.c_r.o rules are from host/any. - -.SUFFIXES: .c .S .o _r.o - -.S_r.o: - $(CC) $(CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS) -DREENT $(INCLUDES) -c $< -o $@ -.c_r.o: - $(CC) $(CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS) -DREENT $(INCLUDES) -c $< -o $@ - -# CFILES_R, SFILES_R, and TEMPLATE_SFILES_R define those system calls that are -# needed by the ANSI C part of newlib when REENTRANT_SYSCALLS_PROVIDED is -# defined. - -CFILES = isatty.c - -CFILES_R = - -SFILES = cerror.S _exit.S - -SFILES_R = sbrk.S - -# List of files built from template.S (with an '_' suffix). - -TEMPLATE_SFILES = chdir_ lstat_ - -TEMPLATE_SFILES_R = close_ fstat_ getpid_ kill_ \ - lseek_ open_ read_ stat_ unlink_ write_ - -# If newlib defines REENTRANT_SYSCALLS_PROVIDED, then these are used as well. -REENTRANT_OFILES = $(SFILES_R:.S=_r.o) $(TEMPLATE_SFILES_R:_=_r.o) \ - $(CFILES_R:.c=_r.o) - -OFILES = $(SFILES:.S=.o) $(SFILES_R:.S=.o) \ - $(TEMPLATE_SFILES:_=.o) $(TEMPLATE_SFILES_R:_=.o) \ - $(CFILES:.c=.o) $(CFILES_R:.c=.o) \ - $(REENTRANT_OFILES) - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - -all: libsys.a libsys-crt0.o - -libsys.a: $(OFILES) - rm -f $@ - $(AR) $(AR_FLAGS) $@ $(OFILES) - -install: - $(INSTALL_DATA) libsys-crt0.o $(tooldir)/lib/libsys-crt0.o - $(INSTALL_DATA) libsys.a $(tooldir)/lib/libsys.a - -doc: - -.PHONY: info install-info clean-info -info: -install-info: -clean-info: - -clean mostlyclean: - rm -f *.o *.a *.s stamp-srcs - -distclean maintainer-clean realclean: clean - rm -f Makefile config.status - -Makefile: Makefile.in config.status @host_makefile_frag_path@ - $(SHELL) config.status - -config.status: configure - $(SHELL) config.status --recheck - -stamp-srcs: Makefile template.S template_r.S - for f in $(TEMPLATE_SFILES:_=) ; \ - do \ - $(CC) -E -Dfunc=$$f \ - $(CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS) $(INCLUDES) \ - $(srcdir)/template.S >$$f.S ; \ - done - for f in $(TEMPLATE_SFILES_R:_=) ; \ - do \ - $(CC) -E -Dfunc=$$f \ - $(CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS) $(INCLUDES) \ - $(srcdir)/template_r.S | sed -e 's/^_/#/' >$$f.S ; \ - done - touch stamp-srcs - -# Make a dependency for each file built from a template. - -$(TEMPLATE_SFILES:_=.S) $(TEMPLATE_SFILES_R:_=.S): stamp-srcs - -# To support SunOS broken VPATH (sigh). - -_exit.o: _exit.S -cerror.o: cerror.S -chdir.o: chdir.S -close.o: close.S -fstat.o: fstat.S -getpid.o: getpid.S -isatty.o: isatty.c -kill.o: kill.S -libsys-crt0.o: libsys-crt0.S -lseek.o: lseek.S -lstat.o: lstat.S -open.o: open.S -read.o: read.S -sbrk.o: sbrk.S -stat.o: stat.S -write.o: write.S - -# Reentrant versions ... -# These are all needed to support the ANSI C library routines. - -close_r.o: close.S -fstat_r.o: fstat.S -getpid_r.o: getpid.S -kill_r.o: kill.S -lseek_r.o: lseek.S -open_r.o: open.S -read_r.o: read.S -sbrk_r.o: sbrk.S -stat_r.o: stat.S -unlink_r.o: unlink.S -write_r.o: write.S diff --git a/libgloss/sparc/libsys/_exit.S b/libgloss/sparc/libsys/_exit.S deleted file mode 100644 index 52c5c14..0000000 --- a/libgloss/sparc/libsys/_exit.S +++ /dev/null @@ -1,14 +0,0 @@ -! _exit() system call - -#include "syscallasm.h" - - TEXT_SECTION - ALIGN (4) - GLOBAL (ASM_SYMBOL (_exit)) -ASM_SYMBOL (_exit): - mov SYS_exit,%g1 - ta SYSCALL_TRAP - -! If that returns (yikes!), try an illegal insn ... - - WORD (0)
\ No newline at end of file diff --git a/libgloss/sparc/libsys/cerror.S b/libgloss/sparc/libsys/cerror.S deleted file mode 100644 index 8ad99c2..0000000 --- a/libgloss/sparc/libsys/cerror.S +++ /dev/null @@ -1,47 +0,0 @@ -! Set errno. -! This function is called by all the syscall stubs. -! -! FIXME: We assume errno is the first member of struct _reent. -! Not sure what to do about this. - -#include "syscallasm.h" - - DATA_SECTION - ALIGN (4) - GLOBAL (ASM_SYMBOL (errno)) ! FIXME: ASM_PRIVATE_SYMBOL ? -ASM_SYMBOL (errno): - WORD (0) - - TEXT_SECTION - ALIGN (4) - - GLOBAL (ASM_PRIVATE_SYMBOL (cerror)) -ASM_PRIVATE_SYMBOL (cerror): - sethi %hi (ASM_SYMBOL (errno)),%g1 - st %o0,[%g1+%lo (ASM_SYMBOL (errno))] - jmpl %o7+8,%g0 - mov -1,%o0 - - GLOBAL (ASM_PRIVATE_SYMBOL (cerror_r)) -ASM_PRIVATE_SYMBOL (cerror_r): - st %o0,[%o1] - jmpl %o7+8,%g0 - mov -1,%o0 - -! Since all system calls need this file, we put various state globals -! here as well. - - DATA_SECTION - -! CURBRK contains the current top of allocated space. -! END is a private symbol in svr4, but a public one in sunos4. -! FIXME: CURBRK is 4 bytes for now. - - ALIGN (4) - GLOBAL (ASM_PRIVATE_SYMBOL (curbrk)) -ASM_PRIVATE_SYMBOL (curbrk): -#ifdef SVR4 - WORD (ASM_PRIVATE_SYMBOL (end)) -#else - WORD (ASM_SYMBOL (end)) -#endif diff --git a/libgloss/sparc/libsys/configure b/libgloss/sparc/libsys/configure deleted file mode 100755 index 3702cce..0000000 --- a/libgloss/sparc/libsys/configure +++ /dev/null @@ -1,991 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.10 -# 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: - -# 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= - -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.10" - 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 LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = set; then LANG=C; export LANG; 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=libsys-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 $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' - -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 - - - -if test "$srcdir" = "." ; then - mdir=`echo "${with_multisubdir}/" \ - | sed -e 's,\([^/][^/]*\),..,g' -e 's,^/$,,'` - ac_aux_dir= -for ac_dir in ${mdir}../../../.. $srcdir/${mdir}../../../..; 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 ${mdir}../../../.. $srcdir/${mdir}../../../.." 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. - -else - ac_aux_dir= -for ac_dir in ${srcdir}/../../.. $srcdir/${srcdir}/../../..; 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 ${srcdir}/../../.. $srcdir/${srcdir}/../../.." 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. - -fi - -# 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 -# 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 -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="${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. - for ac_prog in ginstall installbsd 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. - # OSF/1 installbsd also uses dspmsg, but is usable. - : - 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_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - -# 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 -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="${IFS}:" - for ac_dir in $PATH; 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 -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="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; 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 -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:707: \"$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 - if test "${CFLAGS+set}" != set; then - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gcc_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_gcc_g=yes -else - ac_cv_prog_gcc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6 - if test $ac_cv_prog_gcc_g = yes; then - CFLAGS="-g -O" - else - CFLAGS="-O" - fi - 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 -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="${IFS}:" - for ac_dir in $PATH; 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 - - -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 -# 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 | - sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \ - >> 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.10" - 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%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%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%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%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%@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 - -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]", 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 relative srcdir, etc. 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 - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file -fi; done -rm -f conftest.subs - - - -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/sparc/libsys/configure.in b/libgloss/sparc/libsys/configure.in deleted file mode 100644 index cf3f496..0000000 --- a/libgloss/sparc/libsys/configure.in +++ /dev/null @@ -1,50 +0,0 @@ -# Configure.in for libgloss/sparc/libsys -# Copyright (c) 1996 Cygnus Support -# All rights reserved. -# -# Redistribution and use in source and binary forms are permitted -# provided that the above copyright notice and this paragraph are -# duplicated in all such forms and that any documentation, -# advertising materials, and other materials related to such -# distribution and use acknowledge that the software was developed -# at Cygnus Support, Inc. Cygnus Support, Inc. may not be used to -# endorse or promote products derived from this software without -# specific prior written permission. -# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -dnl Process this file with autoconf to produce a configure script. -AC_PREREQ(2.5)dnl -AC_INIT(libsys-crt0.S) - -if test "$srcdir" = "." ; then - mdir=`echo "${with_multisubdir}/" \ - | sed -e 's,\([[^/]][[^/]]*\),..,g' -e 's,^/$,,'` - AC_CONFIG_AUX_DIR(${mdir}../../../..) -else - AC_CONFIG_AUX_DIR(${srcdir}/../../..) -fi - -AC_PROG_INSTALL - -AC_PROG_CC -AS=${AS-as} -AC_SUBST(AS) -AR=${AR-ar} -AC_SUBST(AR) -LD=${LD-ld} -AC_SUBST(LD) -AC_PROG_RANLIB - -host_makefile_frag=${srcdir}/../../config/default.mh - -dnl We have to assign the same value to other variables because autoconf -dnl doesn't provide a mechanism to substitute a replacement keyword with -dnl arbitrary data or pathnames. -dnl -host_makefile_frag_path=$host_makefile_frag -AC_SUBST(host_makefile_frag_path) -AC_SUBST_FILE(host_makefile_frag) - -AC_OUTPUT(Makefile) diff --git a/libgloss/sparc/libsys/isatty.c b/libgloss/sparc/libsys/isatty.c deleted file mode 100644 index 3c64647..0000000 --- a/libgloss/sparc/libsys/isatty.c +++ /dev/null @@ -1,17 +0,0 @@ -/* isatty.c */ - -/* Dumb implementation so programs will at least run. */ - -#include <sys/stat.h> - -int -isatty (int fd) -{ - struct stat buf; - - if (fstat (fd, &buf) < 0) - return 0; - if (S_ISCHR (buf.st_mode)) - return 1; - return 0; -} diff --git a/libgloss/sparc/libsys/libsys-crt0.S b/libgloss/sparc/libsys/libsys-crt0.S deleted file mode 100644 index ef1b29d..0000000 --- a/libgloss/sparc/libsys/libsys-crt0.S +++ /dev/null @@ -1,127 +0,0 @@ -! C run time start off - -! This file supports: -! -! - both 32bit pointer and 64bit pointer environments (at compile time) -! - an imposed stack bias (of 2047) (at run time) -! - medium/low and medium/anywhere code models (at run time) - -! Initial stack setup: -! -! bottom of stack (higher memory address) -! ... -! text of environment strings -! text of argument strings -! envp[envc] = 0 (4/8 bytes) -! ... -! env[0] (4/8 bytes) -! argv[argc] = 0 (4/8 bytes) -! ... -! argv[0] (4/8 bytes) -! argc (4/8 bytes) -! register save area (64 bits by 16 registers = 128 bytes) -! top of stack (%sp) - -! Stack Bias: -! -! It is the responsibility of the o/s to set this up. -! We handle both a 0 and 2047 value for the stack bias. - -! Medium/Anywhere code model support: -! -! In this model %g4 points to the start of the data segment. -! The text segment can go anywhere, but %g4 points to the *data* segment. -! It is up to the compiler/linker to get this right. -! -! Since this model is statically linked the start of the data segment -! is known at link time. Eg: -! -! sethi %hh(data_start), %g1 -! sethi %lm(data_start), %g4 -! or %g1, %hm(data_start), %g1 -! or %g4, %lo(data_start), %g4 -! sllx %g1, 32, %g1 -! or %g4, %g1, %g4 -! -! FIXME: For now we just assume 0. - -! FIXME: if %g1 contains a non-zero value, atexit() should be invoked -! with this value. - -#include "syscallasm.h" - -#ifndef TARGET_PTR_SIZE -#define TARGET_PTR_SIZE 32 -#endif - - TEXT_SECTION - ALIGN (4) - GLOBAL (ASM_PRIVATE_SYMBOL (start)) -ASM_PRIVATE_SYMBOL (start): - clr %fp - -! We use %g4 even if the code model is Medium/Low (simplifies the code). - - clr %g4 ! Medium/Anywhere base reg - -! If there is a stack bias in effect, account for it in %g5. Then always -! add %g5 to stack references below. This way the code can be used with -! or without an imposed bias. - - andcc %sp, 1, %g5 - bnz,a .LHaveBias - mov 2047, %g5 -.LHaveBias: - add %sp, %g5, %sp - -#if TARGET_PTR_SIZE == 32 - ! FIXME: We apparently assume here that there is no reserved word. - ! This is probably correct, but try to verify it. - ld [%sp + 0x80], %o0 ! argc - add %sp, 0x84, %o1 ! argv - add %o0, 1, %o2 - sll %o2, 2, %o2 -#else /* TARGET_PTR_SIZE == 64 */ - ld [%sp + 0x8c], %o0 ! argc.lo - add %sp, 0x90, %o1 ! argv - add %o0, 1, %o2 - sll %o2, 3, %o2 -#endif - add %o1, %o2, %o2 ! envp - sethi %hi (ASM_SYMBOL (environ)), %o3 - or %o3, %lo (ASM_SYMBOL (environ)), %o3 -#if TARGET_PTR_SIZE == 32 - st %o2, [%o3 + %g4] -#else /* TARGET_PTR_SIZE == 64 */ - stx %o2, [%o3 + %g4] -#endif - -! Restore any stack bias before we call main() ... - - sub %sp, %g5, %sp - - GLOBAL (ASM_SYMBOL (main)) - call ASM_SYMBOL (main) - -! FIXME: Not sure if this is needed anymore. -#if TARGET_PTR_SIZE == 32 - sub %sp, 0x20, %sp ! room to push args -#else /* TARGET_PTR_SIZE == 64 */ - sub %sp, 0x30, %sp ! room to push args -#endif - - GLOBAL (ASM_SYMBOL (exit)) - call ASM_SYMBOL (exit) - nop - - GLOBAL (ASM_SYMBOL (_exit)) - call ASM_SYMBOL (_exit) - nop - - set SYS_exit, %g1 - ta SYSCALL_TRAP ! in case user redefines __exit - -! If all the above methods fail to terminate the program, try an illegal insn. -! If that does not work, the o/s is hosed more than we are. - - WORD (0) diff --git a/libgloss/sparc/libsys/sbrk.S b/libgloss/sparc/libsys/sbrk.S deleted file mode 100644 index b862621..0000000 --- a/libgloss/sparc/libsys/sbrk.S +++ /dev/null @@ -1,66 +0,0 @@ -! sbrk() system call - -#include "syscallasm.h" - - TEXT_SECTION - ALIGN (4) -#ifdef REENT - GLOBAL (ASM_SYMBOL (_sbrk_r)) -ASM_SYMBOL (_sbrk_r): - mov %o0,%o5 - mov %o1,%o0 -#else - GLOBAL (ASM_SYMBOL (sbrk)) -ASM_SYMBOL (sbrk): -#endif - add %o0,7,%o0 - andn %o0,7,%o0 - sethi %hi (ASM_PRIVATE_SYMBOL (curbrk)),%o2 -#ifdef __sparc_v9__ - lduw [%o2+%lo (ASM_PRIVATE_SYMBOL (curbrk))],%o3 -#else - ld [%o2+%lo (ASM_PRIVATE_SYMBOL (curbrk))],%o3 -#endif - add %o3,7,%o3 - andn %o3,7,%o3 - add %o3,%o0,%o0 - mov %o0,%o4 - mov SYS_brk,%g1 - ta SYSCALL_TRAP - bcs err - nop - st %o4,[%o2+%lo (ASM_PRIVATE_SYMBOL (curbrk))] - jmpl %o7+8,%g0 - mov %o3,%o0 - -#ifdef REENT - GLOBAL (ASM_SYMBOL (_brk_r)) -ASM_SYMBOL (_brk_r): - mov %o0,%o5 - mov %o1,%o0 -#else - GLOBAL (ASM_SYMBOL (brk)) -ASM_SYMBOL (brk): -#endif - add %o0,7,%o0 - andn %o0,7,%o0 - mov %o0,%o2 - mov SYS_brk,%g1 - ta SYSCALL_TRAP - bcs err - nop - sethi %hi (ASM_PRIVATE_SYMBOL (curbrk)),%o3 - st %o2,[%o3+%lo (ASM_PRIVATE_SYMBOL (curbrk))] - retl - mov %g0,%o0 - -err: -#ifdef REENT - sethi %hi (ASM_PRIVATE_SYMBOL (cerror_r)),%g1 - or %g1,%lo (ASM_PRIVATE_SYMBOL (cerror_r)),%g1 -#else - sethi %hi (ASM_PRIVATE_SYMBOL (cerror)),%g1 - or %g1,%lo (ASM_PRIVATE_SYMBOL (cerror)),%g1 -#endif - jmpl %g1,%g0 - mov %o5,%o1 diff --git a/libgloss/sparc/libsys/syscall.h b/libgloss/sparc/libsys/syscall.h deleted file mode 100644 index 457fe3a..0000000 --- a/libgloss/sparc/libsys/syscall.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _SYSCALL_H_ -#define _SYSCALL_H_ - -/* - * This file defines the minimal set of system calls needed - * by newlib for both sunos4 and solaris2. - * - * WARNING: This file can be included by assembler files. - */ - -/* Process control. */ -#define SYS_exit 1 -#define SYS_getpid 20 -#define SYS_kill 37 - -/* File stuff. */ -#define SYS_read 3 -#define SYS_write 4 -#define SYS_open 5 -#define SYS_close 6 -#define SYS_lseek 19 - -/* Memory stuff. */ -#define SYS_brk 17 - -/* Directory stuff. */ -#define SYS_unlink 10 -#define SYS_chdir 12 -#ifdef SVR4 -#define SYS_stat 18 -#define SYS_fstat 28 -#define SYS_lstat 88 -#else -#define SYS_stat 38 -#define SYS_fstat 62 -#define SYS_lstat 40 -#endif - -#endif /* _SYSCALL_H_ */ diff --git a/libgloss/sparc/libsys/syscallasm.h b/libgloss/sparc/libsys/syscallasm.h deleted file mode 100644 index 55f25cd..0000000 --- a/libgloss/sparc/libsys/syscallasm.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef _SYSCALLASM_H_ -#define _SYSCALLASM_H_ - -/* - * This file defines the system calls for SPARC for the assembler. - * Anything C-ish is not allowed in this file. - * C files should include syscall.h. - */ - -#include "syscall.h" - -/* Some macros for writing assember syscall stubs. */ - -#ifdef SVR4 -#define TEXT_SECTION .section ".text" -#define DATA_SECTION .section ".data" -#define ALIGN(x) .align x -#define GLOBAL(sym) .global sym -#define WORD(x) .long x -#define ASM_SYMBOL(name) name -#define ASM_PRIVATE_SYMBOL(name) _##name -#define SYSCALL_TRAP 8 -#else -#define TEXT_SECTION .text -#define DATA_SECTION .data -#define ALIGN(x) .align x -#define GLOBAL(sym) .global sym -#define WORD(x) .word x -#define ASM_SYMBOL(name) _##name -#define ASM_PRIVATE_SYMBOL(name) name -#define SYSCALL_TRAP 0 -#endif - -#define defsyscall(name, n) \ - TEXT_SECTION ; \ - ALIGN (4) ; \ - GLOBAL (ASM_SYMBOL (name)) ; \ -ASM_SYMBOL (name): \ - mov n,%g1 ; \ - ta SYSCALL_TRAP ; \ - bcc noerr ; \ - sethi %hi (ASM_PRIVATE_SYMBOL (cerror)),%g1 ; \ - or %g1,%lo (ASM_PRIVATE_SYMBOL (cerror)),%g1 ; \ - jmpl %g1+%g0,%g0 ; \ - nop ; \ -noerr: \ - jmpl %o7+8,%g0 ; \ - nop - -/* Support for reentrant syscalls. The "struct _reent *" arg is always the - the first one. After that we allow up to four additional args. We could - allow more, but that's all we need for now. - - It may seem inefficient to have the reent arg be the first one as it means - copying all the other args into place (as opposed to making the reent arg - the last one in which case there wouldn't be any copying). I chose a clean - design over an extra four instructions in a system call. All other - reentrant functions use the first arg this way. - ??? Of course this scheme breaks down if we need to support 6 or more args. - - And of course the system calls aren't *really* reentrant. The intent - is to exercise the reentrancy framework rather than provide/claim - real reentrancy for this port. -*/ - -#define defsyscall_r(name, n) \ - TEXT_SECTION ; \ - ALIGN (4) ; \ - GLOBAL (ASM_SYMBOL (name)) ; \ -ASM_SYMBOL (name): \ - mov n,%g1 ; \ - mov %o0,%o5 ; \ - mov %o1,%o0 ; \ - mov %o2,%o1 ; \ - mov %o3,%o2 ; \ - mov %o4,%o3 ; \ - ta SYSCALL_TRAP ; \ - bcc noerr ; \ - sethi %hi (ASM_PRIVATE_SYMBOL (cerror_r)),%g1 ; \ - or %g1,%lo (ASM_PRIVATE_SYMBOL (cerror_r)),%g1 ; \ - jmpl %g1+%g0,%g0 ; \ - mov %o5,%o1 ; \ -noerr: \ - jmpl %o7+8,%g0 ; \ - nop - -#define seterrno() \ - sethi %hi (ASM_PRIVATE_SYMBOL (cerror)),%g1 ; \ - or %g1,%lo (ASM_PRIVATE_SYMBOL (cerror)),%g1 ; \ - jmpl %g1+%g0,%g0 ; \ - nop - -#endif /* _SYSCALLASM_H_ */ diff --git a/libgloss/sparc/libsys/template.S b/libgloss/sparc/libsys/template.S deleted file mode 100644 index e1b437b..0000000 --- a/libgloss/sparc/libsys/template.S +++ /dev/null @@ -1,14 +0,0 @@ -/* system call template */ - -/* Lots of system calls are trivial functions, so we build their source files - from a template. New syscalls can be added simply by editing the - Makefile! - - Usage: Compile this file with "func" set to the name of the syscall. */ - -#include "syscallasm.h" - -#define concat(a,b) a##b -#define makesys(a) concat (SYS_, a) - - defsyscall (func, makesys(func)) diff --git a/libgloss/sparc/libsys/template_r.S b/libgloss/sparc/libsys/template_r.S deleted file mode 100644 index 3a9b5f8..0000000 --- a/libgloss/sparc/libsys/template_r.S +++ /dev/null @@ -1,26 +0,0 @@ -/* reentrant system call template */ - -/* Lots of system calls are trivial functions, so we build their source files - from a template. New syscalls can be added simply by editing the - Makefile! - - The system calls aren't necessarily reentrant. If we were being used in - an embedded system they could be. Reentrant syscalls are also used, - however, to provide ANSI C namespace clean access to the host o/s. - - Usage: Compile this file with "func" set to the name of the syscall. */ - -#include "syscallasm.h" - -#define concat(a,b) a##b -#define concat3(a,b,c) a##b##c -#define makesys(a) concat (SYS_, a) -#define make_r_fn(a) concat3 (_, a, _r) - -/* The leading _'s get turned into #'s by the Makefile. */ - -_ifdef REENT - defsyscall_r (make_r_fn (func), makesys (func)) -_else - defsyscall (func, makesys (func)) -_endif diff --git a/libgloss/sparc/salib-701.c b/libgloss/sparc/salib-701.c deleted file mode 100644 index 404ad6c..0000000 --- a/libgloss/sparc/salib-701.c +++ /dev/null @@ -1,288 +0,0 @@ -/* Stand-alone library for Sparclet 701 board - * - * Copyright (c) 1996 Cygnus Support - * - * 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. - */ - -#define RAM_BASE ((unsigned char *)0x12000000) /* Start of cacheable dram */ -#define DCACHE_LINES 128 /* Number of lines in data cache */ -#define DCACHE_LINE_SIZE 16 /* Bytes per data cache line */ -#define DCACHE_BANKS 4 /* 4-way associative */ -#define CACHE_INST_TAG_ADDR ((unsigned char *)0xc0020000) /* I-Cache tag base address */ -#define ALL_BANKS 0x0000f000 /* Selects all 4 cache banks */ -#define ICACHE_LINES 128 /* Number of lines in inst cache */ -#define ICACHE_LINE_SIZE 32 /* Bytes per inst cache line */ - -/* I/O Base addresses */ -#define CACHE_INST_BASE_ADD 0xc0000000 -#define CACHE_DATA_BASE_ADD 0xc8000000 -#define _InstrCacheCtlBase 0xc0000000 -#define _DataCacheCtlBase 0xc8000000 - -#define USART_BASE_ADD 0x92000000 -#define USART_BASE_ADRS(n) (USART_BASE_ADD + ((n)<<21)) /*0..3*/ - -/* Serial receiver definitions */ -#define USART_RX_CHAR(n) (*(unsigned char *) (USART_BASE_ADRS(n) +(2<<19))) -#define USART_RX_CTRL_BASE_ADRS(n) (USART_BASE_ADRS(n)+(3<<19)) -#define URSTR(n) (*(unsigned int *) (USART_RX_CTRL_BASE_ADRS(n)+(2<<15))) -#define URSTR_CHAR_NUM 0x1f00 /* Bits 8-12 */ - -/* Serial receiver definitions */ -#define USART_TX_CHAR(n) (*(unsigned char *) (USART_BASE_ADRS(n)+3)) -#define USART_TX_CTRL_BASE_ADRS(n) (USART_BASE_ADRS(n)+(1<<19)) -#define UTSTR(n) (*(unsigned int *) (USART_TX_CTRL_BASE_ADRS(n)+(2<<15))) -#define UTSTR_CHAR_FREE 0x1f0 /* Bits 4-8 */ - -/* Cache definitions */ -#define DCCA_NB_LINES 128 /* Nb of lines of the cache */ -/* Bank number, used for Cache Memory and Cache Tag */ -#define ICCA_B3 0x000008000 /* Bit 15 - 1:Bank3 selected */ -#define ICCA_B2 0x000004000 /* Bit 14 - 1:Bank2 selected */ -#define ICCA_B1 0x000002000 /* Bit 13 - 1:Bank1 selected */ -#define ICCA_B0 0x000001000 /* Bit 12 - 1:Bank0 selected */ -/* Register address, show which register is to be checked/updated */ -#define ICCACR 0x00000000 /* Bits 17 - 16 - Control register */ -#define ICCAMEM 0x00010000 /* Bits 17 - 16 - Cache memory */ -#define DCCACR 0x00000000 /* Bits 16 - 15 - Control register */ -/* Instruction Cache Controller Register */ -#define ICCR_DISABLE 0xfffffffe /* Reset enable bit */ - -/* Serial I/O routines */ - -#define STUB_PORT 1 /* 0 = serial port A; 1 = serial port B */ - -static volatile unsigned char *rx_fifo = &USART_RX_CHAR(STUB_PORT); -static volatile unsigned int *rx_status = &URSTR(STUB_PORT); - -static volatile unsigned char *tx_fifo = &USART_TX_CHAR(STUB_PORT); -static volatile unsigned int *tx_status = &UTSTR(STUB_PORT); - -/* library-free debug reoutines */ -#ifdef XDEBUG -#define XDBG_MSG(x) pmsg(x) -#define XDBG_HEX(x) phex(x) -#else -#define XDBG_MSG(x) -#define XDBG_HEX(x) -#endif - -static int -rx_rdy() -{ - return (*rx_status & URSTR_CHAR_NUM); -} - -static unsigned char -rx_char() -{ - return *rx_fifo; -} - -void -tx_char(char c) -{ - *tx_fifo = c; -} - -static int -tx_rdy() -{ - return (*tx_status & UTSTR_CHAR_FREE); -} - -int -getDebugChar() -{ - while (!rx_rdy()) - ; - return rx_char(); -} - -void -putDebugChar(int c) -{ - while (!tx_rdy()) - ; - tx_char(c); -} - -#ifdef XDEBUG -/* library-free debug reoutines */ -/* print a string */ -void pmsg(char *p) -{ - while (*p) - { - if (*p == '\n') - putDebugChar('\r'); - putDebugChar(*p++); - } -} - -/* print a hex number */ -void phex(long x) -{ - char buf[9]; - int i; - - buf[8] = '\0'; - for (i = 7; i >= 0; i--) - { - char c = x & 0x0f; - buf[i] = c < 10 ? c + '0' : c - 10 + 'A'; - x >>= 4; - } - pmsg(buf); -} -#endif - -/* rdtbr() - read the trap base register */ - -unsigned long rdtbr(); - -asm(" - .text - .align 4 - .globl _rdtbr -_rdtbr: - retl - mov %tbr, %o0 -"); - -/* wrtbr() - write the trap base register */ - -void wrtbr(unsigned long); - -asm(" - .text - .align 4 - .globl _wrtbr -_wrtbr: - retl - mov %o0, %tbr -"); - -/* Each entry in the trap vector occupies four words. */ - -struct trap_entry -{ - unsigned sethi_filler:10; - unsigned sethi_imm22:22; - unsigned jmpl_filler:19; - unsigned jmpl_simm13:13; - unsigned long filler[2]; -}; - -extern struct trap_entry fltr_proto; -asm (" - .data - .globl _fltr_proto - .align 4 -_fltr_proto: ! First level trap routine prototype - sethi 0, %l0 - jmpl 0+%l0, %g0 - nop - nop - - .text - .align 4 -"); - -/* copy_vectors - Copy the trap vectors from ROM to RAM, set the TBR register - to point to the RAM vectors, and return the address of the RAM vectors. */ - -extern struct trap_entry __trap_vectors[256]; /* defined in matra.ld */ - -struct trap_entry *copy_vectors() -{ - int i; - struct trap_entry *old = (struct trap_entry *) (rdtbr() & ~0xfff); - - XDBG_MSG("Copying vectors...\n"); - for (i = 0; i < 256; i++) - __trap_vectors[i] = old[i]; - wrtbr ((unsigned long)__trap_vectors); - XDBG_MSG("Done\n"); - return __trap_vectors; -} - - -void -disable_cache() -{ - unsigned long *ptr; - static unsigned long CACHE_shadow_iccr = 0; /* Because CR cannot be read */ - static unsigned long CACHE_shadow_dccr = 0; /* Because CR cannot be read */ - - XDBG_MSG("Disabling cache...\n"); - ptr = (unsigned long*)(CACHE_INST_BASE_ADD | ICCACR); - CACHE_shadow_iccr = CACHE_shadow_iccr & ICCR_DISABLE; - *ptr = CACHE_shadow_iccr; - - ptr = (unsigned long*)(CACHE_DATA_BASE_ADD | DCCACR); - CACHE_shadow_dccr = CACHE_shadow_dccr & ICCR_DISABLE; - *ptr = CACHE_shadow_dccr; - XDBG_MSG("Done\n"); -} - -/* Flush the instruction cache. We need to do this for the debugger stub so - that breakpoints, et. al. become visible to the instruction stream after - storing them in memory. FIXME!! - */ - -void -flush_i_cache () -{ - volatile unsigned char *addr; - - /* First, force all dirty items in the data cache to be moved out to real - memory. This is done by making read refs to alternate addresses that will - fill up all four banks for each line. Note that we actually have to - reference 8 locs per line just in case the region of memory we use is one - of the areas that needs to be flushed. */ - - for (addr = RAM_BASE; - addr < RAM_BASE + (DCACHE_LINES * DCACHE_LINE_SIZE * DCACHE_BANKS) * 2; - addr += DCACHE_LINE_SIZE) - *addr; /* Read the loc */ - - /* Now, flush the instruction cache. */ - - for (addr = CACHE_INST_TAG_ADDR + ALL_BANKS; - addr <= CACHE_INST_TAG_ADDR + ALL_BANKS + ICACHE_LINES * ICACHE_LINE_SIZE; - addr += ICACHE_LINE_SIZE) - *(unsigned long *)addr = 0; /* Clr tag entry for all banks on this line */ -} - -/* Setup trap TT to go to ROUTINE. */ - -void -exceptionHandler (int tt, unsigned long routine) -{ - static struct trap_entry *tb; /* Trap vector base address */ - - if (!tb) - { - tb = copy_vectors(); /* Copy trap vectors to RAM */ - disable_cache(); /* Disable cache FIXME!! */ - } - - XDBG_MSG("Setting exception handler for trap...\n"); - - tb[tt] = fltr_proto; - - tb[tt].sethi_imm22 = routine >> 10; - tb[tt].jmpl_simm13 = routine & 0x3ff; - - XDBG_MSG("Done\n"); -} diff --git a/libgloss/sparc/salib.c b/libgloss/sparc/salib.c deleted file mode 100644 index 8076a6b..0000000 --- a/libgloss/sparc/salib.c +++ /dev/null @@ -1,388 +0,0 @@ -/* Stand-alone library for SPARClite - * - * Copyright (c) 1995 Cygnus Support - * - * 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 "sparclite.h" -#include "asm.h" - -/* LED blinking pattern can be changed by modifying __led_algorithm. */ - -enum ledtype -{ - led_marching, /* marching pattern, only one led on at a time */ - led_random, /* pseudo-random pattern */ - led_blinking, /* all leds blink on and off */ - led_none /* leds off all the time */ -}; - -enum ledtype __led_algorithm = led_marching; - - -/* Pointer to hook for outbyte, set by stub's exception handler. */ -void (*__outbyte_hook) (int c); - -#ifdef SL931 -#define SDTR_BASE 0x200 -#define SDTR_ASI 1 -#define SDTR_SHIFT 0 -#else -#define SDTR_BASE 0x10000000 -#define SDTR_ASI 4 -#define SDTR_SHIFT 16 -#endif - -#define get_uart_status(PORT) \ - (read_asi (SDTR_ASI, SDTR_BASE + 0x24 + (PORT) * 0x10) >> SDTR_SHIFT) - -#define xmt_char(PORT, C) \ - write_asi (SDTR_ASI, SDTR_BASE + 0x20 + (PORT) * 0x10, (C) << SDTR_SHIFT) - -#define rcv_char(PORT) \ - (read_asi (SDTR_ASI, SDTR_BASE + 0x20 + (PORT) * 0x10) >> SDTR_SHIFT) - -void putDebugChar(); - -#if 0 -void -set_uart (cmd) - int cmd; -{ - write_asi (SDTR_ASI, SDTR_BASE + 0x24, cmd << SDTR_SHIFT); -} - -void -set_timer_3 (val) - int val; -{ - write_asi (SDTR_ASI, SDTR_BASE + 0x78, val << SDTR_SHIFT); -} -#endif - - -asm(" - .text - .align 4 - -! Register window overflow handler. Come here when save would move us -! into the invalid window. This routine runs with traps disabled, and -! must be careful not to touch the condition codes, as PSR is never -! restored. -! -! We are called with %l0 = wim, %l1 = pc, %l2 = npc - - .globl " STRINGSYM(win_ovf) " -" STRINGSYM(win_ovf) ": - mov %g1, %l3 ! Save g1, we use it to hold the wim - srl %l0, 1, %g1 ! Rotate wim right - sll %l0, __WINSIZE-1, %l0 - or %l0, %g1, %g1 - - save %g0, %g0, %g0 ! Slip into next window - mov %g1, %wim ! Install the new wim - - std %l0, [%sp + 0 * 4] ! save L & I registers - std %l2, [%sp + 2 * 4] - std %l4, [%sp + 4 * 4] - std %l6, [%sp + 6 * 4] - - std %i0, [%sp + 8 * 4] - std %i2, [%sp + 10 * 4] - std %i4, [%sp + 12 * 4] - std %i6, [%sp + 14 * 4] - - restore ! Go back to trap window. - mov %l3, %g1 ! Restore %g1 - - jmpl %l1, %g0 - rett %l2 - -! Register window underflow handler. Come here when restore would move us -! into the invalid window. This routine runs with traps disabled, and -! must be careful not to touch the condition codes, as PSR is never -! restored. -! -! We are called with %l0 = wim, %l1 = pc, %l2 = npc - - .globl " STRINGSYM(win_unf) " -" STRINGSYM(win_unf) ": - sll %l0, 1, %l3 ! Rotate wim left - srl %l0, __WINSIZE-1, %l0 - or %l0, %l3, %l0 - - mov %l0, %wim ! Install the new wim - - restore ! User's window - restore ! His caller's window - - ldd [%sp + 0 * 4], %l0 ! restore L & I registers - ldd [%sp + 2 * 4], %l2 - ldd [%sp + 4 * 4], %l4 - ldd [%sp + 6 * 4], %l6 - - ldd [%sp + 8 * 4], %i0 - ldd [%sp + 10 * 4], %i2 - ldd [%sp + 12 * 4], %i4 - ldd [%sp + 14 * 4], %i6 - - save %g0, %g0, %g0 ! Back to trap window - save %g0, %g0, %g0 - - jmpl %l1, %g0 - rett %l2 - -! Read the TBR. - - .globl " STRINGSYM(rdtbr) " -" STRINGSYM(rdtbr) ": - retl - mov %tbr, %o0 - -"); - -extern unsigned long rdtbr(); - -void -die(val) - int val; -{ - static unsigned char *leds = (unsigned char *)0x02000003; - - *leds = val; - - while (1) ; -} - -/* Each entry in the trap vector occupies four words. */ - -struct trap_entry -{ - unsigned sethi_filler:10; - unsigned sethi_imm22:22; - unsigned jmpl_filler:19; - unsigned jmpl_simm13:13; - unsigned long filler[2]; -}; - -extern struct trap_entry fltr_proto; -asm (" - .data - .globl " STRINGSYM(fltr_proto) " - .align 4 -" STRINGSYM(fltr_proto) ": ! First level trap routine prototype - sethi 0, %l0 - jmpl 0+%l0, %g0 - nop - nop - - .text - .align 4 -"); - -/* Setup trap TT to go to ROUTINE. If TT is between 0 and 255 inclusive, the - normal trap vector will be used. If TT is 256, then it's for the SPARClite - DSU, and that always vectors off to 255 unrelocated. -*/ - -void -exceptionHandler (tt, routine) - int tt; - unsigned long routine; -{ - struct trap_entry *tb; /* Trap vector base address */ - - if (tt != 256) - tb = (struct trap_entry *) (rdtbr() & ~0xfff); - else - { - tt = 255; - tb = (struct trap_entry *) 0; - } - - tb[tt] = fltr_proto; - - tb[tt].sethi_imm22 = routine >> 10; - tb[tt].jmpl_simm13 = routine & 0x3ff; -} - -void -update_leds() -{ - static unsigned char *leds = (unsigned char *)0x02000003; - static enum ledtype prev_algorithm = led_none; - - if (prev_algorithm != __led_algorithm) - { - *leds = 0xff; /* turn the LEDs off */ - prev_algorithm = __led_algorithm; - } - - switch (__led_algorithm) - { - case led_marching: - { - static unsigned char curled = 1; - static unsigned char dir = 0; - - *leds = ~curled; - - if (dir) - curled <<= 1; - else - curled >>= 1; - - if (curled == 0) - { - if (dir) - curled = 0x80; - else - curled = 1; - dir = ~dir; - } - break; - } - - case led_random: - { - static unsigned int next = 0; - *leds = next & 0xff; - next = (next * 1103515245 + 12345) & 0x7fff; - break; - } - - case led_blinking: - { - static unsigned char next = 0; - *leds = next; - next = ~next; - break; - } - - default: - break; - } -} - - /* 1/5th of a second? */ - -#define LEDTIME (20000000 / 500) - -unsigned long ledtime = LEDTIME; - -int -inbyte() -{ - return (getDebugChar()); -} - -int -getDebugChar() -{ - unsigned long countdown = ledtime; - - update_leds(); - - while (1) - { - if ((get_uart_status(0) & 2) != 0) break; - - if (countdown-- == 0) - { - countdown = ledtime; - update_leds(); - } - } - - return rcv_char(0); -} - -/* Output one character to the serial port */ -void -outbyte(c) - int c; -{ - if (__outbyte_hook) - __outbyte_hook (c); - else - putDebugChar(c); -} - -void -putDebugChar(c) - int c; -{ - update_leds(); - - while ((get_uart_status(0) & 1) == 0) ; - - xmt_char(0, c); -} - -#if 0 -int -write(fd, data, length) - int fd; - unsigned char *data; - int length; -{ - int olength = length; - - while (length--) - putDebugChar(*data++); - - return olength; -} - -int -read(fd, data, length) - int fd; - unsigned char *data; - int length; -{ - int olength = length; - int c; - - while (length--) - *data++ = getDebugChar(); - - return olength; -} -#endif - -/* Set the baud rate for the serial port, returns 0 for success, - -1 otherwise */ - -#if 0 -int -set_baud_rate(baudrate) - int baudrate; -{ - /* Convert baud rate to uart clock divider */ - switch (baudrate) - { - case 38400: - baudrate = 16; - break; - case 19200: - baudrate = 33; - break; - case 9600: - baudrate = 65; - break; - default: - return -1; - } - - set_timer_3(baudrate); /* Set it */ -} -#endif diff --git a/libgloss/sparc/slite.h b/libgloss/sparc/slite.h deleted file mode 100644 index 4762e3f..0000000 --- a/libgloss/sparc/slite.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (c) 1995, 1996 Cygnus Support - * - * 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. - */ - -#define STACK_SIZE 16 * 1024 -#define TRAP_STACK_SIZE 4 * 1024 -#define NUM_REGS 20 - -#ifdef SL933 -#define NUMBER_OF_REGISTER_WINDOWS 6 -#else -#define NUMBER_OF_REGISTER_WINDOWS 8 -#endif - -#if (NUMBER_OF_REGISTER_WINDOWS == 8) -#define SPARC_PSR_CWP_MASK 0x07 /* bits 0 - 4 */ -#elif (NUMBER_OF_REGISTER_WINDOWS == 16) -#define SPARC_PSR_CWP_MASK 0x0F /* bits 0 - 4 */ -#elif (NUMBER_OF_REGISTER_WINDOWS == 32) -#define SPARC_PSR_CWP_MASK 0x1F /* bits 0 - 4 */ -#else -#error "Unsupported number of register windows for this cpu" -#endif - -/* The traptable has to be the first code in a boot PROM. */ - -/* - * Entry for traps which jump to a programmer-specified trap handler. - */ - -#define TRAP(_handler) \ - sethi %hi(_handler), %l3 ; \ - jmpl %l3+%lo(_handler), %g0 ; \ - mov %wim, %l0 ; \ - nop - -/* Unexcpected trap will halt the processor by forcing it to error state */ -#if 1 -#define BAD_TRAP ta 0; nop; nop; nop; -#else -#define BAD_TRAP \ - mov %psr, l0 ; \ - mov 0x0, %o0 ; \ - sethi %hi(SYM(bad_trap)), l4 ; \ - jmp l4+%lo(SYM(bad_trap)); -#endif - -/* Software trap. Treat as BAD_TRAP for the time being... */ -#if 1 -#define SOFT_TRAP BAD_TRAP -#else -#define SOFT_TRAP \ - mov $psr, $l0 ; \ - mov 0x0, $o0 ; \ - sethi $hi(SYM(soft_trap)), l4 ; \ - jmp l4+$lo(SYM(soft_trap)); -#endif - -#define PSR_INIT 0x10c0 /* Disable traps, set s and ps */ -#define TBR_INIT 0 -#define WIM_INIT 2 -#define SP_INIT 0x023ffff0 - -/* Macros for reading and writing to arbitrary address spaces. Note that ASI - must be a constant (sorry, but the SPARC can only specify ASIs as part of an - instruction. */ - -#define read_asi(ASI, LOC) \ - ({ \ - unsigned int val; \ - __asm__ volatile ("lda [%r1]%2,%0" : "=r" (val) : "rJ" (LOC), "I" (ASI)); \ - val; \ - }) - -#define write_asi(ASI, LOC, VAL) \ - __asm__ volatile ("sta %0,[%r1]%2" : : "r" (VAL), "rJ" (LOC), "I" (ASI)); - -/* - * Use this when modifying registers that cause memory to be modified. This - * will cause GCC to reload all values after this point. - */ -#define write_asi_volatile(ASI, LOC, VAL) \ - __asm__ volatile ("sta %0,[%r1]%2" : : "r" (VAL), "rJ" (LOC), "I" (ASI) \ - : "memory"); - -#define WRITE_PC(x) registers[PC] = x; registers[NPC] = x + 4; - -/* - * Processor Status Register (psr) - * - * 31 28|27 24|23 20|19 12|11 9|7|6|5|4 0 - * +------+-------+-------+-------+------+-+-+-+--------+ - * | impl | ver | icc | res. | pil | | | | cwp | - * +------+-------+-------+-------+------+-+-+-+--------+ - * S P E - * S T - * if ET = 1, traps are enabled, 0 means disabled. - * if S = 1, you're in supervisor mode, 0 means user mode. - * cwp points to the current window. - * - * Trap Base Register (tbr) - * - * 31 12|11 4|3 0 - * +--------------+--------------+------+ - * | tba | tt | null | - * +--------------+--------------+------+ - * - * tba contains the most sig. 20 bits of the tbr base address - * tt is the trap number. - * - * Window Invalid Register (wim) - * 31 8| 7| 6| 5| 4| 3| 2| 1| 0 - * +-------------+--+--+--+--+--+--+--+--+ - * | res. |w7|w6|w5|w4|w3|w2|w1|w0| - * +-------------+--+--+--+--+--+--+--+--+ - */ - diff --git a/libgloss/sparc/sparc-stub.c b/libgloss/sparc/sparc-stub.c deleted file mode 100644 index fa21d72..0000000 --- a/libgloss/sparc/sparc-stub.c +++ /dev/null @@ -1,848 +0,0 @@ -#include "sparclite.h" -/**************************************************************************** - - THIS SOFTWARE IS NOT COPYRIGHTED - - HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the - user accepts the software "AS IS" with all faults. - - HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD - TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -****************************************************************************/ - -/**************************************************************************** - * Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $ - * - * Module name: remcom.c $ - * Revision: 1.34 $ - * Date: 91/03/09 12:29:49 $ - * Contributor: Lake Stevens Instrument Division$ - * - * Description: low level support for gdb debugger. $ - * - * Considerations: only works on target hardware $ - * - * Written by: Glenn Engel $ - * ModuleState: Experimental $ - * - * NOTES: See Below $ - * - * Modified for SPARC by Stu Grossman, Cygnus Support. - * - * This code has been extensively tested on the Fujitsu SPARClite demo board. - * - * To enable debugger support, two things need to happen. One, a - * call to set_debug_traps() is necessary in order to allow any breakpoints - * or error conditions to be properly intercepted and reported to gdb. - * Two, a breakpoint needs to be generated to begin communication. This - * is most easily accomplished by a call to breakpoint(). Breakpoint() - * simulates a breakpoint by executing a trap #1. - * - ************* - * - * The following gdb commands are supported: - * - * command function Return value - * - * g return the value of the CPU registers hex data or ENN - * G set the value of the CPU registers OK or ENN - * - * mAA..AA,LLLL Read LLLL bytes at address AA..AA hex data or ENN - * MAA..AA,LLLL: Write LLLL bytes at address AA.AA OK or ENN - * - * c Resume at current address SNN ( signal NN) - * cAA..AA Continue at address AA..AA SNN - * - * s Step one instruction SNN - * sAA..AA Step one instruction from AA..AA SNN - * - * k kill - * - * ? What was the last sigval ? SNN (signal NN) - * - * bBB..BB Set baud rate to BB..BB OK or BNN, then sets - * baud rate - * - * All commands and responses are sent with a packet which includes a - * checksum. A packet consists of - * - * $<packet info>#<checksum>. - * - * where - * <packet info> :: <characters representing the command or response> - * <checksum> :: < two hex digits computed as modulo 256 sum of <packetinfo>> - * - * When a packet is received, it is first acknowledged with either '+' or '-'. - * '+' indicates a successful transfer. '-' indicates a failed transfer. - * - * Example: - * - * Host: Reply: - * $m0,10#2a +$00010203040506070809101112131415#42 - * - ****************************************************************************/ - -#include <string.h> -#include <signal.h> - -/************************************************************************ - * - * external low-level support routines - */ - -extern putDebugChar(); /* write a single character */ -extern getDebugChar(); /* read and return a single char */ - -/************************************************************************/ -/* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/ -/* at least NUMREGBYTES*2 are needed for register packets */ -#define BUFMAX 2048 - -static int initialized = 0; /* !0 means we've been initialized */ - -static void set_mem_fault_trap(); - -static const char hexchars[]="0123456789abcdef"; - -#define NUMREGS 72 - -/* Number of bytes of registers. */ -#define NUMREGBYTES (NUMREGS * 4) -enum regnames {G0, G1, G2, G3, G4, G5, G6, G7, - O0, O1, O2, O3, O4, O5, SP, O7, - L0, L1, L2, L3, L4, L5, L6, L7, - I0, I1, I2, I3, I4, I5, FP, I7, - - F0, F1, F2, F3, F4, F5, F6, F7, - F8, F9, F10, F11, F12, F13, F14, F15, - F16, F17, F18, F19, F20, F21, F22, F23, - F24, F25, F26, F27, F28, F29, F30, F31, - Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR }; - -/*************************** ASSEMBLY CODE MACROS *************************/ -/* */ - -extern void trap_low(); - -asm(" - .reserve trapstack, 1000 * 4, \"bss\", 8 - - .data - .align 4 - -in_trap_handler: - .word 0 - - .text - .align 4 - -! This function is called when any SPARC trap (except window overflow or -! underflow) occurs. It makes sure that the invalid register window is still -! available before jumping into C code. It will also restore the world if you -! return from handle_exception. - - .globl _trap_low -_trap_low: - mov %psr, %l0 - mov %wim, %l3 - - srl %l3, %l0, %l4 ! wim >> cwp - cmp %l4, 1 - bne window_fine ! Branch if not in the invalid window - nop - -! Handle window overflow - - mov %g1, %l4 ! Save g1, we use it to hold the wim - srl %l3, 1, %g1 ! Rotate wim right - tst %g1 - bg good_wim ! Branch if new wim is non-zero - nop - -! At this point, we need to bring a 1 into the high order bit of the wim. -! Since we don't want to make any assumptions about the number of register -! windows, we figure it out dynamically so as to setup the wim correctly. - - not %g1 ! Fill g1 with ones - mov %g1, %wim ! Fill the wim with ones - nop - nop - nop - mov %wim, %g1 ! Read back the wim - inc %g1 ! Now g1 has 1 just to left of wim - srl %g1, 1, %g1 ! Now put 1 at top of wim - mov %g0, %wim ! Clear wim so that subsequent save - nop ! won't trap - nop - nop - -good_wim: - save %g0, %g0, %g0 ! Slip into next window - mov %g1, %wim ! Install the new wim - - std %l0, [%sp + 0 * 4] ! save L & I registers - std %l2, [%sp + 2 * 4] - std %l4, [%sp + 4 * 4] - std %l6, [%sp + 6 * 4] - - std %i0, [%sp + 8 * 4] - std %i2, [%sp + 10 * 4] - std %i4, [%sp + 12 * 4] - std %i6, [%sp + 14 * 4] - - restore ! Go back to trap window. - mov %l4, %g1 ! Restore %g1 - -window_fine: - sethi %hi(in_trap_handler), %l4 - ld [%lo(in_trap_handler) + %l4], %l5 - tst %l5 - bg recursive_trap - inc %l5 - - set trapstack+1000*4, %sp ! Switch to trap stack - -recursive_trap: - st %l5, [%lo(in_trap_handler) + %l4] - sub %sp,(16+1+6+1+72)*4,%sp ! Make room for input & locals - ! + hidden arg + arg spill - ! + doubleword alignment - ! + registers[72] local var - - std %g0, [%sp + (24 + 0) * 4] ! registers[Gx] - std %g2, [%sp + (24 + 2) * 4] - std %g4, [%sp + (24 + 4) * 4] - std %g6, [%sp + (24 + 6) * 4] - - std %i0, [%sp + (24 + 8) * 4] ! registers[Ox] - std %i2, [%sp + (24 + 10) * 4] - std %i4, [%sp + (24 + 12) * 4] - std %i6, [%sp + (24 + 14) * 4] - ! F0->F31 not implemented - mov %y, %l4 - mov %tbr, %l5 - st %l4, [%sp + (24 + 64) * 4] ! Y - st %l0, [%sp + (24 + 65) * 4] ! PSR - st %l3, [%sp + (24 + 66) * 4] ! WIM - st %l5, [%sp + (24 + 67) * 4] ! TBR - st %l1, [%sp + (24 + 68) * 4] ! PC - st %l2, [%sp + (24 + 69) * 4] ! NPC - - ! CPSR and FPSR not impl - - or %l0, 0xf20, %l4 - mov %l4, %psr ! Turn on traps, disable interrupts - - call _handle_exception - add %sp, 24 * 4, %o0 ! Pass address of registers - -! Reload all of the registers that aren't on the stack - - ld [%sp + (24 + 1) * 4], %g1 ! registers[Gx] - ldd [%sp + (24 + 2) * 4], %g2 - ldd [%sp + (24 + 4) * 4], %g4 - ldd [%sp + (24 + 6) * 4], %g6 - - ldd [%sp + (24 + 8) * 4], %i0 ! registers[Ox] - ldd [%sp + (24 + 10) * 4], %i2 - ldd [%sp + (24 + 12) * 4], %i4 - ldd [%sp + (24 + 14) * 4], %i6 - - ldd [%sp + (24 + 64) * 4], %l0 ! Y & PSR - ldd [%sp + (24 + 68) * 4], %l2 ! PC & NPC - - restore ! Ensure that previous window is valid - save %g0, %g0, %g0 ! by causing a window_underflow trap - - mov %l0, %y - mov %l1, %psr ! Make sure that traps are disabled - ! for rett - - sethi %hi(in_trap_handler), %l4 - ld [%lo(in_trap_handler) + %l4], %l5 - dec %l5 - st %l5, [%lo(in_trap_handler) + %l4] - - jmpl %l2, %g0 ! Restore old PC - rett %l3 ! Restore old nPC -"); - -/* Convert ch from a hex digit to an int */ - -static int -hex(ch) - unsigned char ch; -{ - if (ch >= 'a' && ch <= 'f') - return ch-'a'+10; - if (ch >= '0' && ch <= '9') - return ch-'0'; - if (ch >= 'A' && ch <= 'F') - return ch-'A'+10; - return -1; -} - -/* scan for the sequence $<data>#<checksum> */ - -static void -getpacket(buffer) - char *buffer; -{ - unsigned char checksum; - unsigned char xmitcsum; - int i; - int count; - unsigned char ch; - - do - { - /* wait around for the start character, ignore all other characters */ - while ((ch = (getDebugChar() & 0x7f)) != '$') ; - - checksum = 0; - xmitcsum = -1; - - count = 0; - - /* now, read until a # or end of buffer is found */ - while (count < BUFMAX) - { - ch = getDebugChar() & 0x7f; - if (ch == '#') - break; - checksum = checksum + ch; - buffer[count] = ch; - count = count + 1; - } - - if (count >= BUFMAX) - continue; - - buffer[count] = 0; - - if (ch == '#') - { - xmitcsum = hex(getDebugChar() & 0x7f) << 4; - xmitcsum |= hex(getDebugChar() & 0x7f); -#if 0 - /* Humans shouldn't have to figure out checksums to type to it. */ - putDebugChar ('+'); - return; -#endif - if (checksum != xmitcsum) - putDebugChar('-'); /* failed checksum */ - else - { - putDebugChar('+'); /* successful transfer */ - /* if a sequence char is present, reply the sequence ID */ - if (buffer[2] == ':') - { - putDebugChar(buffer[0]); - putDebugChar(buffer[1]); - /* remove sequence chars from buffer */ - count = strlen(buffer); - for (i=3; i <= count; i++) - buffer[i-3] = buffer[i]; - } - } - } - } - while (checksum != xmitcsum); -} - -/* send the packet in buffer. */ - -static void -putpacket(buffer) - unsigned char *buffer; -{ - unsigned char checksum; - int count; - unsigned char ch; - - /* $<packet info>#<checksum>. */ - do - { - putDebugChar('$'); - checksum = 0; - count = 0; - - while (ch = buffer[count]) - { - if (! putDebugChar(ch)) - return; - checksum += ch; - count += 1; - } - - putDebugChar('#'); - putDebugChar(hexchars[checksum >> 4]); - putDebugChar(hexchars[checksum & 0xf]); - - } - while ((getDebugChar() & 0x7f) != '+'); -} - -static char remcomInBuffer[BUFMAX]; -static char remcomOutBuffer[BUFMAX]; - -/* Indicate to caller of mem2hex or hex2mem that there has been an - error. */ -static volatile int mem_err = 0; - -/* Convert the memory pointed to by mem into hex, placing result in buf. - * Return a pointer to the last char put in buf (null), in case of mem fault, - * return 0. - * If MAY_FAULT is non-zero, then we will handle memory faults by returning - * a 0, else treat a fault like any other fault in the stub. - */ - -static unsigned char * -mem2hex(mem, buf, count, may_fault) - unsigned char *mem; - unsigned char *buf; - int count; - int may_fault; -{ - unsigned char ch; - - set_mem_fault_trap(may_fault); - - while (count-- > 0) - { - ch = *mem++; - if (mem_err) - return 0; - *buf++ = hexchars[ch >> 4]; - *buf++ = hexchars[ch & 0xf]; - } - - *buf = 0; - - set_mem_fault_trap(0); - - return buf; -} - -/* convert the hex array pointed to by buf into binary to be placed in mem - * return a pointer to the character AFTER the last byte written */ - -static char * -hex2mem(buf, mem, count, may_fault) - unsigned char *buf; - unsigned char *mem; - int count; - int may_fault; -{ - int i; - unsigned char ch; - - set_mem_fault_trap(may_fault); - - for (i=0; i<count; i++) - { - ch = hex(*buf++) << 4; - ch |= hex(*buf++); - *mem++ = ch; - if (mem_err) - return 0; - } - - set_mem_fault_trap(0); - - return mem; -} - -/* This table contains the mapping between SPARC hardware trap types, and - signals, which are primarily what GDB understands. It also indicates - which hardware traps we need to commandeer when initializing the stub. */ - -static struct hard_trap_info -{ - unsigned char tt; /* Trap type code for SPARClite */ - unsigned char signo; /* Signal that we map this trap into */ -} hard_trap_info[] = { - {1, SIGSEGV}, /* instruction access error */ - {2, SIGILL}, /* privileged instruction */ - {3, SIGILL}, /* illegal instruction */ - {4, SIGEMT}, /* fp disabled */ - {36, SIGEMT}, /* cp disabled */ - {7, SIGBUS}, /* mem address not aligned */ - {9, SIGSEGV}, /* data access exception */ - {10, SIGEMT}, /* tag overflow */ - {128+1, SIGTRAP}, /* ta 1 - normal breakpoint instruction */ - {0, 0} /* Must be last */ -}; - -/* Set up exception handlers for tracing and breakpoints */ - -void -set_debug_traps() -{ - struct hard_trap_info *ht; - - for (ht = hard_trap_info; ht->tt && ht->signo; ht++) - exceptionHandler(ht->tt, trap_low); - - /* In case GDB is started before us, ack any packets (presumably - "$?#xx") sitting there. */ - - putDebugChar ('+'); - - initialized = 1; -} - -asm (" -! Trap handler for memory errors. This just sets mem_err to be non-zero. It -! assumes that %l1 is non-zero. This should be safe, as it is doubtful that -! 0 would ever contain code that could mem fault. This routine will skip -! past the faulting instruction after setting mem_err. - - .text - .align 4 - -_fltr_set_mem_err: - sethi %hi(_mem_err), %l0 - st %l1, [%l0 + %lo(_mem_err)] - jmpl %l2, %g0 - rett %l2+4 -"); - -static void -set_mem_fault_trap(enable) - int enable; -{ - extern void fltr_set_mem_err(); - mem_err = 0; - - if (enable) - exceptionHandler(9, fltr_set_mem_err); - else - exceptionHandler(9, trap_low); -} - -/* Convert the SPARC hardware trap type code to a unix signal number. */ - -static int -computeSignal(tt) - int tt; -{ - struct hard_trap_info *ht; - - for (ht = hard_trap_info; ht->tt && ht->signo; ht++) - if (ht->tt == tt) - return ht->signo; - - return SIGHUP; /* default for things we don't know about */ -} - -/* - * While we find nice hex chars, build an int. - * Return number of chars processed. - */ - -static unsigned int -hexToInt(char **ptr, int *intValue) -{ - int numChars = 0; - int hexValue; - - *intValue = 0; - - while (**ptr) - { - hexValue = hex(**ptr); - if (hexValue < 0) - break; - - *intValue = (*intValue << 4) | hexValue; - numChars ++; - - (*ptr)++; - } - - return (numChars); -} - -/* - * This function does all command procesing for interfacing to gdb. It - * returns 1 if you should skip the instruction at the trap address, 0 - * otherwise. - */ - -extern void breakinst(); - -static void -handle_exception (registers) - unsigned long *registers; -{ - int tt; /* Trap type */ - int sigval; - unsigned int addr; - int length; - char *ptr; - unsigned long *sp; - -/* First, we must force all of the windows to be spilled out */ - - asm(" save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - restore - restore - restore - restore - restore - restore - restore - restore -"); - - if (registers[PC] == (unsigned long)breakinst) - { - registers[PC] = registers[NPC]; - registers[NPC] += 4; - } - - sp = (unsigned long *)registers[SP]; - - tt = (registers[TBR] >> 4) & 0xff; - - /* reply to host that an exception has occurred */ - sigval = computeSignal(tt); - ptr = remcomOutBuffer; - - *ptr++ = 'T'; - *ptr++ = hexchars[sigval >> 4]; - *ptr++ = hexchars[sigval & 0xf]; - - *ptr++ = hexchars[PC >> 4]; - *ptr++ = hexchars[PC & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)®isters[PC], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[FP >> 4]; - *ptr++ = hexchars[FP & 0xf]; - *ptr++ = ':'; - ptr = mem2hex(sp + 8 + 6, ptr, 4, 0); /* FP */ - *ptr++ = ';'; - - *ptr++ = hexchars[SP >> 4]; - *ptr++ = hexchars[SP & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)&sp, ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[NPC >> 4]; - *ptr++ = hexchars[NPC & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)®isters[NPC], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[O7 >> 4]; - *ptr++ = hexchars[O7 & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)®isters[O7], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = 0; - - putpacket(remcomOutBuffer); - - while (1) - { - remcomOutBuffer[0] = 0; - - getpacket(remcomInBuffer); - switch (remcomInBuffer[0]) - { - case '?': - remcomOutBuffer[0] = 'S'; - remcomOutBuffer[1] = hexchars[sigval >> 4]; - remcomOutBuffer[2] = hexchars[sigval & 0xf]; - remcomOutBuffer[3] = 0; - break; - - case 'd': - /* toggle debug flag */ - break; - - case 'g': /* return the value of the CPU registers */ - { - ptr = remcomOutBuffer; - ptr = mem2hex((char *)registers, ptr, 16 * 4, 0); /* G & O regs */ - ptr = mem2hex(sp + 0, ptr, 16 * 4, 0); /* L & I regs */ - memset(ptr, '0', 32 * 8); /* Floating point */ - mem2hex((char *)®isters[Y], - ptr + 32 * 4 * 2, - 8 * 4, - 0); /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ - } - break; - - case 'G': /* set the value of the CPU registers - return OK */ - { - unsigned long *newsp, psr; - - psr = registers[PSR]; - - ptr = &remcomInBuffer[1]; - hex2mem(ptr, (char *)registers, 16 * 4, 0); /* G & O regs */ - hex2mem(ptr + 16 * 4 * 2, sp + 0, 16 * 4, 0); /* L & I regs */ - hex2mem(ptr + 64 * 4 * 2, (char *)®isters[Y], - 8 * 4, 0); /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ - - /* See if the stack pointer has moved. If so, then copy the saved - locals and ins to the new location. This keeps the window - overflow and underflow routines happy. */ - - newsp = (unsigned long *)registers[SP]; - if (sp != newsp) - sp = memcpy(newsp, sp, 16 * 4); - - /* Don't allow CWP to be modified. */ - - if (psr != registers[PSR]) - registers[PSR] = (psr & 0x1f) | (registers[PSR] & ~0x1f); - - strcpy(remcomOutBuffer,"OK"); - } - break; - - case 'm': /* mAA..AA,LLLL Read LLLL bytes at address AA..AA */ - /* Try to read %x,%x. */ - - ptr = &remcomInBuffer[1]; - - if (hexToInt(&ptr, &addr) - && *ptr++ == ',' - && hexToInt(&ptr, &length)) - { - if (mem2hex((char *)addr, remcomOutBuffer, length, 1)) - break; - - strcpy (remcomOutBuffer, "E03"); - } - else - strcpy(remcomOutBuffer,"E01"); - break; - - case 'M': /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA return OK */ - /* Try to read '%x,%x:'. */ - - ptr = &remcomInBuffer[1]; - - if (hexToInt(&ptr, &addr) - && *ptr++ == ',' - && hexToInt(&ptr, &length) - && *ptr++ == ':') - { - if (hex2mem(ptr, (char *)addr, length, 1)) - strcpy(remcomOutBuffer, "OK"); - else - strcpy(remcomOutBuffer, "E03"); - } - else - strcpy(remcomOutBuffer, "E02"); - break; - - case 'c': /* cAA..AA Continue at address AA..AA(optional) */ - /* try to read optional parameter, pc unchanged if no parm */ - - ptr = &remcomInBuffer[1]; - if (hexToInt(&ptr, &addr)) - { - registers[PC] = addr; - registers[NPC] = addr + 4; - } - -/* Need to flush the instruction cache here, as we may have deposited a - breakpoint, and the icache probably has no way of knowing that a data ref to - some location may have changed something that is in the instruction cache. - */ - - flush_i_cache(); - return; - - /* kill the program */ - case 'k' : /* do nothing */ - break; -#if 0 - case 't': /* Test feature */ - asm (" std %f30,[%sp]"); - break; -#endif - case 'r': /* Reset */ - asm ("call 0 - nop "); - break; - -#if 0 -Disabled until we can unscrew this properly - - case 'b': /* bBB... Set baud rate to BB... */ - { - int baudrate; - extern void set_timer_3(); - - ptr = &remcomInBuffer[1]; - if (!hexToInt(&ptr, &baudrate)) - { - strcpy(remcomOutBuffer,"B01"); - break; - } - - /* Convert baud rate to uart clock divider */ - switch (baudrate) - { - case 38400: - baudrate = 16; - break; - case 19200: - baudrate = 33; - break; - case 9600: - baudrate = 65; - break; - default: - strcpy(remcomOutBuffer,"B02"); - goto x1; - } - - putpacket("OK"); /* Ack before changing speed */ - set_timer_3(baudrate); /* Set it */ - } -x1: break; -#endif - } /* switch */ - - /* reply to the request */ - putpacket(remcomOutBuffer); - } -} - -/* This function will generate a breakpoint exception. It is used at the - beginning of a program to sync up with a debugger and can be used - otherwise as a quick means to stop program execution and "break" into - the debugger. */ - -void -breakpoint() -{ - if (!initialized) - return; - - asm(" .globl _breakinst - - _breakinst: ta 1 - "); -} diff --git a/libgloss/sparc/sparc86x.ld b/libgloss/sparc/sparc86x.ld deleted file mode 100644 index e7cf27e..0000000 --- a/libgloss/sparc/sparc86x.ld +++ /dev/null @@ -1,177 +0,0 @@ -/* - *uncomment this if you want the linker to output srecords. -OUTPUT_FORMAT(srec) - * - */ -ENTRY(_start) -STARTUP(crt0.o) -OUTPUT_ARCH(sparc) -SEARCH_DIR(.) -__DYNAMIC = 0; -GROUP (-lc -lslite86x -lgcc) - -/* - * The memory map looks like this: - * +--------------------+ <- low memory - * | .text | - * | _stext | - * | _etext | - * | ctor list | the ctor and dtor lists are for - * | dtor list | C++ support - * | _end_text | - * +--------------------+ - * | .data | initialized data goes here - * | _sdata | - * | _edata | - * +--------------------+ - * | .bss | - * | __bss_start | start of bss, cleared by crt0 - * | _end | start of heap, used by sbrk() - * +--------------------+ - * | heap space | - * | _ENDHEAP | - * | stack space | - * | __stack | top of stack - * +--------------------+ <- high memory - */ - -_STACK_SIZE = (16 * 1024); -_RAM_SIZE = 2M; -_RAM_START = 0x40010000; -_RAM_END = _RAM_START + _RAM_SIZE; - -/* - * Base address of the on-CPU peripherals. This is for compatability - * with the simulator. - */ - -_ERC32_MEC = 0x0; - -/* - * Setup the memory map of the MB86931-EB Board (ex931) - * stack grows down towards low memory. - */ -MEMORY -{ - ram (rwx) : ORIGIN = 0x40010000, LENGTH = 2M -} - -__stack = _RAM_START + _RAM_SIZE - 4 * 16; -__trap_stack = (_RAM_START + _RAM_SIZE - 4 * 16) - _STACK_SIZE; - -/* - * All the symbols that might be accessed from C code need to be - * listed twice, once with an additional underscore. aout format needs - * and extra underscore, whereas coff & elf doesn't. This is to work - * with both. - */ -/* - * Initalize some symbols to be zero so we can reference them in the - * crt0 without core dumping. These functions are all optional, but - * we do this so we can have our crt0 always use them if they exist. - * This is so BSPs work better when using the crt0 installed with gcc. - * We have to initalize them twice, so we cover a.out (which prepends - * an underscore) and coff object file formats. - */ -PROVIDE (hardware_init_hook = 0); -PROVIDE (_hardware_init_hook = 0); -PROVIDE (software_init_hook = 0); -PROVIDE (_software_init_hook = 0); -SECTIONS -{ - .text : { - stext = .; - _stext = .; - __EH_FRAME_BEGIN__ = .; - - CREATE_OBJECT_SYMBOLS - *(.text) - - __CTOR_LIST__ = .; - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) - KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*crtend.o(.ctors)) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) - KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*crtend.o(.dtors)) - LONG(0) - __DTOR_END__ = .; - - _etext = .; - - *(.init) - *(.lit) - *(.rodata) - *(.shdata) - *(.eh_frame) - *(.gnu.linkonce.t*) - *(.gnu.linkonce.r*) - *(.gcc_except_table) - *(.fini) - - } > ram - .shbss SIZEOF(.text) + ADDR(.text) : { - *(.shbss) - } - .talias : { } > ram - .data ALIGN(0x2000) : { - sdata = .; - _sdata = .; - *(.data) - edata = .; - _edata = .; - } > ram - .bss SIZEOF(.data) + ADDR(.data) : { - sbss = . ; - _sbss = . ; - __bss_start = ALIGN(0x8); - __bss_start = ALIGN(0x8); - *(.bss) - *(COMMON) - end = ALIGN(0x8); - _end = ALIGN(0x8); - __end = ALIGN(0x8); - ebss = .; - _ebss = .; - } - .mstack : { } > ram - .rstack : { } > ram - .stab 0 (NOLOAD) : { - [ .stab ] - } - .stabstr 0 (NOLOAD) : - { - [ .stabstr ] - } - /* 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) } - /* 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) } - /* These must appear regardless of . */ -} diff --git a/libgloss/sparc/sparcl-stub.c b/libgloss/sparc/sparcl-stub.c deleted file mode 100644 index 634878b..0000000 --- a/libgloss/sparc/sparcl-stub.c +++ /dev/null @@ -1,1005 +0,0 @@ -/**************************************************************************** - - THIS SOFTWARE IS NOT COPYRIGHTED - - HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the - user accepts the software "AS IS" with all faults. - - HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD - TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -****************************************************************************/ - -/**************************************************************************** - * Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $ - * - * Module name: remcom.c $ - * Revision: 1.34 $ - * Date: 91/03/09 12:29:49 $ - * Contributor: Lake Stevens Instrument Division$ - * - * Description: low level support for gdb debugger. $ - * - * Considerations: only works on target hardware $ - * - * Written by: Glenn Engel $ - * ModuleState: Experimental $ - * - * NOTES: See Below $ - * - * Modified for SPARC by Stu Grossman, Cygnus Support. - * Based on sparc-stub.c, it's modified for SPARClite Debug Unit hardware - * breakpoint support to create sparclite-stub.c, by Kung Hsu, Cygnus Support. - * - * This code has been extensively tested on the Fujitsu SPARClite demo board. - * - * To enable debugger support, two things need to happen. One, a - * call to set_debug_traps() is necessary in order to allow any breakpoints - * or error conditions to be properly intercepted and reported to gdb. - * Two, a breakpoint needs to be generated to begin communication. This - * is most easily accomplished by a call to breakpoint(). Breakpoint() - * simulates a breakpoint by executing a trap #1. - * - ************* - * - * The following gdb commands are supported: - * - * command function Return value - * - * g return the value of the CPU registers hex data or ENN - * G set the value of the CPU registers OK or ENN - * - * mAA..AA,LLLL Read LLLL bytes at address AA..AA hex data or ENN - * MAA..AA,LLLL: Write LLLL bytes at address AA.AA OK or ENN - * - * c Resume at current address SNN ( signal NN) - * cAA..AA Continue at address AA..AA SNN - * - * s Step one instruction SNN - * sAA..AA Step one instruction from AA..AA SNN - * - * k kill - * - * ? What was the last sigval ? SNN (signal NN) - * - * bBB..BB Set baud rate to BB..BB OK or BNN, then sets - * baud rate - * - * All commands and responses are sent with a packet which includes a - * checksum. A packet consists of - * - * $<packet info>#<checksum>. - * - * where - * <packet info> :: <characters representing the command or response> - * <checksum> :: < two hex digits computed as modulo 256 sum of <packetinfo>> - * - * When a packet is received, it is first acknowledged with either '+' or '-'. - * '+' indicates a successful transfer. '-' indicates a failed transfer. - * - * Example: - * - * Host: Reply: - * $m0,10#2a +$00010203040506070809101112131415#42 - * - ****************************************************************************/ - -#include <string.h> -#include <signal.h> -#include "asm.h" - -/************************************************************************ - * - * external low-level support routines - */ -extern putDebugChar(); /* write a single character */ -extern getDebugChar(); /* read and return a single char */ - -/* Pointer to hook for outbyte, set by stub's exception handler. */ -extern void (*__outbyte_hook)(); - -/************************************************************************/ -/* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/ -/* at least NUMREGBYTES*2 are needed for register packets */ -#define BUFMAX 2048 - -static int initialized = 0; /* !0 means we've been initialized */ - -extern void breakinst(); -static void hw_breakpoint(); -static void set_mem_fault_trap(); -static void get_in_break_mode(); - -static const char hexchars[]="0123456789abcdef"; - -#define NUMREGS 80 - -/* Number of bytes of registers. */ -#define NUMREGBYTES (NUMREGS * 4) -enum regnames {G0, G1, G2, G3, G4, G5, G6, G7, - O0, O1, O2, O3, O4, O5, SP, O7, - L0, L1, L2, L3, L4, L5, L6, L7, - I0, I1, I2, I3, I4, I5, FP, I7, - - F0, F1, F2, F3, F4, F5, F6, F7, - F8, F9, F10, F11, F12, F13, F14, F15, - F16, F17, F18, F19, F20, F21, F22, F23, - F24, F25, F26, F27, F28, F29, F30, F31, - Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR, - DIA1, DIA2, DDA1, DDA2, DDV1, DDV2, DCR, DSR }; - -/*************************** ASSEMBLY CODE MACROS *************************/ -/* */ - -extern void trap_low(); - -asm(" - .reserve trapstack, 1000 * 4, \"bss\", 8 - - .data - .align 4 - -in_trap_handler: - .word 0 - - .text - .align 4 - -! This function is called when any SPARC trap (except window overflow or -! underflow) occurs. It makes sure that the invalid register window is still -! available before jumping into C code. It will also restore the world if you -! return from handle_exception. - - .globl " STRINGSYM(trap_low) " -" STRINGSYM(trap_low) ": - mov %psr, %l0 - mov %wim, %l3 - - srl %l3, %l0, %l4 ! wim >> cwp - cmp %l4, 1 - bne window_fine ! Branch if not in the invalid window - nop - -! Handle window overflow - - mov %g1, %l4 ! Save g1, we use it to hold the wim - srl %l3, 1, %g1 ! Rotate wim right - tst %g1 - bg good_wim ! Branch if new wim is non-zero - nop - -! At this point, we need to bring a 1 into the high order bit of the wim. -! Since we don't want to make any assumptions about the number of register -! windows, we figure it out dynamically so as to setup the wim correctly. - - not %g1 ! Fill g1 with ones - mov %g1, %wim ! Fill the wim with ones - nop - nop - nop - mov %wim, %g1 ! Read back the wim - inc %g1 ! Now g1 has 1 just to left of wim - srl %g1, 1, %g1 ! Now put 1 at top of wim - mov %g0, %wim ! Clear wim so that subsequent save - nop ! won't trap - nop - nop - -good_wim: - save %g0, %g0, %g0 ! Slip into next window - mov %g1, %wim ! Install the new wim - - std %l0, [%sp + 0 * 4] ! save L & I registers - std %l2, [%sp + 2 * 4] - std %l4, [%sp + 4 * 4] - std %l6, [%sp + 6 * 4] - - std %i0, [%sp + 8 * 4] - std %i2, [%sp + 10 * 4] - std %i4, [%sp + 12 * 4] - std %i6, [%sp + 14 * 4] - - restore ! Go back to trap window. - mov %l4, %g1 ! Restore %g1 - -window_fine: - sethi %hi(in_trap_handler), %l4 - ld [%lo(in_trap_handler) + %l4], %l5 - tst %l5 - bg recursive_trap - inc %l5 - - set trapstack+1000*4, %sp ! Switch to trap stack - -recursive_trap: - st %l5, [%lo(in_trap_handler) + %l4] - sub %sp,(16+1+6+1+80)*4,%sp ! Make room for input & locals - ! + hidden arg + arg spill - ! + doubleword alignment - ! + registers[72] local var - - std %g0, [%sp + (24 + 0) * 4] ! registers[Gx] - std %g2, [%sp + (24 + 2) * 4] - std %g4, [%sp + (24 + 4) * 4] - std %g6, [%sp + (24 + 6) * 4] - - std %i0, [%sp + (24 + 8) * 4] ! registers[Ox] - std %i2, [%sp + (24 + 10) * 4] - std %i4, [%sp + (24 + 12) * 4] - std %i6, [%sp + (24 + 14) * 4] - ! F0->F31 not implemented - mov %y, %l4 - mov %tbr, %l5 - st %l4, [%sp + (24 + 64) * 4] ! Y - st %l0, [%sp + (24 + 65) * 4] ! PSR - st %l3, [%sp + (24 + 66) * 4] ! WIM - st %l5, [%sp + (24 + 67) * 4] ! TBR - st %l1, [%sp + (24 + 68) * 4] ! PC - st %l2, [%sp + (24 + 69) * 4] ! NPC - ! CPSR and FPSR not impl - or %l0, 0xf20, %l4 - mov %l4, %psr ! Turn on traps, disable interrupts - nop - nop - nop - call " STRINGSYM(get_in_break_mode) " - nop - nop - nop - - sethi %hi(0xff00), %l5 - or %l5, %lo(0xff00), %l5 - - lda [%l5]0x1, %l4 - st %l4, [%sp + (24 + 72) * 4] ! DIA1, debug instr addr 1 - add %l5, 4, %l5 - lda [%l5]0x1, %l4 - st %l4, [%sp + (24 + 73) * 4] ! DIA2, debug instr addr 2 - add %l5, 4, %l5 - lda [%l5]0x1, %l4 - st %l4, [%sp + (24 + 74) * 4] ! DDA1, debug data addr 1 - add %l5, 4, %l5 - lda [%l5]0x1, %l4 - st %l4, [%sp + (24 + 75) * 4] ! DDA2, debug data addr 2 - add %l5, 4, %l5 - lda [%l5]0x1, %l4 - st %l4, [%sp + (24 + 76) * 4] ! DDV1, debug data val 1 - add %l5, 4, %l5 - lda [%l5]0x1, %l4 - st %l4, [%sp + (24 + 77) * 4] ! DDV2, debug data val 2 - add %l5, 4, %l5 - lda [%l5]0x1, %l4 - st %l4, [%sp + (24 + 78) * 4] ! DCR, debug control reg - add %l5, 4, %l5 - lda [%l5]0x1, %l4 - st %l4, [%sp + (24 + 79) * 4] ! DSR, debug status reg - nop - nop - or %l0, 0xf20, %l4 - mov %l4, %psr ! Turn on traps, disable interrupts - nop - nop - nop - call " STRINGSYM(handle_exception) " - add %sp, 24 * 4, %o0 ! Pass address of registers - -! Reload all of the registers that aren't on the stack - - ld [%sp + (24 + 1) * 4], %g1 ! registers[Gx] - ldd [%sp + (24 + 2) * 4], %g2 - ldd [%sp + (24 + 4) * 4], %g4 - ldd [%sp + (24 + 6) * 4], %g6 - - ldd [%sp + (24 + 8) * 4], %i0 ! registers[Ox] - ldd [%sp + (24 + 10) * 4], %i2 - ldd [%sp + (24 + 12) * 4], %i4 - ldd [%sp + (24 + 14) * 4], %i6 - - sethi %hi(0xff00), %l2 - or %l2, %lo(0xff00), %l2 - ldd [%sp + (24 + 72) * 4], %l4 ! DIA1, debug instr addr 1 - stda %l4, [%l2]0x1 - nop - nop - nop - nop - ldd [%sp + (24 + 74) * 4], %l4 ! DDA1, debug data addr 1 - add %l2, 8, %l2 - stda %l4, [%l2]0x1 - nop - nop - nop - nop - ldd [%sp + (24 + 76) * 4], %l4 ! DDV1, debug data value 1 - add %l2, 8, %l2 - stda %l4, [%l2]0x1 - nop - nop - nop - nop - ld [%sp + (24 + 78) * 4], %l4 ! DCR, debug control reg - ld [%sp + (24 + 79) * 4], %l5 ! DSR, debug control reg - add %l2, 8, %l2 - or %l4, 0x200, %l4 - sta %l4, [%l2]0x1 - add %l2, 4, %l2 - sta %l5, [%l2]0x1 - nop - nop - nop - nop - - ldd [%sp + (24 + 64) * 4], %l0 ! Y & PSR - ldd [%sp + (24 + 68) * 4], %l2 ! PC & NPC - - restore ! Ensure that previous window is valid - save %g0, %g0, %g0 ! by causing a window_underflow trap - - mov %l0, %y - mov %l1, %psr ! Make sure that traps are disabled - ! for rett - sethi %hi(in_trap_handler), %l4 - ld [%lo(in_trap_handler) + %l4], %l5 - dec %l5 - st %l5, [%lo(in_trap_handler) + %l4] - - jmpl %l2, %g0 ! Restore old PC - rett %l3 ! Restore old nPC -"); - -/* Convert ch from a hex digit to an int */ - -static int -hex(ch) - unsigned char ch; -{ - if (ch >= 'a' && ch <= 'f') - return ch-'a'+10; - if (ch >= '0' && ch <= '9') - return ch-'0'; - if (ch >= 'A' && ch <= 'F') - return ch-'A'+10; - return -1; -} - -/* scan for the sequence $<data>#<checksum> */ - -static void -getpacket(buffer) - char *buffer; -{ - unsigned char checksum; - unsigned char xmitcsum; - int i; - int count; - unsigned char ch; - - do - { - /* wait around for the start character, ignore all other characters */ - while ((ch = (getDebugChar() & 0x7f)) != '$') ; - - checksum = 0; - xmitcsum = -1; - - count = 0; - - /* now, read until a # or end of buffer is found */ - while (count < BUFMAX) - { - ch = getDebugChar() & 0x7f; - if (ch == '#') - break; - checksum = checksum + ch; - buffer[count] = ch; - count = count + 1; - } - - if (count >= BUFMAX) - continue; - - buffer[count] = 0; - - if (ch == '#') - { - xmitcsum = hex(getDebugChar() & 0x7f) << 4; - xmitcsum |= hex(getDebugChar() & 0x7f); -#if 0 - /* Humans shouldn't have to figure out checksums to type to it. */ - putDebugChar ('+'); - return; -#endif - if (checksum != xmitcsum) - putDebugChar('-'); /* failed checksum */ - else - { - putDebugChar('+'); /* successful transfer */ - /* if a sequence char is present, reply the sequence ID */ - if (buffer[2] == ':') - { - putDebugChar(buffer[0]); - putDebugChar(buffer[1]); - /* remove sequence chars from buffer */ - count = strlen(buffer); - for (i=3; i <= count; i++) - buffer[i-3] = buffer[i]; - } - } - } - } - while (checksum != xmitcsum); -} - -/* send the packet in buffer. */ - -static void -putpacket(buffer) - unsigned char *buffer; -{ - unsigned char checksum; - int count; - unsigned char ch; - - /* $<packet info>#<checksum>. */ - do - { - putDebugChar('$'); - checksum = 0; - count = 0; - - while (ch = buffer[count]) - { - if (! putDebugChar(ch)) - return; - checksum += ch; - count += 1; - } - - putDebugChar('#'); - putDebugChar(hexchars[checksum >> 4]); - putDebugChar(hexchars[checksum & 0xf]); - - } - while ((getDebugChar() & 0x7f) != '+'); -} - -static char remcomInBuffer[BUFMAX]; -static char remcomOutBuffer[BUFMAX]; - -/* Indicate to caller of mem2hex or hex2mem that there has been an - error. */ -static volatile int mem_err = 0; - -/* Convert the memory pointed to by mem into hex, placing result in buf. - * Return a pointer to the last char put in buf (null), in case of mem fault, - * return 0. - * If MAY_FAULT is non-zero, then we will handle memory faults by returning - * a 0, else treat a fault like any other fault in the stub. - */ - -static unsigned char * -mem2hex(mem, buf, count, may_fault) - unsigned char *mem; - unsigned char *buf; - int count; - int may_fault; -{ - unsigned char ch; - - set_mem_fault_trap(may_fault); - - while (count-- > 0) - { - ch = *mem++; - if (mem_err) - return 0; - *buf++ = hexchars[ch >> 4]; - *buf++ = hexchars[ch & 0xf]; - } - - *buf = 0; - - set_mem_fault_trap(0); - - return buf; -} - -/* convert the hex array pointed to by buf into binary to be placed in mem - * return a pointer to the character AFTER the last byte written */ - -static char * -hex2mem(buf, mem, count, may_fault) - unsigned char *buf; - unsigned char *mem; - int count; - int may_fault; -{ - int i; - unsigned char ch; - - set_mem_fault_trap(may_fault); - - for (i=0; i<count; i++) - { - ch = hex(*buf++) << 4; - ch |= hex(*buf++); - *mem++ = ch; - if (mem_err) - return 0; - } - - set_mem_fault_trap(0); - - return mem; -} - -/* This table contains the mapping between SPARC hardware trap types, and - signals, which are primarily what GDB understands. It also indicates - which hardware traps we need to commandeer when initializing the stub. */ - -static struct hard_trap_info -{ - unsigned char tt; /* Trap type code for SPARClite */ - unsigned char signo; /* Signal that we map this trap into */ -} hard_trap_info[] = { - {1, SIGSEGV}, /* instruction access error */ - {2, SIGILL}, /* privileged instruction */ - {3, SIGILL}, /* illegal instruction */ - {4, SIGEMT}, /* fp disabled */ - {36, SIGEMT}, /* cp disabled */ - {7, SIGBUS}, /* mem address not aligned */ - {9, SIGSEGV}, /* data access exception */ - {10, SIGEMT}, /* tag overflow */ - {128+1, SIGTRAP}, /* ta 1 - normal breakpoint instruction */ - {255, SIGTRAP}, /* hardware breakpoint */ - {0, 0} /* Must be last */ -}; - -/* Set up exception handlers for tracing and breakpoints */ - -void -set_debug_traps() -{ - struct hard_trap_info *ht; - - for (ht = hard_trap_info; ht->tt && ht->signo; ht++) - exceptionHandler(ht->tt, trap_low); - - /* In case GDB is started before us, ack any packets (presumably - "$?#xx") sitting there. */ - - putDebugChar ('+'); - - initialized = 1; -} - -asm (" -! Trap handler for memory errors. This just sets mem_err to be non-zero. It -! assumes that %l1 is non-zero. This should be safe, as it is doubtful that -! 0 would ever contain code that could mem fault. This routine will skip -! past the faulting instruction after setting mem_err. - - .text - .align 4 - -" STRINGSYM(fltr_set_mem_err) ": - sethi %hi(" STRINGSYM(mem_err) "), %l0 - st %l1, [%l0 + %lo(" STRINGSYM(mem_err) ")] - jmpl %l2, %g0 - rett %l2+4 -"); - -static void -set_mem_fault_trap(enable) - int enable; -{ - extern void fltr_set_mem_err(); - mem_err = 0; - - if (enable) - exceptionHandler(9, fltr_set_mem_err); - else - exceptionHandler(9, trap_low); -} - -asm (" - .text - .align 4 - -" STRINGSYM(dummy_hw_breakpoint) ": - jmpl %l2, %g0 - rett %l2+4 - nop - nop -"); - -static void -set_hw_breakpoint_trap(enable) - int enable; -{ - extern void dummy_hw_breakpoint(); - - if (enable) - exceptionHandler(255, dummy_hw_breakpoint); - else - exceptionHandler(255, trap_low); -} - -static void -get_in_break_mode() -{ - set_hw_breakpoint_trap(1); - - asm(" - sethi %hi(0xff10), %l4 - or %l4, %lo(0xff10), %l4 - sta %g0, [%l4]0x1 - nop - nop - nop - "); - - set_hw_breakpoint_trap(0); -} - -/* Convert the SPARC hardware trap type code to a unix signal number. */ - -static int -computeSignal(tt) - int tt; -{ - struct hard_trap_info *ht; - - for (ht = hard_trap_info; ht->tt && ht->signo; ht++) - if (ht->tt == tt) - return ht->signo; - - return SIGHUP; /* default for things we don't know about */ -} - -/* - * While we find nice hex chars, build an int. - * Return number of chars processed. - */ - -static int -hexToInt(char **ptr, int *intValue) -{ - int numChars = 0; - int hexValue; - - *intValue = 0; - - while (**ptr) - { - hexValue = hex(**ptr); - if (hexValue < 0) - break; - - *intValue = (*intValue << 4) | hexValue; - numChars ++; - - (*ptr)++; - } - - return (numChars); -} - -/* Replacement for outbyte that sends a packet to GDB containing - the character to be output. */ - -static void -outbyte_stub (int c) -{ - static char buf[4]; - - buf[0] = 'O'; - buf[1] = hexchars[(c >> 4) & 0xf]; - buf[2] = hexchars[c % 16]; - buf[3] = 0; - putpacket (buf); -} - - -/* - * This function does all command procesing for interfacing to gdb. It - * returns 1 if you should skip the instruction at the trap address, 0 - * otherwise. - */ - - -static void -handle_exception (registers) - unsigned long *registers; -{ - int tt; /* Trap type */ - int sigval; - int addr; - int length; - char *ptr; - unsigned long *sp; - unsigned long dsr; - -/* First, we must force all of the windows to be spilled out */ - - asm(" save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - restore - restore - restore - restore - restore - restore - restore - restore -"); - - if (registers[PC] == (unsigned long)breakinst) - { - registers[PC] = registers[NPC]; - registers[NPC] += 4; - } - sp = (unsigned long *)registers[SP]; - - dsr = (unsigned long)registers[DSR]; - if (dsr & 0x3c) - { - tt = 255; - } - else - { - tt = (registers[TBR] >> 4) & 0xff; - } - - /* reply to host that an exception has occurred */ - sigval = computeSignal(tt); - ptr = remcomOutBuffer; - - *ptr++ = 'T'; - *ptr++ = hexchars[sigval >> 4]; - *ptr++ = hexchars[sigval & 0xf]; - - *ptr++ = hexchars[PC >> 4]; - *ptr++ = hexchars[PC & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)®isters[PC], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[FP >> 4]; - *ptr++ = hexchars[FP & 0xf]; - *ptr++ = ':'; - ptr = mem2hex(sp + 8 + 6, ptr, 4, 0); /* FP */ - *ptr++ = ';'; - - *ptr++ = hexchars[SP >> 4]; - *ptr++ = hexchars[SP & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)&sp, ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[NPC >> 4]; - *ptr++ = hexchars[NPC & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)®isters[NPC], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[O7 >> 4]; - *ptr++ = hexchars[O7 & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)®isters[O7], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = 0; - - putpacket(remcomOutBuffer); - - __outbyte_hook = outbyte_stub; - - while (1) - { - remcomOutBuffer[0] = 0; - - getpacket(remcomInBuffer); - switch (remcomInBuffer[0]) - { - case '?': - remcomOutBuffer[0] = 'S'; - remcomOutBuffer[1] = hexchars[sigval >> 4]; - remcomOutBuffer[2] = hexchars[sigval & 0xf]; - remcomOutBuffer[3] = 0; - break; - - case 'd': - /* toggle debug flag */ - break; - - case 'g': /* return the value of the CPU registers */ - { - ptr = remcomOutBuffer; - ptr = mem2hex((char *)registers, ptr, 16 * 4, 0); /* G & O regs */ - ptr = mem2hex(sp + 0, ptr, 16 * 4, 0); /* L & I regs */ - memset(ptr, '0', 32 * 8); /* Floating point */ - ptr = mem2hex((char *)®isters[Y], - ptr + 32 * 4 * 2, - 8 * 4, - 0); /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ - mem2hex((char *)®isters[DIA1], ptr, - 8 * 4, 0); /* DIA1, DIA2, DDA1, DDA2, DDV1, DDV2, DCR, DSR */ - } - break; - - case 'G': /* set the value of the CPU registers - return OK */ - { - unsigned long *newsp, psr; - - psr = registers[PSR]; - - ptr = &remcomInBuffer[1]; - hex2mem(ptr, (char *)registers, 16 * 4, 0); /* G & O regs */ - hex2mem(ptr + 16 * 4 * 2, sp + 0, 16 * 4, 0); /* L & I regs */ - hex2mem(ptr + 64 * 4 * 2, (char *)®isters[Y], - 8 * 4, 0); /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ - hex2mem(ptr + 72 * 4 * 2, (char *)®isters[DIA1], - 8 * 4, 0); /* DIA1, DIA2, DDA1, DDA2, DDV1, DDV2, DCR, DSR */ - - /* See if the stack pointer has moved. If so, then copy the saved - locals and ins to the new location. This keeps the window - overflow and underflow routines happy. */ - - newsp = (unsigned long *)registers[SP]; - if (sp != newsp) - sp = memcpy(newsp, sp, 16 * 4); - - /* Don't allow CWP to be modified. */ - - if (psr != registers[PSR]) - registers[PSR] = (psr & 0x1f) | (registers[PSR] & ~0x1f); - - strcpy(remcomOutBuffer,"OK"); - } - break; - - case 'm': /* mAA..AA,LLLL Read LLLL bytes at address AA..AA */ - /* Try to read %x,%x. */ - - ptr = &remcomInBuffer[1]; - - if (hexToInt(&ptr, &addr) - && *ptr++ == ',' - && hexToInt(&ptr, &length)) - { - if (mem2hex((char *)addr, remcomOutBuffer, length, 1)) - break; - - strcpy (remcomOutBuffer, "E03"); - } - else - strcpy(remcomOutBuffer,"E01"); - break; - - case 'M': /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA return OK */ - /* Try to read '%x,%x:'. */ - - ptr = &remcomInBuffer[1]; - - if (hexToInt(&ptr, &addr) - && *ptr++ == ',' - && hexToInt(&ptr, &length) - && *ptr++ == ':') - { - if (hex2mem(ptr, (char *)addr, length, 1)) - strcpy(remcomOutBuffer, "OK"); - else - strcpy(remcomOutBuffer, "E03"); - } - else - strcpy(remcomOutBuffer, "E02"); - break; - - case 'c': /* cAA..AA Continue at address AA..AA(optional) */ - /* try to read optional parameter, pc unchanged if no parm */ - - ptr = &remcomInBuffer[1]; - if (hexToInt(&ptr, &addr)) - { - registers[PC] = addr; - registers[NPC] = addr + 4; - } - -/* Need to flush the instruction cache here, as we may have deposited a - breakpoint, and the icache probably has no way of knowing that a data ref to - some location may have changed something that is in the instruction cache. - */ - - flush_i_cache(); - return; - - /* kill the program */ - case 'k' : /* do nothing */ - break; -#if 0 - case 't': /* Test feature */ - asm (" std %f30,[%sp]"); - break; -#endif - case 'r': /* Reset */ - asm ("call 0 - nop "); - break; - -#if 0 -Disabled until we can unscrew this properly - - case 'b': /* bBB... Set baud rate to BB... */ - { - int baudrate; - extern void set_timer_3(); - - ptr = &remcomInBuffer[1]; - if (!hexToInt(&ptr, &baudrate)) - { - strcpy(remcomOutBuffer,"B01"); - break; - } - - /* Convert baud rate to uart clock divider */ - switch (baudrate) - { - case 38400: - baudrate = 16; - break; - case 19200: - baudrate = 33; - break; - case 9600: - baudrate = 65; - break; - default: - strcpy(remcomOutBuffer,"B02"); - goto x1; - } - - putpacket("OK"); /* Ack before changing speed */ - set_timer_3(baudrate); /* Set it */ - } -x1: break; -#endif - } /* switch */ - - /* reply to the request */ - putpacket(remcomOutBuffer); - } -} - -/* This function will generate a breakpoint exception. It is used at the - beginning of a program to sync up with a debugger and can be used - otherwise as a quick means to stop program execution and "break" into - the debugger. */ - -void -breakpoint() -{ - if (!initialized) - return; - - asm(" .globl " STRINGSYM(breakinst) " - - " STRINGSYM(breakinst) ": ta 1 - "); -} - -static void -hw_breakpoint() -{ - asm(" - ta 127 - "); -} diff --git a/libgloss/sparc/sparclet-stub.c b/libgloss/sparc/sparclet-stub.c deleted file mode 100644 index a462128..0000000 --- a/libgloss/sparc/sparclet-stub.c +++ /dev/null @@ -1,1233 +0,0 @@ -/**************************************************************************** - - THIS SOFTWARE IS NOT COPYRIGHTED - - HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the - user accepts the software "AS IS" with all faults. - - HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD - TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -****************************************************************************/ - -/**************************************************************************** - * Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $ - * - * Module name: remcom.c $ - * Revision: 1.34 $ - * Date: 91/03/09 12:29:49 $ - * Contributor: Lake Stevens Instrument Division$ - * - * Description: low level support for gdb debugger. $ - * - * Considerations: only works on target hardware $ - * - * Written by: Glenn Engel $ - * ModuleState: Experimental $ - * - * NOTES: See Below $ - * - * Modified for SPARC by Stu Grossman, Cygnus Support. - * Based on sparc-stub.c, it's modified for SPARClite Debug Unit hardware - * breakpoint support to create sparclite-stub.c, by Kung Hsu, Cygnus Support. - * - * This code has been extensively tested on the Fujitsu SPARClite demo board. - * - * To enable debugger support, two things need to happen. One, a - * call to set_debug_traps() is necessary in order to allow any breakpoints - * or error conditions to be properly intercepted and reported to gdb. - * Two, a breakpoint needs to be generated to begin communication. This - * is most easily accomplished by a call to breakpoint(). Breakpoint() - * simulates a breakpoint by executing a trap #1. - * - ************* - * - * The following gdb commands are supported: - * - * command function Return value - * - * g return the value of the CPU registers hex data or ENN - * G set the value of the CPU registers OK or ENN - * P set the value of a single CPU register OK or P01 (???) - * - * mAA..AA,LLLL Read LLLL bytes at address AA..AA hex data or ENN - * MAA..AA,LLLL: Write LLLL bytes at address AA.AA OK or ENN - * - * c Resume at current address SNN ( signal NN) - * cAA..AA Continue at address AA..AA SNN - * - * s Step one instruction SNN - * sAA..AA Step one instruction from AA..AA SNN - * - * k kill - * - * ? What was the last sigval ? SNN (signal NN) - * - * bBB..BB Set baud rate to BB..BB OK or BNN, then sets - * baud rate - * - * All commands and responses are sent with a packet which includes a - * checksum. A packet consists of - * - * $<packet info>#<checksum>. - * - * where - * <packet info> :: <characters representing the command or response> - * <checksum> :: <two hex digits computed as modulo 256 sum of <packetinfo>> - * - * When a packet is received, it is first acknowledged with either '+' or '-'. - * '+' indicates a successful transfer. '-' indicates a failed transfer. - * - * Example: - * - * Host: Reply: - * $m0,10#2a +$00010203040506070809101112131415#42 - * - ****************************************************************************/ - -#include <string.h> -#include <signal.h> - -/************************************************************************ - * - * external low-level support routines - */ - -extern putDebugChar(); /* write a single character */ -extern getDebugChar(); /* read and return a single char */ - -/************************************************************************/ -/* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/ -/* at least NUMREGBYTES*2 are needed for register packets */ -#define BUFMAX 2048 - -static int initialized = 0; /* !0 means we've been initialized */ -static int remote_debug = 0; /* turn on verbose debugging */ - -extern void breakinst(); -void _cprint(); -static void hw_breakpoint(); -static void set_mem_fault_trap(); -static void get_in_break_mode(); -static unsigned char *mem2hex(); - -static const char hexchars[]="0123456789abcdef"; - -#define NUMREGS 121 - -static unsigned long saved_stack_pointer; - -/* Number of bytes of registers. */ -#define NUMREGBYTES (NUMREGS * 4) -enum regnames { G0, G1, G2, G3, G4, G5, G6, G7, - O0, O1, O2, O3, O4, O5, SP, O7, - L0, L1, L2, L3, L4, L5, L6, L7, - I0, I1, I2, I3, I4, I5, FP, I7, - - F0, F1, F2, F3, F4, F5, F6, F7, - F8, F9, F10, F11, F12, F13, F14, F15, - F16, F17, F18, F19, F20, F21, F22, F23, - F24, F25, F26, F27, F28, F29, F30, F31, - - Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR, - CCSR, CCPR, CCCRCR, CCOR, CCOBR, CCIBR, CCIR, UNUSED1, - - ASR1, ASR15, ASR17, ASR18, ASR19, ASR20, ASR21, ASR22, - /* the following not actually implemented */ - AWR0, AWR1, AWR2, AWR3, AWR4, AWR5, AWR6, AWR7, - AWR8, AWR9, AWR10, AWR11, AWR12, AWR13, AWR14, AWR15, - AWR16, AWR17, AWR18, AWR19, AWR20, AWR21, AWR22, AWR23, - AWR24, AWR25, AWR26, AWR27, AWR28, AWR29, AWR30, AWR31, - APSR -}; - -/*************************** ASSEMBLY CODE MACROS *************************/ -/* */ - -extern void trap_low(); - -asm(" - .reserve trapstack, 1000 * 4, \"bss\", 8 - - .data - .align 4 - -in_trap_handler: - .word 0 - - .text - .align 4 - -! This function is called when any SPARC trap (except window overflow or -! underflow) occurs. It makes sure that the invalid register window is still -! available before jumping into C code. It will also restore the world if you -! return from handle_exception. -! -! On entry, trap_low expects l1 and l2 to contain pc and npc respectivly. - - .globl _trap_low -_trap_low: - mov %psr, %l0 - mov %wim, %l3 - - srl %l3, %l0, %l4 ! wim >> cwp - and %l4, 0xff, %l4 ! Mask off windows 28, 29 - cmp %l4, 1 - bne window_fine ! Branch if not in the invalid window - nop - -! Handle window overflow - - mov %g1, %l4 ! Save g1, we use it to hold the wim - srl %l3, 1, %g1 ! Rotate wim right - and %g1, 0xff, %g1 ! Mask off windows 28, 29 - tst %g1 - bg good_wim ! Branch if new wim is non-zero - nop - -! At this point, we need to bring a 1 into the high order bit of the wim. -! Since we don't want to make any assumptions about the number of register -! windows, we figure it out dynamically so as to setup the wim correctly. - - ! The normal way doesn't work on the sparclet as register windows - ! 28 and 29 are special purpose windows. - !not %g1 ! Fill g1 with ones - !mov %g1, %wim ! Fill the wim with ones - !nop - !nop - !nop - !mov %wim, %g1 ! Read back the wim - !inc %g1 ! Now g1 has 1 just to left of wim - !srl %g1, 1, %g1 ! Now put 1 at top of wim - - mov 0x80, %g1 ! Hack for sparclet - - ! This doesn't work on the sparclet. - !mov %g0, %wim ! Clear wim so that subsequent save - ! won't trap - andn %l3, 0xff, %l5 ! Clear wim but not windows 28, 29 - mov %l5, %wim - nop - nop - nop - -good_wim: - save %g0, %g0, %g0 ! Slip into next window - mov %g1, %wim ! Install the new wim - - std %l0, [%sp + 0 * 4] ! save L & I registers - std %l2, [%sp + 2 * 4] - std %l4, [%sp + 4 * 4] - std %l6, [%sp + 6 * 4] - - std %i0, [%sp + 8 * 4] - std %i2, [%sp + 10 * 4] - std %i4, [%sp + 12 * 4] - std %i6, [%sp + 14 * 4] - - restore ! Go back to trap window. - mov %l4, %g1 ! Restore %g1 - -window_fine: - sethi %hi(in_trap_handler), %l4 - ld [%lo(in_trap_handler) + %l4], %l5 - tst %l5 - bg recursive_trap - inc %l5 - - set trapstack+1000*4, %sp ! Switch to trap stack - -recursive_trap: - st %l5, [%lo(in_trap_handler) + %l4] - sub %sp,(16+1+6+1+88)*4,%sp ! Make room for input & locals - ! + hidden arg + arg spill - ! + doubleword alignment - ! + registers[121] - - std %g0, [%sp + (24 + 0) * 4] ! registers[Gx] - std %g2, [%sp + (24 + 2) * 4] - std %g4, [%sp + (24 + 4) * 4] - std %g6, [%sp + (24 + 6) * 4] - - std %i0, [%sp + (24 + 8) * 4] ! registers[Ox] - std %i2, [%sp + (24 + 10) * 4] - std %i4, [%sp + (24 + 12) * 4] - std %i6, [%sp + (24 + 14) * 4] - - ! FP regs (sparclet doesn't have fpu) - - mov %y, %l4 - mov %tbr, %l5 - st %l4, [%sp + (24 + 64) * 4] ! Y - st %l0, [%sp + (24 + 65) * 4] ! PSR - st %l3, [%sp + (24 + 66) * 4] ! WIM - st %l5, [%sp + (24 + 67) * 4] ! TBR - st %l1, [%sp + (24 + 68) * 4] ! PC - st %l2, [%sp + (24 + 69) * 4] ! NPC - ! CPSR and FPSR not impl - or %l0, 0xf20, %l4 - mov %l4, %psr ! Turn on traps, disable interrupts - nop - nop - nop - -! Save coprocessor state. -! See SK/demo/hdlc_demo/ldc_swap_context.S. - - mov %psr, %l0 - sethi %hi(0x2000), %l5 ! EC bit in PSR - or %l5, %l0, %l5 - mov %l5, %psr ! enable coprocessor - nop ! 3 nops after write to %psr (needed?) - nop - nop - crdcxt %ccsr, %l1 ! capture CCSR - mov 0x6, %l2 - cwrcxt %l2, %ccsr ! set CCP state machine for CCFR - crdcxt %ccfr, %l2 ! capture CCOR - cwrcxt %l2, %ccfr ! tickle CCFR - crdcxt %ccfr, %l3 ! capture CCOBR - cwrcxt %l3, %ccfr ! tickle CCFR - crdcxt %ccfr, %l4 ! capture CCIBR - cwrcxt %l4, %ccfr ! tickle CCFR - crdcxt %ccfr, %l5 ! capture CCIR - cwrcxt %l5, %ccfr ! tickle CCFR - crdcxt %ccpr, %l6 ! capture CCPR - crdcxt %cccrcr, %l7 ! capture CCCRCR - st %l1, [%sp + (24 + 72) * 4] ! save CCSR - st %l2, [%sp + (24 + 75) * 4] ! save CCOR - st %l3, [%sp + (24 + 76) * 4] ! save CCOBR - st %l4, [%sp + (24 + 77) * 4] ! save CCIBR - st %l5, [%sp + (24 + 78) * 4] ! save CCIR - st %l6, [%sp + (24 + 73) * 4] ! save CCPR - st %l7, [%sp + (24 + 74) * 4] ! save CCCRCR - mov %l0, %psr ! restore original PSR - nop ! 3 nops after write to %psr (needed?) - nop - nop - -! End of saving coprocessor state. -! Save asr regs - -! Part of this is silly -- we should not display ASR15 or ASR19 at all. - - sethi %hi(0x01000000), %l6 - st %l6, [%sp + (24 + 81) * 4] ! ASR15 == NOP - sethi %hi(0xdeadc0de), %l6 - or %l6, %lo(0xdeadc0de), %l6 - st %l6, [%sp + (24 + 84) * 4] ! ASR19 == DEADC0DE - - rd %asr1, %l4 - st %l4, [%sp + (24 + 80) * 4] -! rd %asr15, %l4 ! must not read ASR15 -! st %l4, [%sp + (24 + 81) * 4] ! (illegal instr trap) - rd %asr17, %l4 - st %l4, [%sp + (24 + 82) * 4] - rd %asr18, %l4 - st %l4, [%sp + (24 + 83) * 4] -! rd %asr19, %l4 ! must not read asr19 -! st %l4, [%sp + (24 + 84) * 4] ! (halts the CPU) - rd %asr20, %l4 - st %l4, [%sp + (24 + 85) * 4] - rd %asr21, %l4 - st %l4, [%sp + (24 + 86) * 4] - rd %asr22, %l4 - st %l4, [%sp + (24 + 87) * 4] - -! End of saving asr regs - - call _handle_exception - add %sp, 24 * 4, %o0 ! Pass address of registers - -! Reload all of the registers that aren't on the stack - - ld [%sp + (24 + 1) * 4], %g1 ! registers[Gx] - ldd [%sp + (24 + 2) * 4], %g2 - ldd [%sp + (24 + 4) * 4], %g4 - ldd [%sp + (24 + 6) * 4], %g6 - - ldd [%sp + (24 + 8) * 4], %i0 ! registers[Ox] - ldd [%sp + (24 + 10) * 4], %i2 - ldd [%sp + (24 + 12) * 4], %i4 - ldd [%sp + (24 + 14) * 4], %i6 - - ! FP regs (sparclet doesn't have fpu) - -! Update the coprocessor registers. -! See SK/demo/hdlc_demo/ldc_swap_context.S. - - mov %psr, %l0 - sethi %hi(0x2000), %l5 ! EC bit in PSR - or %l5, %l0, %l5 - mov %l5, %psr ! enable coprocessor - nop ! 3 nops after write to %psr (needed?) - nop - nop - - mov 0x6, %l2 - cwrcxt %l2, %ccsr ! set CCP state machine for CCFR - - ld [%sp + (24 + 72) * 4], %l1 ! saved CCSR - ld [%sp + (24 + 75) * 4], %l2 ! saved CCOR - ld [%sp + (24 + 76) * 4], %l3 ! saved CCOBR - ld [%sp + (24 + 77) * 4], %l4 ! saved CCIBR - ld [%sp + (24 + 78) * 4], %l5 ! saved CCIR - ld [%sp + (24 + 73) * 4], %l6 ! saved CCPR - ld [%sp + (24 + 74) * 4], %l7 ! saved CCCRCR - - cwrcxt %l2, %ccfr ! restore CCOR - cwrcxt %l3, %ccfr ! restore CCOBR - cwrcxt %l4, %ccfr ! restore CCIBR - cwrcxt %l5, %ccfr ! restore CCIR - cwrcxt %l6, %ccpr ! restore CCPR - cwrcxt %l7, %cccrcr ! restore CCCRCR - cwrcxt %l1, %ccsr ! restore CCSR - - mov %l0, %psr ! restore PSR - nop ! 3 nops after write to %psr (needed?) - nop - nop - -! End of coprocessor handling stuff. -! Update asr regs - - ld [%sp + (24 + 80) * 4], %l4 - wr %l4, %asr1 -! ld [%sp + (24 + 81) * 4], %l4 ! can't write asr15 -! wr %l4, %asr15 - ld [%sp + (24 + 82) * 4], %l4 - wr %l4, %asr17 - ld [%sp + (24 + 83) * 4], %l4 - wr %l4, %asr18 -! ld [%sp + (24 + 84) * 4], %l4 ! can't write asr19 -! wr %l4, %asr19 -! ld [%sp + (24 + 85) * 4], %l4 ! can't write asr20 -! wr %l4, %asr20 -! ld [%sp + (24 + 86) * 4], %l4 ! can't write asr21 -! wr %l4, %asr21 - ld [%sp + (24 + 87) * 4], %l4 - wr %l4, %asr22 - -! End of restoring asr regs - - - ldd [%sp + (24 + 64) * 4], %l0 ! Y & PSR - ldd [%sp + (24 + 68) * 4], %l2 ! PC & NPC - - restore ! Ensure that previous window is valid - save %g0, %g0, %g0 ! by causing a window_underflow trap - - mov %l0, %y - mov %l1, %psr ! Make sure that traps are disabled - ! for rett - nop ! 3 nops after write to %psr (needed?) - nop - nop - - sethi %hi(in_trap_handler), %l4 - ld [%lo(in_trap_handler) + %l4], %l5 - dec %l5 - st %l5, [%lo(in_trap_handler) + %l4] - - jmpl %l2, %g0 ! Restore old PC - rett %l3 ! Restore old nPC -"); - -/* Convert ch from a hex digit to an int */ - -static int -hex(ch) - unsigned char ch; -{ - if (ch >= 'a' && ch <= 'f') - return ch-'a'+10; - if (ch >= '0' && ch <= '9') - return ch-'0'; - if (ch >= 'A' && ch <= 'F') - return ch-'A'+10; - return -1; -} - -/* scan for the sequence $<data>#<checksum> */ - -static void -getpacket(buffer) - char *buffer; -{ - unsigned char checksum; - unsigned char xmitcsum; - int i; - int count; - unsigned char ch; - - do - { - /* wait around for the start character, ignore all other characters */ - while ((ch = (getDebugChar() & 0x7f)) != '$') - ; - - checksum = 0; - xmitcsum = -1; - - count = 0; - - /* now, read until a # or end of buffer is found */ - while (count < BUFMAX) - { - ch = getDebugChar() & 0x7f; - if (ch == '#') - break; - checksum = checksum + ch; - buffer[count] = ch; - count = count + 1; - } - - if (count >= BUFMAX) - continue; - - buffer[count] = 0; - - if (ch == '#') - { - xmitcsum = hex(ch = getDebugChar() & 0x7f) << 4; - xmitcsum |= hex(ch = getDebugChar() & 0x7f); - - if (checksum != xmitcsum) - putDebugChar('-'); /* failed checksum */ - else - { - putDebugChar('+'); /* successful transfer */ - /* if a sequence char is present, reply the sequence ID */ - if (buffer[2] == ':') - { - putDebugChar(buffer[0]); - putDebugChar(buffer[1]); - /* remove sequence chars from buffer */ - count = strlen(buffer); - for (i=3; i <= count; i++) - buffer[i-3] = buffer[i]; - } - } - } - } - while (checksum != xmitcsum); -} - -/* send the packet in buffer. */ - -static void -putpacket(buffer) - unsigned char *buffer; -{ - unsigned char checksum; - int count; - unsigned char ch; - - /* $<packet info>#<checksum>. */ - do - { - putDebugChar('$'); - checksum = 0; - count = 0; - - while (ch = buffer[count]) - { - if (! putDebugChar(ch)) - return; - checksum += ch; - count += 1; - } - - putDebugChar('#'); - putDebugChar(hexchars[checksum >> 4]); - putDebugChar(hexchars[checksum & 0xf]); - - } - while ((getDebugChar() & 0x7f) != '+'); -} - -static char remcomInBuffer[BUFMAX]; -static char remcomOutBuffer[BUFMAX]; - -/* Indicate to caller of mem2hex or hex2mem that there has been an - error. */ -static volatile int mem_err = 0; - -/* Convert the memory pointed to by mem into hex, placing result in buf. - * Return a pointer to the last char put in buf (null), in case of mem fault, - * return 0. - * If MAY_FAULT is non-zero, then we will handle memory faults by returning - * a 0, else treat a fault like any other fault in the stub. - */ - -static unsigned char * -mem2hex(mem, buf, count, may_fault) - unsigned char *mem; - unsigned char *buf; - int count; - int may_fault; -{ - unsigned char ch; - - set_mem_fault_trap(may_fault); - - while (count-- > 0) - { - ch = *mem++; - if (mem_err) - return 0; - *buf++ = hexchars[ch >> 4]; - *buf++ = hexchars[ch & 0xf]; - } - - *buf = 0; - - set_mem_fault_trap(0); - - return buf; -} - -/* convert the hex array pointed to by buf into binary to be placed in mem - * return a pointer to the character AFTER the last byte written */ - -static char * -hex2mem(buf, mem, count, may_fault) - unsigned char *buf; - unsigned char *mem; - int count; - int may_fault; -{ - int i; - unsigned char ch; - - set_mem_fault_trap(may_fault); - - for (i=0; i<count; i++) - { - ch = hex(*buf++) << 4; - ch |= hex(*buf++); - *mem++ = ch; - if (mem_err) - return 0; - } - - set_mem_fault_trap(0); - - return mem; -} - -/* This table contains the mapping between SPARC hardware trap types, and - signals, which are primarily what GDB understands. It also indicates - which hardware traps we need to commandeer when initializing the stub. */ - -static struct hard_trap_info -{ - unsigned char tt; /* Trap type code for SPARClite */ - unsigned char signo; /* Signal that we map this trap into */ -} hard_trap_info[] = { - {1, SIGSEGV}, /* instruction access exception */ - {0x3b, SIGSEGV}, /* instruction access error */ - {2, SIGILL}, /* illegal instruction */ - {3, SIGILL}, /* privileged instruction */ - {4, SIGEMT}, /* fp disabled */ - {0x24, SIGEMT}, /* cp disabled */ - {7, SIGBUS}, /* mem address not aligned */ - {0x29, SIGSEGV}, /* data access exception */ - {10, SIGEMT}, /* tag overflow */ - {128+1, SIGTRAP}, /* ta 1 - normal breakpoint instruction */ - {0, 0} /* Must be last */ -}; - -/* Set up exception handlers for tracing and breakpoints */ - -void -set_debug_traps() -{ - struct hard_trap_info *ht; - - for (ht = hard_trap_info; ht->tt && ht->signo; ht++) - exceptionHandler(ht->tt, trap_low); - - /* In case GDB is started before us, ack any packets (presumably - "$?#xx") sitting there. */ - putDebugChar ('+'); - - initialized = 1; -} - -asm (" -! Trap handler for memory errors. This just sets mem_err to be non-zero. It -! assumes that %l1 is non-zero. This should be safe, as it is doubtful that -! 0 would ever contain code that could mem fault. This routine will skip -! past the faulting instruction after setting mem_err. - - .text - .align 4 - -_fltr_set_mem_err: - sethi %hi(_mem_err), %l0 - st %l1, [%l0 + %lo(_mem_err)] - jmpl %l2, %g0 - rett %l2+4 -"); - -static void -set_mem_fault_trap(enable) - int enable; -{ - extern void fltr_set_mem_err(); - mem_err = 0; - - if (enable) - exceptionHandler(0x29, fltr_set_mem_err); - else - exceptionHandler(0x29, trap_low); -} - -asm (" - .text - .align 4 - -_dummy_hw_breakpoint: - jmpl %l2, %g0 - rett %l2+4 - nop - nop -"); - -static void -set_hw_breakpoint_trap(enable) - int enable; -{ - extern void dummy_hw_breakpoint(); - - if (enable) - exceptionHandler(255, dummy_hw_breakpoint); - else - exceptionHandler(255, trap_low); -} - -static void -get_in_break_mode() -{ -#if 0 - int x; - mesg("get_in_break_mode, sp = "); - phex(&x); -#endif - set_hw_breakpoint_trap(1); - - asm(" - sethi %hi(0xff10), %l4 - or %l4, %lo(0xff10), %l4 - sta %g0, [%l4]0x1 - nop - nop - nop - "); - - set_hw_breakpoint_trap(0); -} - -/* Convert the SPARC hardware trap type code to a unix signal number. */ - -static int -computeSignal(tt) - int tt; -{ - struct hard_trap_info *ht; - - for (ht = hard_trap_info; ht->tt && ht->signo; ht++) - if (ht->tt == tt) - return ht->signo; - - return SIGHUP; /* default for things we don't know about */ -} - -/* - * While we find nice hex chars, build an int. - * Return number of chars processed. - */ - -static int -hexToInt(char **ptr, int *intValue) -{ - int numChars = 0; - int hexValue; - - *intValue = 0; - - while (**ptr) - { - hexValue = hex(**ptr); - if (hexValue < 0) - break; - - *intValue = (*intValue << 4) | hexValue; - numChars ++; - - (*ptr)++; - } - - return (numChars); -} - -/* - * This function does all command procesing for interfacing to gdb. It - * returns 1 if you should skip the instruction at the trap address, 0 - * otherwise. - */ - -static void -handle_exception (registers) - unsigned long *registers; -{ - int tt; /* Trap type */ - int sigval; - int addr; - int length; - char *ptr; - unsigned long *sp; - unsigned long dsr; - -/* First, we must force all of the windows to be spilled out */ - - asm(" - ! Ugh. sparclet has broken save - !save %sp, -64, %sp - save - add %fp,-64,%sp - !save %sp, -64, %sp - save - add %fp,-64,%sp - !save %sp, -64, %sp - save - add %fp,-64,%sp - !save %sp, -64, %sp - save - add %fp,-64,%sp - !save %sp, -64, %sp - save - add %fp,-64,%sp - !save %sp, -64, %sp - save - add %fp,-64,%sp - !save %sp, -64, %sp - save - add %fp,-64,%sp - !save %sp, -64, %sp - save - add %fp,-64,%sp - restore - restore - restore - restore - restore - restore - restore - restore -"); - - if (registers[PC] == (unsigned long)breakinst) - { - registers[PC] = registers[NPC]; - registers[NPC] += 4; - } - sp = (unsigned long *)registers[SP]; - - tt = (registers[TBR] >> 4) & 0xff; - - /* reply to host that an exception has occurred */ - sigval = computeSignal(tt); - ptr = remcomOutBuffer; - - *ptr++ = 'T'; - *ptr++ = hexchars[sigval >> 4]; - *ptr++ = hexchars[sigval & 0xf]; - - *ptr++ = hexchars[PC >> 4]; - *ptr++ = hexchars[PC & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)®isters[PC], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[FP >> 4]; - *ptr++ = hexchars[FP & 0xf]; - *ptr++ = ':'; - ptr = mem2hex(sp + 8 + 6, ptr, 4, 0); /* FP */ - *ptr++ = ';'; - - *ptr++ = hexchars[SP >> 4]; - *ptr++ = hexchars[SP & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)&sp, ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[NPC >> 4]; - *ptr++ = hexchars[NPC & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)®isters[NPC], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = hexchars[O7 >> 4]; - *ptr++ = hexchars[O7 & 0xf]; - *ptr++ = ':'; - ptr = mem2hex((char *)®isters[O7], ptr, 4, 0); - *ptr++ = ';'; - - *ptr++ = 0; - - putpacket(remcomOutBuffer); - - while (1) - { - remcomOutBuffer[0] = 0; - - getpacket(remcomInBuffer); - switch (remcomInBuffer[0]) - { - case '?': - remcomOutBuffer[0] = 'S'; - remcomOutBuffer[1] = hexchars[sigval >> 4]; - remcomOutBuffer[2] = hexchars[sigval & 0xf]; - remcomOutBuffer[3] = 0; - break; - - case 'd': - remote_debug = !(remote_debug); /* toggle debug flag */ - break; - - case 'g': /* return the value of the CPU registers */ - { - ptr = remcomOutBuffer; - ptr = mem2hex((char *)registers, ptr, 16 * 4, 0); /* G & O regs */ - ptr = mem2hex(sp + 0, ptr, 16 * 4, 0); /* L & I regs */ - memset(ptr, '0', 32 * 8); /* Floating point */ - ptr = mem2hex((char *)®isters[Y], - ptr + 32 * 4 * 2, - 8 * 4, - 0); /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ - ptr = mem2hex((char *)®isters[CCSR], - ptr, - 8 * 4, - 0); /* CCSR, CCPR, CCCRCR, CCOR, CCOBR, CCIBR, CCIR */ - ptr = mem2hex((char *)®isters[ASR1], - ptr, - 8 * 4, - 0); /* ASR1,ASR15,ASR17,ASR18,ASR19,ASR20,ASR21,ASR22 */ -#if 0 /* not implemented */ - ptr = mem2hex((char *) ®isters[AWR0], - ptr, - 32 * 4, - 0); /* Alternate Window Registers */ -#endif - } - break; - - case 'G': /* set value of all the CPU registers - return OK */ - case 'P': /* set value of one CPU register - return OK */ - { - unsigned long *newsp, psr; - - psr = registers[PSR]; - - ptr = &remcomInBuffer[1]; - - if (remcomInBuffer[0] == 'P') /* do a single register */ - { - int regno; - - if (hexToInt (&ptr, ®no) - && *ptr++ == '=') - if (regno >= L0 && regno <= I7) - hex2mem (ptr, sp + regno - L0, 4, 0); - else - hex2mem (ptr, (char *)®isters[regno], 4, 0); - else - { - strcpy (remcomOutBuffer, "P01"); - break; - } - } - else - { - hex2mem(ptr, (char *)registers, 16 * 4, 0); /* G & O regs */ - hex2mem(ptr + 16 * 4 * 2, sp + 0, 16 * 4, 0); /* L & I regs */ - hex2mem(ptr + 64 * 4 * 2, (char *)®isters[Y], - 8 * 4, 0); /* Y,PSR,WIM,TBR,PC,NPC,FPSR,CPSR */ - hex2mem(ptr + 72 * 4 * 2, (char *)®isters[CCSR], - 8 * 4, 0); /* CCSR,CCPR,CCCRCR,CCOR,CCOBR,CCIBR,CCIR */ - hex2mem(ptr + 80 * 4 * 2, (char *)®isters[ASR1], - 8 * 4, 0); /* ASR1 ... ASR22 */ -#if 0 /* not implemented */ - hex2mem(ptr + 88 * 4 * 2, (char *)®isters[AWR0], - 8 * 4, 0); /* Alternate Window Registers */ -#endif - } - /* See if the stack pointer has moved. If so, then copy the saved - locals and ins to the new location. This keeps the window - overflow and underflow routines happy. */ - - newsp = (unsigned long *)registers[SP]; - if (sp != newsp) - sp = memcpy(newsp, sp, 16 * 4); - - /* Don't allow CWP to be modified. */ - - if (psr != registers[PSR]) - registers[PSR] = (psr & 0x1f) | (registers[PSR] & ~0x1f); - - strcpy(remcomOutBuffer,"OK"); - } - break; - - case 'm': /* mAA..AA,LLLL Read LLLL bytes at address AA..AA */ - /* Try to read %x,%x. */ - - ptr = &remcomInBuffer[1]; - - if (hexToInt(&ptr, &addr) - && *ptr++ == ',' - && hexToInt(&ptr, &length)) - { - if (mem2hex((char *)addr, remcomOutBuffer, length, 1)) - break; - - strcpy (remcomOutBuffer, "E03"); - } - else - strcpy(remcomOutBuffer,"E01"); - break; - - case 'M': /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA return OK */ - /* Try to read '%x,%x:'. */ - - ptr = &remcomInBuffer[1]; - - if (hexToInt(&ptr, &addr) - && *ptr++ == ',' - && hexToInt(&ptr, &length) - && *ptr++ == ':') - { - if (hex2mem(ptr, (char *)addr, length, 1)) - strcpy(remcomOutBuffer, "OK"); - else - strcpy(remcomOutBuffer, "E03"); - } - else - strcpy(remcomOutBuffer, "E02"); - break; - - case 'c': /* cAA..AA Continue at address AA..AA(optional) */ - /* try to read optional parameter, pc unchanged if no parm */ - - ptr = &remcomInBuffer[1]; - if (hexToInt(&ptr, &addr)) - { - registers[PC] = addr; - registers[NPC] = addr + 4; - } - -/* Need to flush the instruction cache here, as we may have deposited a - breakpoint, and the icache probably has no way of knowing that a data ref to - some location may have changed something that is in the instruction cache. - */ - - flush_i_cache(); - return; - - /* kill the program */ - case 'k' : /* do nothing */ - break; -#if 0 - case 't': /* Test feature */ - asm (" std %f30,[%sp]"); - break; -#endif - case 'r': /* Reset */ - asm ("call 0 - nop "); - break; - -#if 0 -Disabled until we can unscrew this properly - - case 'b': /* bBB... Set baud rate to BB... */ - { - int baudrate; - extern void set_timer_3(); - - ptr = &remcomInBuffer[1]; - if (!hexToInt(&ptr, &baudrate)) - { - strcpy(remcomOutBuffer,"B01"); - break; - } - - /* Convert baud rate to uart clock divider */ - switch (baudrate) - { - case 38400: - baudrate = 16; - break; - case 19200: - baudrate = 33; - break; - case 9600: - baudrate = 65; - break; - default: - strcpy(remcomOutBuffer,"B02"); - goto x1; - } - - putpacket("OK"); /* Ack before changing speed */ - set_timer_3(baudrate); /* Set it */ - } -x1: break; -#endif - } /* switch */ - - /* reply to the request */ - putpacket(remcomOutBuffer); - } -} - -/* This function will generate a breakpoint exception. It is used at the - beginning of a program to sync up with a debugger and can be used - otherwise as a quick means to stop program execution and "break" into - the debugger. */ - -void -breakpoint() -{ - if (!initialized) - return; - - asm(" .globl _breakinst - - _breakinst: ta 1 - "); -} - -static void -hw_breakpoint() -{ - asm(" - ta 127 - "); -} - -#if 0 /* experimental and never finished, left here for reference */ -static void -splet_temp(void) -{ - asm(" sub %sp,(16+1+6+1+121)*4,%sp ! Make room for input & locals - ! + hidden arg + arg spill - ! + doubleword alignment - ! + registers[121] - -! Leave a trail of breadcrumbs! (save register save area for debugging) - mov %sp, %l0 - add %l0, 24*4, %l0 - sethi %hi(_debug_registers), %l1 - st %l0, [%lo(_debug_registers) + %l1] - -! Save the Alternate Register Set: (not implemented yet) -! To save the Alternate Register set, we must: -! 1) Save the current SP in some global location. -! 2) Swap the register sets. -! 3) Save the Alternate SP in the Y register -! 4) Fetch the SP that we saved in step 1. -! 5) Use that to save the rest of the regs (not forgetting ASP in Y) -! 6) Restore the Alternate SP from Y -! 7) Swap the registers back. - -! 1) Copy the current stack pointer to global _SAVED_STACK_POINTER: - sethi %hi(_saved_stack_pointer), %l0 - st %sp, [%lo(_saved_stack_pointer) + %l0] - -! 2) Swap the register sets: - mov %psr, %l1 - sethi %hi(0x10000), %l2 - xor %l1, %l2, %l1 - mov %l1, %psr - nop ! 3 nops after write to %psr (needed?) - nop - nop - -! 3) Save Alternate L0 in Y - wr %l0, 0, %y - -! 4) Load former SP into alternate SP, using L0 - sethi %hi(_saved_stack_pointer), %l0 - or %lo(_saved_stack_pointer), %l0, %l0 - swap [%l0], %sp - -! 4.5) Restore alternate L0 - rd %y, %l0 - -! 5) Save the Alternate Window Registers - st %r0, [%sp + (24 + 88) * 4] ! AWR0 - st %r1, [%sp + (24 + 89) * 4] ! AWR1 - st %r2, [%sp + (24 + 90) * 4] ! AWR2 - st %r3, [%sp + (24 + 91) * 4] ! AWR3 - st %r4, [%sp + (24 + 92) * 4] ! AWR4 - st %r5, [%sp + (24 + 93) * 4] ! AWR5 - st %r6, [%sp + (24 + 94) * 4] ! AWR6 - st %r7, [%sp + (24 + 95) * 4] ! AWR7 - st %r8, [%sp + (24 + 96) * 4] ! AWR8 - st %r9, [%sp + (24 + 97) * 4] ! AWR9 - st %r10, [%sp + (24 + 98) * 4] ! AWR10 - st %r11, [%sp + (24 + 99) * 4] ! AWR11 - st %r12, [%sp + (24 + 100) * 4] ! AWR12 - st %r13, [%sp + (24 + 101) * 4] ! AWR13 -! st %r14, [%sp + (24 + 102) * 4] ! AWR14 (SP) - st %r15, [%sp + (24 + 103) * 4] ! AWR15 - st %r16, [%sp + (24 + 104) * 4] ! AWR16 - st %r17, [%sp + (24 + 105) * 4] ! AWR17 - st %r18, [%sp + (24 + 106) * 4] ! AWR18 - st %r19, [%sp + (24 + 107) * 4] ! AWR19 - st %r20, [%sp + (24 + 108) * 4] ! AWR20 - st %r21, [%sp + (24 + 109) * 4] ! AWR21 - st %r22, [%sp + (24 + 110) * 4] ! AWR22 - st %r23, [%sp + (24 + 111) * 4] ! AWR23 - st %r24, [%sp + (24 + 112) * 4] ! AWR24 - st %r25, [%sp + (24 + 113) * 4] ! AWR25 - st %r26, [%sp + (24 + 114) * 4] ! AWR26 - st %r27, [%sp + (24 + 115) * 4] ! AWR27 - st %r28, [%sp + (24 + 116) * 4] ! AWR28 - st %r29, [%sp + (24 + 117) * 4] ! AWR29 - st %r30, [%sp + (24 + 118) * 4] ! AWR30 - st %r31, [%sp + (24 + 119) * 4] ! AWR21 - -! Get the Alternate PSR (I hope...) - - rd %psr, %l2 - st %l2, [%sp + (24 + 120) * 4] ! APSR - -! Don't forget the alternate stack pointer - - rd %y, %l3 - st %l3, [%sp + (24 + 102) * 4] ! AWR14 (SP) - -! 6) Restore the Alternate SP (saved in Y) - - rd %y, %o6 - - -! 7) Swap the registers back: - - mov %psr, %l1 - sethi %hi(0x10000), %l2 - xor %l1, %l2, %l1 - mov %l1, %psr - nop ! 3 nops after write to %psr (needed?) - nop - nop -"); -} - -#endif diff --git a/libgloss/sparc/sparclite.h b/libgloss/sparc/sparclite.h deleted file mode 100644 index 0f14d51..0000000 --- a/libgloss/sparc/sparclite.h +++ /dev/null @@ -1,81 +0,0 @@ -/* SPARClite defs - * - * Copyright (c) 1995 Cygnus Support - * - * 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. - */ - -/* Macros for reading and writing to arbitrary address spaces. Note that ASI - must be a constant (sorry, but the SPARC can only specify ASIs as part of an - instruction. */ - -#define read_asi(ASI, LOC) \ - ({ \ - unsigned int val; \ - __asm__ volatile ("lda [%r1]%2,%0" : "=r" (val) : "rJ" (LOC), "I" (ASI)); \ - val; \ - }) - -#define write_asi(ASI, LOC, VAL) \ - __asm__ volatile ("sta %0,[%r1]%2" : : "r" (VAL), "rJ" (LOC), "I" (ASI)) - -/* Use this when modifying registers that cause memory to be modified. This - will cause GCC to reload all values after this point. */ - -#define write_asi_volatile(ASI, LOC, VAL) \ - __asm__ volatile ("sta %0,[%r1]%2" : : "r" (VAL), "rJ" (LOC), "I" (ASI) \ - : "memory") - -/* Read the PSR (processor state register). */ - -#define read_psr() \ - ({ \ - unsigned int psr; \ - __asm__ ("mov %%psr, %0" : "=r" (psr)); \ - psr; \ - }) - -/* Write the PSR. */ - -#define write_psr(VAL) \ - __asm__ ("mov %0, %%psr \n nop \n nop \n nop" : : "r" (VAL)) - -/* Read the specified Ancillary State Register. */ - -#define read_asr(REG) read_asr1(REG) -#define read_asr1(REG) \ - ({ \ - unsigned int val; \ - __asm__ ("rd %%asr" #REG ",%0" : "=r" (val)); \ - val; \ - }) - -/* Write the specified Ancillary State Register. */ - -#define write_asr(REG, VAL) write_asr1(REG, VAL) -#define write_asr1(REG, VAL) \ - __asm__ ("wr %0, 0, %%asr" #REG : : "r" (VAL)) - -/* Set window size for window overflow and underflow trap handlers. Better to - do this at at compile time than to calculate them at compile time each time - we get a window overflow/underflow trap. */ - -#ifdef SL933 - asm ("__WINSIZE=6"); -#else - asm ("__WINSIZE=8"); -#endif - -#define PSR_INIT 0x10c0 /* Disable traps, set s and ps */ -#define TBR_INIT 0 -#define WIM_INIT 2 -#define STACK_SIZE 16 * 1024 - diff --git a/libgloss/sparc/sysc-701.c b/libgloss/sparc/sysc-701.c deleted file mode 100644 index 191a08a..0000000 --- a/libgloss/sparc/sysc-701.c +++ /dev/null @@ -1,55 +0,0 @@ -/* more sparclet syscall support (the rest is in crt0-701.S). */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <errno.h> - -int -fstat(int _fd, struct stat* _sbuf) -{ - errno = ENOSYS; - return -1; -} - -int -isatty(int fd) -{ - if (fd < 0) - { - errno = EBADF; - return -1; - } - return fd <= 2; -} - -int -getpid() -{ - return 1; -} - -int -kill(int pid) -{ - /* if we knew how to nuke the board, we would... */ - return 0; -} - -int -lseek(int _fd, off_t offset, int whence) -{ - errno = ENOSYS; - return -1; -} - -extern char end; -char* -sbrk (int incr) -{ - static char* base; - char *b; - if(!base) base = &end; - b = base; - base += incr; - return b; -} diff --git a/libgloss/sparc/syscalls.c b/libgloss/sparc/syscalls.c deleted file mode 100644 index 01ba501..0000000 --- a/libgloss/sparc/syscalls.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (c) 1995 Cygnus Support - * - * 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. - * - * fake unix routines for sparclite and remote debugger - * Many of these routines just substitute an appropriate error status, - * if you want some kind of file system access, you'll have to fill them in... - * sbrk on the other hand is functional (malloc uses it) but it doesn't do - * any checking for lack of memory. - * kill and _exit could get more real implementations, as well. - */ - -#include <sys/stat.h> - -int -fstat(int _fd, struct stat* _sbuf) -{ - /* this is used in a few places in stdio... */ - /* just error, so they assume a pipe */ - return -1; -} - -int -isatty(int _fd) -{ - return 1; -} - -int -close(int _fd) -{ - /* return value usually ignored anyhow */ - return 0; -} - -int -open(char *filename) -{ - /* always fail */ - return -1; -} - -int -getpid() { - return 1; -} - -int -kill(int pid) { - /* if we knew how to nuke the board, we would... */ - return 0; -} - -void -_exit(int status) { - /* likewise... */ - return; -} - -int -lseek(int _fd, off_t offset, int whence) -{ - /* nothing is ever seekable */ - return -1; -} - -extern char end; -char* -sbrk(int incr) -{ - static char* base; - char *b; - if(!base) base = &end; - b = base; - base += incr; - return b; -} diff --git a/libgloss/sparc/test.c b/libgloss/sparc/test.c deleted file mode 100644 index fc443a8..0000000 --- a/libgloss/sparc/test.c +++ /dev/null @@ -1,69 +0,0 @@ -#include "debug.h" - -char hextab[] = "0123456789abcdef"; - -int -foo(arg) - int arg; -{ - return arg+1; -} - -int -fact (i) - int i; -{ - if (i == 1) - return 1; - else - return i * fact ( i - 1); -} - -main() -{ - unsigned char c; - int num; - char foo[100]; - -#if 0 - set_debug_level(2); - - cache_on(); -#endif - - set_debug_traps(); - breakpoint(); - - print("Got to here\r\n"); - - while (1) { - c = inbyte(); - if (c == 'c') - break; - - if (c == 'd') { - set_debug_traps(); - breakpoint(); - break; - } - - print("echo "); - outbyte(c); - print("\r\n"); - } - - print("Hello world\r\n"); - - while (1) { - c = inbyte(); - - if ((c & 0x7f) == 4) - break; - - print("Char is "); - outbyte (c); - print("\r\n"); - } - - print("I escaped!\r\n"); -} diff --git a/libgloss/sparc/traps.S b/libgloss/sparc/traps.S deleted file mode 100644 index b3cc966..0000000 --- a/libgloss/sparc/traps.S +++ /dev/null @@ -1,651 +0,0 @@ -/* - * Copyright (c) 1995, 1996, 1998 Cygnus Support - * - * 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 "asm.h" -#include "slite.h" - - .text - .align 4 - -/* - * The trap table has to be the first code in a boot PROM. But because - * the Memory Configuration comes up thinking we only have 4K of PROM, we - * cannot have a full trap table and still have room left over to - * reprogram the Memory Configuration register correctly. This file - * uses an abbreviated trap which has every entry which might be used - * before RTEMS installs its own trap table. - */ - .globl _trap_table -_trap_table: - TRAP(SYM(ercinit)); ! 00 reset trap - BAD_TRAP; ! 01 instruction access exception - TRAP(SYM(no_fpu)); ! 02 illegal instruction - BAD_TRAP; ! 03 privileged instruction - BAD_TRAP; ! 04 fp disabled - TRAP(SYM(win_overflow)); ! 05 window overflow - TRAP(SYM(win_underflow)); ! 06 window underflow - BAD_TRAP; ! 07 memory address not aligned - BAD_TRAP; ! 08 fp exception - BAD_TRAP; ! 09 data access exception - BAD_TRAP; ! 0A tag overflow - - /* Trap levels from 0B to 0x10 are not defined (used for MEC init) */ - -SYM(ercinit): - sethi %hi(_ERC32_MEC), %g1 ! 0B - sethi %hi(0x001C1000), %g2 - or %g1,%lo(0x001C1000),%g1 - st %g2, [%g1 + 0x10] - st %g0, [%g1 + 0x18] ! 0C - nop - nop - nop - - TRAP(SYM(hard_reset)); ! 0D undefined - BAD_TRAP; ! 0E undefined - BAD_TRAP; ! 0F undefined - BAD_TRAP; ! 10 undefined - - /* - * ERC32 defined traps - */ - - BAD_TRAP; ! 11 masked errors - BAD_TRAP; ! 12 external 1 - BAD_TRAP; ! 13 external 2 - BAD_TRAP; ! 14 UART A RX/TX - BAD_TRAP; ! 15 UART B RX/TX - BAD_TRAP; ! 16 correctable memory error - BAD_TRAP; ! 17 UART error - BAD_TRAP; ! 18 DMA access error - BAD_TRAP; ! 19 DMA timeout - BAD_TRAP; ! 1A external 3 - BAD_TRAP; ! 1B external 4 - BAD_TRAP; ! 1C general purpose timer - BAD_TRAP; ! 1D real time clock - BAD_TRAP; ! 1E external 5 - BAD_TRAP; ! 1F watchdog timeout - - - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 20 - 23 undefined - BAD_TRAP; ! 24 cp_disabled - BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 25 - 27 undefined - BAD_TRAP; ! 28 cp_exception - BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 29 - 2B undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 2C - 2F undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 30 - 33 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 34 - 37 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 38 - 3B undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 3C - 3F undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 40 - 43 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 44 - 47 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 48 - 4B undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 4C - 4F undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 50 - 53 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 54 - 57 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 58 - 5B undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 5C - 5F undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 60 - 63 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 64 - 67 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 68 - 6B undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 6C - 6F undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 70 - 73 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 74 - 77 undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 78 - 7B undefined - BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP; ! 7C - 7F undefined - - /* - * Software traps - * - * NOTE: At the risk of being redundant... this is not a full - * table. The setjmp on the SPARC requires a window flush trap - * handler and RTEMS will preserve the entries that were - * installed before. - */ - - SOFT_TRAP; ! 80 -#if 0 - SOFT_TRAP; ! 81 -#else - TRAP(SYM(trap_low)) ! 81 -#endif - SOFT_TRAP; ! 82 - TRAP(SYM(win_flush)); ! 83 flush windows SW trap - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 84 - 87 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 88 - 8B - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 8C - 8F - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 90 - 93 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 94 - 97 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 98 - 9B - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 9C - 9F - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! A0 - A3 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! A4 - A7 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! A8 - AB - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! AC - AF - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! B0 - B3 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! B4 - B7 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! B8 - BB - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! BC - BF - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! C0 - C3 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! C4 - C7 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! C8 - CB - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! CC - CF - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! D0 - D3 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! D4 - D7 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! D8 - DB - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! DC - DF - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! E0 - E3 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! E4 - E7 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! E8 - EB - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! EC - EF - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! F0 - F3 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! F4 - F7 - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! F8 - FB - SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! FC - FF - -/* - * Startup code for standalone system. Wash IU and FPU (if present) - * registers. The registers have to be written to initiate the parity - * bits. - */ - .globl SYM(hard_reset) -SYM(hard_reset): - - sethi %hi(0x01FE0),%o0 - or %o0,%lo(0x01FE0),%o0 - mov %o0, %psr ! Set valid PSR - nop - - mov %g0, %wim ! Set window invalid mask register - mov %g0, %y ! Init Y-register - nop - sethi %hi(SYM(hard_reset)), %g1 - - mov %g1, %tbr ! Set TBR - sethi %hi(SP_INIT),%sp - or %g0, 1, %o0 - ld [%g0], %f0 ! Check if FPU is present - - tst %o0 - bz fixiu - nop - ba fixfpu - -! FPU disabled trap address - - clr %i0 - jmpl %l2, %g0 - rett %l2 + 4 - nop - - -! Wash register files (fix for 90C601E & 90C602E) - -fixfpu: - - ld [%g0], %f0 - ld [%g0], %f1 - ld [%g0], %f2 - ld [%g0], %f3 - ld [%g0], %f4 - ld [%g0], %f5 - ld [%g0], %f6 - ld [%g0], %f7 - ld [%g0], %f8 - ld [%g0], %f9 - ld [%g0], %f10 - ld [%g0], %f11 - ld [%g0], %f12 - ld [%g0], %f13 - ld [%g0], %f14 - ld [%g0], %f15 - ld [%g0], %f16 - ld [%g0], %f17 - ld [%g0], %f18 - ld [%g0], %f19 - ld [%g0], %f20 - ld [%g0], %f21 - ld [%g0], %f22 - ld [%g0], %f23 - ld [%g0], %f24 - ld [%g0], %f25 - ld [%g0], %f26 - ld [%g0], %f27 - ld [%g0], %f28 - ld [%g0], %f29 - ld [%g0], %f30 - ld [%g0], %f31 - -fixiu: - clr %g1 - clr %g2 - clr %g3 - clr %g4 - clr %g5 - clr %g6 - clr %g7 - set 8,%g1 -wl0: - clr %i0 - clr %i1 - clr %i2 - clr %i3 - clr %i4 - clr %i5 - clr %i6 - clr %i7 - clr %l0 - clr %l1 - clr %l2 - clr %l3 - clr %l4 - clr %l5 - clr %l6 - clr %l7 - save - subcc %g1, 1, %g1 - bne wl0 - nop - -! -! Start the real-time clock with a tick of 150 clocks -! - -rtc: - - set 0x1f80000, %l0 ! MEC register base - set 149, %l1 - st %l1, [%l0 + 0x84] ! RTC scaler = 149 - set 0x0d00, %l1 - st %l1, [%l0 + 0x98] ! Start RTC - - st %g0, [%l0 + 0x64] ! Disable watchdog for now - ld [%l0], %g1 - or %g1, 1, %g1 - st %g1, [%l0] ! Enable power-down mode - -_init: - set PSR_INIT, %g1 ! Initialize psr - mov %g1, %psr - set WIM_INIT, %g1 ! Initialize WIM - mov %g1, %wim - set _trap_table, %g1 ! Initialize TBR - mov %g1, %tbr - nop;nop;nop - - set PSR_INIT, %g1 - wr %g1, 0x20, %psr ! enable traps - nop; nop; nop; - - call SYM(start) - nop - -/* - * Register window overflow handler. Come here when save would move us - * into the invalid window. This routine runs with traps disabled, and - * must be careful not to touch the condition codes, as PSR is never - * restored. - * - * We are called with %l0 = wim, %l1 = pc, %l2 = npc - */ - .globl SYM(win_overflow) -SYM(win_overflow): - mov %g1, %l3 ! Save g1, we use it to hold the wim - srl %l0, 1, %g1 ! Rotate wim right - sll %l0, NUMBER_OF_REGISTER_WINDOWS - 1, %l0 - or %l0, %g1, %g1 - - save %g0, %g0, %g0 ! Slip into next window - mov %g1, %wim ! Install the new wim - nop - nop - nop - - std %l0, [%sp + 0 * 4] ! save L & I registers - std %l2, [%sp + 2 * 4] - std %l4, [%sp + 4 * 4] - std %l6, [%sp + 6 * 4] - - std %i0, [%sp + 8 * 4] - std %i2, [%sp + 10 * 4] - std %i4, [%sp + 12 * 4] - std %i6, [%sp + 14 * 4] - - restore ! Go back to trap window. - mov %l3, %g1 ! Restore %g1 - - jmpl %l1, %g0 - rett %l2 - -/* - * Register window underflow handler. Come here when restore would move us - * into the invalid window. This routine runs with traps disabled, and - * must be careful not to touch the condition codes, as PSR is never - * restored. - * - * We are called with %l0 = wim, %l1 = pc, %l2 = npc - */ - .globl SYM(win_underflow) -SYM(win_underflow): - sll %l0, 1, %l3 ! Rotate wim left - srl %l0, NUMBER_OF_REGISTER_WINDOWS - 1, %l0 - or %l0, %l3, %l0 - - mov %l0, %wim ! Install the new wim - - restore ! Users window - restore ! His callers window - - ldd [%sp + 0 * 4], %l0 ! restore L & I registers - ldd [%sp + 2 * 4], %l2 - ldd [%sp + 4 * 4], %l4 - ldd [%sp + 6 * 4], %l6 - - ldd [%sp + 8 * 4], %i0 - ldd [%sp + 10 * 4], %i2 - ldd [%sp + 12 * 4], %i4 - ldd [%sp + 14 * 4], %i6 - - save %g0, %g0, %g0 ! Back to trap window - save %g0, %g0, %g0 - - jmpl %l1, %g0 - rett %l2 - -/* - * Register window flush handler, triggered by a "ta 3" instruction. - * We are called with %l0 = wim, %l1 = pc, %l2 = npc - */ - .globl SYM(win_flush) -SYM(win_flush): - mov %psr, %l0 - or %l0,0xf00,%l3 ! Disable interrupts - mov %l3,%psr - nop - nop - nop - mov %wim, %l3 - - srl %l3, %l0, %l4 ! wim >> cwp - cmp %l4, 1 - bne flush_window_fine ! Branch if not in the invalid window - nop - -/* Handle window overflow. We can't trap here. */ - - mov %g1, %l4 ! Save g1, we use it to hold the wim - srl %l3, 1, %g1 ! Rotate wim right - sll %l3, NUMBER_OF_REGISTER_WINDOWS - 1, %l3 - or %l3, %g1, %g1 - mov %g0, %wim ! Clear wim so that subsequent save - nop ! wont trap - nop - nop - save %g0, %g0, %g0 ! Slip into next window - mov %g1, %wim ! Install the new wim - - std %l0, [%sp + 0 * 4] ! save L & I registers - std %l2, [%sp + 2 * 4] - std %l4, [%sp + 4 * 4] - std %l6, [%sp + 6 * 4] - - std %i0, [%sp + 8 * 4] - std %i2, [%sp + 10 * 4] - std %i4, [%sp + 12 * 4] - std %i6, [%sp + 14 * 4] - - restore ! Go back to trap window. - mov %l4, %g1 ! Restore %g1 - -flush_window_fine: - mov %psr,%l5 ! enable traps - or %l5,0x20,%l5 - mov %l5, %psr - nop - nop - nop - - set save_buf,%l5 - st %l2,[%l5] - - ! The stack pointer currently contains a bogus value [when a trap - ! occurs CWP is decremented and points to an unused window]. - ! Give it something useful before we flush every window. - ! This does what a "save %sp,-64,$sp" would, except that CWP has - ! already been decremented. - add %fp, -64, %sp - - save %sp, -64, %sp ! Flush user register window to stack - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - save %sp, -64, %sp - restore - restore - restore - restore - restore - restore - restore - restore - - restore ! Make sure we have a valid window - save %g0, %g0, %g0 - - set save_buf, %l2 ! Get our return address back - ld [%l2],%l2 - - mov %psr,%l5 ! disable traps for rett - andn %l5,0x20,%l5 - mov %l5,%psr - nop - nop - nop - - jmpl %l2, %g0 - rett %l2+4 - -/* - * Read the TBR. - */ - .globl SYM(rdtbr) -SYM(rdtbr): - mov %tbr, %o0 - nop - retl - nop - -/* - * Read the psr - */ - .globl SYM(read_psr) -SYM(read_psr): - mov %psr, %o0 - nop - retl - nop - -/* - * Write the PSR. - */ - - .globl SYM(write_psr) -SYM(write_psr): - mov %i0, %psr - nop - nop - nop - retl - nop -/* - * Come here when no fpu exists. This just skips the offending - * instruction. - */ - .globl SYM(no_fpu) -SYM(no_fpu): - jmpl %l2, %g0 - rett %l2+4 - - .globl SYM(fltr_proto) - .align 4 -SYM(fltr_proto): ! First level trap routine prototype - sethi 0, %l0 - jmpl 0+%l0, %g0 - nop - nop - -/* - * Trap handler for memory errors. This just sets mem_err to be - * non-zero. It assumes that l1 is non-zero. This should be safe, - * as it is doubtful that 0 would ever contain code that could mem - * fault. This routine will skip past the faulting instruction after - * setting mem_err. - */ - .globl SYM(fltr_set_mem_err) -SYM(fltr_set_mem_err): - sethi %hi(SYM(mem_err)), %l0 - st %l1, [%l0 + %lo(SYM(mem_err))] - jmpl %l2, %g0 - rett %l2+4 - - .data - .align 4 - .ascii "DaTa" - .long SYM(sdata) -in_trap_handler: - .word 0 -save_buf: - .word 0 /* place to save %g1 */ - .word 0 /* place to save %g2 */ - - .text - .align 4 - -/* - * This function is called when any SPARC trap (except window overflow - * or underflow) occurs. It makes sure that the invalid register - * window is still available before jumping into C code. It will also - * restore the world if you return from handle_exception. - */ - .globl SYM(trap_low) -SYM(trap_low): - mov %psr, %l0 - mov %wim, %l3 - - srl %l3, %l0, %l4 ! wim >> cwp - cmp %l4, 1 - bne window_fine ! Branch if not in the invalid window - nop - - mov %g1, %l4 ! Save g1, we use it to hold the wim - srl %l3, 1, %g1 ! Rotate wim right - sll %l3, 8-1, %l5 - or %l5, %g1, %g1 - - save %g0, %g0, %g0 ! Slip into next window - mov %g1, %wim ! Install the new wim - - std %l0, [%sp + 0 * 4] ! save L & I registers - std %l2, [%sp + 2 * 4] - std %l4, [%sp + 4 * 4] - std %l6, [%sp + 6 * 4] - - std %i0, [%sp + 8 * 4] - std %i2, [%sp + 10 * 4] - std %i4, [%sp + 12 * 4] - std %i6, [%sp + 14 * 4] - - restore ! Go back to trap window. - mov %l4, %g1 ! Restore g1 - -window_fine: - sethi %hi(in_trap_handler), %l4 - ld [%lo(in_trap_handler) + %l4], %l5 - tst %l5 - bg recursive_trap - inc %l5 - - /* use the stack we set in the linker script */ - sethi %hi(__trap_stack), %l6 - or %l6,%lo(__trap_stack),%l6 - mov %l6, %sp ! set the stack pointer - -recursive_trap: - st %l5, [%lo(in_trap_handler) + %l4] - - sub %sp,(16+1+6+1+72)*4,%sp ! Make room for input & locals - ! + hidden arg + arg spill - ! + doubleword alignment - ! + registers[72] local var - - std %g0, [%sp + (24 + 0) * 4] ! registers[Gx] - std %g2, [%sp + (24 + 2) * 4] - std %g4, [%sp + (24 + 4) * 4] - std %g6, [%sp + (24 + 6) * 4] - - std %i0, [%sp + (24 + 8) * 4] ! registers[Ox] - std %i2, [%sp + (24 + 10) * 4] - std %i4, [%sp + (24 + 12) * 4] - std %i6, [%sp + (24 + 14) * 4] - ! F0->F31 not implemented - mov %y, %l4 - mov %tbr, %l5 - st %l4, [%sp + (24 + 64) * 4] ! Y - st %l0, [%sp + (24 + 65) * 4] ! PSR - st %l3, [%sp + (24 + 66) * 4] ! WIM - st %l5, [%sp + (24 + 67) * 4] ! TBR - st %l1, [%sp + (24 + 68) * 4] ! PC - st %l2, [%sp + (24 + 69) * 4] ! NPC - ! CPSR and FPSR not implemented - - or %l0, 0xf20, %l4 - mov %l4, %psr ! Turn on traps, disable interrupts - - call SYM(handle_exception) - add %sp, 24 * 4, %o0 ! Pass address of registers - -/* Reload all of the registers that aren't on the stack */ - - ld [%sp + (24 + 1) * 4], %g1 ! registers[Gx] - ldd [%sp + (24 + 2) * 4], %g2 - ldd [%sp + (24 + 4) * 4], %g4 - ldd [%sp + (24 + 6) * 4], %g6 - - ldd [%sp + (24 + 8) * 4], %i0 ! registers[Ox] - ldd [%sp + (24 + 10) * 4], %i2 - ldd [%sp + (24 + 12) * 4], %i4 - ldd [%sp + (24 + 14) * 4], %i6 - - ldd [%sp + (24 + 64) * 4], %l0 ! Y & PSR - ldd [%sp + (24 + 68) * 4], %l2 ! PC & NPC - - restore ! Ensure that previous window is valid - save %g0, %g0, %g0 ! by causing a window_underflow trap - - mov %l0, %y - mov %l1, %psr ! Make sure that traps are disabled - ! for rett - - sethi %hi(in_trap_handler), %l4 - ld [%lo(in_trap_handler) + %l4], %l5 - dec %l5 - st %l5, [%lo(in_trap_handler) + %l4] - - jmpl %l2, %g0 ! Restore old PC - rett %l3 ! Restore old nPC - - diff --git a/libgloss/sparc/tsc701.ld b/libgloss/sparc/tsc701.ld deleted file mode 100644 index bc6cd73..0000000 --- a/libgloss/sparc/tsc701.ld +++ /dev/null @@ -1,55 +0,0 @@ -/* must compile with -nostdlib option */ -OUTPUT_FORMAT("a.out-sunos-big", "a.out-sunos-big", - "a.out-sparc-little") -OUTPUT_ARCH(sparc) -SEARCH_DIR(/usr/local/sparclet-aout/lib) -PROVIDE (__stack = 0); -ENTRY (start) -STARTUP (crt0-701.o) -GROUP (libsplet701.a libc.a libgcc.a) -SECTIONS -{ - /* Sparcmon likes to load programs starting at this address. */ - . = 0x12010000; - .text : - { - CREATE_OBJECT_SYMBOLS - *(.text) - /* The next six sections are for SunOS dynamic linking. The order - is important. */ - *(.dynrel) - *(.hash) - *(.dynsym) - *(.dynstr) - *(.rules) - *(.need) - _etext = .; - __etext = .; - } - .data : - { - /* The first three sections are for SunOS dynamic linking. */ - *(.dynamic) - *(.got) - *(.plt) - *(.data) - *(.linux-dynamic) /* For Linux dynamic linking. */ - CONSTRUCTORS - _edata = .; - __edata = .; - } - .bss : - { - __bss_start = .; - *(.bss) - *(COMMON) - _end = ALIGN(4) ; - __end = ALIGN(4) ; - } - /* This is the value that Sparcmon assigns to the SP at reset, minus 4K. */ - PROVIDE(___stack = 0x123ef000); - PROVIDE(__stack = 0x123ef000); - /* Provide 4K area for copying the trap vectors from ROM to RAM. */ - PROVIDE(___trap_vectors = 0x123f0000); - PROVIDE(__trap_vectors = 0x123f0000); -} |