Reorganized GDB tests - base

This commit is contained in:
Stan Shebs 1994-06-07 01:57:15 +00:00
parent 33268150cb
commit ef44eed173
57 changed files with 21351 additions and 0 deletions

View File

@ -0,0 +1,105 @@
# .Sanitize for gdb/testsuite/gdb.base.
# Each directory to survive its way into a release will need a file
# like this one called "./.Sanitize". All keyword lines must exist,
# and must exist in the order specified by this file. Each directory
# in the tree will be processed, top down, in the following order.
# Hash started lines like this one are comments and will be deleted
# before anything else is done. Blank lines will also be squashed
# out.
# The lines between the "Do-first:" line and the "Things-to-keep:"
# line are executed as a /bin/sh shell script before anything else is
# done in this directory.
Do-first:
# All files listed between the "Things-to-keep:" line and the
# "Do-last:" line will be kept. All other files will be removed.
# Directories listed in this section will have their own Sanitize
# called. Directories not listed will be removed in their entirety
# with rm -rf.
Things-to-keep:
Makefile.in
README
a1-selftest.exp
a2-run.exp
bitfields.c
bitfields.exp
break.c
break.exp
callfuncs.c
callfuncs.exp
configure.in
corefile.exp
coremaker.c
crossload.exp
default.exp
echo.exp
exprs.c
exprs.exp
funcargs.c
funcargs.exp
gdbvars.exp
help.exp
i486-elf.u
i860-elf.u
interrupt.c
interrupt.exp
list.exp
list0.c
list0.h
list1.c
m68k-aout.u
m68k-aout2.u
m68k-elf.u
mips-ecoff.u
mips_pro.c
mips_pro.exp
nodebug.c
nodebug.exp
opaque-info.c
opaque.exp
opaque0.c
opaque1.c
printcmds.c
printcmds.exp
ptype.c
ptype.exp
radix.exp
recurse.c
recurse.exp
return.c
return.exp
run.c
scope.exp
scope0.c
scope1.c
setvar.c
setvar.exp
signals.c
signals.exp
sparc-aout.u
sparc-elf.u
t10.c
term.exp
twice.c
twice.exp
watchpoint.c
watchpoint.exp
whatis-info.c
whatis.c
whatis.exp
Things-to-lose:
# The lines between the "Do-last:" line and the end of the file
# are executed as a /bin/sh shell script after everything else is
# done.
Do-last:
# eof

View File

@ -0,0 +1,413 @@
# Makefile for regression testing the GNU debugger.
# Copyright (C) 1992, 93, 1994 Free Software Foundation, Inc.
# This file is part of GDB.
# GDB is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# GDB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING. If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
srcdir = .
prefix = /usr/local
program_transform_name =
exec_prefix = $(prefix)
bindir = $(exec_prefix)/bin
libdir = $(exec_prefix)/lib
tooldir = $(libdir)/$(target_alias)
datadir = $(exec_prefix)/lib/dejagnu
mandir = $(prefix)/man
man1dir = $(mandir)/man1
man2dir = $(mandir)/man2
man3dir = $(mandir)/man3
man4dir = $(mandir)/man4
man5dir = $(mandir)/man5
man6dir = $(mandir)/man6
man7dir = $(mandir)/man7
man8dir = $(mandir)/man8
man9dir = $(mandir)/man9
infodir = $(prefix)/info
includedir = $(prefix)/include
gxx_includedir = $(tooldir)/g++-include
docdir = $(datadir)/doc
targetdir = $(datadir)/$(target_alias)
SHELL = /bin/sh
INSTALL = install -c
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL)
CFLAGS = -g
# start-sanitize-chill
CHILLFLAGS = $(CFLAGS)
# end-sanitize-chill
# This should probably be consistent with the top-level Makefile.in,
# gdb/Makefile.in, and gdb/testsuite/gdb.t2*/Makefile.in, so that "make check"
# has the same effect no matter where it is run.
CXXFLAGS = -g -O
LINK= ln -s
RUNTEST = runtest
EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
echo $${rootme}/../../expect/expect ; \
else echo expect ; fi`
RUNTEST_FOR_TARGET = ` \
if [ -f $${rootme}/../../dejagnu/site.exp ] ; then \
echo $${rootme}/../../dejagnu/runtest ; \
else \
if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \
echo $(RUNTEST); \
else \
t='$(program_transform_name)'; echo runtest | sed -e '' $$t; \
fi; \
fi`
RUNTESTFLAGS =
CC_FOR_TARGET = ` \
if [ -f $${rootme}/../../gcc/xgcc ] ; then \
echo $${rootme}/../../gcc/xgcc -B$${rootme}/../../gcc/; \
else \
if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \
echo $(CC); \
else \
t='$(program_transform_name)'; echo gcc | sed -e '' $$t; \
fi; \
fi`
CFLAGS_FOR_TARGET = $(CFLAGS)
GDB = ` \
if [ -f $${rootme}/../gdb ] ; \
then echo $${rootme}|sed -e 's@/[^/]*$$@@'|sed -e 's@$$@/gdb@' ; \
else echo gdb; \
fi`
GDBFLAGS = -nx
#### host, target, and site specific Makefile frags come in here.
EXECUTABLES = \
bitfields \
break \
callfuncs \
coremaker \
exprs \
funcargs \
interrupt \
list \
mips_pro \
nodebug \
opaque \
opaque-info.exp \
printcmds \
ptype \
recurse \
return \
run \
scope \
setvar \
signals \
t10 \
twice \
watchpoint \
whatis \
whatis-info.exp \
$(CROSS_EXECUTABLES)
# List of test executables that we have available. They are kept in
# uuencoded format to avoid SCCS/RCS problems with binary files.
CROSS_EXECUTABLES = \
i486-elf \
i860-elf \
m68k-elf \
m68k-aout \
m68k-aout2 \
mips-ecoff \
sparc-aout \
sparc-elf
all: $(EXECUTABLES) corefile
CC_CFLAGS_LD_FOR_TARGET = $(CC_FOR_TARGET) $(CFLAGS) $(LDFLAGS_FOR_TARGET)
CC_CFLAGS_FOR_TARGET = $(CC_FOR_TARGET) $(CFLAGS_FOR_TARGET)
run: run.o
$(CC_CFLAGS_LD_FOR_TARGET) -o run run.o $(LIBS)
run.o: run.c
$(CC_FOR_TARGET) $(CFLAGS) -c $(srcdir)/run.c
# We want to make sure comp-info.exp reflects the way that whatis was compiled;
# that's why this isn't a separate rule.
whatis whatis-info.exp: whatis.o
$(CC_CFLAGS_LD_FOR_TARGET) -o whatis.tmp whatis.o $(LIBS)
$(CC_FOR_TARGET) $(CFLAGS) -E $(srcdir)/whatis-info.c >whatis-info.tmp
mv whatis-info.tmp whatis-info.exp
mv whatis.tmp whatis
.PRECIOUS: whatis whatis-info.exp
whatis.o: whatis.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/whatis.c
ptype: ptype.o
$(CC_CFLAGS_LD_FOR_TARGET) -o ptype ptype.o $(LIBS)
ptype.o: ptype.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/ptype.c
setvar: setvar.o
$(CC_CFLAGS_LD_FOR_TARGET) -o setvar setvar.o $(LIBS)
setvar.o: setvar.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/setvar.c
exprs: exprs.o
$(CC_CFLAGS_LD_FOR_TARGET) -o exprs exprs.o $(LIBS)
exprs.o: exprs.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/exprs.c
break: break.o
$(CC_CFLAGS_LD_FOR_TARGET) -o break break.o $(LIBS)
break.o: break.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/break.c
signals: signals.o
${CC} ${CFLAGS} ${LDFLAGS_FOR_TARGET} -o signals signals.o ${LIBS}
signals.o: signals.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/signals.c
twice: twice.c
echo '#include "twice.c"' >twice-tmp.c
$(CC_CFLAGS_LD_FOR_TARGET) -I$(srcdir) -o twice twice-tmp.c $(LIBS)
rm -f twice-tmp.c
watchpoint: watchpoint.o
$(CC_CFLAGS_LD_FOR_TARGET) -o watchpoint watchpoint.o $(LIBS)
watchpoint.o: watchpoint.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/watchpoint.c
recurse: recurse.o
$(CC_CFLAGS_LD_FOR_TARGET) -o recurse recurse.o $(LIBS)
recurse.o: recurse.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/recurse.c
# We want to make sure opaque-info.exp reflects the way that opaque
# was compiled; that's why this isn't a separate rule.
opaque opaque-info.exp: opaque0.o opaque1.o
$(CC_CFLAGS_LD_FOR_TARGET) -o opaque.tmp opaque0.o opaque1.o $(LIBS)
$(CC_CFLAGS_FOR_TARGET) -E $(srcdir)/opaque-info.c >opaque-info.tmp
mv opaque-info.tmp opaque-info.exp
mv opaque.tmp opaque
opaque0.o: opaque0.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/opaque0.c
opaque1.o: opaque1.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/opaque1.c
coremaker: coremaker.o
$(CC_CFLAGS_LD_FOR_TARGET) -o coremaker coremaker.o $(LIBS)
coremaker.o: coremaker.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/coremaker.c
# Create a core file named "corefile" rather than just "core", to
# avoid problems with sys admin types that like to regularly prune all
# files named "core" from the system.
# bsd 386 systems append the name of the program to the corefile name.
corefile: coremaker
-rm -f core
-echo Expect a coredump from this next command...
-./coremaker >/dev/null 2>&1 || true
-if [ -f core ]; then mv core corefile; else true; fi
-if [ -f core.coremaker ]; then mv core.coremaker corefile; else true; fi
nodebug: nodebug.o
$(CC_FOR_TARGET) $(LDFLAGS_FOR_TARGET) -o nodebug nodebug.o $(LIBS)
# This gets compiled *without* -g, so don't add CFLAGS here.
nodebug.o: nodebug.c
$(CC_FOR_TARGET) -c $(srcdir)/nodebug.c
# For VPATH and Sun Make, we have to make explicit dependencies.
# DEC make doesn't seem to understand the ".u" dependency w/VPATH either.
m68k-elf: $(srcdir)/m68k-elf.u
uudecode $(srcdir)/m68k-elf.u
m68k-aout: $(srcdir)/m68k-aout.u
uudecode $(srcdir)/m68k-aout.u
m68k-aout2: $(srcdir)/m68k-aout2.u
uudecode $(srcdir)/m68k-aout2.u
mips-ecoff: $(srcdir)/mips-ecoff.u
uudecode $(srcdir)/mips-ecoff.u
i486-elf: $(srcdir)/i486-elf.u
uudecode $(srcdir)/i486-elf.u
sparc-aout: $(srcdir)/sparc-aout.u
uudecode $(srcdir)/sparc-aout.u
i860-elf: $(srcdir)/i860-elf.u
uudecode $(srcdir)/i860-elf.u
sparc-elf: $(srcdir)/sparc-elf.u
uudecode $(srcdir)/sparc-elf.u
t10: t10.o
$(CC_CFLAGS_LD_FOR_TARGET) -o t10 t10.o $(LIBS)
list: list0.o list1.o
$(CC_CFLAGS_LD_FOR_TARGET) -o list list0.o list1.o $(LIBS)
list0.o: list0.c list0.h
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/list0.c
list1.o: list1.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/list1.c
scope: scope0.o scope1.o
$(CC_CFLAGS_LD_FOR_TARGET) -o scope scope0.o scope1.o $(LIBS)
scope0.o: scope0.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/scope0.c
scope1.o: scope1.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/scope1.c
bitfields: bitfields.o
$(CC_CFLAGS_LD_FOR_TARGET) -o bitfields.tmp bitfields.o $(LIBS)
mv bitfields.tmp bitfields
.PRECIOUS: bitfields
bitfields.o: bitfields.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/bitfields.c
funcargs: funcargs.o
$(CC_CFLAGS_LD_FOR_TARGET) -o funcargs funcargs.o $(LIBS)
funcargs.o: funcargs.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/funcargs.c
return: return.o
$(CC_CFLAGS_LD_FOR_TARGET) -o return return.o $(LIBS)
return.o: return.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/return.c
mips_pro: mips_pro.o
$(CC_CFLAGS_LD_FOR_TARGET) -o mips_pro mips_pro.o $(LIBS)
mips_pro.o: mips_pro.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/mips_pro.c
printcmds: printcmds.o
$(CC_CFLAGS_LD_FOR_TARGET) -o printcmds printcmds.o $(LIBS)
printcmds.o: printcmds.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/printcmds.c
callfuncs: callfuncs.o
$(CC_CFLAGS_LD_FOR_TARGET) -o callfuncs callfuncs.o $(LIBS)
callfuncs.o: callfuncs.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/callfuncs.c
interrupt: interrupt.o
$(CC_CFLAGS_LD_FOR_TARGET) -o interrupt interrupt.o $(LIBS)
interrupt.o: interrupt.c
$(CC_CFLAGS_FOR_TARGET) -c $(srcdir)/interrupt.c
.NOEXPORT:
INFODIRS=doc
info:
install-info:
dvi:
install:
uninstall: force
site.exp: ./config.status Makefile
@echo "Making a new config file..."
-@rm -f ./tmp?
@touch site.exp
-@mv site.exp site.bak
@echo "## these variables are automatically generated by make ##" > ./tmp0
@echo "# Do not edit here. If you wish to override these values" >> ./tmp0
@echo "# add them to the last section" >> ./tmp0
@echo "set GDBFLAGS \"${GDBFLAGS}\"" >> ./tmp0
@echo "set host_os ${host_os}" >> ./tmp0
@echo "set host_alias ${host_alias}" >> ./tmp0
@echo "set host_cpu ${host_cpu}" >> ./tmp0
@echo "set host_vendor ${host_vendor}" >> ./tmp0
@echo "set target_os ${target_os}" >> ./tmp0
@echo "set target_alias ${target_alias}" >> ./tmp0
@echo "set target_cpu ${target_cpu}" >> ./tmp0
@echo "set target_vendor ${target_vendor}" >> ./tmp0
@echo "set host_triplet ${host_canonical}" >> ./tmp0
@echo "set target_triplet ${target_canonical}" >> ./tmp0
@echo "set srcdir ${srcdir}" >> ./tmp0
@echo "set objdir `pwd`" >> ./tmp0
@echo "set tool gdb" >> ./tmp0
@echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
@cat ./tmp0 > site.exp
@cat site.bak | sed \
-e '1,/^## All variables above are.*##/ d' >> site.exp
-@rm -f ./tmp?
installcheck:
check: site.exp all just-check
just-check:
rootme=`pwd`; export rootme; \
srcdir=${srcdir} ; export srcdir ; \
EXPECT=${EXPECT} ; export EXPECT ; \
if [ -f $${rootme}/../../expect/expect ] ; then \
TCL_LIBRARY=$${srcdir}/../../tcl/library ; \
export TCL_LIBRARY ; fi ; \
$(RUNTEST_FOR_TARGET) $(RUNTESTFLAGS) --tool gdb GDB=$(GDB) --srcdir $(srcdir)
clean mostlyclean:
-rm -f *~ *.o a.out xgdb *.x $(EXECUTABLES)
-rm -f core core.coremaker corefile
distclean realclean: clean
-rm -f *~ core *.log *.plog *.sum *.psum site.*
-rm -f Makefile config.status *-init.exp
-rm -fr *.log summary detail *.plog *.sum *.psum site.*
Makefile : $(srcdir)/Makefile.in $(srcdir)/configure.in $(host_makefile_frag) $(target_makefile_frag)
$(SHELL) ./config.status

View File

@ -0,0 +1,13 @@
Information about the various executables found in this test:
BFD CPU Objfile
Executable Target Type Type Info about compilation machine
---------- ------ ---- ------- -------------------------------
i486-elf elf-little i486 ELF NCR 3000, /usr/ccs/ATT/cc
i860-elf elf-big i860 ELF Stratus
m68k-elf elf-big m68k ELF Amiga 3000 UX, /usr/ccs/bin/cc
m68k-aout a.out-newsos3 m68k a.out Sony NEWS
m68k-aout2 a.out-sunos-big m68k a.out SunOS 4.1, gcc cygnus-2.0.1
sparc-aout a.out-sunos-big sparc a.out Sun 4, SunOS 4.1.1, gcc 2.1
sparc-elf elf-big sparc ELF Sun 4, Solaris 1.0, gcc 2.0.2
mips-ecoff ecoff-bigmips mips ecoff IRIX 4.0.1

View File

@ -0,0 +1,516 @@
# Copyright (C) 1988, 1990, 1991, 1992, 1994 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Rob Savoye. (rob@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
set prms_id 0
set bug_id 0
# are we on a target board
if ![isnative] then {
warning "These test cases can't run on a target system."
continue
}
proc test_with_self {} {
global prompt
global tool
global det_file
global timeout
global decimal
# load yourself into the debugger
# This can take a relatively long time, particularly for testing where
# the executable is being accessed over a network, or where gdb does not
# support partial symbols for a particular target and has to load the
# entire symbol table. Set the timeout to 10 minutes, which should be
# adequate for most environments (it *has* timed out with 5 min on a
# SPARCstation SLC under moderate load, so this isn't unreasonable).
# After gdb is loaded, set the timeout to 30 seconds for the duration
# of this test, and then back to the original value.
set oldtimeout $timeout
set timeout 600
if {[gdb_load "./x$tool"] <0} then {
return -1
}
set timeout 30
# disassemble yourself
send "x/10i main\n"
expect {
-re "x/10i.*main.*main.$decimal.*main.$decimal.*$prompt $"\
{ pass "Disassemble main" }
-re ".*$prompt $" { fail "Disassemble main" }
timeout { fail "(timeout) Disassemble main" }
}
set description "set breakpoint at main"
send "break main\n"
expect {
-re "Breakpoint.*at.* file.*, line.*$prompt $" {
pass "$description"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description (timeout)"
}
}
# run yourself
set description "run until breakpoint at main"
send "run\n"
expect {
-re "Starting program.*Breakpoint \[0-9\]+,.*main .argc.*argv.* at .*main.c:.*$prompt $" {
pass "$description"
}
-re "Starting program.*Breakpoint \[0-9\]+,.*main .argc.*argv.*$prompt $" {
xfail "$description (line numbers scrambled?)"
}
-re "vfork: No more processes.*$prompt $" {
fail "$description (out of virtual memory)"
return -1
}
-re ".*$prompt $" {
fail "$description"
return -1
}
timeout {
fail "$description (timeout)"
}
}
# do we have a version number ?
send "print version\n"
expect {
-re ".\[0-9\]+ = +0x.*\[0-9.\]+.*$prompt $" {
pass "printed version"
}
-re ".\[0-9\]+ = +.+ +0x.*\[0-9.\]+.*$prompt $" {
pass "printed version with cast"
}
-re ".*$prompt $" { fail "printed version" }
timeout { fail "(timeout) printed version" }
}
# lets do a few single steps
set description "step over symarg initialization"
send "step\n"
expect {
-re "char \[*\]+execarg = NULL;.*$prompt $" {
pass "$description"
}
-re ".*No such file or directory.\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*A file or directory .* does not exist..\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description (timeout)"
}
}
set description "step over execarg initialization"
send "step\n"
expect {
-re "char \[*\]corearg = NULL;.*$prompt $" {
pass "$description"
}
-re ".*No such file or directory.\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*A file or directory .* does not exist..\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description" (timeout)"
}
}
set description "step over corearg initialization"
send "step\n"
expect {
-re "char \[*\]cdarg = NULL;.*$prompt $" {
pass "$description"
}
-re ".*No such file or directory.\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*A file or directory .* does not exist..\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description" (timeout)"
}
}
set description "step over cdarg initialization"
send "step\n"
expect {
-re "char \[*\]ttyarg = NULL;.*$prompt $" {
pass "$description"
}
-re ".*No such file or directory.\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*A file or directory .* does not exist..\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description" (timeout)"
}
}
set description "step over ttyarg initialization"
send "step\n"
expect {
-re "init_malloc.* NULL.*$prompt $" {
pass "$description"
}
-re ".*No such file or directory.\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*A file or directory .* does not exist..\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description" (timeout)"
}
}
# now jump over a few functions
set description "next over init_malloc and everything it calls"
send "next\n"
expect {
-re "if.*SET_TOP_LEVEL.*$prompt $" {
pass "$description"
}
-re "i = .*count.*$prompt $" {
pass "$description"
set description "next over ALIGN_STACK_ON_STARTUP code"
send "next\n"
expect {
-re "if.*i != 0.*$prompt $" {
pass "$description"
send "next\n"
expect {
-re "if.*SET_TOP_LEVEL.*$prompt $" {
pass "$description"
}
-re "alloca.*$prompt $" {
send "next\n"
expect {
-re "if.*level.*$prompt $" {
pass "$description"
}
}
}
}
}
}
}
-re ".*No such file or directory.\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*A file or directory .* does not exist..\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description (timeout)"
}
}
# -re "if \(setmp \(to_top_level\)\).*$prompt $" { pass "first next" }
# This one fails on Solaris (for some versions of gdb) because you
# can't next over library functions
setup_xfail "sparc-sun-solaris2" 1817
set next_ok 1
set need_to_step_over_cmdsize 1
set description "next over SET_TOP_LEVEL call"
send "next\n"
expect {
-re "cmdsize = 1;.*$prompt $" {
pass "$description"
}
-re "cmdarg = .*xmalloc.*$prompt $" {
# This can happen in optimized code where the "cmdsize = 1" line
# is basically removed.
pass "$description"
set need_to_step_over_cmdsize 0
}
-re ".*No such file or directory.\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*A file or directory .* does not exist..\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*$prompt $" {
fail "$description"
set next_ok 0
}
timeout {
fail "$description (timeout)"
set next_ok 0
}
}
set description "print a string"
send "print \"foo\"\n"
expect {
-re ".\[0-9\]+ = \"foo\".*$prompt $" {
pass "$description"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description (timeout)"
}
}
if $need_to_step_over_cmdsize {
set description "step over cmdsize initialization"
send "step\n"
expect {
-re "cmdarg = .*xmalloc.*$prompt $" {
pass "$description"
}
-re ".*No such file or directory.\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*A file or directory .* does not exist..\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description" (timeout)"
}
}
}
# and another step for good luck
# This one fails on Solaris (for some versions of gdb) because you
# can't step into library functions
if $next_ok {
set description "step into xmalloc call"
send "step\n"
expect {
-re "xmalloc.*size=.*at.*utils.c.*$prompt $" {
pass "$description"
}
-re ".*No such file or directory.\r\n$prompt $" {
pass "$description (no source available)"
}
-re "A file or directory .* does not exist..\r\n$prompt $" {
pass "$description (no source available)"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description (timeout)"
}
}
}
# start the "xgdb" process
send "continue\n"
expect {
-re "GDB is free software and you are welcome to distribute copies of it.*
under certain conditions; type \"show copying\" to see the conditions..*
There is absolutely no warranty for GDB; type \"show warranty\" for details..*
GDB.*Copyright \[0-9\]+ Free Software Foundation, Inc..*$prompt $"\
{ pass "xgdb is at prompt" }
-re ".*$prompt $" { fail "xgdb is at prompt" }
timeout { fail "(timeout) xgdb is at prompt" }
}
# set xgdb prompt so we can tell which is which
send "set prompt (xgdb) \n"
expect {
-re "\[(\]xgdb\[)\].*\[(\]xgdb\[)\] $" { pass "Set xgdb prompt" }
-re ".*$prompt $" { fail "Set xgdb prompt" }
default { fail "(timeout) Set xgdb prompt" }
}
# kill the xgdb process
set description "send ^C to child process"
send "\003"
expect {
-re "Program received signal SIGINT.*$prompt $" {
pass "$description"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description (timeout)"
}
}
set description "send SIGINT signal to child process"
send "signal SIGINT\n"
expect {
-re "Continuing with signal SIGINT.*$prompt $" {
pass "$description"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description (timeout)"
}
}
# get a stack trace
setup_xfail "rs6000-*-*"
setup_xfail "i486-*-sysv4"
set description "backtrace through signal handler"
send "backtrace\n"
expect {
-re "#0.*read.*#\[1-9\].*main.c.*$prompt $" {
pass "$description"
}
-re ".*$prompt $" {
fail "$description"
}
timeout {
fail "$description (timeout)"
}
}
# force GDB to dump core. On Solaris expect seems to not see the
# final message, even if gdb did dump core, so we check for the
# core dump explicitly if we time out.
# bsd 386 systems append the name of the program to the corefile name.
system rm -f core core.gdb
send "maint dump-me\n"
expect {
-re "maint dump-me.*Should GDB dump core.*y or n. $" {
send "y\n"
expect {
-re "Quit.*core dumped.*" { pass "GDB dumped core" }
-re "Program received signal SIGQUIT.*$prompt $" {
pass "GDB dumped core"
# This means we just told xgdb, not gdb, to dump core.
# Get out of gdb so that removing xgdb doesn't get
# test busy errors.
gdb_exit
}
-re "$prompt $" { fail "GDB dumped core" }
default {
if {[file exists core] || [file exists core.gdb]} then {
pass "GDB dumped core"
} else {
fail "GDB dumped core"
}
}
}
}
-re ".*$prompt $" { fail "GDB dumped core" }
timeout { fail "(timeout) GDB dumped core" }
}
system rm -f core core.gdb
# Set the timeout back to the value it had when we were called.
set timeout $oldtimeout
# Restart gdb in case next test expects it to be started already.
gdb_start
return 0
}
# Find a pathname to a file that we would execute if the shell was asked
# to run $arg using the current PATH.
proc find_gdb { arg } {
# If the arg directly specifies an existing executable file, then
# simply use it.
if [file executable $arg] then {
return $arg
}
set result [which $arg]
if [string match "/" [ string range $result 0 0 ]] then {
return $result
}
# If everything fails, just return the unqualified pathname as default
# and hope for best.
return $arg
}
# Run the test with self.
# Copy the file executable file in case this OS doesn't like to edit it's own
# text space.
set GDB_FULLPATH [find_gdb $GDB]
# Remove any old copy lying around.
catch "exec rm -f ./x$tool"
if ![file executable $GDB_FULLPATH] then {
fail "couldn't convert $GDB to absolute pathname to make local copy"
} else {
if [catch "exec cp $GDB_FULLPATH ./x$tool"] then {
fail "couldn't copy $GDB_FULLPATH to current directory"
} else {
verbose "\t\tCopied $GDB_FULLPATH to ./x$tool"
if {[test_with_self] <0} then {
warning "Couldn't test self"
catch "exec rm -f ./x$tool"
return -1
}
catch "exec rm -f ./x$tool"
}
}

View File

@ -0,0 +1,190 @@
/* Test program to test bit field operations */
/* For non-ANSI compilers, use plain ints for the signed bit fields. However,
whether they actually end up signed or not is implementation defined, so
this may cause some tests to fail. But at least we can still compile
the test program and run the tests... */
#ifndef __STDC__
#define signed /**/
#endif
struct fields
{
unsigned char uc ;
signed int s1 : 1;
unsigned int u1 : 1;
signed int s2 : 2;
unsigned int u2 : 2;
signed int s3 : 3;
unsigned int u3 : 3;
signed int s9 : 9;
unsigned int u9 : 9;
signed char sc ;
} flags;
void break1 ()
{
}
void break2 ()
{
}
void break3 ()
{
}
void break4 ()
{
}
void break5 ()
{
}
void break6 ()
{
}
void break7 ()
{
}
void break8 ()
{
}
void break9 ()
{
}
void break10 ()
{
}
/* This is used by bitfields.exp to determine if the target understands
signed bitfields. */
int i;
int main ()
{
/* For each member, set that member to 1, allow gdb to verify that the
member (and only that member) is 1, and then reset it back to 0. */
flags.uc = 1;
break1 ();
flags.uc = 0;
flags.s1 = 1;
break1 ();
flags.s1 = 0;
flags.u1 = 1;
break1 ();
flags.u1 = 0;
flags.s2 = 1;
break1 ();
flags.s2 = 0;
flags.u2 = 1;
break1 ();
flags.u2 = 0;
flags.s3 = 1;
break1 ();
flags.s3 = 0;
flags.u3 = 1;
break1 ();
flags.u3 = 0;
flags.s9 = 1;
break1 ();
flags.s9 = 0;
flags.u9 = 1;
break1 ();
flags.u9 = 0;
flags.sc = 1;
break1 ();
flags.sc = 0;
/* Fill alternating fields with all 1's and verify that none of the bits
"bleed over" to the other fields. */
flags.uc = 0xFF;
flags.u1 = 0x1;
flags.u2 = 0x3;
flags.u3 = 0x7;
flags.u9 = 0x1FF;
break2 ();
flags.uc = 0;
flags.u1 = 0;
flags.u2 = 0;
flags.u3 = 0;
flags.u9 = 0;
flags.s1 = 0x1;
flags.s2 = 0x3;
flags.s3 = 0x7;
flags.s9 = 0x1FF;
flags.sc = 0xFF;
break2 ();
flags.s1 = 0;
flags.s2 = 0;
flags.s3 = 0;
flags.s9 = 0;
flags.sc = 0;
/* Fill the unsigned fields with the maximum positive value and verify
that the values are printed correctly. */
/* Maximum positive values */
flags.u1 = 0x1;
flags.u2 = 0x3;
flags.u3 = 0x7;
flags.u9 = 0x1FF;
break3 ();
flags.u1 = 0;
flags.u2 = 0;
flags.u3 = 0;
flags.u9 = 0;
/* Fill the signed fields with the maximum positive value, then the maximally
negative value, then -1, and verify in each case that the values are
printed correctly. */
/* Maximum positive values */
flags.s1 = 0x0;
flags.s2 = 0x1;
flags.s3 = 0x3;
flags.s9 = 0xFF;
break4 ();
/* Maximally negative values */
flags.s1 = 0x1;
flags.s2 = 0x2;
flags.s3 = 0x4;
flags.s9 = 0x100;
/* Extract bitfield value so that bitfield.exp can check if the target
understands signed bitfields. */
i = flags.s9;
break4 ();
/* -1 */
flags.s1 = 0x1;
flags.s2 = 0x3;
flags.s3 = 0x7;
flags.s9 = 0x1FF;
break4 ();
flags.s1 = 0;
flags.s2 = 0;
flags.s3 = 0;
flags.s9 = 0;
return 0;
}

View File

@ -0,0 +1,434 @@
# Copyright (C) 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Fred Fish. (fnf@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
set prms_id 0
set bug_id 0
set binfile "bitfields"
set srcfile $binfile.c
if ![file exists $objdir/$subdir/$binfile] then {
perror "$objdir/$subdir/$binfile does not exist."
return 0
}
#
# Test bitfield locating and uniqueness.
# For each member, set that member to 1 and verify that the member (and only
# that member) is 1, then reset it back to 0.
#
proc bitfield_uniqueness {} {
global decimal
global hex
global prompt
global srcfile
global det_file
send "break break1\n"
expect {
-re "Break.* at $hex: file .*$srcfile, line $decimal.\r\n$prompt $" {}
timeout { fail "setting breakpoint at break1" ; return }
}
send "run\n"
expect {
-re "The program .* has been started already.*y or n. $" {
send "y\n"
exp_continue
}
-re "Starting.*Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "running to break1" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 1 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "bitfield uniqueness (uc)" ; return }
}
send "cont\n"
expect {
-re "Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break1" ; return }
}
send "print flags\n"
# Note that we check for s1 as either 1 or -1, so that failure to
# treat it correctly as a signed 1bit field (values 0 or -1) while
# printing its value does not cause a spurious failure. We do the
# signedness preservation test later.
expect {
-re ".*uc = 0 .*, s1 = (1|-1), u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "bitfield uniqueness (s1)" ; return }
}
send "cont\n"
expect {
-re "Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break1" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 1, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "bitfield uniqueness (u1)" ; return }
}
send "cont\n"
expect {
-re "Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break1" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 1, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "bitfield uniqueness (s2)" ; return }
}
send "cont\n"
expect {
-re "Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break1" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 1, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "bitfield uniqueness (u2)" ; return }
}
send "cont\n"
expect {
-re "Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break1" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 1, u3 = 0, s9 = 0, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "bitfield uniqueness (s3)" ; return }
}
send "cont\n"
expect {
-re "Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break1" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 1, s9 = 0, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "bitfield uniqueness (u3)" ; return }
}
send "cont\n"
expect {
-re "Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break1" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 1, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "bitfield uniqueness (s9)" ; return }
}
send "cont\n"
expect {
-re "Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break1" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 1, sc = 0 .*$prompt $" {}
timeout { fail "bitfield uniqueness (u9)" ; return }
}
send "cont\n"
expect {
-re "Break.*break1 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break1" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 1 .*$prompt $" {}
timeout { fail "bitfield uniqueness (sc)" ; return }
}
pass "bitfield locating and uniqueness"
}
#
# Test bitfield containment.
# Fill alternating fields with all 1's and verify that none of the bits
# "bleed over" to the other fields.
#
proc bitfield_containment {} {
global decimal
global hex
global prompt
global srcfile
global det_file
send "delete\n"
expect {
-re "Delete all breakpoints.*y or n. $" {
send "y\n"
expect {
-re "$prompt $" {}
timeout { fail "deleting breakpoints" ; return }
}
}
timeout { fail "deleting breakpoints" ; return }
}
send "break break2\n"
expect {
-re "Break.* at $hex: file .*$srcfile, line $decimal.\r\n$prompt $" {}
timeout { fail "setting breakpoint at break2" ; return }
}
send "run\n"
expect {
-re "The program .* has been started already.*y or n. $" {
send "y\n"
exp_continue
}
-re "Starting.*Break.*break2 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "running to break2" ; return }
}
send "print/x flags\n"
expect {
-re ".*uc = 0xff, s1 = 0x0, u1 = 0x1, s2 = 0x0, u2 = 0x3, s3 = 0x0, u3 = 0x7, s9 = 0x0, u9 = 0x1ff, sc = 0x0.*$prompt $" {}
timeout { fail "bitfield containment" ; return }
}
send "cont\n"
expect {
-re "Break.*break2 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break2" ; return }
}
# If program is compiled with Sun CC, then these print out as their
# actual sizes; if compiled with gcc, they print out as 0xffffffff
# (which strikes me as bogus, but accept it at least for now).
send "print/x flags\n"
expect {
-re ".*uc = 0x0, s1 = 0x(1|f*), u1 = 0x0, s2 = 0x(3|f*), u2 = 0x0, s3 = 0x(7|f*), u3 = 0x0, s9 = 0x(1ff|f*), u9 = 0x0, sc = 0xff.*$prompt $" {}
timeout { fail "bitfield containment" ; return }
}
pass "bitfield containment"
}
#
# Test unsigned bitfields for unsignedness and range.
# Fill the unsigned fields with the maximum positive value and verify that
# the values are printed correctly.
# FIXME: Perhaps we should test each bitfield separately so we can
# report individual failures rather than just pass/nopass.
proc bitfield_unsignedness {} {
global decimal
global hex
global prompt
global srcfile
global det_file
send "delete\n"
expect {
-re "Delete all breakpoints.*y or n. $" {
send "y\n"
expect {
-re "$prompt $" {}
timeout { fail "deleting breakpoints" ; return }
}
}
timeout { fail "deleting breakpoints" ; return }
}
send "break break3\n"
expect {
-re "Break.* at $hex: file .*$srcfile, line $decimal.\r\n$prompt $" {}
timeout { fail "setting breakpoint at break3" ; return }
}
send "run\n"
expect {
-re "The program .* has been started already.*y or n. $" {
send "y\n"
exp_continue
}
-re "Starting.*Break.*break3 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "running to break3" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 1, s2 = 0, u2 = 3, s3 = 0, u3 = 7, s9 = 0, u9 = 511, sc = 0 .*$prompt $" {}
timeout { fail "unsigned bitfield ranges" ; return }
}
pass "unsigned bitfield ranges and unsigned-ness"
}
#
# Test signed bitfields for signedness and range.
# Fill the signed fields with the maximum positive value, then the maximally
# negative value, then -1, and verify in each case that the values are
# printed correctly.
#
proc bitfield_signedness {} {
global decimal
global hex
global prompt
global srcfile
global det_file
send "delete\n"
expect {
-re "Delete all breakpoints.*y or n. $" {
send "y\n"
expect {
-re "$prompt $" {}
timeout { warning "deleting breakpoints (timedout)" ; return }
}
}
timeout { warning "deleting breakpoints (timedout)" ; return }
}
send "break break4\n"
expect {
-re "Break.* at $hex: file .*$srcfile, line $decimal.\r\n$prompt $" {}
timeout { fail "setting breakpoint at break4" ; return }
}
send "run\n"
expect {
-re "The program .* has been started already.*y or n. $" {
send "y\n"
exp_continue
}
-re "Starting.*Break.*break4 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "running to break4" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 1, u2 = 0, s3 = 3, u3 = 0, s9 = 255, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "signed bitfields, max positive values" ; return }
}
send "cont\n"
expect {
-re "Break.*break4 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break4" ; return }
}
# Determine if the target has signed bitfields so we can xfail the
# the signed bitfield tests if it doesn't.
send "print i\n"
expect {
-re ".* = -256.*$prompt $" {}
-re ".* = 256.*$prompt $" {setup_xfail "*-*-*"}
-re ".*$prompt $" { fail "\
determining signed-ness of bitfields (known bug in sparc gcc 2.4.5)"
return
}
default { fail "determining signed-ness of bitfields" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = -1, u1 = 0, s2 = -2, u2 = 0, s3 = -4, u3 = 0, s9 = -256, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "signed bitfields, max negative values" ; return }
}
send "cont\n"
expect {
-re "Break.*break4 \[)(\]+ at .*$srcfile:$decimal.*$prompt $" {}
timeout { fail "continuing to break4" ; return }
}
send "print flags\n"
expect {
-re ".*uc = 0 .*, s1 = -1, u1 = 0, s2 = -1, u2 = 0, s3 = -1, u3 = 0, s9 = -1, u9 = 0, sc = 0 .*$prompt $" {}
timeout { fail "signed bitfields with -1" ; return }
}
pass "signed bitfield ranges and signed-ness"
}
# Start with a fresh gdb.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
send "set print sevenbit-strings\n" ; expect -re "$prompt $"
bitfield_uniqueness
if [istarget "mips-idt-*"] then {
# Restart because IDT/SIM runs out of file descriptors.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
}
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
gdb_load $objdir/$subdir/$binfile
}
bitfield_containment
if [istarget "mips-idt-*"] then {
# Restart because IDT/SIM runs out of file descriptors.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
}
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
gdb_load $objdir/$subdir/$binfile
}
bitfield_unsignedness
if [istarget "mips-idt-*"] then {
# Restart because IDT/SIM runs out of file descriptors.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
}
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
gdb_load $objdir/$subdir/$binfile
}
bitfield_signedness
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
}

View File

@ -0,0 +1,77 @@
#ifdef vxworks
# include <vxWorks.h>
# include <stdioLib.h>
/* VxWorks does not supply atoi. */
static int
atoi (z)
char *z;
{
int i = 0;
while (*z >= '0' && *z <= '9')
i = i * 10 + (*z++ - '0');
return i;
}
/* I don't know of any way to pass an array to VxWorks. This function
can be called directly from gdb. */
vxmain (arg)
char *arg;
{
char *argv[2];
argv[0] = "";
argv[1] = arg;
main (2, argv, (char **) 0);
}
#else /* ! vxworks */
# include <stdio.h>
#endif /* ! vxworks */
/*
* The following functions do nothing useful. They are included simply
* as places to try setting breakpoints at. They are explicitly
* "one-line functions" to verify that this case works (some versions
* of gcc have or have had problems with this).
*/
int marker1 () { return (0); }
int marker2 (a) int a; { return (1); }
void marker3 (a, b) char *a, *b; {}
void marker4 (d) long d; {}
/*
* This simple classical example of recursion is useful for
* testing stack backtraces and such.
*/
int
main (argc, argv, envp)
int argc;
char *argv[], **envp;
{
if (argc != 2) {
fprintf (stderr, "usage: factorial <number>\n");
return 1;
} else {
printf ("%d\n", factorial (atoi (argv[1])));
}
marker1 ();
marker2 (43);
marker3 ("stack", "trace");
marker4 (177601976L);
return 0;
}
int factorial (value)
int value;
{
if (value > 1) {
value *= factorial (value - 1);
}
return (value);
}

View File

@ -0,0 +1,427 @@
# Copyright (C) 1988, 1990, 1991, 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Rob Savoye. (rob@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
#
# test running programs
#
set prms_id 0
set bug_id 0
set binfile "break"
set srcfile $binfile.c
if ![file exists $objdir/$subdir/$binfile] then {
perror "$objdir/$subdir/$binfile does not exist."
return 0
}
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
#
# test simple breakpoint setting commands
#
#
# test deleting all breakpoints; note that gdb-init.exp provides a
# "delete_breakpoints" proc for general use elsewhere
#
send "delete breakpoints\n"
expect {
-re "Delete all breakpoints.*y or n. $"\
{ send "y\n"
expect {
-re ".*$prompt $"\
{ send "info breakpoints\n"
expect {
-re "No breakpoints or watchpoints..*$prompt $" { pass "Deleted all breakpoints" }
-re ".*$prompt $" { fail "Deleted all breakpoints" }
timeout { fail "Deleted all breakpoints" }
}
}
timeout { fail "Deleted all breakpoints" }
}
}
-re ".*$prompt $" { fail "Deleted all breakpoints" }
timeout { fail "Deleted all breakpoints" }
}
#
# test break at function
#
send "break main\n"
expect {
-re "Breakpoint.*at.* file .*$srcfile, line.*$prompt $" { pass "breakpoint function" }
-re ".*$prompt $" { fail "breakpoint function" }
timeout { fail "(timeout) breakpoint function" }
}
#
# test break at function in file
#
send "break $srcfile:factorial\n"
expect {
-re "Breakpoint.*at.* file .*$srcfile, line.*$prompt $" { pass "breakpoint function in file" }
-re ".*$prompt $" { fail "breakpoint function in file" }
timeout { fail "(timeout) breakpoint function in file" }
}
#
# test break at line number
#
send "break 60\n"
expect {
-re "Breakpoint.*at.* file .*$srcfile, line 60.*$prompt $" { pass "breakpoint line number" }
-re ".*$prompt $" { fail "breakpoint line number" }
timeout { fail "(timeout) breakpoint line number" }
}
#
# test duplicate breakpoint
#
send "break 60\n"
expect {
-re "Note: breakpoint \[0-9\]+ also set at pc.*Breakpoint \[0-9\]+ at.* file .*$srcfile, line 60.*$prompt $"\
{ pass "breakpoint duplicate" }
-re ".*$prompt $" { fail "breakpoint duplicate" }
timeout { fail "(timeout) breakpoint duplicate" }
}
#
# test break at line number in file
#
send "break $srcfile:66\n"
expect {
-re "Breakpoint.*at.* file .*$srcfile, line 66.*$prompt $" { pass "breakpoint line number in file" }
-re ".*$prompt $" { fail "breakpoint line number in file" }
timeout { fail "(timeout) breakpoint line number in file" }
}
#
# check to see what breakpoints are set
#
send "info break\n"
expect {
-re "Num Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:56.*
\[0-9\]+\[\t \]+breakpoint keep y.* in factorial at .*$srcfile:72.*
\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:60.*
\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:60.*
\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:66.*$prompt $" { pass "breakpoint info" }
-re ".*$prompt $" { fail "breakpoint info" }
timeout { fail "(timeout) breakpoint info" }
}
# FIXME: The rest of this test doesn't work with anything that can't
# handle arguments.
if [istarget "mips-idt-*"] then {
return
}
#
# run until the breakpoint at main is hit
#
if [istarget "*-*-vxworks"] then {
send "run vxmain \"2\"\n"
set timeout 120
} else {
send "run 2\n"
}
expect {
-re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:56.*56\[\t \]+if .argc.* \{.*$prompt $"\
{ pass "run until function breakpoint" }
-re ".*$prompt $" { fail "run until function breakpoint" }
timeout { fail "(timeout) run until function breakpoint" }
}
#
# run until the breakpoint at a line number
#
send "continue\n"
expect {
-re "continue.*Continuing..*Breakpoint \[0-9\]+, main .argc.*argv.* at .*$srcfile:60.*
60\[\t ]+printf.*factorial.*$prompt $" { pass "run until breakpoint set at a line number" }
-re ".*$prompt $" { fail "run until breakpoint set at a line number" }
timeout { fail "(timeout) run until breakpoint set at a line number" }
}
#
# Run until the breakpoint set in a function in a file
#
send "continue\n"
expect {
-re "continue.*Continuing..*Breakpoint \[0-9\]+, factorial .value=2. at .*$srcfile:72.*72\[\t ]+if .value > 1. \{.*$prompt $"\
{ send "continue\n"
expect {
-re "continue.*Continuing..*Breakpoint \[0-9\]+, factorial .value=1. at .*$srcfile:72.*72\[\t ]+if .value > 1.*$prompt $" { pass "run until file:function breakpoint" }
-re ".*$prompt $" { fail "run until file:function breakpoint" }
timeout { fail "(timeout) run until file:function breakpoint" }
}
}
-re ".*$prompt $" { fail "run until file:function breakpoint" }
timeout { fail "(timeout) run until file:function breakpoint" }
}
#
# run until the file:function breakpoint at a line number in a file
#
send "continue\n"
expect {
-re "continue.*Continuing..*Breakpoint \[0-9\]+, main .*argc.*argv.* at .*$srcfile:66.*66\[\t ]+return 0;.*$prompt $" { pass "run until file:linenum breakpoint" }
-re ".*$prompt $" { fail "run until file:linenum breakpoint" }
timeout { fail "(timeout) run until file:linenum breakpoint" }
}
#
# delete all breakpoints so we can start over, course this can be a test too
#
send "delete breakpoints\n"
expect {
-re "Delete all breakpoints.*y or n.*$" {
send "y\n"
expect {
-re ".*$prompt $" {
send "info breakpoints\n"
expect {
-re "No breakpoints or watchpoints..*$prompt $" {
pass "Deleted all breakpoints"
}
-re ".*$prompt $" { fail "Deleted all breakpoints" }
timeout { fail "Deleted all breakpoints" }
}
}
timeout { fail "Deleted all breakpoints" }
}
}
-re ".*$prompt $" { fail "Deleted all breakpoints" }
timeout { fail "Deleted all breakpoints" }
}
#
# test temporary breakpoint at function
#
send "tbreak main\n"
expect {
-re "Breakpoint.*at.* file .*$srcfile, line.*$prompt $" {
pass "Temporary breakpoint function"
}
-re ".*$prompt $" {
pass "Temporary breakpoint function"
}
timeout {
fail "(timeout) breakpoint function"
}
}
#
# test break at function in file
#
send "tbreak $srcfile:factorial\n"
expect {
-re "Breakpoint.*at.* file .*$srcfile, line.*$prompt $" {
pass "Temporary breakpoint function in file"
}
-re ".*$prompt $" {
pass "Temporary breakpoint function in file"
}
timeout {
fail "(timeout) breakpoint function in file"
}
}
#
# test break at line number
#
send "tbreak 60\n"
expect {
-re "Breakpoint.*at.* file .*$srcfile, line 60.*$prompt $" { pass "Temporary breakpoint line number" }
-re ".*$prompt $" { pass "Temporary breakpoint line number" }
timeout { fail "(timeout) breakpoint line number" }
}
#
# test break at line number in file
#
send "tbreak $srcfile:66\n"
expect {
-re "Breakpoint.*at.* file .*$srcfile, line 66.*$prompt $" { pass "Temporary breakpoint line number in file" }
-re ".*$prompt $" { pass "Temporary breakpoint line number in file" }
timeout { fail "(timeout) breakpoint line number in file" }
}
#
# check to see what breakpoints are set (temporary this time)
#
send "info break\n"
expect {
-re "Num Type.*Disp Enb Address.*What.*
\[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:56.*
\[0-9\]+\[\t \]+breakpoint del.*y.*in factorial at .*$srcfile:72.*
\[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:60.*
\[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:66.*$prompt $" {
pass "Temporary breakpoint info"
}
-re ".*$prompt $" { fail "Temporary breakpoint info" }
timeout { fail "(timeout) Temporary breakpoint info" }
}
proc test_clear_command {} {
gdb_test "break main" "Breakpoint.*at"
gdb_test "break main" "Breakpoint.*at"
# We don't test that it deletes the correct breakpoints. We do at
# least test that it deletes more than one breakpoint.
gdb_test "clear main" {Deleted breakpoints [0-9]+ [0-9]+}
}
#
# Test "next" over recursive function call.
#
proc test_next_with_recursion {} {
global prompt
global decimal
# FIXME: should be using runto
send "kill\n"
expect {
-re ".*Kill the program being debugged.*y or n. $" {
send "y\n"
exp_continue
}
-re ".*$prompt $" {}
timeout { fail "killing inferior" ; return }
}
delete_breakpoints
send "break factorial\n"
expect {
-re "Breakpoint $decimal at .*$prompt" {}
timeout { fail "break at factorial" ; return }
}
# Run until we call factorial with 6
if [istarget "*-*-vxworks"] then {
send "run vxmain \"6\"\n"
} else {
send "run 6\n"
}
expect {
-re "Starting .*Break.* factorial .value=6. .*$prompt $" {}
timeout { fail "run to factorial(6)" ; return }
}
# Continue until we call factorial recursively with 5.
send "continue\n"
expect {
-re "Continuing.*Break.* factorial .value=5. .*$prompt $" {}
timeout { fail "continue to factorial(5)" ; return }
}
# Do a backtrace just to confirm how many levels deep we are.
set result [gdb_test "backtrace" \
"#0\[ \t\]+ factorial .value=5." \
"backtrace from factorial(5)"]
if $result!=0 then { return }
# Now a "next" should position us at the recursive call, which
# we will be performing with 4.
send "next\n"
expect {
-re ".* factorial .value - 1.;.*$prompt $" {}
timeout { fail "next to recursive call (timeout)" ; return }
}
# Disable the breakpoint at the entry to factorial by deleting them all.
# The "next" should run until we return to the next line from this
# recursive call to factorial with 4.
# Buggy versions of gdb will stop instead at the innermost frame on
# the line where we are trying to "next" to.
delete_breakpoints
send "next\n"
expect {
-re "return .value.;.*$prompt $" {
# Note that the correct behavior is for GDB to *not* print the
# frame.
pass "next over recursive call"
}
-re ".*$prompt $" {
fail "next over recursive call" ; return
}
timeout { fail "next over recursive call (timeout)" ; return }
}
# OK, we should be back in the same stack frame we started from.
# Do a backtrace just to confirm.
set result [gdb_test "backtrace" \
"#0\[ \t\]+ factorial .value=120.*\r\n#1\[ \t\]+ \[0-9a-fx\]+ in factorial .value=6." \
"backtrace from factorial(5)"]
if $result!=0 then { return }
# Continue until we exit. Should not stop again.
gdb_test "continue" "Continuing.\r\n720"\
"continue until exit in recursive next test"
}
test_clear_command
test_next_with_recursion
# Reset the default arguments for VxWorks
if [istarget "*-*-vxworks"] then {
set timeout 10
send "set args main\n"
expect -re ".*$prompt $" {}
}
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
}

View File

@ -0,0 +1,206 @@
/* Support program for testing gdb's ability to call functions
in the inferior, pass appropriate arguments to those functions,
and get the returned result. */
#ifdef __STDC__
#define PARAMS(paramlist) paramlist
#else
#define PARAMS(paramlist) ()
#endif
char char_val1 = 'a';
char char_val2 = 'b';
short short_val1 = 10;
short short_val2 = -23;
int int_val1 = 87;
int int_val2 = -26;
long long_val1 = 789;
long long_val2 = -321;
float float_val1 = 3.14159;
float float_val2 = -2.3765;
double double_val1 = 45.654;
double double_val2 = -67.66;
#define DELTA (0.001)
char *string_val1 = "string 1";
char *string_val2 = "string 2";
char char_array_val1[] = "carray 1";
char char_array_val2[] = "carray 2";
struct struct1 {
int x;
long y;
} struct_val1 = { 76, 51 };
/* Some functions that can be passed as arguments to other test
functions, or called directly. */
int add (a, b)
int a, b;
{
return (a + b);
}
int doubleit (a)
int a;
{
return (a + a);
}
int (*func_val1) PARAMS((int,int)) = add;
int (*func_val2) PARAMS((int)) = doubleit;
/* An enumeration and functions that test for specific values. */
enum enumtype { enumval1, enumval2, enumval3 };
enum enumtype enum_val1 = enumval1;
enum enumtype enum_val2 = enumval2;
enum enumtype enum_val3 = enumval3;
t_enum_value1 (enum_arg)
enum enumtype enum_arg;
{
return (enum_arg == enum_val1);
}
t_enum_value2 (enum_arg)
enum enumtype enum_arg;
{
return (enum_arg == enum_val2);
}
t_enum_value3 (enum_arg)
enum enumtype enum_arg;
{
return (enum_arg == enum_val3);
}
/* A function that takes a vector of integers (along with an explicit
count) and returns their sum. */
int sum_args (argc, argv)
int argc;
int argv[];
{
int sumval = 0;
int idx;
for (idx = 0; idx < argc; idx++)
{
sumval += argv[idx];
}
return (sumval);
}
/* Test that calling functions works if there are a lot of arguments. */
int
sum10 (i0, i1, i2, i3, i4, i5, i6, i7, i8, i9)
int i0, i1, i2, i3, i4, i5, i6, i7, i8, i9;
{
return i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9;
}
/* Gotta have a main to be able to generate a linked, runnable
executable, and also provide a useful place to set a breakpoint. */
main ()
{
malloc(1);
}
/* Functions that expect specific values to be passed and return
either 0 or 1, depending upon whether the values were
passed incorrectly or correctly, respectively. */
int t_char_values (char_arg1, char_arg2)
char char_arg1, char_arg2;
{
return ((char_arg1 == char_val1) && (char_arg2 == char_val2));
}
int t_short_values (short_arg1, short_arg2)
short short_arg1, short_arg2;
{
return ((short_arg1 == short_val1) && (short_arg2 == short_val2));
}
int t_int_values (int_arg1, int_arg2)
int int_arg1, int_arg2;
{
return ((int_arg1 == int_val1) && (int_arg2 == int_val2));
}
int t_long_values (long_arg1, long_arg2)
long long_arg1, long_arg2;
{
return ((long_arg1 == long_val1) && (long_arg2 == long_val2));
}
int t_float_values (float_arg1, float_arg2)
float float_arg1, float_arg2;
{
return (((float_arg1 - float_val1) < DELTA) &&
((float_arg2 - float_val2) < DELTA));
}
int t_double_values (double_arg1, double_arg2)
double double_arg1, double_arg2;
{
return (((double_arg1 - double_val1) < DELTA) &&
((double_arg2 - double_val2) < DELTA));
}
int t_string_values (string_arg1, string_arg2)
char *string_arg1, *string_arg2;
{
return (!strcmp (string_arg1, string_val1) &&
!strcmp (string_arg2, string_val2));
}
int t_char_array_values (char_array_arg1, char_array_arg2)
char char_array_arg1[], char_array_arg2[];
{
return (!strcmp (char_array_arg1, char_array_val1) &&
!strcmp (char_array_arg2, char_array_val2));
}
/* This used to simply compare the function pointer arguments with
known values for func_val1 and func_val2. Doing so is valid ANSI
code, but on some machines (RS6000, HPPA, others?) it may fail when
called directly by GDB.
In a nutshell, it's not possible for GDB to determine when the address
of a function or the address of the function's stub/trampoline should
be passed.
So, to avoid GDB lossage in the common case, we perform calls through the
various function pointers and compare the return values. For the HPPA
at least, this allows the common case to work.
If one wants to try something more complicated, pass the address of
a function accepting a "double" as one of its first 4 arguments. Call
that function indirectly through the function pointer. This would fail
on the HPPA. */
int t_func_values (func_arg1, func_arg2)
int (*func_arg1) PARAMS ((int, int));
int (*func_arg2) PARAMS ((int));
{
return ((*func_arg1) (5,5) == (*func_val1) (5,5)
&& (*func_arg2) (6) == (*func_val2) (6));
}
int t_call_add (func_arg1, a, b)
int (*func_arg1) PARAMS ((int, int));
int a, b;
{
return ((*func_arg1)(a, b));
}

View File

@ -0,0 +1,30 @@
# This file is a shell script fragment that supplies the information
# necessary to tailor a template configure script into the configure
# script appropriate for this directory. For more information, check
# any existing configure script.
srctrigger="Makefile.in"
srcname="gdb.base"
# per-host:
# per-target:
# everything defaults to unix for a target
target_abbrev=unix
target_makefile_frag=config/mt-unix
# this section is for all targets
case "${target}" in
i386-*-aout) target_makefile_frag=config/mt-i386-aout ;;
*-*-lynx) target_makefile_frag=config/mt-lynx ;;
*-*-vxworks) target_makefile_frag=config/mt-vxworks ;;
m68k-*-*) target_makefile_frag=config/mt-m68k ;;
i960-*-nindy) target_makefile_frag=config/mt-i960-nindy ;;
a29k-*-udi) target_makefile_frag=config/mt-a29k-udi ;;
sparclite-*-*) target_makefile_frag=config/mt-slite ;;
sparc-*-aout) target_makefile_frag=config/mt-sparc-aout ;;
mips-*-ecoff) target_makefile_frag=config/mt-mips-ecoff ;;
esac
# post-target:

View File

@ -0,0 +1,21 @@
/* Simple little program that just generates a core dump from inside some
nested function calls. */
void
func2 ()
{
abort ();
}
void
func1 ()
{
func2 ();
}
main ()
{
func1 ();
}

View File

@ -0,0 +1,376 @@
# Copyright (C) 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Fred Fish. (fnf@cygnus.com)
# Rob Savoye changed it to use gdb_test (rob@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
set prms_id 0
set bug_id 0
# FIXME: The configure.in for this test should look for --with-targets
# and deal accordingly. Until that has been done, skip the whole thing.
# With a minimal bfd (the default), few if any of these tests work.
verbose "FIXME: all the crossload tests ignored"
continue
# FIXME: These tests don't work for the i960, because
# bfd/config/i960-bout.mt sets SELECT_VECS. I could use setup_xfail
# for each test, but rebooting the board between each one takes a long
# time so I'm just punting the whole file.
if [istarget "i960-*-*"] then {
if $verbose>1 then {
warning "FIXME: crossload test case doesn't run on the i960."
}
continue
}
# FIXME: These tests don't work for the a29k, because SELECT_VECS is
# used when compiling bfd. It would be nice if there were some better
# way of detecting this case.
if [istarget "a29k-*-*"] then {
if $verbose>1 then {
warning "FIXME: crossload test case doesn't run on the a29k."
}
continue
}
# Test if gdb can automatically determine the bfd format of an
# executable and read it's symbols.
proc bfddefault {} {
global GDB
global GDBFLAGS
global prompt
global objdir
global subdir
global binfile
global bfdformat
global file_loaded
gdb_unload
set file_loaded 0
send "file $objdir/$subdir/$binfile\n"
expect {
-re "A program is being debugged already. Kill it.*y or n." {
send "y\n"
exp_continue
}
-re "Reading symbols from $objdir/$subdir/$binfile\[.\]+done\..*$prompt $" {
pass "$binfile ($bfdformat) auto format"
}
-re "Reading symbols from $objdir/$subdir/$binfile\[.\]+.no debugging symbols found.\[.\]+done\..*$prompt $" {
pass "$binfile ($bfdformat) auto format (but no symbols found)"
}
-re "File format not recognized.*$prompt $" {
fail "$binfile ($bfdformat) auto format (format not recognized)"
return
}
-re "File format is ambiguous.*$prompt $" {
fail "$binfile ($bfdformat) auto format (format is ambiguous)"
return
}
-re "$prompt $" {
fail "$binfile ($bfdformat) auto format"
return
}
timeout {
fail "(timeout) $binfile ($bfdformat) auto format"
return
}
}
if [gdb_test "info target" ".*file type $bfdformat" ""]==0 then {
set file_loaded 1
} else {
fail "$binfile ($bfdformat) wrong format found"
}
}
# Test if gdb can read symbols from an executable when the bfd format
# is explicitly set via the environment variable GNUTARGET.
proc bfdexplicit {} {
global GDB
global GDBFLAGS
global prompt
global subdir
global objdir
global det_file
global binfile
global bfdformat
global file_loaded
gdb_unload
set file_loaded 0
# Once GDB 4.10 (the last to lack `set gnutarget') is forgotten,
# change this to use set gnutarget.
if [gdb_test "set env GNUTARGET=$bfdformat" "" ""]!=0 then {
fail "setting GNUTARGET=$bfdformat in environment"
return
}
send "file $objdir/$subdir/$binfile\n"
expect {
-re "A program is being debugged already. Kill it.*y or n." {
send "y\n"
exp_continue
}
-re "Reading symbols from $objdir/$subdir/$binfile\[.\]+done\..*$prompt $" {
pass "$binfile ($bfdformat) explicit format"
}
-re "Invalid target.*$prompt $" {
fail "$binfile ($bfdformat) explicit format (invalid target)"
return
}
-re "$prompt $" {
fail "$binfile ($bfdformat) explicit format"
return
}
timeout {
fail "(timeout) $binfile ($bfdformat) explicit format"
return
}
}
set file_loaded 1
}
proc test_ptype_functions {} {
global prompt
global binfile
global bfdformat
global det_file
send "ptype main\n"
expect {
-re "type = int \[)(\]+\r\n$prompt $" {}
timeout { fail "$binfile ($bfdformat) function main" ; return }
}
# set up a list of lists of command and patterns
set command [list { "ptype v_char_func" "type =(\ unsigned\ |\ signed\ |\ )char \[)(\]+" }\
{ "ptype v_short_func" "type = (short|short int) \[)(\]+" } \
{ "ptype v_int_func" "type = int \[)(\]+" } \
{ "ptype v_long_func" "type = (long|long int|int) \[)(\]+" } \
{ "ptype v_float_func" "type = float \[)(\]+" } \
{ "ptype v_double_func" "type = double \[)(\]+" } ]
foreach i $command {
if [gdb_test [lindex $i 0] [lindex $i 1] ""] then {
fail "$binfile ($bfdformat) \"[lindex $i 0]\" function types"
return
}
}
pass "$binfile ($bfdformat) ptype function types"
}
# Note that plain chars can be either signed or unsigned.
proc test_ptype_plain_types {} {
global prompt
global binfile
global bfdformat
# set up a list of lists of command and patterns
set command [list { "ptype v_char" "type =(\ unsigned\ |\ signed\ |\ )char" }\
{ "ptype v_short" "type = short" } \
{ "ptype v_int" "type = int" } \
{ "ptype v_long" "type = long" } \
{ "ptype v_float" "type = float" } \
{ "ptype v_double" "type = double" } ]
foreach i $command {
if [gdb_test [lindex $i 0] [lindex $i 1] ""] then {
fail "$binfile ($bfdformat) \"[lindex $i 0]\" plain C types"
return
}
}
pass "$binfile ($bfdformat) ptype plain C types"
}
# Note that if compiled with pre-ANSI compilers, the "signed" keywords are
# defined away and the variables default to plain types. So accept either.
proc test_ptype_signed_types {} {
global prompt
global binfile
global bfdformat
global det_file
# set up a list of lists of command and patterns
set command [list { "ptype v_signed_char" "type =(\ signed\ |\ )char" }\
{ "ptype v_signed_short" "type =(\ signed\ |\ )short" } \
{ "ptype v_signed_int" "type =(\ signed\ |\ )int" } \
{ "ptype v_signed_long" "type =(\ signed\ |\ )long" } ]
foreach i $command {
if [gdb_test [lindex $i 0] [lindex $i 1] ""] then {
if [expr [string match "ecoff-bigmips" $bfdformat]+[string match "ptype v_signed_char" [lindex $i 0]]]==2 then {
setup_xfail "*-*-*"
}
fail "$binfile ($bfdformat) \"[lindex $i 0]\" signed C types"
return
}
}
pass "$binfile ($bfdformat) ptype signed C types"
}
proc test_ptype_unsigned_types {} {
global prompt
global binfile
global bfdformat
global det_file
# set up a list of lists of command and patterns
set command [list { "ptype v_unsigned_char" "type = unsigned char" }\
{ "ptype v_unsigned_short" \
"type = (unsigned short|short unsigned int)" } \
{ "ptype v_unsigned_int" "type = unsigned int" } \
{ "ptype v_unsigned_long" \
"type = (unsigned long|long unsigned int)" } ]
foreach i $command {
if [gdb_test [lindex $i 0] [lindex $i 1] ""] then {
fail "$binfile ($bfdformat) \"[lindex $i 0]\" unsigned C types"
return
}
}
pass "$binfile ($bfdformat) ptype unsigned C types"
}
# Note that plain chars can be either signed or unsigned.
proc test_ptype_array_types {} {
global prompt
global binfile
global bfdformat
global det_file
# set up a list of lists of command and patterns
set command [list { "ptype v_char_array" "type =(\ unsigned\ |\ signed\ |\ )char \\\[2\\\]" }\
{ "ptype v_short_array" \
"type = (short|short int) \\\[2\\\]" } \
{ "ptype v_int_array" "type = int \\\[2\\\]" } \
{ "ptype v_long_array" "type = (long|long int) \\\[2\\\]" } \
{ "ptype v_float_array" "type = float \\\[2\\\]" } \
{ "ptype v_double_array" "type = double \\\[2\\\]" } ]
foreach i $command {
if [gdb_test [lindex $i 0] [lindex $i 1] ""] then {
fail "$binfile ($bfdformat) \"[lindex $i 0]\" C array types"
return
}
}
pass "$binfile ($bfdformat) ptype C array types"
}
proc test_ptype_pointer_types {} {
global prompt
global binfile
global bfdformat
global det_file
# set up a list of lists of command and patterns
set command [list { "ptype v_char_pointer" "type =(\ unsigned\ |\ signed\ |\ )char \*" }\
{ "ptype v_short_pointer" "type = (short|short int) \*" } \
{ "ptype v_int_pointer" "type = int \*" } \
{ "ptype v_long_pointer" "type = (long|long int) \*" } \
{ "ptype v_float_pointer" "type = float \*" } \
{ "ptype v_double_pointer" "type = double \*" } ]
foreach i $command {
if [gdb_test [lindex $i 0] [lindex $i 1] ""] then {
fail "$binfile ($bfdformat) \"[lindex $i 0]\" C pointer types"
return
}
}
pass "$binfile ($bfdformat) ptype C pointer types"
}
proc loadandtest { args } {
global verbose
global GDB
global GDBFLAGS
global prompt
global subdir
global objdir
global binfile
global bfdformat
global file_loaded
set binfile [ lindex $args 0 ]
set bfdformat [ lindex $args 1 ]
set fixme [ lindex $args 2 ]
if ![file exists $objdir/$subdir/$binfile] then {
perror "$objdir/$subdir/$binfile does not exist"
return 0
}
gdb_exit
gdb_start
if $fixme then { setup_xfail "*-*-*" }
bfddefault
if $fixme then { setup_xfail "*-*-*" }
if [string match $bfdformat "elf-big"] then {
if [string match $binfile "i860-elf"] then {
setup_xfail "*-*-*"
}
}
bfdexplicit
if $file_loaded==1 then {
test_ptype_functions
if $fixme then { setup_xfail "*-*-*" }
test_ptype_plain_types
if $fixme then { setup_xfail "*-*-*" }
test_ptype_signed_types
if $fixme then { setup_xfail "*-*-*" }
test_ptype_unsigned_types
if $fixme then { setup_xfail "*-*-*" }
test_ptype_array_types
if $fixme then { setup_xfail "*-*-*" }
test_ptype_pointer_types
}
}
# Run tests for each of the test executables.
# If the third argument is 1, the tests will be expected to fail.
# We should extract the information about available tests and bfd formats
# from the makefile or some other control file (FIXME).
loadandtest m68k-elf "elf32-m68k" 0
# I'm getting an XPASS for explicit format on this one
loadandtest m68k-aout "a.out-newsos3" 1
loadandtest m68k-aout2 "a.out-sunos-big" 0
loadandtest mips-ecoff "ecoff-bigmips" 0
loadandtest i486-elf "elf32-i386" 0
loadandtest sparc-aout "a.out-sunos-big" 0
loadandtest sparc-elf "elf32-sparc" 0
#FIXME: i860 support is unlikely to be working in the near future
# so suppress this test until it is working. -fnf
#loadandtest i860-elf "elf32-i860" 0
gdb_test "set gnutarget auto" ""

View File

@ -0,0 +1,58 @@
# Copyright (C) 1988, 1990, 1991, 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Rob Savoye. (rob@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
#
# test the echo command
#
# this sets the prms id number. This is the number that will appear
# on all the output logs.
# ex: set prms_id 643
set prms_id 0
# this sets the bug id id. This is the number that will appear
# on all the output logs. This is optional and if it is not set
# it will appear on all output logs as a 0.
# ex: set bug_id 12
set bug_id 0
# this sends a string to the stdin of the tool being tested. The string
# should be between the quotes.
send "echo Hello world!\n"
# any shell style globbing can be used between the ""
# regular expressions can be used instead by preceding the
# first quote with the option -re
# ex: "file deleted" { fail "removed source file" }
# the string between the quotes after a fail or pass is what
# gets printed if the pattern matches. There can be multiple
# send/expect sequences in one test.
expect {
-re "Hello world.*$prompt $" { pass "Echo test" }
-re "$prompt $" { fail "Echo test" }
timeout { fail "(timeout) Echo test" }
}
# this dumps the output to the detailed log for this tool

View File

@ -0,0 +1,249 @@
main (argc, argv, envp)
int argc;
char **argv;
char **envp;
{
extern void dummy();
dummy();
}
/* We put main() right up front so its line number doesn't keep changing. */
/*
* Test file with lots of different types, for testing the
* "whatis" command.
*/
/*
* First the basic C types.
*/
#if !defined (__STDC__) && !defined (_AIX)
#define signed /**/
#endif
char v_char;
signed char v_signed_char;
unsigned char v_unsigned_char;
short v_short;
signed short v_signed_short;
unsigned short v_unsigned_short;
int v_int;
signed int v_signed_int;
unsigned int v_unsigned_int;
long v_long;
signed long v_signed_long;
unsigned long v_unsigned_long;
float v_float;
double v_double;
/*
* Now some derived types, which are arrays, functions-returning,
* pointers, structures, unions, and enumerations.
*/
/**** arrays *******/
char v_char_array[2];
signed char v_signed_char_array[2];
unsigned char v_unsigned_char_array[2];
short v_short_array[2];
signed short v_signed_short_array[2];
unsigned short v_unsigned_short_array[2];
int v_int_array[2];
signed int v_signed_int_array[2];
unsigned int v_unsigned_int_array[2];
long v_long_array[2];
signed long v_signed_long_array[2];
unsigned long v_unsigned_long_array[2];
float v_float_array[2];
double v_double_array[2];
/**** pointers *******/
char *v_char_pointer;
signed char *v_signed_char_pointer;
unsigned char *v_unsigned_char_pointer;
short *v_short_pointer;
signed short *v_signed_short_pointer;
unsigned short *v_unsigned_short_pointer;
int *v_int_pointer;
signed int *v_signed_int_pointer;
unsigned int *v_unsigned_int_pointer;
long *v_long_pointer;
signed long *v_signed_long_pointer;
unsigned long *v_unsigned_long_pointer;
float *v_float_pointer;
double *v_double_pointer;
/**** structs *******/
struct t_struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct1;
struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct2;
/**** unions *******/
union t_union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union;
union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union2;
/*** Functions returning type ********/
char v_char_func () { return(0); }
signed char v_signed_char_func () { return (0); }
unsigned char v_unsigned_char_func () { return (0); }
short v_short_func () { return (0); }
signed short v_signed_short_func () { return (0); }
unsigned short v_unsigned_short_func () { return (0); }
int v_int_func () { return (0); }
signed int v_signed_int_func () { return (0); }
unsigned int v_unsigned_int_func () { return (0); }
long v_long_func () { return (0); }
signed long v_signed_long_func () { return (0); }
unsigned long v_unsigned_long_func () { return (0); }
float v_float_func () { return (0.0); }
double v_double_func () { return (0.0); }
/**** Some misc more complicated things *******/
struct link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} *s_link;
union tu_link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} u_link;
/**** Enumerations *******/
enum colors {red, green, blue} color;
enum cars {chevy, ford, porsche} clunker;
void dummy()
{
/* Some linkers (e.g. on AIX) remove unreferenced variables,
so make sure to reference them. */
v_char = 0;
v_signed_char = 1;
v_unsigned_char = 2;
v_short = 3;
v_signed_short = 4;
v_unsigned_short = 5;
v_int = 6;
v_signed_int = 7;
v_unsigned_int = 8;
v_long = 9;
v_signed_long = 10;
v_unsigned_long = 11;
v_float = 100.0;
v_double = 200.0;
v_char_array[0] = v_char;
v_signed_char_array[0] = v_signed_char;
v_unsigned_char_array[0] = v_unsigned_char;
v_short_array[0] = v_short;
v_signed_short_array[0] = v_signed_short;
v_unsigned_short_array[0] = v_unsigned_short;
v_int_array[0] = v_int;
v_signed_int_array[0] = v_signed_int;
v_unsigned_int_array[0] = v_unsigned_int;
v_long_array[0] = v_long;
v_signed_long_array[0] = v_signed_long;
v_unsigned_long_array[0] = v_unsigned_long;
v_float_array[0] = v_float;
v_double_array[0] = v_double;
v_char_pointer = &v_char;
v_signed_char_pointer = &v_signed_char;
v_unsigned_char_pointer = &v_unsigned_char;
v_short_pointer = &v_short;
v_signed_short_pointer = &v_signed_short;
v_unsigned_short_pointer = &v_unsigned_short;
v_int_pointer = &v_int;
v_signed_int_pointer = &v_signed_int;
v_unsigned_int_pointer = &v_unsigned_int;
v_long_pointer = &v_long;
v_signed_long_pointer = &v_signed_long;
v_unsigned_long_pointer = &v_unsigned_long;
v_float_pointer = &v_float;
v_double_pointer = &v_double;
color = red;
clunker = porsche;
u_link.next = s_link;
v_struct2.v_int_member = v_struct1.v_int_member;
v_union2.v_short_member = v_union.v_short_member;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,545 @@
/* Test passing of arguments to functions. Use various sorts of arguments,
including basic types, pointers to those types, structures, lots of
args, etc, in various combinations. */
/* AIX requires this to be the first thing in the file. */
#ifdef __GNUC__
# define alloca __builtin_alloca
# define HAVE_STACK_ALLOCA 1
#else /* not __GNUC__ */
# ifdef _AIX
#pragma alloca
# define HAVE_STACK_ALLOCA 1
# else /* Not AIX */
# ifdef sparc
# include <alloca.h>
# define HAVE_STACK_ALLOCA 1
char *alloca ();
# endif /* sparc */
# endif /* Not AIX */
#endif /* not __GNUC__ */
char c = 'a';
char *cp = &c;
unsigned char uc = 'b';
unsigned char *ucp = &uc;
short s = 1;
short *sp = &s;
unsigned short us = 6;
unsigned short *usp = &us;
int i = 2;
int *ip = &i;
unsigned int ui = 7;
unsigned int *uip = &ui;
long l = 3;
long *lp = &l;
unsigned long ul = 8;
unsigned long *ulp = &ul;
float f = 4.0;
float *fp = &f;
double d = 5.0;
double *dp = &d;
struct stag {
int s1;
int s2;
} st = { 101, 102 };
struct stag *stp = &st;
union utag {
int u1;
long u2;
} un;
union utag *unp = &un;
char carray[] = {'a', 'n', ' ', 'a', 'r', 'r', 'a', 'y', '\0'};
/* Test various permutations and interleaving of integral arguments */
call0a (c, s, i, l)
char c; short s; int i; long l;
{
c = 'a';
s = 5;
i = 6;
l = 7;
}
call0b (s, i, l, c)
short s; int i; long l; char c;
{
s = 6; i = 7; l = 8; c = 'j';
}
call0c (i, l, c, s)
int i; long l; char c; short s;
{
i = 3; l = 4; c = 'k'; s = 5;
}
call0d (l, c, s, i)
long l; char c; short s; int i;
{
l = 7; c = 'z'; s = 8; i = 9;
}
call0e (c1, l, c2, i, c3, s, c4, c5)
char c1; long l; char c2; int i; char c3; short s; char c4; char c5;
{
c1 = 'a'; l = 5; c2 = 'b'; i = 7; c3 = 'c'; s = 7; c4 = 'f'; c5 = 'g';
}
/* Test various permutations and interleaving of unsigned integral arguments */
call1a (uc, us, ui, ul)
unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
{
uc = 5; us = 6; ui = 7; ul = 8;
}
call1b (us, ui, ul, uc)
unsigned short us; unsigned int ui; unsigned long ul; unsigned char uc;
{
uc = 5; us = 6; ui = 7; ul = 8;
}
call1c (ui, ul, uc, us)
unsigned int ui; unsigned long ul; unsigned char uc; unsigned short us;
{
uc = 5; us = 6; ui = 7; ul = 8;
}
call1d (ul, uc, us, ui)
unsigned long ul; unsigned char uc; unsigned short us; unsigned int ui;
{
uc = 5; us = 6; ui = 7; ul = 8;
}
call1e (uc1, ul, uc2, ui, uc3, us, uc4, uc5)
unsigned char uc1; unsigned long ul; unsigned char uc2; unsigned int ui;
unsigned char uc3; unsigned short us; unsigned char uc4; unsigned char uc5;
{
uc1 = 5; ul = 7; uc2 = 8; ui = 9; uc3 = 10; us = 11; uc4 = 12; uc5 = 55;
}
/* Test various permutations and interleaving of integral arguments with
floating point arguments. */
call2a (c, f1, s, d1, i, f2, l, d2)
char c; float f1; short s; double d1; int i; float f2; long l; double d2;
{
c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
}
call2b (f1, s, d1, i, f2, l, d2, c)
float f1; short s; double d1; int i; float f2; long l; double d2; char c;
{
c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
}
call2c (s, d1, i, f2, l, d2, c, f1)
short s; double d1; int i; float f2; long l; double d2; char c; float f1;
{
c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
}
call2d (d1, i, f2, l, d2, c, f1, s)
double d1; int i; float f2; long l; double d2; char c; float f1; short s;
{
c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
}
call2e (i, f2, l, d2, c, f1, s, d1)
int i; float f2; long l; double d2; char c; float f1; short s; double d1;
{
c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
}
call2f (f2, l, d2, c, f1, s, d1, i)
float f2; long l; double d2; char c; float f1; short s; double d1; int i;
{
c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
}
call2g (l, d2, c, f1, s, d1, i, f2)
long l; double d2; char c; float f1; short s; double d1; int i; float f2;
{
c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
}
call2h (d2, c, f1, s, d1, i, f2, l)
double d2; char c; float f1; short s; double d1; int i; float f2; long l;
{
c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
}
call2i (c1, f1, c2, c3, d1, c4, c5, c6, f2, s, c7, d2)
char c1; float f1; char c2; char c3; double d1; char c4; char c5; char c6;
float f2; short s; char c7; double d2;
{
c1 = 'a'; f1 = 0.0; c2 = 5; d1 = 0.0; c3 = 6; f2 = 0.1; c4 = 7; d2 = 0.2;
c5 = 's'; c6 = 'f'; c7 = 'z'; s = 77;
}
/* Test pointers to various integral and floating types. */
call3a (cp, sp, ip, lp)
char *cp; short *sp; int *ip; long *lp;
{
cp = 0; sp = 0; ip = 0; lp = 0;
}
call3b (ucp, usp, uip, ulp)
unsigned char *ucp; unsigned short *usp; unsigned int *uip;
unsigned long *ulp;
{
ucp = 0; usp = 0; uip = 0; ulp = 0;
}
call3c (fp, dp)
float *fp; double *dp;
{
fp = 0; dp = 0;
}
/* Test passing structures and unions by reference. */
call4a (stp)
struct stag *stp; {
stp = 0;}
call4b (unp)
union utag *unp;
{
unp = 0;
}
/* Test passing structures and unions by value. */
call5a (st)
struct stag st; {st.s1 = 5;}
call5b (un)
union utag un; {un.u1 = 7;}
/* Test shuffling of args */
call6a (c, s, i, l, f, d, uc, us, ui, ul)
char c; short s; int i; long l; float f; double d;
unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
{
c = c;
call6b (s, i, l, f, d, uc, us, ui, ul);
}
call6b (s, i, l, f, d, uc, us, ui, ul)
short s; int i; long l; float f; double d;
unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
{
s = s;
call6c (i, l, f, d, uc, us, ui, ul);
}
call6c (i, l, f, d, uc, us, ui, ul)
int i; long l; float f; double d;
unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
{
i = i;
call6d (l, f, d, uc, us, ui, ul);
}
call6d (l, f, d, uc, us, ui, ul)
long l; float f; double d;
unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
{
l = l;
call6e (f, d, uc, us, ui, ul);
}
call6e (f, d, uc, us, ui, ul)
float f; double d;
unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
{
f = f;
call6f (d, uc, us, ui, ul);
}
call6f (d, uc, us, ui, ul)
double d;
unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
{
d = d;
call6g (uc, us, ui, ul);
}
call6g (uc, us, ui, ul)
unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
{
uc = uc;
call6h (us, ui, ul);
}
call6h (us, ui, ul)
unsigned short us; unsigned int ui; unsigned long ul;
{
us = us;
call6i (ui, ul);
}
call6i (ui, ul)
unsigned int ui; unsigned long ul;
{
ui = ui;
call6j (ul);
}
call6j (ul)
unsigned long ul;
{
ul = ul;
call6k ();
}
call6k ()
{
}
/* Test shuffling of args, round robin */
call7a (c, i, s, l, f, uc, d, us, ul, ui)
char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui;
{
call7b (i, s, l, f, uc, d, us, ul, ui, c);
}
call7b (i, s, l, f, uc, d, us, ul, ui, c)
int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c;
{
call7c (s, l, f, uc, d, us, ul, ui, c, i);
}
call7c (s, l, f, uc, d, us, ul, ui, c, i)
short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i;
{
call7d (l, f, uc, d, us, ul, ui, c, i, s);
}
call7d (l, f, uc, d, us, ul, ui, c, i, s)
long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s;
{
call7e (f, uc, d, us, ul, ui, c, i, s, l);
}
call7e (f, uc, d, us, ul, ui, c, i, s, l)
float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l;
{
call7f (uc, d, us, ul, ui, c, i, s, l, f);
}
call7f (uc, d, us, ul, ui, c, i, s, l, f)
unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f;
{
call7g (d, us, ul, ui, c, i, s, l, f, uc);
}
call7g (d, us, ul, ui, c, i, s, l, f, uc)
double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc;
{
call7h (us, ul, ui, c, i, s, l, f, uc, d);
}
call7h (us, ul, ui, c, i, s, l, f, uc, d)
unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc; double d;
{
call7i (ul, ui, c, i, s, l, f, uc, d, us);
}
call7i (ul, ui, c, i, s, l, f, uc, d, us)
unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us;
{
call7j (ui, c, i, s, l, f, uc, d, us, ul);
}
call7j (ui, c, i, s, l, f, uc, d, us, ul)
unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul;
{
call7k (c, i, s, l, f, uc, d, us, ul, ui);
}
call7k (c, i, s, l, f, uc, d, us, ul, ui)
char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui;
{
c = 'a'; i = 7; s = 8; l = 7; f = 0.3; uc = 44; d = 0.44; us = 77;
ul = 43; ui = 33;
}
/* Test printing of structures passed as arguments to recursive functions. */
typedef struct s
{
short s;
int i;
long l;
} SVAL;
hitbottom ()
{
}
void recurse (a, depth)
SVAL a;
int depth;
{
a.s = a.i = a.l = --depth;
if (depth == 0)
hitbottom ();
else
recurse (a, depth);
}
test_struct_args ()
{
SVAL s; s.s = 5; s.i = 5; s.l = 5;
recurse (s, 5);
}
/* On various machines (pa, 29k, and rs/6000, at least), a function which
calls alloca may do things differently with respect to frames. So give
it a try. */
int
localvars_after_alloca (c, s, i, l)
char c;
short s;
int i;
long l;
{
#ifdef HAVE_STACK_ALLOCA
/* No need to use the alloca.c alloca-on-top-of-malloc; it doesn't
test what we are looking for, so if we don't have an alloca which
allocates on the stack, just don't bother to call alloca at all. */
char *z = alloca (s + 50);
#endif
c = 'a';
s = 5;
i = 6;
l = 7;
}
/* The point behind this test is the PA will call this indirectly
through dyncall. Unlike the indirect calls to call0a, this test
will require a trampoline between dyncall and this function on the
call path, then another trampoline on between this function and main
on the return path. */
double
call_with_trampolines (d1)
double d1;
{
return d1;
} /* End of call_with_trampolines, this comment is needed by funcargs.exp */
/* Dummy functions which the testsuite can use to run to, etc. */
void
marker_indirect_call () {}
void
marker_call_with_trampolines () {}
main ()
{
int (*pointer_to_call0a) () = call0a;
double (*pointer_to_call_with_trampolines) () = call_with_trampolines;
/* Test calling with basic integer types */
call0a (c, s, i, l);
call0b (s, i, l, c);
call0c (i, l, c, s);
call0d (l, c, s, i);
call0e (c, l, c, i, c, s, c, c);
/* Test calling with unsigned integer types */
call1a (uc, us, ui, ul);
call1b (us, ui, ul, uc);
call1c (ui, ul, uc, us);
call1d (ul, uc, us, ui);
call1e (uc, ul, uc, ui, uc, us, uc, uc);
/* Test calling with integral types mixed with floating point types */
call2a (c, f, s, d, i, f, l, d);
call2b (f, s, d, i, f, l, d, c);
call2c (s, d, i, f, l, d, c, f);
call2d (d, i, f, l, d, c, f, s);
call2e (i, f, l, d, c, f, s, d);
call2f (f, l, d, c, f, s, d, i);
call2g (l, d, c, f, s, d, i, f);
call2h (d, c, f, s, d, i, f, l);
call2i (c, f, c, c, d, c, c, c, f, s, c, d);;
/* Test dereferencing pointers to various integral and floating types */
call3a (cp, sp, ip, lp);
call3b (ucp, usp, uip, ulp);
call3c (fp, dp);
/* Test dereferencing pointers to structs and unions */
call4a (stp);
un.u1 = 1;
call4b (unp);
/* Test calling with structures and unions. */
call5a (st);
un.u1 = 2;
call5b (un);
/* Test shuffling of args */
call6a (c, s, i, l, f, d, uc, us, ui, ul);
call7a (c, i, s, l, f, uc, d, us, ul, ui);
/* Test passing structures recursively. */
test_struct_args ();
localvars_after_alloca (c, s, i, l);
/* This is for localvars_in_indirect_call. */
marker_indirect_call ();
/* The comment on the following two lines is used by funcargs.exp,
don't change it. */
(*pointer_to_call0a) (c, s, i, l); /* First step into call0a. */
(*pointer_to_call0a) (c, s, i, l); /* Second step into call0a. */
marker_call_with_trampolines ();
(*pointer_to_call_with_trampolines) (d); /* Test multiple trampolines. */
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
# Force static linking for nodebug
LDFLAGS= -Wl,-a,archive

View File

@ -0,0 +1,287 @@
begin 777 i486-elf
M?T5,1@$! 0 ( P ! W(($"#0 !\+@ #0 ( %
M "@ %0 1 8 T -( $" "@ H 4 P -0
M !, ! ! - #2 ! @ * 8
M "@& % ! $ !<!@ 7)8$" "4 2 ( < $
M @ ( & " E@0( ' !P O=7-R+VQI8B]L:6)C
M+G-O+C$ , , !@ L * ! (
M $ 4 # " D '
M $ "<@@0(' !( * I)@$" 1 /'_#P &"6! @$
M$0 + !@ !<A@0( !$ \?\? K(($"$ 2 )@ /"6! @
M $0#Q_RT #,@@0( !( R /(8$" 0 1 H /P +R"
M! @ $@ $D !DE@0( !$ \?]? @)8$" 1 /'_ %]C
M;&5A;G5P %]E;F0 7V5N=FER;VX 7V5T97AT &%T97AI= !?961A=&$ 97AI
M= !?;&EB7W9E<G-I;VX 7U]F<'-T87)T %]'3$]"04Q?3T9&4T547U1!0DQ%
M7P!?1%E.04U)0P O=7-R+VQI8B]L:6)C+G-O+C$ '"6! @' 0 =)8$" <%
M !XE@0(!PD 'R6! @'!P PP /\U:)8$"/\E;)8$" #_)7"6! AH
M .G@_____R5TE@0(: @ #IT/____\E>)8$"&@0 Z<#_____)7R6
M! AH& .FP____:@!J (OL4KB<@@0(A<!T#6B<@@0(Z+;___^#Q 2X@)8$
M"(7 = 7HI?___V@XA@0(Z)O___^+10B-5(40B15@E@0(4HU5#%)0Z%_____H
MCO___^@! 0 @\0,4.B0____:@"X 0 )H !P#TP^L&,\#K ,G#58OL
MZ_60D)#K!C/ ZP#)PU6+[.OUD)"0ZP8SP.L R<-5B^SK]9"0D.L&,\#K ,G#
M58OLZ_60D)#K!C/ ZP#)PU6+[.OUD)"0ZP8SP.L R<-5B^SK]9"0D.L&,\#K
M ,G#58OLZ_60D)#K!C/ ZP#)PU6+[.OUD)"0ZP8SP.L R<-5B^SK]9"0D.L&
M,\#K ,G#58OLZ_60D)#K!C/ ZP#)PU6+[.OUD)"0ZP8SP.L R<-5B^SK]9"0
MD.L*W05 A@0(ZP#)PU6+[.OQD)"0ZPK=!4B&! CK ,G#58OLZ_&0D)#I\P$
M )#&!?B7! @ Q@5TEP0( <8%.I<$" )FQP5LEP0( P!FQP5<EP0(! !FQP4$
MEP0(!0#'!1"7! @& QP7PE@0(!P ,<%])8$" @ #'!6B7! @)
MQP7\E@0("@ ,<%>)<$" L "A4(8$"*,\EP0(H5B&! BC#)<$"*%4A@0(
MHPB7! B@^)<$"*+4EP0(H'27! BB.)<$"* ZEP0(HOB6! AFH6R7! AFHWR7
M! AFH5R7! AFHTB7! AFH027! AFHX"7! BA$)<$"*,<EP0(H?"6! BCC)<$
M"*'TE@0(HU"7! BA:)<$"*/PEP0(H?R6! BC0)<$"*%XEP0(HV"7! BA/)<$
M"*/@EP0(H0R7! BC+)<$"*$(EP0(HRB7! C'!827! CXEP0(QP7LEP0(=)<$
M",<%B)<$"#J7! C'!>B7! ALEP0(QP6<EP0(7)<$",<% )<$" 27! C'!4R7
M! @0EP0(QP64EP0(\)8$",<%6)<$"/26! C'!7"7! AHEP0(QP7<EP0(_)8$
M",<%&)<$"'B7! C'!=B7! @\EP0(QP6@EP0(")<$",<%))<$" ( #'!127
M! @" QP60F 0( 0 ,<%_)<$" $ "AF)<$"*, F 0(9J&<F 0(9J.4
MF 0(R<-5B^SI!O[__Y ## ,A"
M :4 ("6! @ **"! BR@@0(PH($"-*"! @!
M : P "(@@0(#0 #B&! @$ Z( $" 4 #L@00(!@ "R!
M! @* >P L 0 %0 # 9)8$" ( @ %
M !$ 7 :(($" $
M 0 \?\ U( $" # $ .B ! @ P " L
M@00( , P [($$" # 0 &B"! @ P %
M "(@@0( , !@ C(($" # < -R"! @ P (
M XA@0( , "0 /(8$" # H %R6! @
M P + !DE@0( , # @)8$" # T /"6! @
M P . , #P # !
M P 1 , $@ # !,
M P 4 H 0 \?\1 $ /'_
M& ! #Q_R0 0 \?\L $
M /'_-@ ! #Q_ST !,@P0(#0 !( " !) \)8$" 0
M 1 X 5@ /26! @$ $0 . &4 XA@0( !( "0!K ^)8$
M" ( 1 X @0 #2$! @! @ $@ ( (8 #\E@0(! !$ #@"4
M )<$" 0 1 X K0 )R"! @< $@ +8 "DF 0( !$ \?^[
M !)<$" ( 1 X S )R#! @- $@ ( .( (EP0(" !$
M#@#K $)<$" 0 1 X \0 -R"! @ $@ ( /@ 4EP0(!
M !$ #@ # 0 8)8$" 0 1 L # $ !B7! @$ $0 . "0! <EP0(
M" !$ #@ P 0 ))<$" 0 1 X . $ %R#! @- $@ ( $L! H
MEP0($ !$ #@!: 0 7(8$" 1 /'_80$ #B7! @" $0 . '4!
M ZEP0( 0 !$ #@"% 0 /)<$" 0 1 X C0$ $"7! @( $0 .
M *$! "L@@0(0 !( "H 0 8)8$" 0 A L L $ -R#! @-
M$@ ( +P! #\@P0(#0 !( " #1 0 2)<$" 0 1 X Y@$ $R7! @$
M $0 . /0! #PE@0( !$ \?_[ 0 ?(,$" T 2 @ " ( %"7
M! @( $0 . !T" !8EP0(! !$ #@ T @ K(,$" T 2 @ /P(
M %R7! @" $0 . $X" ,A 0($0 !( " !; @ S(($" 2
M8 ( &"7! @( $0 . '8" !HEP0(! !$ #@!] @ ;)<$" ( 1
M X A0( '"7! @$ $0 . )0" !TEP0( 0 !$ #@"B @ >)<$" 0
M 1 X L@( 'R7! @$ $0 . , " " EP0(! !$ #@#7 @ /(8$
M" 0 1 H Y ( $N#! @ $@ ( .P" "$EP0(! !$ #@#[ @
MB)<$" 0 1 X $P, (R7! @( $0 . "8# "\@@0( !( P
M P E)<$" 0 1 X 10, )B7! @$ $0 . $P# !DE@0( !$
M\?]B P G)<$" 0 1 X >0, *"7! @$ $0 . (H# !<E@0(!
M !$ "P"< P I)<$"!@ 1 X I@, +R7! @8 $0 . + # #4EP0(
M @ !$ #@"] P V)<$" 0 1 X S0, -R7! @$ $0 . .,# @
MA 0($0 !( " #Q P O(,$" T 2 @ P0 ("6! @ $0#Q_PP$
M #@EP0(" !$ #@ :! Z)<$" 0 1 X *@0 .R#! @- $@ (
M #T$ #LEP0(! !$ #@!3! \)<$" @ 1 X 8 0 (B"! @
M$@ & &8$ #XEP0( 0 !$ #@!M! _)<$" 0 1 X =00 &R#! @-
M $@ ( (H$ F 0(D !$ #@"1! C(,$" T 2 @ I00 )"8
M! @$ $0 . *\$ "4F 0(" !$ #@"X! S(,$" T 2 @ S 0
M )R8! @( $0 . !I-#@V+F5L9@!C<G0Q+G, 8W)T:2YS '9A;'5E<RU8
M="YC &=D8FUE+F, <VA?9&%T82YC &-R=&XN<P!V7V-H87)?9G5N8P!V7W-I
M9VYE9%]I;G0 =E]U;G-I9VYE9%]I;G0 7V9I;FD =E]U;G-I9VYE9%]C:&%R
M7V%R<F%Y &UA:6X =E]S:6=N961?;&]N9P!V7W5N<VEG;F5D7W-H;W)T7W!O
M:6YT97( 7V-L96%N=7 7V5N9 !V7W5N<VEG;F5D7W-H;W)T '9?=6YS:6=N
M961?<VAO<G1?9G5N8P!V7V1O=6)L90!V7VEN= !?<W1A<G0 ;F]N<')I;6%R
M>0!?96YV:7)O;@!V7W5N<VEG;F5D7VQO;F=?<&]I;G1E<@!V7VEN=%]A<G)A
M>0!P<FEM87)Y '9?<VEG;F5D7V-H87)?9G5N8P!V7V1O=6)L95]A<G)A>0!?
M971E>'0 =E]S:6=N961?8VAA<E]A<G)A>0!V7W5N<VEG;F5D7V-H87( =E]F
M;&]A= !V7W-I9VYE9%]L;VYG7V%R<F%Y &%T97AI= !E;G9I<F]N '9?;&]N
M9U]F=6YC '9?=6YS:6=N961?;&]N9U]F=6YC '9?<VEG;F5D7W-H;W)T7V%R
M<F%Y '9?:6YT7W!O:6YT97( 7V5D871A '9?<VAO<G1?9G5N8P!V7W5N<VEG
M;F5D7VEN=%]A<G)A>0!V7W5N<VEG;F5D7VEN=%]P;VEN=&5R '9?:6YT7V9U
M;F, =E]S:6=N961?<VAO<G0 =E]F;&]A=%]F=6YC &5X:70 =E]U;G-I9VYE
M9%]L;VYG7V%R<F%Y '9?;&]N9P!V7W-H;W)T '9?;&]N9U]P;VEN=&5R '9?
M<VEG;F5D7V-H87( =E]U;G-I9VYE9%]L;VYG '9?<VAO<G1?87)R87D =E]U
M;G-I9VYE9%]S:&]R=%]A<G)A>0!?;&EB7W9E<G-I;VX 7VUC;W5N= !V7V-H
M87)?<&]I;G1E<@!V7W5N<VEG;F5D7V-H87)?<&]I;G1E<@!V7W-I9VYE9%]I
M;G1?87)R87D 7U]F<'-T87)T '9?<VEG;F5D7VEN=%]P;VEN=&5R '-?;&EN
M:P!?1TQ/0D%,7T]&1E-%5%]404),15\ =E]S:6=N961?<VAO<G1?<&]I;G1E
M<@!V7V1O=6)L95]P;VEN=&5R %]?;&]N9V1O=6)L95]U<V5D '9?<W1R=6-T
M,0!V7W-T<G5C=#( =E]C:&%R7V%R<F%Y '9?9FQO871?<&]I;G1E<@!V7W-I
M9VYE9%]L;VYG7W!O:6YT97( =E]D;W5B;&5?9G5N8P!V7W-I9VYE9%]I;G1?
M9G5N8P!?1%E.04U)0P!V7V9L;V%T7V%R<F%Y '9?<VAO<G1?<&]I;G1E<@!V
M7W-I9VYE9%]L;VYG7V9U;F, =E]S:6=N961?8VAA<E]P;VEN=&5R '9?;&]N
M9U]A<G)A>0!?:6YI= !V7V-H87( 8VQU;FME<@!V7W5N<VEG;F5D7V-H87)?
M9G5N8P!U7VQI;FL =E]S:6=N961?<VAO<G1?9G5N8P!S<&]R='-C87( =E]U
M;FEO;C( =E]U;G-I9VYE9%]I;G1?9G5N8P!V7W5N:6]N N:6YT97)P "YH
M87-H "YD>6YS>6T +F1Y;G-T<@ N<F5L+G!L= N:6YI= N<&QT "YT97AT
M "YF:6YI "YR;V1A=&$ +F1A=&$ +F=O= N9'EN86UI8P N8G-S "YS>6UT
M86( +G-T<G1A8@ N<VAS=')T86( +F-O;6UE;G0 +F1E8G5G "YL:6YE $ H
M(REL:6)C+6DS.#8Z;&EB8RUI,S@V+V-S=2]C<G0Q+G,),2XQ. !A<SH@*%-#
M1$4I(#4N," @,#0O,3DO.3 0"@C*6QI8F,M:3,X-CIC<W4O8W)T:2YS"3$N
M,@!A<SH@*%-#1$4I(#4N," @,#0O,3DO.3 0"@C*6QI8F,M<&]R=#IG96XO
M=F%L=65S+5AT+F,),2XS $ H(REL:6)C.FEN8R]S>6YO;GEM<RYH"3$N,S,
M0"@C*6AE860Z;6%T:"YH"3(N,3$N,2XR-P!A8V]M<#H@*%-#1$4I(#4N," @
M,#0O,3DO.3 ;W!T:6TZ("A30T1%*2 U+C @(# T+S$Y+SDP &%S.B H4T-$
M12D@-2XP(" P-"\Q.2\Y, !A8V]M<#H@*%-#1$4I(#4N," @,#0O,3DO.3
M87,Z("A30T1%*2 U+C @(# T+S$Y+SDP $ H(REL:6)C+6DS.#8Z9V5N+W-H
M7V1A=&$N8PDQ+C, 86-O;7 Z("A30T1%*2 U+C @(# T+S$Y+SDP &]P=&EM
M.B H4T-$12D@-2XP(" P-"\Q.2\Y, !A<SH@*%-#1$4I(#4N," @,#0O,3DO
M.3 0"@C*6QI8F,M:3,X-CIL:6)C+6DS.#8O8W-U+V-R=&XN<PDQ+C4 87,Z
M("A30T1%*2 U+C @(# T+S$Y+SDP "!L9" Z("A30T1%*2 U+C @(# T+S$Y
M+SDP +@ !$ $@!P%@ . !G9&)M92YC #8! 0 !$!3(,$""$!-88$
M" 8! !T 3 !( 3@$ #@ =%]S=')U8W0 M@ 8 *@ T $@!U
M . !V7V-H87)?;65M8F5R %4 0 C 8 ! '*P T $@"@
M. !V7W-H;W)T7VUE;6)E<@!5 0 (P & 0" !RD - !( R0 #@
M=E]I;G1?;65M8F5R %4 !P C 8 ! 0 '*@ T $@#S . !V7VQO
M;F=?;65M8F5R %4 "@ C 8 ! @ '*P T $@ > 0 . !V7V9L;V%T
M7VUE;6)E<@!5 X (P & 0, !RP - !( 2@$ #@ =E]D;W5B;&5?
M;65M8F5R %4 #P C 8 !! '! !L 3 !( ; ( #@ +C!F86ME
M +8 & "H - !( DP$ #@ =E]C:&%R7VUE;6)E<@!5 $ (P & 0
M !RL - !( O@$ #@ =E]S:&]R=%]M96UB97( 50 $ ", !@ $ @
M <I #0 2 .<! X '9?:6YT7VUE;6)E<@!5 < (P & 0$ !RH
M - !( $0( #@ =E]L;VYG7VUE;6)E<@!5 H (P & 0( !RL -
M !( / ( #@ =E]F;&]A=%]M96UB97( 50 . ", !@ $# <L #0 2
M &@" X '9?9&]U8FQE7VUE;6)E<@!5 \ (P & 00 !P0 <
M%P 2 (L# X '1?=6YI;VX M@ ( *@ T $@"R @ . !V7V-H87)?
M;65M8F5R %4 0 C 8 ! '*P T $@#= @ . !V7W-H;W)T7VUE
M;6)E<@!5 0 (P & 0 !RD - !( !@, #@ =E]I;G1?;65M8F5R
M %4 !P C 8 ! '*@ T $@ P P . !V7VQO;F=?;65M8F5R %4
M"@ C 8 ! '*P T $@!; P . !V7V9L;V%T7VUE;6)E<@!5 X
M(P & 0 !RP - !( AP, #@ =E]D;W5B;&5?;65M8F5R %4 #P C
M 8 ! '! !L 7 !( J00 #@ +C%F86ME +8 " "H -
M !( T , #@ =E]C:&%R7VUE;6)E<@!5 $ (P & 0 !RL - !(
M^P, #@ =E]S:&]R=%]M96UB97( 50 $ ", !@ $ <I #0 2 "0$
M X '9?:6YT7VUE;6)E<@!5 < (P & 0 !RH - !( 3@0 #@
M=E]L;VYG7VUE;6)E<@!5 H (P & 0 !RL - !( >00 #@ =E]F
M;&]A=%]M96UB97( 50 . ", !@ $ <L #0 2 *4$ X '9?9&]U
M8FQE7VUE;6)E<@!5 \ (P & 0 !P0 J !@ 2 -<$ X '9?
M8VAA<E]F=6YC %4 0 1 4R#! @A 5F#! @$ ,0 8 $@ ,!0 . !V
M7W-I9VYE9%]C:&%R7V9U;F, 50 " !$!7(,$""$!:8,$" 0 S !@ 2
M $,% X '9?=6YS:6=N961?8VAA<E]F=6YC %4 P 1 6R#! @A 7F#! @$
M *P 8 $@!R!0 . !V7W-H;W)T7V9U;F, 50 $ !$!?(,$""$!B8,$
M" 0 R !@ 2 *@% X '9?<VEG;F5D7W-H;W)T7V9U;F, 50 % !$!
MC(,$""$!F8,$" 0 T !@ 2 . % X '9?=6YS:6=N961?<VAO<G1?
M9G5N8P!5 8 $0&<@P0((0&I@P0(! "D & !( #08 #@ =E]I;G1?
M9G5N8P!5 < $0&L@P0((0&Y@P0(! # & !( 008 #@ =E]S:6=N
M961?:6YT7V9U;F, 50 ( !$!O(,$""$!R8,$" 0 R !@ 2 '<& X
M '9?=6YS:6=N961?:6YT7V9U;F, 50 ) !$!S(,$""$!V8,$" 0 J
M!@ 2 *4& X '9?;&]N9U]F=6YC %4 "@ 1 =R#! @A >F#! @$ ,0
M 8 $@#:!@ . !V7W-I9VYE9%]L;VYG7V9U;F, 50 + !$![(,$""$!^8,$
M" 0 S !@ 2 !$' X '9?=6YS:6=N961?;&]N9U]F=6YC %4 # 1
M ?R#! @A 0F$! @$ *P 8 $@! !P . !V7V9L;V%T7V9U;F, 50 .
M !$!#(0$""$!'80$" 0 L !@ 2 ' ' X '9?9&]U8FQE7V9U;F,
M50 / !$!((0$""$!,80$" 0 5 %0 2 *X' "# 4 >H' 5
M!0 2 )H' "# 4 >H' 0 !0 2 *H' !5 < ! #P ! !(
MZ@< )4 "C "@ @ " 0 ( "
M"'( +@ !D 3 !( >P@ #@ ;&EN:P"V )@ F #0 2 "D( X
M &YE>'0 @P % 'J!P (P & 0 !RH - !( 4P@ #@ ;&EN:V9U
M;F, @P % %P!P (P & 0$ !R0 - !( =P@ #@ <W1U9F8 <@"N
M!P (P & 0( !P0 5 %0 2 +D( "# 4 >H' 5 !0 2
M *4( "# 4 >H' 0 !0 2 +4( !5 < ! #P ! !( ]0@
M )4 "C "@ @ " 0 ( " "'(
M+@ !P 7 !( B0D #@ ='5?;&EN:P"V ) F #0 2 #<) X
M &YE>'0 @P % 'J!P (P & 0 !RH - !( 80D #@ ;&EN:V9U
M;F, @P % %[" (P & 0 !R0 - !( A0D #@ <W1U9F8 <@"Y
M" (P & 0 !P0 Z ! 2 ,<) X "XR9F%K90"V 0 #S
M !L @ &)L=64 0 &=R965N !R960 ! #X $ !( "0H
M #@ 8V]L;W)S +8 ! /, 'P " <&EN:P ! <'5R<&QE !Y
M96QL;W< ! #( $ !( /PH #@ +C-F86ME +8 ! /, $P !
M9F]R9 8VAE=GD ! #$ $ !( = H #@ 8V%R<P"V 0 #S
M !0 0 '!O<G-C:&4 &)M=P $ ,@ 0 $@"J"@ . N-&9A
M:V4 M@ $ \P 3 $ !44E5% !&04Q310 $ ' !8 $@#&
M"@ . !B;V]L96%N '( = H #$ $ !( ^PH #@ 8G9A;', M@ $
M\P 3 $ !T<G5E !F86QS90 $ '0 !8 $@ 8"P . !B;V]L
M96%N,@!R ,8* !& ! 2 &(+ X &UI<V]R9&5R960 M@ $ \P C
M , !T:')E90 >F5R;P ! ;VYE ( !T=V\ ! ", &
M !( B0L #@ ;6%I;@!5 < $0$TA 0((0$UA@0(! "< ' !( L L
M #@ <W!O<G1S8V%R '( /PH ", !0 #D)@$""4 ' !( U0L #@ 8VQU
M;FME<@!R D* C 4 _R7! @H !P 2 /T+ X &YO;G!R:6UA<GD
M<@#'"0 (P % ,4EP0()0 < $@ B# . !P<FEM87)Y '( B0D ",
M!0 #))<$""0 ' !( 1@P #@ =5]L:6YK '( ]0@ ", !0 # )@$""<
M ' !( ;0P #@ <U]L:6YK (, !0 !Z@< ", !0 #F)<$""8 ' !(
MDPP #@ =E]U;FEO;C( <@"+ P (P % .4F 0()0 < $@"X# . !V
M7W5N:6]N '( ; ( ", !0 #G)@$""< ' !( WPP #@ =E]S=')U8W0R
M '( 3@$ ", !0 #O)<$""< ' !( !@T #@ =E]S=')U8W0Q '( +@
M ", !0 #I)<$""\ ' !( -0T #@ =E]D;W5B;&5?<&]I;G1E<@!C ,
M 0\ (P % .@EP0(+@ < $@!C#0 . !V7V9L;V%T7W!O:6YT97( 8P #
M $. ", !0 #V)<$"#8 ' !( F0T #@ =E]U;G-I9VYE9%]L;VYG7W!O
M:6YT97( 8P # $, ", !0 #&)<$"#0 ' !( S0T #@ =E]S:6=N961?
M;&]N9U]P;VEN=&5R &, P !"P C 4 ]R7! @M !P 2 /H- X '9?
M;&]N9U]P;VEN=&5R &, P !"@ C 4 W"7! @U !P 2 "\. X '9?
M=6YS:6=N961?:6YT7W!O:6YT97( 8P # $) ", !0 #6)<$"#, ' !(
M8@X #@ =E]S:6=N961?:6YT7W!O:6YT97( 8P # $( ", !0 #E)<$""P
M ' !( C@X #@ =E]I;G1?<&]I;G1E<@!C , 0< (P % -,EP0(-P
M < $@#%#@ . !V7W5N<VEG;F5D7W-H;W)T7W!O:6YT97( 8P # $& ",
M!0 # )<$"#4 ' !( ^@X #@ =E]S:6=N961?<VAO<G1?<&]I;G1E<@!C
M , 04 (P % .<EP0(+@ < $@ H#P . !V7W-H;W)T7W!O:6YT97(
M8P # $$ ", !0 #Z)<$"#8 ' !( 7@\ #@ =E]U;G-I9VYE9%]C:&%R
M7W!O:6YT97( 8P # $# ", !0 #B)<$"#0 ' !( D@\ #@ =E]S:6=N
M961?8VAA<E]P;VEN=&5R &, P ! @ C 4 ^R7! @M !P 2 +\/ X
M '9?8VAA<E]P;VEN=&5R &, P ! 0 C 4 X27! @D 0 2 .,/ "5
M HP 0 ( ! "%4 #P L !P 2 \0 X '9?9&]U8FQE
M7V%R<F%Y '( OP\ ", !0 #*)<$""0 ! !( ,Q )4 "C ! @
M $ (50 . "L ' !( 7A #@ =E]F;&]A=%]A<G)A>0!R \0
M C 4 ^"7! @D 0 2 ((0 "5 HP 0 ( ! "%4
M# S !P 2 +40 X '9?=6YS:6=N961?;&]N9U]A<G)A>0!R %X0 C
M 4 V"7! @D 0 2 -D0 "5 HP 0 ( ! "%4 "P Q
M !P 2 H1 X '9?<VEG;F5D7VQO;F=?87)R87D <@"U$ (P % -
MEP0() $ $@ N$0 E0 *, $ " 0 A5 H *@ <
M$@!8$0 . !V7VQO;F=?87)R87D <@ *$0 (P % /PEP0() $ $@!\
M$0 E0 *, $ " 0 A5 D ,@ < $@"N$0 . !V7W5N
M<VEG;F5D7VEN=%]A<G)A>0!R %@1 C 4 U"7! @D 0 2 -(1 "5
M HP 0 ( ! "%4 " P !P 2 (2 X '9?<VEG;F5D
M7VEN=%]A<G)A>0!R *X1 C 4 XR7! @D 0 2 "82 "5 HP 0
M ( ! "%4 !P I !P 2 $\2 X '9?:6YT7V%R<F%Y '(
M A( ", !0 #')<$""0 ! !( <Q( )4 "C ! @ $ (
M50 & #0 ' !( IQ( #@ =E]U;G-I9VYE9%]S:&]R=%]A<G)A>0!R $\2
M C 4 X"7! @D 0 2 ,L2 "5 HP 0 ( ! "%4
M!0 R !P 2 /T2 X '9?<VEG;F5D7W-H;W)T7V%R<F%Y '( IQ( ",
M!0 #2)<$""0 ! !( (1, )4 "C ! @ $ (50 $ "L
M ' !( 3!, #@ =E]S:&]R=%]A<G)A>0!R /T2 C 4 WR7! @D
M 0 2 ' 3 "5 HP 0 ( ! "%4 P S !P 2 *,3 X
M '9?=6YS:6=N961?8VAA<E]A<G)A>0!R $P3 C 4 _B6! @D 0 2
M ,<3 "5 HP 0 ( ! "%4 @ Q !P 2 /@3 X '9?
M<VEG;F5D7V-H87)?87)R87D <@"C$P (P % ,XEP0() $ $@ <%
ME0 *, $ " 0 A5 $ *@ < $@!&% . !V7V-H87)?
M87)R87D <@#X$P (P % /4EP0() < $@!J% . !V7V1O=6)L90!5
M \ (P % ,(EP0((P < $@"-% . !V7V9L;V%T %4 #@ C 4 SR7
M! @K !P 2 +@4 X '9?=6YS:6=N961?;&]N9P!5 P (P % -XEP0(
M*0 < $@#A% . !V7W-I9VYE9%]L;VYG %4 "P C 4 _R6! @B
M!P 2 ,5 X '9?;&]N9P!5 H (P % -HEP0(*@ < $@ M%0 . !V
M7W5N<VEG;F5D7VEN= !5 D (P % /TE@0(* < $@!5%0 . !V7W-I
M9VYE9%]I;G0 50 ( ", !0 #\)8$""$ ' !( =A4 #@ =E]I;G0 50 '
M ", !0 #$)<$""P ' !( HA4 #@ =E]U;G-I9VYE9%]S:&]R= !5 8
M(P % ,$EP0(*@ < $@#,%0 . !V7W-I9VYE9%]S:&]R= !5 4 (P %
M -<EP0((P < $@#O%0 . !V7W-H;W)T %4 ! C 4 VR7! @K
M!P 2 !H6 X '9?=6YS:6=N961?8VAA<@!5 , (P % ,ZEP0(*0 <
M$@!#%@ . !V7W-I9VYE9%]C:&%R %4 @ C 4 W27! @B !P 2 &46
M X '9?8VAA<@!5 $ (P % /XEP0(! < "2 @ 3(,$"'D
M #__P !Z __\0 >P /__( 'T #__S !^ __]
M ?P /__4 ($ #__V "" __]P @P /__@ (4
M #__Y "& __^@ AP /__L (D #__\ "* ___4
M L@ /__Z +4 #__^X "V ___U MP /___ +D
M #__P,! "Z __\, 0 NP /__%0$ +T #__QX! "^ __\H
M 0 OP /__,@$ ,$ #__SP! #" __]& 0 PP /__4 $ ,4
M #__UH! #& __]D 0 R0 /__> $ ,H #__X(! #+ __^,
M 0 S0 /__E@$ ,X #__Z(! #/ __^N 0 T0 /__N@$ -(
M #__\0! #3 ___. 0 U0 /__V $ -8 #__^(! #7 ___L
M 0 V0 /__]@$ -H #__P " #< __\4 @ W0 /__'@( -X
M #__R@" #@ __\R @ X0 /__/ ( .( #__T8" #D __]0
M @ Y0 /__6@( .8 #__V0" #H __]N @ Z0 /__> ( .H
M #__X(" #L __^, @ [0 /__E@( .\ #__Z " #P __^J
M @ \0 /__M ( /( #__[X" #T ___( @ ]@ /__T@( /<
M #__]X" ___I @
M 0 $ " U( $"-0 3
M ! D % @ .B ! CH 1 , !
M 0 / "P ( L@00(+ $ , $ 0 0 0
M%P , " [($$".P! ![ ! !\ )
M @ &B"! AH @ ( , ' ! @ H 0 8
M "(@@0(B ( $ 0 +@ $ & C(($
M"(P" !0 $ ! #, ! !@ -R"! C< @
M60, ! Y 0 8 XA@0(. 8 $
M 0 /P $ " /(8$"#P& @
M $ $< ! P %R6! A<!@ " !
M !- 0 , !DE@0(9 8 !P 0 $
M4@ 8 # @)8$"( & !P ! $ " %L (
M P /"6! CP!@ M $ ! !@ @
M \ 8 ' 0 ' 0 0 : ,
M / - #4! ! ' # #$$@
MD 0 !Z 0 5!, "("
M $ @P $ '@5 !P%@
M $ (H ! #H*P D@( 0
%
end

View File

@ -0,0 +1,314 @@
begin 775 i860-elf
M?T5,1@$" 0 " < ! 32 #0 #-4 T "
M!0 H !4 $0 8 T 0- "@ H 4 P
M -0 !, ! ! - $#0 (
M\ "/ % 0 $ DD I) "8 "7 8 !
M @ "4P "E, ' !P O=7-R+VQI8B]L:6)C
M+G-O+C$ , , !P P + @
M # !0 & ! D * "
M ! 0 $M !,$@ H "N
M !$ __$ / I* 01 + & &20 $0#_\0 !\
M !+L F!( F IO 1 /_Q +0 $R0 $@
M #( !D0 !!$ H _ 3" 2 20 *3 $0#_
M\0 %\ "E, !$ __$ 7V-L96%N=7 7V5N9 !?96YV:7)O;@!?971E
M>'0 871E>&ET %]E9&%T80!E>&ET %]L:6)?=F5R<VEO;@!?7V9P<W1A<G0
M7T=,3T)!3%]/1D93151?5$%"3$5? %]$64Y!34E# "]U<W(O;&EB+VQI8F,N
M<V\N,0 I/ @0 I0 !@0 I1 "@0 I
M2 " 0 * ! @ H * 7_RDY[!\ !?>*35 /@
M%_\I/>P? #D'0 0 #X &O___;OO0 [!\ .P> ! /@ %_\I0>^] #D
M'0 ,[!X &O__^\7_RE%[!\ .0= !A /@ :___Z.^] #L'P [!X $
M^ 7_RE)[[T .0= "3L'@ :___X: #( 4'$ 81"__"@0P '$
M!>P0 #40@ /6@ N80$M"@ ;___X.??*4SL'@ ;___VUO@ +L$
MH) .80&0!O___8H &___\>@ ;___VZ82 (4< 1AE( &()2& ?
MY9$I[!\ &P )J$<0 4;___UZ "@$ H $?@^ "$'P !H\$ * _
M "@ 0 #X * "@ H ,@ P<0!@!A$+_\* 0 "$0P %&,
M 81_ !"GX@ 0 ( * #( ,'$ 8 81"__"@$ A$, !1C &$?P 0
MI^( $ " "@ R #!Q & &$0O_PH! (1# 48P !A'\ $*?B !
M @ H ,@ P<0!@!A$+_\* 0 "$0P %&, 81_ !"GX@ 0 ( *
M #( ,'$ 8 81"__"@$ A$, !1C &$?P 0I^( $ " "@ R
M#!Q & &$0O_PH! (1# 48P !A'\ $*?B ! @ H ,@ P<0!@!
MA$+_\* 0 "$0P %&, 81_ !"GX@ 0 ( * #( ,'$ 8 81"__"@
M$ A$, !1C &$?P 0I^( $ " "@ R #!Q & &$0O_PH! (1#
M 48P !A'\ $*?B ! @ H ,@ P<0!@!A$+_\* 0 "$0P %&,
M 81_ !"GX@ 0 ( * #( ,'$ 8 81"__"@$ A$, !1C &$?P 0
MI^( $ " "@ R #!Q & &$0O_PH! (1# 48P !A'\ $*?B !
M @ H ,@ P<0!@!A$+_\$@( <F$0P %&, 81_ !"GX@ 0 ( *
M #( ,'$ 8 81"__!(" ')A$, !1C &$?P 0I^( $ " "@ R
M#!Q & &$0O_P[!\ (1# "4' !#^4"S _EXD3L'P [!\ )0< *4' #
M#^7B"A_EXCSL'P [!\ )0< 24' %'^7B+!_EX=3L'P [!\ )0< :4
M' ''^7AX1_EX<7L'P [!\ )0< B4' )'^7AP1_EXCGL'P [!\ )0<
M J4' +'^7AS1_EXDGL'P )_ 9(NP? O\"H.[!\ "?P&1CL'P +_ I
MV.P? '_"K,[!\ _EXJCL'P !_PJ1.P? /Y>(([!\ ?\*@KL'P
M#^7AR.P? 7_"H\[!\ !_EXDSL'P %_PJ+.P? ?Y>(8[!\ !?\*=3L
M'P '^7B4.P? 7_"GA[!\ !_EX>WL'P %_PIQ>P? ?Y>)=[!\ !?\
M*<'L'P '^7B(>P? 7_"HY[!\ !_EXL7L'P %_PIS>P? ?Y>(1[!\
M !?\*DGL'P '^7B,>P? G\"H.[!\ "_P*K;L'P )_ IV.P? O\"GX
M[!\ .?\*LSL'P '^7B5>P? #G_"I$[!\ !_EXL'L'P Y_PJ"NP? ?
MY>)9[!\ .?\*CSL'P '^7BO>P? #G_"HL[!\ !_EXFWL'P Y_PIU.P?
M ?Y>'1[!\ .?\*>#L'P '^7B'>P? #G_"G$[!\ !_EXF7L'P Y_PI
MP.P? ?Y>(I[!\ .?\*CCL'P '^7B0>P? #G_"G,[!\ !_EXK'L'P
MY_PJ2.P? ?Y>'I[!\ .?\*@SL'P '^7BK>P? #G_"G8[!\ !_EXG'L
M'P [!\ )0< *4' "'^7A]1_EX>7L'P [!\ )0< &4' !'^7C:1_E
MXM'L'P %_PJ:>P? ?Y>+9[!\ !?\*WCL'P '^7C<.P? 48P !A'\
M$*?B ! @ H $ " "@ H 0&D !"R
M I3 2W $O@ !,4 3, $
M !H # $K - 9 0 !#H !0 $@ & 1,
M H ![ "P ! 5 , "DP @ # 4
M!P !< !)\ $
M 0 __$ 0U # ! $.@ P @
M !$P , , 2 # $ $GP P !0
M !*P , 8 2P # ' $T P
M" !D , D 9$ # * *20
M P "P "DP , P I3 # - *<
M P #@ , \ # 0
M P $0 , !( # 3
M P % < 0 __$ . $ /_Q
M %0 ! #_\0 "$ 0 __$ I $
M /_Q ,P ! #_\0 #H "G !!$ X !) IQ
M 01 . 5@ $_@ @$@ " &( !D !( D !H I
MR (1 . ?@ %B@ +8$@ " (, "G, !!$ X "1
M IT 01 . J@ $X !,$@ +, "N !$ __$
M "X IU (1 . R0 %, @$@ " -\ "G8 "!$
M X #H IX 01 . [@ $T@ $@ " /4 "GD
M!!$ X $ I* 01 + !"0 *>@ $$0 #@ 2$ "GL
M "!$ X $M I] 01 . !-0 %" @$@ " 4@
M "GX $!$ X %7 9) 1 /_Q !7@ *@@ "$0 #@
M 7( "H* 1$ X &" J# 01 . !B@ *A ($0
M#@ 9X !30 F!( &E I* 0A + !K0 %6 @
M$@ " ;D "H8 !!$ X '. 5L " 2 ( !XP *AP
M $$0 #@ ?$ "F\ !$ __$ 'X 4< " 2 ( "!0
M*B ($0 #@ AH "HH !!$ X (Q 4Z " 2 ( "
M/ *BP "$0 #@ DL !78 (!( @ )8 7< 2
M "70 *C ($0 #@ G, "HX !!$ X )Z J/ (1
M . "@@ *D $$0 #@ I$ "I$ 1$ X *? J2
M 01 . "KP *DP $$0 #@ KT "I0 !!$ X +4 9
M$ 01 * "X0 $]@ $@ " ND "I4 !!$ X +X
M J6 01 . #$ *EP ($0 #@ R, !8@ !(
M ,M J9 01 . #0@ *F@ $$0 #@ TD "DP !$
M__$ -? J; 01 . #=@ *G $$0 #@ X< "DD
M!!$ L .9 J> !@1 . #HP *I 8$0 #@ ZT "JH
M A$ X .Z JK 01 . #R@ *K $$0 #@ ^
M !8 (!( @ /N 5$ " 2 ( $ *4P $0#_\0
M! D "JT "!$ X 07 JO 01 . $)P %8@ @$@
M" !#H "K !!$ X 10 JQ @1 . $70 $K
M$@ !@ !&, "K, 1$ X 1J JT 01 . $<@ %$@
M @$@ " !(< "K8 D!$ X 2. K: 01 . $F
M%)@ @$@ " !*P "MP "!$ X 2U K> @1 . $
MO0 %3@ @$@ " !G9&)M90!C<G0Q+G, 8W)T:2YS '9A;'5E<RU8="YC
M &=D8FUE+F, <VA?9&%T82YC &-R=&XN<P!V7W5N<VEG;F5D7VEN= !V7W-I
M9VYE9%]I;G0 =E]C:&%R7V9U;F, 7V9I;FD =E]U;G-I9VYE9%]C:&%R7V%R
M<F%Y &UA:6X =E]S:6=N961?;&]N9P!V7W5N<VEG;F5D7W-H;W)T7W!O:6YT
M97( 7V-L96%N=7 7V5N9 !V7W5N<VEG;F5D7W-H;W)T '9?=6YS:6=N961?
M<VAO<G1?9G5N8P!V7V1O=6)L90!V7VEN= !?<W1A<G0 ;F]N<')I;6%R>0!?
M96YV:7)O;@!V7W5N<VEG;F5D7VQO;F=?<&]I;G1E<@!V7VEN=%]A<G)A>0!P
M<FEM87)Y '9?<VEG;F5D7V-H87)?9G5N8P!V7V1O=6)L95]A<G)A>0!?971E
M>'0 =E]S:6=N961?8VAA<E]A<G)A>0!V7W5N<VEG;F5D7V-H87( =E]F;&]A
M= !V7W-I9VYE9%]L;VYG7V%R<F%Y &%T97AI= !E;G9I<F]N '9?;&]N9U]F
M=6YC '9?<VEG;F5D7W-H;W)T7V%R<F%Y '9?=6YS:6=N961?;&]N9U]F=6YC
M '9?:6YT7W!O:6YT97( 7V5D871A '9?<VAO<G1?9G5N8P!V7W5N<VEG;F5D
M7VEN=%]A<G)A>0!V7W5N<VEG;F5D7VEN=%]P;VEN=&5R '9?:6YT7V9U;F,
M=E]S:6=N961?<VAO<G0 =E]F;&]A=%]F=6YC &5X:70 =E]U;G-I9VYE9%]L
M;VYG7V%R<F%Y '9?;&]N9P!V7W-H;W)T '9?;&]N9U]P;VEN=&5R '9?<VEG
M;F5D7V-H87( =E]U;G-I9VYE9%]L;VYG '9?<VAO<G1?87)R87D =E]U;G-I
M9VYE9%]S:&]R=%]A<G)A>0!?;&EB7W9E<G-I;VX 7VUC;W5N= !V7V-H87)?
M<&]I;G1E<@!V7W5N<VEG;F5D7V-H87)?<&]I;G1E<@!V7W-I9VYE9%]I;G1?
M87)R87D 7U]F<'-T87)T '9?<VEG;F5D7VEN=%]P;VEN=&5R '-?;&EN:P!?
M1TQ/0D%,7T]&1E-%5%]404),15\ =E]S:6=N961?<VAO<G1?<&]I;G1E<@!V
M7V1O=6)L95]P;VEN=&5R %]?;&]N9V1O=6)L95]U<V5D '9?<W1R=6-T,0!V
M7W-T<G5C=#( =E]C:&%R7V%R<F%Y '9?9FQO871?<&]I;G1E<@!V7W-I9VYE
M9%]L;VYG7W!O:6YT97( =E]D;W5B;&5?9G5N8P!V7W-I9VYE9%]I;G1?9G5N
M8P!?1%E.04U)0P!V7V9L;V%T7V%R<F%Y '9?<VAO<G1?<&]I;G1E<@!V7W-I
M9VYE9%]L;VYG7V9U;F, =E]S:6=N961?8VAA<E]P;VEN=&5R '9?;&]N9U]A
M<G)A>0!?:6YI= !V7V-H87( 8VQU;FME<@!V7W5N<VEG;F5D7V-H87)?9G5N
M8P!U7VQI;FL <W!O<G1S8V%R '9?<VEG;F5D7W-H;W)T7V9U;F, =E]U;FEO
M;C( =E]U;FEO;@!V7W5N<VEG;F5D7VEN=%]F=6YC N:6YT97)P "YH87-H
M "YD>6YS>6T +F1Y;G-T<@ N<F5L82YP;'0 +FEN:70 +G!L= N=&5X= N
M9FEN:0 N<F]D871A "YD871A "YG;W0 +F1Y;F%M:6, +F)S<P N<WEM=&%B
M "YS=')T86( +G-H<W1R=&%B "YC;VUM96YT "YD96)U9P N;&EN90 D2&5A
M9&5R.B O<"]20U,O=71I;#(M,BXQ+W5S<B]S<F,O;&EB+VQI8F,O:3@V,"]C
M<W4O8W)T,2YS+'8@,BXQ(#DR+S U+S$T(# W.C$V.C(P(&1A=FED;V9F($5X
M<" D $ H(RE&5%@@,BXQ+C N,2!S8V1E.B]U<W(O8V-S+VQI8B]C<G0Q+F\
M)$AE861E<CH@+W O4D-3+W5T:6PR+3(N,2]U<W(O<W)C+VQI8B]L:6)C+VDX
M-C O8W-U+V-R=&DN<RQV(#(N,2 Y,B\P-2\Q-" P-SHQ-CHR,2!D879I9&]F
M9B!%>' @) ! *",I1E18(#(N,2XP+C$@<V-D93HO=7-R+V-C<R]L:6(O8W)T
M:2YO "1(96%D97(Z("]P+U)#4R]U=&EL,BTR+C$O=7-R+W-R8R]L:6(O;&EB
M8R]P;W)T+V=E;B]V86QU97,M6'0N8RQV(#(N,2 Y,B\P-2\Q-" P-SHR-SHP
M,B!D879I9&]F9B!%>' @) D2&5A9&5R.B O<"]20U,O=71I;#(M,BXQ+W5S
M<B]S<F,O;&EB+VQI8F,O:6YC+W-Y;F]N>6US+F@L=B R+C$@.3(O,#4O,30@
M,#<Z,C(Z,3D@9&%V:61O9F8@17AP("0 )$AE861E<CH@+W O4D-3+W5T:6PR
M+3(N,2]U<W(O<W)C+VAE860O;6%T:"YH+'8@,BXQ(#DR+S U+S$T(# W.C$R
M.C4W(&1A=FED;V9F($5X<" D &%C;VUP.B H4T-$12D@-2XP(#$R+S X+S@Y
M &%S.B H4T-$12D@-2XP(#$R+S X+S@Y $ H(RE&5%@@,BXQ+C N,2!S8V1E
M.B]U<W(O8V-S+VQI8B]V86QU97,M6'0N;P!A8V]M<#H@*%-#1$4I(#4N," Q
M,B\P."\X.0!A<SH@*%-#1$4I(#4N," Q,B\P."\X.0 D2&5A9&5R.B O<"]2
M0U,O=71I;#(M,BXQ+W5S<B]S<F,O;&EB+VQI8F,O:3@V,"]G96XO<VA?9&%T
M82YC+'8@,BXQ(#DR+S U+S$T(# W.C$W.C4T(&1A=FED;V9F($5X<" D &%C
M;VUP.B H4T-$12D@-2XP(#$R+S X+S@Y &%S.B H4T-$12D@-2XP(#$R+S X
M+S@Y $ H(RE&5%@@,BXQ+C N,2!S8V1E.B]U<W(O8V-S+VQI8B]L:6)C+G-O
M "1(96%D97(Z("]P+U)#4R]U=&EL,BTR+C$O=7-R+W-R8R]L:6(O;&EB8R]I
M.#8P+V-S=2]C<G1N+G,L=B R+C$@.3(O,#4O,30@,#<Z,38Z,C(@9&%V:61O
M9F8@17AP("0 0"@C*4946" R+C$N,"XQ('-C9&4Z+W5S<B]C8W,O;&EB+V-R
M=&XN;P @;&0@.B H4T-$12D@-2XP(#$R+S X+S@Y "X $0 2 6< X
M9V1B;64N8P !-@ $!$0 $_ !(0 &0 !!@ = !, $@ 4X
M.'1?<W1R=6-T "V & "H #0 2 =0 X=E]C:&%R7VUE;6)E<@
M50 ! ", !@0 !P "L #0 2 H X=E]S:&]R=%]M96UB97( %4
M! C 8$ @< I T $@ ,D .'9?:6YT7VUE;6)E<@ 50 ' ",
M!@0 $!P "H #0 2 \P X=E]L;VYG7VUE;6)E<@ 50 * ", !@0
M (!P "L #0 2 !'@ X=E]F;&]A=%]M96UB97( %4 #@ C 8$
M# < L T $@ 4H .'9?9&]U8FQE7VUE;6)E<@ 50 / ", !@0 0
M!P 0 ; !, $@ FP ."XP9F%K90 M@ !@ J T $@ 9,
M.'9?8VAA<E]M96UB97( %4 0 C 8$ < K T $@ ;X .'9?
M<VAO<G1?;65M8F5R !5 0 (P &! (' *0 - !( 'G #AV7VEN
M=%]M96UB97( %4 !P C 8$ ! < J T $@ A$ .'9?;&]N9U]M
M96UB97( %4 "@ C 8$ " < K T $@ CP .'9?9FQO871?;65M
M8F5R !5 X (P &! P' + - !( )H #AV7V1O=6)L95]M96UB
M97( %4 #P C 8$ $ < $ ' 7 !( .+ #AT7W5N:6]N "V
M " "H #0 2 "L@ X=E]C:&%R7VUE;6)E<@ 50 ! ", !@0
M!P "L #0 2 "W0 X=E]S:&]R=%]M96UB97( %4 ! C 8$ <
M I T $@ P8 .'9?:6YT7VUE;6)E<@ 50 ' ", !@0 !P "H
M#0 2 #, X=E]L;VYG7VUE;6)E<@ 50 * ", !@0 !P "L #0 2
M #6P X=E]F;&]A=%]M96UB97( %4 #@ C 8$ < L T $@
M X< .'9?9&]U8FQE7VUE;6)E<@ 50 / ", !@0 !P 0 ; !<
M$@ !*D ."XQ9F%K90 M@ @ J T $@ ] .'9?8VAA<E]M96UB
M97( %4 0 C 8$ < K T $@ _L .'9?<VAO<G1?;65M8F5R
M !5 0 (P &! ' *0 - !( 0D #AV7VEN=%]M96UB97( %4
M!P C 8$ < J T $@ !$X .'9?;&]N9U]M96UB97( %4 "@ C
M 8$ < K T $@ !'D .'9?9FQO871?;65M8F5R !5 X (P &
M! ' + - !( 2E #AV7V1O=6)L95]M96UB97( %4 #P C 8$
M < $ *@ & !( 37 #AV7V-H87)?9G5N8P 50 ! 1$ !/X
M 2$ !08 ! #$ !@ 2 %# X=E]S:6=N961?8VAA<E]F=6YC !5
M (!$0 %" !(0 %$ $ ,P & !( 5# #AV7W5N<VEG;F5D7V-H
M87)?9G5N8P 50 # 1$ !1( 2$ !1H ! "L !@ 2 %<@ X=E]S
M:&]R=%]F=6YC !5 0!$0 %' !(0 %) $ ,@ & !( 6H #AV
M7W-I9VYE9%]S:&]R=%]F=6YC !5 4!$0 %)@!(0 %+@ $ - &
M !( 7@ #AV7W5N<VEG;F5D7W-H;W)T7V9U;F, %4 !@$1 4P $A 4
MX 0 I 8 $@ !@T .'9?:6YT7V9U;F, %4 !P$1 4Z $A 5
M" 0 P 8 $@ !D$ .'9?<VEG;F5D7VEN=%]F=6YC !5 @!$0
M%1 !(0 %3 $ ,@ & !( 9W #AV7W5N<VEG;F5D7VEN=%]F=6YC
M !5 D!$0 %3@!(0 %5@ $ *@ & !( :E #AV7VQO;F=?9G5N
M8P 50 * 1$ !5@ 2$ !6 ! #$ !@ 2 &V@ X=E]S:6=N961?
M;&]N9U]F=6YC !5 L!$0 %8@!(0 %:@ $ ,P & !( <1 #AV
M7W5N<VEG;F5D7VQO;F=?9G5N8P 50 , 1$ !6P 2$ !70 ! "L
M!@ 2 '0 X=E]F;&]A=%]F=6YC !5 X!$0 %=@!(0 %?@ $
M+ & !( =P #AV7V1O=6)L95]F=6YC !5 \!$0 %@ !(0 %B $
M %0 5 !( >N (, !0$ ?J %0 % !( >: (, !0$ ?J
M$ % !( >J %4 !P 0 \ $ $@ !^H E0 *, * "
M ( $ @ @@ <@ "X 9 !, $@ "'L
M.&QI;FL +8 "8 )@ - !( @I #AN97AT "# 4! 'Z@ C 8$
M < J T $@ "%, .&QI;FMF=6YC "# 4! '< C 8$
M! < D T $@ "'< .'-T=69F !R 'K@ C 8$ " < $
M%0 5 !( BY (, !0$ ?J %0 % !( BE (, !0$ ?J $ %
M !( BU %4 !P 0 \ $ $@ "/4 E0 *, * "
M ( $ @ @@ <@ "X < !< $@ "8D .'1U
M7VQI;FL +8 "0 )@ - !( DW #AN97AT "# 4! 'Z@ C 8$
M < J T $@ "6$ .&QI;FMF=6YC "# 4! (>P C 8$
M < D T $@ "84 .'-T=69F !R (N0 C 8$ < $
M.@ $ !( G' #@N,F9A:V4 +8 $ /, &P )B;'5E %G<F5E
M;@ <F5D 0 ^ 0 $@ "@D .&-O;&]R<P M@ 0 \P ?
M G!I;FL 7!U<G!L90 >65L;&]W 0 R 0 $@
M"C\ ."XS9F%K90 M@ 0 \P 3 69O<F0 &-H979Y 0
M Q 0 $@ "G0 .&-A<G, +8 $ /, % %P;W)S8VAE !B
M;7< ! #( ! 2 *J@ X+C1F86ME "V ! #S !, !5%)5
M10 1D%,4T4 ! !P %@ 2 *Q@ X8F]O;&5A;@ <@ "G0
M Q 0 $@ "OL .&)V86QS "V ! #S !, !=')U90 9F%L
M<V4 ! !T %@ 2 +& X8F]O;&5A;C( '( K& 1@ $ !(
M MB #AM:7-O<F1E<F5D "V ! #S ", #=&AR964 'IE<F\
M 6]N90 "='=O 0 C 8 $@ "XD .&UA:6X %4 !P$1
M 6* $A 9 0 G < $@ "[ .'-P;W)T<V-A<@ <@ "C\
M(P % P *V@ E < $@ "]4 .&-L=6YK97( '( H) ", !0, "K0
M * ' !( O] #AN;VYP<FEM87)Y !R )QP C 4# IY "4
M!P 2 ,(@ X<')I;6%R>0 <@ "8D (P % P *?0 D < $@ #$8
M.'5?;&EN:P <@ "/4 (P % P *M@ G < $@ #&T .'-?;&EN:P
M@P % 0 !^H (P % P *F@ F < $@ #), .'9?=6YI;VXR !R #
MBP C 4# K< "4 !P 2 ,N X=E]U;FEO;@ <@ FP (P % P
M*W@ G < $@ #-\ .'9?<W1R=6-T,@ <@ 4X (P % P *I G
M < $@ #08 .'9?<W1R=6-T,0 <@ "X (P % P *G@ O < $@
M#34 .'9?9&]U8FQE7W!O:6YT97( &, P$ #P C 4# J< "X !P 2
M -8P X=E]F;&]A=%]P;VEN=&5R !C ,! X (P % P *JP V <
M$@ #9D .'9?=6YS:6=N961?;&]N9U]P;VEN=&5R !C ,! P (P % P
M*>@ T < $@ #<T .'9?<VEG;F5D7VQO;F=?<&]I;G1E<@ 8P # 0 +
M ", !0, "JP +0 ' !( WZ #AV7VQO;F=?<&]I;G1E<@ 8P # 0 *
M ", !0, "I -0 ' !( XO #AV7W5N<VEG;F5D7VEN=%]P;VEN=&5R
M !C ,! D (P % P *B@ S < $@ #F( .'9?<VEG;F5D7VEN=%]P
M;VEN=&5R !C ,! @ (P % P *F0 L < $@ #HX .'9?:6YT7W!O
M:6YT97( &, P$ !P C 4# J' #< !P 2 .Q0 X=E]U;G-I9VYE
M9%]S:&]R=%]P;VEN=&5R !C ,! 8 (P % P *= U < $@ #OH
M.'9?<VEG;F5D7W-H;W)T7W!O:6YT97( &, P$ !0 C 4# J; "X
M!P 2 /* X=E]S:&]R=%]P;VEN=&5R !C ,! 0 (P % P *KP V
M < $@ #UX .'9?=6YS:6=N961?8VAA<E]P;VEN=&5R !C ,! , (P %
M P *E@ T < $@ #Y( .'9?<VEG;F5D7V-H87)?<&]I;G1E<@ 8P #
M 0 " ", !0, "K +0 ' !( ^_ #AV7V-H87)?<&]I;G1E<@ 8P #
M 0 ! ", !0, "I4 ) ! !( _C )4 "C ! @ 0@
M50 / + ' !( ! / #AV7V1O=6)L95]A<G)A>0 <@ #[\ (P % P
M*?@ D $ $@ $#, E0 *, $ " !" !5 X K <
M$@ $%X .'9?9FQO871?87)R87D '( ! / ", !0, "JT ) ! !(
M !"" )4 "C ! @ 0@ 50 , ,P ' !( !"U #AV7W5N
M<VEG;F5D7VQO;F=?87)R87D '( !!> ", !0, "HP ) ! !( !#9
M )4 "C ! @ 0@ 50 + ,0 ' !( !$* #AV7W-I9VYE
M9%]L;VYG7V%R<F%Y !R 0M0 C 4# J$ "0 0 2 1+@"5
MHP 0 ( $( %4 "@ "H !P 2 16 X=E]L;VYG7V%R<F%Y
M !R 1"@ C 4# JQ "0 0 2 1? "5 HP 0 (
M $( %4 "0 #( !P 2 1K@ X=E]U;G-I9VYE9%]I;G1?87)R87D '(
M !%8 ", !0, "H@ ) ! !( !'2 )4 "C ! @ 0@
M50 ( , ' !( !(" #AV7W-I9VYE9%]I;G1?87)R87D '( !&N ",
M!0, "I< ) ! !( !(F )4 "C ! @ 0@ 50 '
M*0 ' !( !)/ #AV7VEN=%]A<G)A>0 <@ $@( (P % P *>P D $
M$@ $G, E0 *, $ " !" !5 8 T < $@ $J< .'9?
M=6YS:6=N961?<VAO<G1?87)R87D '( !)/ ", !0, "I0 ) ! !(
M !++ )4 "C ! @ 0@ 50 % ,@ ' !( !+] #AV7W-I
M9VYE9%]S:&]R=%]A<G)A>0 <@ $J< (P % P *A@ D $ $@ $R$
ME0 *, $ " !" !5 0 K < $@ $TP .'9?<VAO<G1?
M87)R87D '( !+] ", !0, "I, ) ! !( !-P )4 "C ! @
M 0@ 50 # ,P ' !( !.C #AV7W5N<VEG;F5D7V-H87)?87)R
M87D '( !-, ", !0, "G( ) ! !( !/' )4 "C ! @
M 0@ 50 " ,0 ' !( !/X #AV7W-I9VYE9%]C:&%R7V%R<F%Y !R
M 3HP C 4# J" "0 0 2 4' "5 HP 0 ( $(
M %4 0 "H !P 2 41@ X=E]C:&%R7V%R<F%Y !R 3^ C 4# J
MJ "0 !P 2 4:@ X=E]D;W5B;&4 %4 #P C 4# IV ", !P 2
M 4C0 X=E]F;&]A= 50 . ", !0, "H, *P ' !( !2X #AV7W5N
M<VEG;F5D7VQO;F< %4 # C 4# J2 "D !P 2 4X0 X=E]S:6=N
M961?;&]N9P 50 + ", !0, "G, (@ ' !( !4# #AV7VQO;F< %4
M"@ C 4# J. "H !P 2 5+0 X=E]U;G-I9VYE9%]I;G0 %4 "0 C
M 4# IP "@ !P 2 550 X=E]S:6=N961?:6YT !5 @ (P % P
M*<0 A < $@ %78 .'9?:6YT !5 < (P % P *> L < $@
M%:( .'9?=6YS:6=N961?<VAO<G0 %4 !@ C 4# IU "H !P 2 5
MS X=E]S:6=N961?<VAO<G0 %4 !0 C 4# J+ ", !P 2 5[P X
M=E]S:&]R= 50 $ ", !0, "H\ *P ' !( !8: #AV7W5N<VEG;F5D
M7V-H87( %4 P C 4# J"@ "D !P 2 60P X=E]S:6=N961?8VAA
M<@ 50 " ", !0, "I$ (@ ' !( !9E #AV7V-H87( %4 0 C 4#
M JS 0 ' "D@ $_ !Y__\ ( >O__ ,
M 'O__P %@ !]__\ " ?O__ J '___P - "!__\
M #X @O__ !( (/__P 4@ "%__\ %P AO__ !F
M (?__P < ")__\ 'H BO__ "$ ++__P C@ "U__\
M )$ MO__ "3 +?__P E@ "Y__\ )D NO__ "<
M +O__P GP "]__\ *( OO__ "E +___P J #!__\
M *L PO__ "N ,/__P L0 #%__\ +0 QO__ "X
M ,G__P O #*__\ , R___ #$ ,W__P R #.__\
M ,P S___ #0 -'__P U #2__\ -@ T___ #<
M -7__P X #6__\ .0 U___ #H -G__P [ #:__\
M / W/__ #T -W__P ^ #>__\ /P X/__ $
M .'__P !! #B__\ 0@ Y/__ $, .7__P !$ #F__\
M 10 Z/__ $8 .G__P !' #J__\ 2 [/__ $D
M .W__P !* #O__\ 2P \/__ $O /'__P !,@ #R__\
M 34 ]/__ $X /;__P !/ #W__\ 3P /__ %$
M $
M ! @ $-0 #4 $P 0 ) !0
M ( !#H Z $@ # 0 $ #P L " 1
M, 3 #0 ! ( $ $ !< # @ $@ (
M >P 0 ? ! ( !)\ "? #
M # !P 0 , *0 P & 2L K 0
M 0 " "\ , !@ $L + @
M$ @ T # 8 !- #0 !< ! (
M .@ P & 9 "0 0 0 " $
M ! @ &1 D0 % " !( 0
M , "DD )) @ 0 3@ $ # I
M, "3 < 0 ! %, & P *4P E,
M < 0 ! @ !< " , "G )P <
M @ 80 ( "< < $
M !P $ $ &D # !# $T0
M 0 !Q P 5D0 )$ $
M >P $ %B( 0N ! (0
M ! !I0 6< ! "+ 0
> PP I( $
end

View File

@ -0,0 +1,31 @@
#include <errno.h>
#include <stdio.h>
int
main ()
{
char x;
int nbytes;
printf ("talk to me baby\n");
while (1)
{
nbytes = read (0, &x, 1);
if (nbytes < 0)
{
if (errno != EINTR)
perror ("");
}
else if (nbytes == 0)
{
printf ("end of file\n");
exit (0);
}
else
write (1, &x, 1);
}
}
int
func1 ()
{
return 4;
}

View File

@ -0,0 +1,39 @@
#include "list0.h"
main ()
{
int x;
x = 0;
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
foo (x++);
}
static void
unused ()
{
/* Not used for anything */
}

View File

@ -0,0 +1,36 @@
/* An include file that actually causes code to be generated in the
including file. This is known to cause problems on some systems. */
static void
foo (x)
int x;
{
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
bar (x++);
}

View File

@ -0,0 +1,12 @@
void
bar (x)
int x;
{
printf ("%d\n", x);
}
static void
unused ()
{
/* Not used for anything */
}

View File

@ -0,0 +1,459 @@
begin 777 m68k-aout
M !"P $ ! #$@
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M $Y6__!(USB 2^X !$GM 0F3$J<9ORYTV4"68PCS $ 0O.0 $ 0O"R\5
M8?\ %"WOP #"\ 8?\ -.6(],[CB __!.7DYU3E8 $Y>3G4 $@.
M $C7 !P & ).7DYU2 X 2-< ' 8 DY>3G5(#@ !(UP
M< !@ "3EY.=4@. $C7 !P & ).7DYU2 X 2-< ' 8
M DY>3G5(#@ !(UP < !@ "3EY.=4@. $C7 !"@& ).7DYU
M2 X 2-< $* 8 DY>3G5(#@ !(UP 0H!@ "3EY.=4@.
M $C7 !"@& ).7DYU2 X 2-< $* 8 DY>3G5(#@ !(UP
M0H!@ "3EY.=4@. $C7 #R %P/8 DY>3G5(#@ !(UP \@!<
M#V ).7DYU2 X 2-< $(Y 0-!/\ $ ! V$_P @ $#@S_ #
M 0.C/\ 0 ! \,_P !0 $#YP!B/ 00' '(\ !!$< @CP $$AP
M"2/ 03' *(\ !!0< LCP $%0C_$+( !!8(_Q :0 07"/\
M $& 3^0 $#0 !!D$_D ! V 09A/Y 0. $&@S^0 $#H
M !!L,_D ! \ 0<#/Y 0/@ $'0C^0 $$ !!\(_D !!$ 0A"/Y
M 02 $(PC^0 $$P !"4(_D !!0 0G"/Y 05 $*0C^0 $%@
M !"L(_D !!< 0M"/Y 08 $+@C_ $#0 !#$(_P ! V 0R"/\
M 0. $,PC_ $#H !#0(_P ! \ 0U"/\ 0/@ $-@C_ $$
M !#<(_P !!$ 0X"/\ 02 $.0C_ $$P !#H(_P !!0 0["/\
M 05 $/ C_ $%@ !#T(_P !!< 0^' "(\ !'4< (CP $=AP
M 2/ 1X' !(\ !'<(_D !$\ 11#/Y 1+ $31.7DYU0"@C*61B
M>'AX+G,)-2XR("A"97)K96QE>2D@-R\Q,B\X-0 2'D !'H('D !'D3I!8
MCTYR"HQ.5@ 8?\ 6+RX "&'_ %%B/3EY.=0 3E8 $Y>3G5.5@
M< %.0"/ 3Y'#_3EY.=0
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M ! , $YU ! *",I8W)T,"YC"30N-B H0F5R:V5L97DI(#,O,S O
M.#, !
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M ! 0 &0 "P0 )( !4 $V0 !4 &X
M /8 3X <H
MC( IX Q8 WX
M ^( !"8 !'( !*(
M !,B $ !/" $ !32 $ !8"
M ( !:R ( !?2 ( !D2 0 !
MFB 0 !JB 0 !O" 0 !QB 0
M !UR 0 !ZB 0 !]2 @ " B $
M "'2 $ "-2 $ "62 ( "=2
M ( "CB ( "LR 0 "S2 0 "
MY" 0 #!R 0 #&" 0 #," 0
M #2B 0 #9B @ #A" $ #FB $
M #M" $ #TR ( #ZB ( $!2
M ( $)2 0 $.B 0 $4R 0 $
M<2 0 $A" 0 $GB 0 $NB 0
M $T2 @ $ZH !C___L% %@R !@ %D2 !@
M &*X C___L% &O" @ &R" @ '6B0
M $ !4 $0 'D !> ':20 $ !H $0 'H !R '
M?R0 $ !\ $0 'L "& 'ER0 ( "0 $0 'T ":
M 'IR0 ( "D $0 'X "N 'OB0 ( "X $0 '\
M #" 'UR0 0 #, $0 ($ #6 'Y20 0 #@ $0
M (( #J '^B0 0 #T $0 (, #^ ($20 0 $(
M $0 (4 $2 (("0 0 $< $0 (8 $F (-B0 0 $P
M $0 (< $Z (3B0 0 %$ $0 (D %. (7B0 @
M %: $0 (H %D (<( )C___L% (W" )@ (YX
M )#___L% ))R ) ),B 0 )5H 3___L% )
M?2 0 )C" 0 )JH 3___L% )QB 0
M )U( 3___L% )\H 3___L% *#H 3___L% *&X 3_
M__L% *2"0 0 %P $0 +( %Z $0 +, %Z $0
M +0 %Z $0 +4 %Z $0 +8 & $0 +< &(
M $0 +@ &0 $0 +D &0 $0 +H &8 $0 +L &@
M $0 +P &H $0 +T &H $0 +X &P $0 +\
M &X $0 , ' $0 ,$ ' $0 ,( '( $0
M ,, '0 $0 ,0 '8 $0 ,4 '8 $0 ,8 'B
M $0 ,< 'V $0 ,@ 'V $0 ,D 'V $0 ,H (
M $0 ,L (* $0 ,P (4 $0 ,T (4 $0 ,X
M (> $0 ,\ (H $0 - (R $0 -$ (R $0
M -( (\ $0 -, )& $0 -0 )0 $0 -4 )0
M $0 -8 ): $0 -< )D $0 -@ )N $0 -D )N
M $0 -H )X $0 -L *, $0 -P *, $0 -T
M *6 $0 -X *@ $0 -\ *J $0 . *J $0
M .$ *T $0 .( *^ $0 ., +( $0 .0 +(
M $0 .4 +2 $0 .8 +< $0 .< +F $0 .@ +F
M $0 .D +P $0 .H +Z $0 .L ,$ $0 .P
M ,$ $0 .T ,. $0 .X ,8 $0 .\ ,8 $0
M / ,@ $0 /$ ,H $0 /( ,P $0 /, ,X
M $0 /0 ,X $0 /4 -" $0 /8 -" $0 /< -,
M *4 0 /< -0 *5 0 -0 *7 0 .( *8P0 !N(
M .D *:P0 Y8 .L *<P0 !N( .T *? < !7( ! $ *A04
M!0X *BP4 WX %P *D04 Z .( *EP4 !BX !* *
MHP< )( ! ( *J@D !T8 ! T *L@D !^X ! V *P0D !&8 ! X
M *T@D !YH ! Z *VPD $P ! \ *ZPD =H ! ^ *_0D !_
M !! +! D "$0 !!$ +$@D !H !!( +(@D ![D !!, +*@D
M"&$ !!0 +.0D !-D !!4 +2@D !L@ !!8 +4PD !6L !!< +
M70D !W, !!D +:PD !ET !!F +@ D !&D !!H +EPD ID !!L
M +I@D &T !!P +O D !2, !!T +U D !MT !!\ +X0D @,
M !"$ +]0D 0D !", ,"PD ;L !"4 ,&0D *4 !"< ,+@D
M!T\ !"D ,10D <T !"L ,5 D +D !"T ,9 D "%( !#$ ,
M= D _H !#( ,BPD !,@ !#, ,I D !B8 !#0 ,M0D !A0 !#4
M ,S0D !ZP !#8 ,YPD !?H !#< ,]@D \X !#@ -# D "(0
M !#D -) D JX !#H -- D !O0 !#L -2PD !\( !#P -9 D
M O8 !#T -=0D !T0 !#X -APD !RL !#\ -D@D !RP !$4 -
MG0D !\8 !$L -I@D !R !$T -L 4 ZL !4 -O04 !V\ !H
M -T04 !G4 !\ -YP4 !8T "0 -]04 !'< "D ."@4 H,
M "X .(04 !Z\ #, .+04 /, #@ .0 4 !,4 #T .504
M ,\ $( .8@4 !), $< .=@4 YD $P .C 4 !2< %$ .
MF@4 !)T %: .J0D !T4 !$\ .L0D !X4 !%$ .N0D !\\ !'4
M .P@D G< !'8 .S@D !)X !'< .UPD O@ !'@ .X@D 2<
M !'D .ZP4 :D -T .] 4 ;0 .$ ._0< !,8 ! P /!P4
M Y8 .D /$04 !N( .L /& 4 "!P .T /'PD !Y< !/D /
M)F-R=# N;P!G9&)M92YO &=D8FUE+F, :6YT.G0Q/7(Q.RTR,30W-#@S-C0X
M.S(Q-#<T.#,V-#<[ &-H87(Z=#(]<C([,#LQ,C<[ &QO;F<Z=#,]<C$[+3(Q
M-#<T.#,V-#@[,C$T-S0X,S8T-SL <VAO<G0Z=#0]<C$[+3,R-S8X.S,R-S8W
M.P!U;G-I9VYE9"!C:&%R.G0U/7(Q.S [,C4U.P!U;G-I9VYE9"!S:&]R=#IT
M-CUR,3LP.S8U-3,U.P!U;G-I9VYE9"!L;VYG.G0W/7(Q.S [+3$[ '5N<VEG
M;F5D(&EN=#IT.#UR,3LP.RTQ.P!F;&]A=#IT.3UR,3LT.S [ &1O=6)L93IT
M,3 ]<C$[.#LP.P!V;VED.G0Q,3TQ,0 _/S\Z=#$R/3$ =E]C:&%R.D<R '9?
M<VEG;F5D7V-H87(Z1S( =E]U;G-I9VYE9%]C:&%R.D<U '9?<VAO<G0Z1S0
M=E]S:6=N961?<VAO<G0Z1S0 =E]U;G-I9VYE9%]S:&]R=#I'-@!V7VEN=#I'
M,0!V7W-I9VYE9%]I;G0Z1S$ =E]U;G-I9VYE9%]I;G0Z1S@ =E]L;VYG.D<Q
M '9?<VEG;F5D7VQO;F<Z1S$ =E]U;G-I9VYE9%]L;VYG.D<X '9?9FQO870Z
M1SD =E]D;W5B;&4Z1S$P '9?8VAA<E]A<G)A>3I',3,]87(Q.S [,3LR '9?
M<VEG;F5D7V-H87)?87)R87DZ1S$S '9?=6YS:6=N961?8VAA<E]A<G)A>3I'
M,30]87(Q.S [,3LU '9?<VAO<G1?87)R87DZ1S$U/6%R,3LP.S$[- !V7W-I
M9VYE9%]S:&]R=%]A<G)A>3I',34 =E]U;G-I9VYE9%]S:&]R=%]A<G)A>3I'
M,38]87(Q.S [,3LV '9?:6YT7V%R<F%Y.D<Q-SUA<C$[,#LQ.S$ =E]S:6=N
M961?:6YT7V%R<F%Y.D<Q-P!V7W5N<VEG;F5D7VEN=%]A<G)A>3I',3@]87(Q
M.S [,3LX '9?;&]N9U]A<G)A>3I',3< =E]S:6=N961?;&]N9U]A<G)A>3I'
M,3< =E]U;G-I9VYE9%]L;VYG7V%R<F%Y.D<Q. !V7V9L;V%T7V%R<F%Y.D<Q
M.3UA<C$[,#LQ.SD =E]D;W5B;&5?87)R87DZ1S(P/6%R,3LP.S$[,3 =E]C
M:&%R7W!O:6YT97(Z1S(Q/2HR '9?<VEG;F5D7V-H87)?<&]I;G1E<CI',C$
M=E]U;G-I9VYE9%]C:&%R7W!O:6YT97(Z1S(R/2HU '9?<VAO<G1?<&]I;G1E
M<CI',C,]*C0 =E]S:6=N961?<VAO<G1?<&]I;G1E<CI',C, =E]U;G-I9VYE
M9%]S:&]R=%]P;VEN=&5R.D<R-#TJ-@!V7VEN=%]P;VEN=&5R.D<R-3TJ,0!V
M7W-I9VYE9%]I;G1?<&]I;G1E<CI',C4 =E]U;G-I9VYE9%]I;G1?<&]I;G1E
M<CI',C8]*C@ =E]L;VYG7W!O:6YT97(Z1S(U '9?<VEG;F5D7VQO;F=?<&]I
M;G1E<CI',C4 =E]U;G-I9VYE9%]L;VYG7W!O:6YT97(Z1S(V '9?9FQO871?
M<&]I;G1E<CI',C<]*CD =E]D;W5B;&5?<&]I;G1E<CI',C@]*C$P '1?<W1R
M=6-T.E0R.3US,C1V7V-H87)?;65M8F5R.C(L,"PX.W9?<VAO<G1?;65M8F5R
M.C0L,38L,38[=E]I;G1?;65M8F5R.C$L,S(L,S([=E]L;VYG7VUE;6)E<CHQ
M+#8T+#,R.W9?9FQO871?;65M8F5R.CDL.38L,S([=E]D;W5B;&5?;65M8F5R
M.C$P+#$R."PV-#L[ '9?<W1R=6-T,3I',CD =E]S=')U8W0R.D<S,#US,C1V
M7V-H87)?;65M8F5R.C(L,"PX.W9?<VAO<G1?;65M8F5R.C0L,38L,38[=E]I
M;G1?;65M8F5R.C$L,S(L,S([=E]L;VYG7VUE;6)E<CHQ+#8T+#,R.W9?9FQO
M871?;65M8F5R.CDL.38L,S([=E]D;W5B;&5?;65M8F5R.C$P+#$R."PV-#L[
M '1?=6YI;VXZ5#,Q/74X=E]C:&%R7VUE;6)E<CHR+# L.#MV7W-H;W)T7VUE
M;6)E<CHT+# L,38[=E]I;G1?;65M8F5R.C$L,"PS,CMV7VQO;F=?;65M8F5R
M.C$L,"PS,CMV7V9L;V%T7VUE;6)E<CHY+# L,S([=E]D;W5B;&5?;65M8F5R
M.C$P+# L-C0[.P!V7W5N:6]N.D<S,0!V7W5N:6]N,CI',S(]=3AV7V-H87)?
M;65M8F5R.C(L,"PX.W9?<VAO<G1?;65M8F5R.C0L,"PQ-CMV7VEN=%]M96UB
M97(Z,2PP+#,R.W9?;&]N9U]M96UB97(Z,2PP+#,R.W9?9FQO871?;65M8F5R
M.CDL,"PS,CMV7V1O=6)L95]M96UB97(Z,3 L,"PV-#L[ '9?8VAA<E]F=6YC
M.D8R '9?<VEG;F5D7V-H87)?9G5N8SI&,@!V7W5N<VEG;F5D7V-H87)?9G5N
M8SI&-0!V7W-H;W)T7V9U;F,Z1C0 =E]S:6=N961?<VAO<G1?9G5N8SI&- !V
M7W5N<VEG;F5D7W-H;W)T7V9U;F,Z1C8 =E]I;G1?9G5N8SI&,0!V7W-I9VYE
M9%]I;G1?9G5N8SI&,0!V7W5N<VEG;F5D7VEN=%]F=6YC.D8X '9?;&]N9U]F
M=6YC.D8Q '9?<VEG;F5D7VQO;F=?9G5N8SI&,0!V7W5N<VEG;F5D7VQO;F=?
M9G5N8SI&. !V7V9L;V%T7V9U;F,Z1CD =E]D;W5B;&5?9G5N8SI&,3 ;&EN
M:SI4,S,]<S$U,FYE>'0Z,S0]*C,S+# L,S([;&EN:V9U;F,Z,S4]*C,V/68S
M-"PS,BPS,CMS='5F9CHS-SUA<C$[,#LP.S,X/6%R,3LP.S$[,SD]87(Q.S [
M,CLR.2PV-"PQ,34R.SL <U]L:6YK.D<S- !T=5]L:6YK.E0T,#UU,30T;F5X
M=#HS-"PP+#,R.VQI;FMF=6YC.C,U+# L,S([<W1U9F8Z,S<L,"PQ,34R.SL
M=5]L:6YK.D<T, !P<FEM87)Y.D<T,3UE<F5D.C L9W)E96XZ,2QB;'5E.C(L
M.P!C;VQO<G,Z5#0R/65Y96QL;W<Z,"QP=7)P;&4Z,2QP:6YK.C(L.P!N;VYP
M<FEM87)Y.D<T,@!C;'5N:V5R.D<T,SUE8VAE=GDZ,"QF;W)D.C$L.P!C87)S
M.E0T-#UE8FUW.C L<&]R<V-H93HQ+#L <W!O<G1S8V%R.D<T- !B;V]L96%N
M.G0T-3UE1D%,4T4Z,"Q44E5%.C$L.P!B=F%L<SI4-#8]969A;'-E.C L=')U
M93HQ+#L 8F]O;&5A;C(Z=#0V &UI<V]R9&5R960Z5#0W/65T=V\Z,BQO;F4Z
M,2QZ97)O.C L=&AR964Z,RP[ &UA:6XZ1C$ +6QG %]S8V-S:60 97AI="YO
M &9A:V-U+F\ 7V5X:70N;P!C97)R;W(N;P!?96YV:7)O;@!S=&%R= !?;6%I
M;@!?97AI= !?;6]N8V]N=')O; !M8V]U;G0 7W9?8VAA<@!?=E]S:6=N961?
M8VAA<@!?=E]U;G-I9VYE9%]C:&%R %]V7W-H;W)T %]V7W-I9VYE9%]S:&]R
M= !?=E]U;G-I9VYE9%]S:&]R= !?=E]I;G0 7W9?<VEG;F5D7VEN= !?=E]U
M;G-I9VYE9%]I;G0 7W9?;&]N9P!?=E]S:6=N961?;&]N9P!?=E]U;G-I9VYE
M9%]L;VYG %]V7V9L;V%T %]V7V1O=6)L90!?=E]C:&%R7V%R<F%Y %]V7W-I
M9VYE9%]C:&%R7V%R<F%Y %]V7W5N<VEG;F5D7V-H87)?87)R87D 7W9?<VAO
M<G1?87)R87D 7W9?<VEG;F5D7W-H;W)T7V%R<F%Y %]V7W5N<VEG;F5D7W-H
M;W)T7V%R<F%Y %]V7VEN=%]A<G)A>0!?=E]S:6=N961?:6YT7V%R<F%Y %]V
M7W5N<VEG;F5D7VEN=%]A<G)A>0!?=E]L;VYG7V%R<F%Y %]V7W-I9VYE9%]L
M;VYG7V%R<F%Y %]V7W5N<VEG;F5D7VQO;F=?87)R87D 7W9?9FQO871?87)R
M87D 7W9?9&]U8FQE7V%R<F%Y %]V7V-H87)?<&]I;G1E<@!?=E]S:6=N961?
M8VAA<E]P;VEN=&5R %]V7W5N<VEG;F5D7V-H87)?<&]I;G1E<@!?=E]S:&]R
M=%]P;VEN=&5R %]V7W-I9VYE9%]S:&]R=%]P;VEN=&5R %]V7W5N<VEG;F5D
M7W-H;W)T7W!O:6YT97( 7W9?:6YT7W!O:6YT97( 7W9?<VEG;F5D7VEN=%]P
M;VEN=&5R %]V7W5N<VEG;F5D7VEN=%]P;VEN=&5R %]V7VQO;F=?<&]I;G1E
M<@!?=E]S:6=N961?;&]N9U]P;VEN=&5R %]V7W5N<VEG;F5D7VQO;F=?<&]I
M;G1E<@!?=E]F;&]A=%]P;VEN=&5R %]V7V1O=6)L95]P;VEN=&5R %]V7W-T
M<G5C=#$ 7W9?<W1R=6-T,@!?=E]U;FEO;@!?=E]U;FEO;C( 7W9?8VAA<E]F
M=6YC %]V7W-I9VYE9%]C:&%R7V9U;F, 7W9?=6YS:6=N961?8VAA<E]F=6YC
M %]V7W-H;W)T7V9U;F, 7W9?<VEG;F5D7W-H;W)T7V9U;F, 7W9?=6YS:6=N
M961?<VAO<G1?9G5N8P!?=E]I;G1?9G5N8P!?=E]S:6=N961?:6YT7V9U;F,
M7W9?=6YS:6=N961?:6YT7V9U;F, 7W9?;&]N9U]F=6YC %]V7W-I9VYE9%]L
M;VYG7V9U;F, 7W9?=6YS:6=N961?;&]N9U]F=6YC %]V7V9L;V%T7V9U;F,
M7W9?9&]U8FQE7V9U;F, 7W-?;&EN:P!?=5]L:6YK %]P<FEM87)Y %]N;VYP
M<FEM87)Y %]C;'5N:V5R %]S<&]R='-C87( 7U]D8F%R9W, 7U]D8G-U8F,
M7U]D8G-U8FX 7U]L9U]F;&%G %]?8VQE86YU< !?7V5X:70 8V5R<F]R %]E
M<G)N;P
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
%
end

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,298 @@
begin 777 m68k-elf
M?T5,1@$" 0 " 0 !@ $> #0 #"0 T "
M!0 H !4 $0 8 T@ - "@ H 4 P
M -0 !, ! ! -( #0 )
MC "8P % @ $ G @ IP "4 "6 < "
M @ ">2 "GD ' !P O=7-R+VQI8B]L:6)C
M+G-O+C$ &$ ,
M 4 P !P 0
M + ! @
M
M "@
M ( )
M
M
M
M
M!@ ! "02 "H +!@
M$0#_\0 ^ "G$ !!$ H 8@ )P 1 /_Q 'P
M !:$@ ": "I4 !$ __$ M 2 ,H
M!-@ $$0 " #\ !( !)@ IR 1 /_Q
M7X *>0 $0#_\0!?8VQE86YU< !?96YD %]E;G9I<F]N %]E=&5X= !A
M=&5X:70 7V5D871A &5X:70 7VQI8E]V97)S:6]N %]?9G!S=&%R= !?1TQ/
M0D%,7T]&1E-%5%]404),15\ 7T193D%-24, +W5S<B]L:6(O;&EB8RYS;RXQ
M " "G4 %%0 " "G8 !%0 " "G< )%0 " "G@ '
M%0 !.=4YQ+SL!< );9.^P%Q EL@ !.^P%Q EJB\\ &#_
M____W$[[ 7$ "6:+SP ,8/_____(3OL!<0 )8HO/ !A@_____[1.
M^P%Q E>B\\ )&#_____H"\\@ )O$ZY@ $*%A/(#R 0\9_\ .
M+P!.N8 !"A83Y_\ #"Z60>X !"]( 1*F&;\(\B "G$+T@ "$ZY@ $
M$$ZY@ $4$ZY@ 'K"Z 3KF 1D3G5.<0 !(#O____Q([P 3R-_
M 7 $< !@_P 3R-] 7 $3.\ $3EY.=4@._____$CO
M!/(W\ !< 1P &#_ !/(WT !< 1,[P 1.7DYU2 [____\
M2.\ $\C?P %P !' 8/\ $\C?0 %P !$SO !$Y>3G5(
M#O____Q([P 3R-_ 7 $< !@_P 3R-] 7 $3.\ $
M3EY.=4@._____$CO !/(W\ !< 1P &#_ !/(WT !< 1,
M[P 1.7DYU2 [____\2.\ $\C?P %P !' 8/\ $\C?0 %P
M !$SO !$Y>3G5(#O____Q([P 3R-_ 7 $< !@_P 3R
M-] 7 $3.\ $3EY.=4@._____$CO !/(W\ !< 1P &#_
M !/(WT !< 1,[P 1.7DYU2 [____\2.\ $\C?P %P
M!' 8/\ $\C?0 %P !$SO !$Y>3G5(#O____Q([P 3R-_
M 7 $< !@_P 3R-] 7 $3.\ $3EY.=4@._____$CO
M!/(W\ !< 1P &#_ !/(WT !< 1,[P 1.7DYU2 [____\
M2.\ $\C?P %P !' 8/\ $\C?0 %P !$SO !$Y>3G5(
M#O____Q([P 3R-_ 7 $\CQ4 8/\ $\C?0 %P
M !$SO !$Y>3G5(#O____Q([P 3R-_ 7 $\CQ4
M 8/\ $\C?0 %P !$SO !$Y>3G5(#O____Q([P 3R-_
M 7 $0CF "MD$_P 8 *N 3_ "@ JI#/\ . "K8,_P !( *L@S
M_ %@ J;"/\ !H *G@C_ > "I8(_P (@ J7"/\ "8
M*M0C_ J "ID(_P +@ JY"/\0L@ ( *J@C_$!I " "IP(_P
M @ J=!/Y@ K9( *T 3^8 *N" "J@$_F "JD@ J8#/Y@ JV(
M*N@S^8 *LB "JT,_F "IL@ J["/Y@ J>( *H0C^8 *EB "KX(_F
M "I<@ JO"/Y@ JU( *UPC^8 *F2 "JL(_F "KD@ JS"/Y@ JJ(
M*TPC^8 *G" "J0(_F "IT@ JE"/\@ K9( *O C_( *N" "M8(_R
M "JD@ J]"/\@ JV( *U0C_( *LB "L((_R "IL@ J:"/\@ J>(
M*K@C_( *EB "L (_R "I<@ JQ"/\@ JU( *MPC_( *F2 "M((_R
M "KD@ J@"/\@ JJ( *T0C_( *G" "L,(_P "@ JC"/\ H
M*GPC_ & "P (_P !@ K:"/Y@ K!( *W S^8 +!" "P(\C?0
M %P !$SO !$Y>3G5.=4YQ " "GD " 0P
M@ $1( !%B 1L 0 &@ ,@ $$ V F\ !( .@
M %@ #9 : *D "@ 'L + $ !4 X
M*<@ " , !0 ' %X ^
M 0 ! #_\0 " #4 , $
M@ Z # " ( J0 P P " -D , 0
M @ #X # % ( !! P !@ " 04 ,
M < @ $> # ( ( ";P P "0 " "G
M , H @ IR # + ( *>0 P # " "I8
M , T # . P #P
M , ! # 1 P $@
M , !, # 4 "@ ! #_
M\0 !$ 0 __$ 8 $ /_Q )
M! #_\0 "P 0 __$ V $ /_Q /8 !-P
M R$@ " $F "I8 !!$ T !6@ J7 01 - 98
M";P $@ "0 &N "I@ A$ T "!@ 'K A 2 (
MAH *F0 $$0 #0 )2 "IH !!$ T "M@ $/ "02
M MH +!@ $0#_\0 +N "IL A$ T #,@ %U@ #(2
M ( XH *G ($0 #0 .N "IX !!$ T #Q@ $>
M 2 ( ^( *GP $$0 #0 0. "G$ !!$ H $,@ J
M@ 01 - !)( *H0 ($0 #0 3" "J, !!$ T $X
M@ %#@ #(2 ( !2X *I 0$0 #0 5J G !$ __$
M %A@ JH (1 - !=8 *J0 !$0 #0 86 "JH !!$
M T &-@ JK @1 - !H8 !"@ !:$@ :B "G$
M!"$ H &P@ &G@ #(2 ( !O( !P( R$@ " =& "JT
M !!$ T 'F@ JN 01 - !]( *E0 $0#_\0 ?N
M 5R ,A( @ ((@ JO @1 - "'8 *L0 $$0 #0
M C2 8( ,A( @ (_@ JR (1 - "3H !S0 \$@
M" EN 1D !( )@@ JS @1 - "=H *M0 $
M$0 #0 GV "K8 A$ T *%@ JW 01 - "E( *N
M !$0 #0 J* "KD !!$ T *R@ JZ 01 - "P(
M*NP $$0 #0 M> 38 !!$ @ +D@ $U 2 ( "
M[( *O $$0 #0 ON "KT !!$ T ,3@ J^ @1 -
M #)H !% $@ S" "L !!$ T -%@ K! 01
M - #3( *<@ $0#_\0 V* "L( !!$ T -Y@ K#
M 01 - #BH *< $$0 "@ YR "L0 &!$ T .F@ K
M* !@1 - #L( *T "$0 #0 [V "M$ !!$ T /-
M@ K2 01 - #XX !W \$@ " _& 8Z ,A( @
M 0#@ IY 1 /_Q $#( *TP ($0 #0 !!J "M4 !!$
M T 0J@ &T #(2 ( $/8 *U@ $$0 #0 !%. "M<
M"!$ T 1@@ $$ 2 & $9H *V0 !$0 #0 !&V "MH
M !!$ T 1U@ %0 #(2 ( $BH *W "0$0 #0 !)&
M 6D ,A( @ 2E@ L 01 - $KX + @ ($0 #0
M!+B 9L ,A( @ 3,@ L$ @1 - &TV.&LN96QF &-R=#$N
M<P!C<G1I+G, =F%L=65S+5AT+F, 9V1B;64N8P!S:%]D871A+F, 8W)T;BYS
M '9?8VAA<E]F=6YC '9?<VEG;F5D7VEN= !V7W5N<VEG;F5D7VEN= !?9FEN
M:0!V7W5N<VEG;F5D7V-H87)?87)R87D ;6%I;@!V7W-I9VYE9%]L;VYG '9?
M=6YS:6=N961?<VAO<G1?<&]I;G1E<@!?8VQE86YU< !?96YD '9?=6YS:6=N
M961?<VAO<G0 =E]U;G-I9VYE9%]S:&]R=%]F=6YC '9?9&]U8FQE '9?:6YT
M %]S=&%R= !N;VYP<FEM87)Y %]E;G9I<F]N '9?=6YS:6=N961?;&]N9U]P
M;VEN=&5R '9?:6YT7V%R<F%Y '!R:6UA<GD =E]S:6=N961?8VAA<E]F=6YC
M '9?9&]U8FQE7V%R<F%Y %]E=&5X= !V7W-I9VYE9%]C:&%R7V%R<F%Y '9?
M=6YS:6=N961?8VAA<@!V7V9L;V%T '9?<VEG;F5D7VQO;F=?87)R87D 871E
M>&ET &5N=FER;VX =E]L;VYG7V9U;F, =E]U;G-I9VYE9%]L;VYG7V9U;F,
M=E]S:6=N961?<VAO<G1?87)R87D =E]I;G1?<&]I;G1E<@!?961A=&$ =E]S
M:&]R=%]F=6YC '9?=6YS:6=N961?:6YT7V%R<F%Y '9?=6YS:6=N961?:6YT
M7W!O:6YT97( =E]I;G1?9G5N8P!V7W-I9VYE9%]S:&]R= !V7V9L;V%T7V9U
M;F, 97AI= !V7W5N<VEG;F5D7VQO;F=?87)R87D =E]L;VYG '9?<VAO<G0
M=E]L;VYG7W!O:6YT97( =E]S:6=N961?8VAA<@!V7W5N<VEG;F5D7VQO;F<
M=E]S:&]R=%]A<G)A>0!V7W5N<VEG;F5D7W-H;W)T7V%R<F%Y %]L:6)?=F5R
M<VEO;@!?;6-O=6YT '9?8VAA<E]P;VEN=&5R '9?=6YS:6=N961?8VAA<E]P
M;VEN=&5R '9?<VEG;F5D7VEN=%]A<G)A>0!?7V9P<W1A<G0 =E]S:6=N961?
M:6YT7W!O:6YT97( <U]L:6YK %]'3$]"04Q?3T9&4T547U1!0DQ%7P!V7W-I
M9VYE9%]S:&]R=%]P;VEN=&5R '9?9&]U8FQE7W!O:6YT97( 7U]L;VYG9&]U
M8FQE7W5S960 =E]S=')U8W0Q '9?<W1R=6-T,@!V7V-H87)?87)R87D =E]F
M;&]A=%]P;VEN=&5R '9?<VEG;F5D7VQO;F=?<&]I;G1E<@!V7V1O=6)L95]F
M=6YC '9?<VEG;F5D7VEN=%]F=6YC %]$64Y!34E# '9?9FQO871?87)R87D
M=E]S:&]R=%]P;VEN=&5R '9?<VEG;F5D7VQO;F=?9G5N8P!V7W-I9VYE9%]C
M:&%R7W!O:6YT97( =E]L;VYG7V%R<F%Y %]I;FET '9?8VAA<@!C;'5N:V5R
M '9?=6YS:6=N961?8VAA<E]F=6YC '5?;&EN:P!V7W-I9VYE9%]S:&]R=%]F
M=6YC '-P;W)T<V-A<@!V7W5N:6]N,@!V7W5N<VEG;F5D7VEN=%]F=6YC '9?
M=6YI;VX "YI;G1E<G +FAA<V@ +F1Y;G-Y;0 N9'EN<W1R "YR96QA+G!L
M= N:6YI= N<&QT "YT97AT "YF:6YI "YD871A "YG;W0 +F1Y;F%M:6,
M+F)S<P N<WEM=&%B "YS=')T86( +G!E<V5L "YS:'-T<G1A8@ N8V]M;65N
M= N9&5B=6< +FQI;F4 0"@C*6QI8F,M;3,R.FTT+F1E9@DQ+C0 0"@C*6QI
M8F,M;3,R.F-S=2]C<G0Q+G,),2XQ. ! *",I;&EB8RUM,S(Z;30N9&5F
M"3$N- ! *",I;&EB8RUM,S(Z8W-U+V-R=&DN<PDQ+C, 87,Z("A#1%,I(#4N
M," Q+S(O.3 0"@C*6QI8F,M;3,R.FTT+F1E9@DQ+C0 0"@C*6QI8F,M
M;3,R.F-S=2]C<G1N+G,),2XV "!L9" Z("A#1%,I(#4N," Q+S(O.3
M "X $0 2 6< X9V1B;64N8P !-@ $!$8 !-P!(8 ";P!!@
M = !, $@ 4X .'1?<W1R=6-T "V & "H #0 2 =0 X=E]C
M:&%R7VUE;6)E<@ 50 ! ", !@0 !P "L #0 2 H X=E]S:&]R
M=%]M96UB97( %4 ! C 8$ @< I T $@ ,D .'9?:6YT7VUE
M;6)E<@ 50 ' ", !@0 $!P "H #0 2 \P X=E]L;VYG7VUE;6)E
M<@ 50 * ", !@0 (!P "L #0 2 !'@ X=E]F;&]A=%]M96UB97(
M %4 #@ C 8$ # < L T $@ 4H .'9?9&]U8FQE7VUE;6)E<@
M50 / ", !@0 0!P 0 ; !, $@ FP .'XP9F%K90 M@ !@
M J T $@ 9, .'9?8VAA<E]M96UB97( %4 0 C 8$ < K
M T $@ ;X .'9?<VAO<G1?;65M8F5R !5 0 (P &! (' *0 -
M !( 'G #AV7VEN=%]M96UB97( %4 !P C 8$ ! < J T $@
M A$ .'9?;&]N9U]M96UB97( %4 "@ C 8$ " < K T $@ CP
M.'9?9FQO871?;65M8F5R !5 X (P &! P' + - !( )H #AV
M7V1O=6)L95]M96UB97( %4 #P C 8$ $ < $ ' 7 !( .+
M #AT7W5N:6]N "V " "H #0 2 "L@ X=E]C:&%R7VUE;6)E<@
M50 ! ", !@0 !P "L #0 2 "W0 X=E]S:&]R=%]M96UB97( %4
M! C 8$ < I T $@ P8 .'9?:6YT7VUE;6)E<@ 50 ' ",
M!@0 !P "H #0 2 #, X=E]L;VYG7VUE;6)E<@ 50 * ", !@0
M !P "L #0 2 #6P X=E]F;&]A=%]M96UB97( %4 #@ C 8$
M < L T $@ X< .'9?9&]U8FQE7VUE;6)E<@ 50 / ", !@0
M!P 0 ; !< $@ !*D .'XQ9F%K90 M@ @ J T $@ ]
M.'9?8VAA<E]M96UB97( %4 0 C 8$ < K T $@ _L .'9?
M<VAO<G1?;65M8F5R !5 0 (P &! ' *0 - !( 0D #AV7VEN
M=%]M96UB97( %4 !P C 8$ < J T $@ !$X .'9?;&]N9U]M
M96UB97( %4 "@ C 8$ < K T $@ !'D .'9?9FQO871?;65M
M8F5R !5 X (P &! ' + - !( 2E #AV7V1O=6)L95]M96UB
M97( %4 #P C 8$ < $ *@ & !( 37 #AV7V-H87)?9G5N
M8P 50 ! 1& 3< 2& 4. ! #$ !@ 2 %# X=E]S:6=N961?
M8VAA<E]F=6YC !5 (!$8 !0X!(8 !4 $ ,P & !( 5# #AV
M7W5N<VEG;F5D7V-H87)?9G5N8P 50 # 1& 5 2& 5R ! "L
M!@ 2 %<@ X=E]S:&]R=%]F=6YC !5 0!$8 !7(!(8 !:0 $
M,@ & !( 6H #AV7W-I9VYE9%]S:&]R=%]F=6YC !5 4!$8 !:0!(8
M!=8 $ - & !( 7@ #AV7W5N<VEG;F5D7W-H;W)T7V9U;F, %4
M!@$1@ %U@$A@ &" 0 I 8 $@ !@T .'9?:6YT7V9U;F, %4
M!P$1@ &" $A@ &.@ 0 P 8 $@ !D$ .'9?<VEG;F5D7VEN=%]F
M=6YC !5 @!$8 !CH!(8 !FP $ ,@ & !( 9W #AV7W5N<VEG
M;F5D7VEN=%]F=6YC !5 D!$8 !FP!(8 !IX $ *@ & !( :E
M #AV7VQO;F=?9G5N8P 50 * 1& :> 2& ;0 ! #$ !@ 2 &
MV@ X=E]S:6=N961?;&]N9U]F=6YC !5 L!$8 !M !(8 !P( $
M,P & !( <1 #AV7W5N<VEG;F5D7VQO;F=?9G5N8P 50 , 1& <" 2&
M <T ! "L !@ 2 '0 X=E]F;&]A=%]F=6YC !5 X!$8 !S0!
M(8 !W $ + & !( =P #AV7V1O=6)L95]F=6YC !5 \!$8
M!W !(8 !ZP $ %0 5 !( >N (, !0$ ?J %0 % !( >:
M (, !0$ ?J $ % !( >J %4 !P 0 \ $ $@ !^H E0
M *, * " ( $ @ @@ <@ "X
M 9 !, $@ "'L .&QI;FL +8 "8 )@ - !( @I #AN97AT "#
M 4! 'Z@ C 8$ < J T $@ "%, .&QI;FMF=6YC "# 4!
M '< C 8$ ! < D T $@ "'< .'-T=69F !R 'K@ C 8$
M " < $ %0 5 !( BY (, !0$ ?J %0 % !( BE (,
M!0$ ?J $ % !( BU %4 !P 0 \ $ $@ "/4 E0 *,
M* " ( $ @ @@ <@ "X <
M !< $@ "8D .'1U7VQI;FL +8 "0 )@ - !( DW #AN97AT "#
M 4! 'Z@ C 8$ < J T $@ "6$ .&QI;FMF=6YC "# 4!
M (>P C 8$ < D T $@ "84 .'-T=69F !R (N0 C 8$
M < $ .@ $ !( G' #A^,F9A:V4 +8 $ /, &P )B
M;'5E %G<F5E;@ <F5D 0 ^ 0 $@ "@D .&-O;&]R
M<P M@ 0 \P ? G!I;FL 7!U<G!L90 >65L;&]W
M 0 R 0 $@ "C\ .'XS9F%K90 M@ 0 \P 3 69O<F0
M &-H979Y 0 Q 0 $@ "G0 .&-A<G, +8 $ /, % %P
M;W)S8VAE !B;7< ! #( ! 2 *J@ X?C1F86ME "V
M! #S !, !5%)510 1D%,4T4 ! !P %@ 2 *Q@ X8F]O
M;&5A;@ <@ "G0 Q 0 $@ "OL .&)V86QS "V ! #S !, !
M=')U90 9F%L<V4 ! !T %@ 2 +& X8F]O;&5A;C( '(
M K& 1@ $ !( MB #AM:7-O<F1E<F5D "V ! #S ", #=&AR
M964 'IE<F\ 6]N90 "='=O 0 C 8 $@ "XD
M.&UA:6X %4 !P$1@ 'K $A@ )O 0 G < $@ "[ .'-P;W)T
M<V-A<@ <@ "C\ (P % X + E < $@ "]4 .&-L=6YK97( '(
M H) ", !0. "MH * ' !( O] #AN;VYP<FEM87)Y !R )QP C
M 4#@ J? "4 !P 2 ,(@ X<')I;6%R>0 <@ "8D (P % X *HP
M D < $@ #$8 .'5?;&EN:P <@ "/4 (P % X *W G < $@
M#&T .'-?;&EN:P @P % 0 !^H (P % X *P0 F < $@ #), .'9?
M=6YI;VXR !R #BP C 4#@ L" "4 !P 2 ,N X=E]U;FEO;@
M<@ FP (P % X +! G < $@ #-\ .'9?<W1R=6-T,@ <@ 4X
M(P % X *R@ G < $@ #08 .'9?<W1R=6-T,0 <@ "X (P % X
M*Q O < $@ #34 .'9?9&]U8FQE7W!O:6YT97( &, P$ #P C 4#
M@ K# "X !P 2 -8P X=E]F;&]A=%]P;VEN=&5R !C ,! X (P %
M X *T0 V < $@ #9D .'9?=6YS:6=N961?;&]N9U]P;VEN=&5R !C
M ,! P (P % X *H T < $@ #<T .'9?<VEG;F5D7VQO;F=?<&]I
M;G1E<@ 8P # 0 + ", !0. "M( +0 ' !( WZ #AV7VQO;F=?<&]I
M;G1E<@ 8P # 0 * ", !0. "K< -0 ' !( XO #AV7W5N<VEG;F5D
M7VEN=%]P;VEN=&5R !C ,! D (P % X *L0 S < $@ #F( .'9?
M<VEG;F5D7VEN=%]P;VEN=&5R !C ,! @ (P % X *P L < $@
M#HX .'9?:6YT7W!O:6YT97( &, P$ !P C 4#@ JN #< !P 2 .
MQ0 X=E]U;G-I9VYE9%]S:&]R=%]P;VEN=&5R !C ,! 8 (P % X *F@
M U < $@ #OH .'9?<VEG;F5D7W-H;W)T7W!O:6YT97( &, P$ !0 C
M 4#@ K" "X !P 2 /* X=E]S:&]R=%]P;VEN=&5R !C ,! 0
M(P % X *U0 V < $@ #UX .'9?=6YS:6=N961?8VAA<E]P;VEN=&5R
M !C ,! , (P % X *O0 T < $@ #Y( .'9?<VEG;F5D7V-H87)?
M<&]I;G1E<@ 8P # 0 " ", !0. "M8 +0 ' !( ^_ #AV7V-H87)?
M<&]I;G1E<@ 8P # 0 ! ", !0. "KP ) ! !( _C )4 "C !
M @ 0@ 50 / + ' !( ! / #AV7V1O=6)L95]A<G)A>0
M<@ #[\ (P % X *I D $ $@ $#, E0 *, $ " !
M" !5 X K < $@ $%X .'9?9FQO871?87)R87D '( ! / ", !0.
M "M, ) ! !( !"" )4 "C ! @ 0@ 50 , ,P '
M !( !"U #AV7W5N<VEG;F5D7VQO;F=?87)R87D '( !!> ", !0. "K,
M ) ! !( !#9 )4 "C ! @ 0@ 50 + ,0 ' !(
M !$* #AV7W-I9VYE9%]L;VYG7V%R<F%Y !R 0M0 C 4#@ JK "0
M 0 2 1+@"5 HP 0 ( $( %4 "@ "H !P 2 16 X
M=E]L;VYG7V%R<F%Y !R 1"@ C 4#@ K7 "0 0 2 1? "5
MHP 0 ( $( %4 "0 #( !P 2 1K@ X=E]U;G-I9VYE9%]I
M;G1?87)R87D '( !%8 ", !0. "J\ ) ! !( !'2 )4 "C !
M @ 0@ 50 ( , ' !( !(" #AV7W-I9VYE9%]I;G1?87)R
M87D '( !&N ", !0. "KX ) ! !( !(F )4 "C ! @
M 0@ 50 ' *0 ' !( !)/ #AV7VEN=%]A<G)A>0 <@ $@( (P %
M X *H0 D $ $@ $G, E0 *, $ " !" !5 8 T
M < $@ $J< .'9?=6YS:6=N961?<VAO<G1?87)R87D '( !)/ ", !0.
M "KL ) ! !( !++ )4 "C ! @ 0@ 50 % ,@ '
M !( !+] #AV7W-I9VYE9%]S:&]R=%]A<G)A>0 <@ $J< (P % X *K0
M D $ $@ $R$ E0 *, $ " !" !5 0 K < $@
M$TP .'9?<VAO<G1?87)R87D '( !+] ", !0. "KH ) ! !( !-P
M )4 "C ! @ 0@ 50 # ,P ' !( !.C #AV7W5N<VEG
M;F5D7V-H87)?87)R87D '( !-, ", !0. "I@ ) ! !( !/' )4
M "C ! @ 0@ 50 " ,0 ' !( !/X #AV7W-I9VYE9%]C
M:&%R7V%R<F%Y !R 3HP C 4#@ JH "0 0 2 4' "5 HP 0
M ( $( %4 0 "H !P 2 41@ X=E]C:&%R7V%R<F%Y !R
M 3^ C 4#@ K0 "0 !P 2 4:@ X=E]D;W5B;&4 %4 #P C 4#
M@ J< ", !P 2 4C0 X=E]F;&]A= 50 . ", !0. "JH *P '
M !( !2X #AV7W5N<VEG;F5D7VQO;F< %4 # C 4#@ JY "D !P 2
M 4X0 X=E]S:6=N961?;&]N9P 50 + ", !0. "ID (@ ' !( !4#
M #AV7VQO;F< %4 "@ C 4#@ JU "H !P 2 5+0 X=E]U;G-I9VYE
M9%]I;G0 %4 "0 C 4#@ J7 "@ !P 2 550 X=E]S:6=N961?:6YT
M !5 @ (P % X *E@ A < $@ %78 .'9?:6YT !5 < (P % X
M*G@ L < $@ %:( .'9?=6YS:6=N961?<VAO<G0 %4 !@ C 4#@ J
M; "H !P 2 5S X=E]S:6=N961?<VAO<G0 %4 !0 C 4#@ JR
M ", !P 2 5[P X=E]S:&]R= 50 $ ", !0. "K8 *P ' !( !8:
M #AV7W5N<VEG;F5D7V-H87( %4 P C 4#@ JI "D !P 2 60P X
M=E]S:6=N961?8VAA<@ 50 " ", !0. "K@ (@ ' !( !9E #AV7V-H
M87( %4 0 C 4#@ K9 0 ' "DH !-P !Y__\
M >O__ ,@ 'O__P &0 !]__\ "6 ?O__ R '__
M_P /H "!__\ $L @O__ !7@ (/__P 9 "%__\ '"
M AO__ !] (?__P B8 ")__\ )8 BO__ "E ++_
M_P M "U__\ +F MO__ "[ +?__P O0 "Y__\ +\
M NO__ #! +O__P PP "]__\ ,4 OO__ #'@ +__
M_P R@ #!__\ ,R PO__ #/ ,/__P T8 #%__\ -0
M QO__ #6@ ,G__P VX #*__\ -X R___ #@@ ,W_
M_P XP #.__\ .6 S___ #H -'__P ZH #2__\ .T
M T___ #O@ -7__P \@ #6__\ /2 U___ #W -G_
M_P ^8 #:__\ /P W/__ $! -W__P ! X #>__\ 08
M X/__ $(@ .'__P !"P #B__\ 0V Y/__ $0 .7_
M_P !$H #F__\ 14 Z/__ $7@ .G__P !&@ #J__\ 1R
M [/__ $? .W__P !(8 #O__\ 20 \/__ $F@ /'_
M_P !*0 #R__\ 2N ]/__ $N /;__P !,( #W__\ 3,
M /__ $X
M $ ! H -0 #4 $P 0
M ) !0 * #H Z ;P # 0 $
M#P L "@ "I J0 # ! $ $ $ !< #
M H V0 -D >P 0 ? ! *
M /@ #X # # !P 0 , *0 $ &@ $$
M!! $ $ "\ ! !H !!0 04
M9 ! !0 T 0 : 1X $> !40
M 0 .@ $ &@ )O ";P $
M $ $ ! X *< G " !
M !& 0 . "G( )R !P 0 $
M2P 8 #@ IY ">0 !P ! $ " %0 (
M X *E@ I8 !P " !9 @
M *6 !P / ' 0 0 80 ,
M$5@ 34 ! &D # !8L
M ! !P P 6+ )
M $ >@ $ %KP #/
M $ (, ! !>, 6< !
J "* 0 M_ I0 0
end

View File

@ -0,0 +1,671 @@
begin 777 mips-ecoff
M 6 "2G<_%0 # 8 X <!"P(* @ $ )= $ !P ! 0
M $ 0 //___X -T $ "*@"YT97AT $ !P !
M < !E0 !P " N:6YI= ! &Q 0!L0
M( &Q " +F1A=&$ 0 $ "I "
M 0"YL:70X $ *D! "I 0 JD
M @ N;&ET- ! "J 0 J@ $ *J
M 0 +G-D871A 0 JP$ *L & "JP , "
M "YS8G-S $ +$! "Q % # ! N8G-S
M ! #% 0 Q0 ":\ " <G-R8P
M " (^D
M \'! !)Z4 !"><BH DI@ $ 00@*^%@90 PC A)[W_Z*^&@#"OH 4 #P
M(0P0!L>OA(&0#! !9 ,$ %H @(8^$@9"/A8&4CX: , P0 .L
M#! !I ! ("$ - ^ " GO0 ( ^ " @^"$#X (
M /@ @ ! A ^ " #X ( /@ @ ! A ^ "
M #X ( /@ @ ! A ^ " #X ( /@ @ ! A ^
M" #X ( /@ @ ! A ^ " #X ( /@ @ ! A
M ^ " #X ( /@ @ ! A ^ " #X ( /@ @
M ! A ^ " #X ( /@ @ ! A ^ " #X ( /@
M @ ! A ^ " #X ( /@ @ ! A ^ " #X (
M /@ @ ! A ^ " #X ( $2 #X ( /@ @
M ^ " !$@ 1( ( /@ @ ^ " #X ( *. @) D
M#@ !HXZ D20/ *CCX"2)!@ Z>8@)0D&0 $IYF EB0( 6GB("8) D !J^)
M@)PD"@ 'KXJ H"0+ BOBX"D) P ":^,@*@D#0 *KXV K"0. NOCH"PQX2
M( #GA("TQX> $,>&@!3GAX"XYX: O)./@) HX^ P).8@)$
MHYB PI.9@)( HYF Q(>(@)0 IXB R(>)@)8 IXF S)>*@)@
M IXJ T(^+@)P KXN V(^,@* KXR X(^-@*0 KXV Z(^.
M@*@ KXZ \(^/@*P KX^ ^(^8@+ KYB! ,>(@+0 YXB!
M",>+@+C'BH"\/ $0 .0K8_#D*F/T)YF D*^9@1 GB("1KXB!%">)@)*OB8$8
M)XJ E*^*@1PGBX"6KXN!(">,@)BOC($D)XV G*^-@2@GCH"@KXZ!+">/@*2O
MCX$P)YB J*^8@30GF8"LKYF!.">(@+"OB($\)XF M*^)@4 GBH"XKXJ!1"0+
M *OBX%<) P J^,@6 D#0 !KXV!:"0. &OCH%DCX^!6#P!$ "L+V,PAYB!
M2 "GF(%0 ^ " $"$#X ( #X (
M)[W]4 " &"$D#O__K[\ '!1@ !&OK@ D/ 00 P0 ;0DA ($$$ !0! &"&0
M3P !7@ @ DYB 0 3 # ! ", ! A)X. 1#P%
M$ "C@(! )*4"$">D C ,$ 'TKZ,"L(^C K GI (^#! !] !@*"$GI (P#! "
M( *"$$0 1 $ @(2>E "PD!@("#! "**^D "@D 0("%$$ "(^D "@\!!
M)(0 ">E "P,$ (P) 8" J^@ "2/I H#! "] "/H@ D (^_ !PG
MO0*P ^ " )[W_X*^_ !P,$ ,.KZ0 ( P0 R@ CZ0 ( P0
M!4P C[\ '">] " #X ( ">]_^"/@H PK[$
M&*^P !0 @(@AK[\ '!1 , 0( A$ %0 $"&/CH P (W/
M$> #P $"&.!0 (@("$,$ '7)A !!! , 0!@A$ !@!@$"&.
M!0 !2@__<"(" A 0(8^_ !R/L 4C[$ & /@ @GO0 @D*( )"#
M DI0 !$$, !"0& #T0 ,) 8 /20& #T 8! A%$8 R2$ $#X ( * 0
M(9"B "0@P )*4 1!#__@ 8! A%& " $"&0KO__ !3. 0 ! A
M ^ " "@$"$ ! A ^ " @! A@*@ #2- ,1 D :1P(H"I $
MKG@@$2 'P " J@ " !% !J(K @*L YBL ,18 4J(P "&D
M__V!Z !(>\ !!$ !,@A $@>G__@ 1( . ('J__\ $4
M"8GL__V!ZP F>P !5@__&LC ^ " #X (N(P Z"* *@B0 !
M ^ "*"( "0" ^T ,$. P ($ 50 /@ @
M ) (#ZP P0X # @0!5 ^ " 0P : ( X(1"D
M !@ A0@J%" ""C! ! IA @ (((*A @ 0HP0 0$ 6RC! ! HP0 0%"
M!0 PH@ #,(, Q!# L $, !P IA@A@*( "2E $DA !
M%*/__*""__\#X ( . 0(1! !@D 0 !$$$ #R0! (000 ' ("B D
MI0 !)(0 23&__\0 .H(+__X2B DI0 ")(0 B3&__X0 (I(+__H"B
M "$HP !H(( "2E ,DA #),;__:2#__XHP0 @%" %BC! !",H@ C*,
M!(RH B,J0 ,C*H $(RK !2,K 8C*T '*R" "L@P $K(@ "*R) RLB@ 0
MK(L %*R, !@DI0 @)(0 ("3&_^ 0 /_JK(W__"C! ! 4( .*,$ !(RB ",
MHP $C*@ "(RI RL@@ K(, !*R( @DI0 0)(0 $"3&__ 0 /_RK(G__"C!
M 04(/^U (RB DI0 $)(0 !"3&__P0 /_XK(+__"C! ! IB@@%"
M!0"&(" PH@ #,(, Q!# T $,#_K0 DI?__)(3__P"F&". H@
M)*7__R2$__\4H__\H(( 0/@ @ X! A$$ &"0! ,000 /) $ A!! <
M @*+__R2E__\DA/__),;__Q Z@@@ A*+__B2E__XDA/_^),;__A
M BD@@ @*+__X2C__V@@O__)*7__22$__TDQO_]I(, "C! " 4( 6*,$
M$(RB__R,H__XC*C_](RI__",JO_LC*O_Z(RL_^2,K?_@K(+__*R#__BLB/_T
MK(G_\*R*_^RLB__HK(S_Y"2E_^ DA/_@),;_X! _^JLC0 *,$ $!0@ XH
MP0 $C*+__(RC__B,J/_TC*G_\*R"__RL@__XK(C_]"2E__ DA/_P),;_\!
M__*LB0 *,$ !!0@_[, C*+__"2E__PDA/_\),;__! __BL@@
M ) (#[@ P0X # @0!5 ^ " $"$0@ /
M) ( 8^#@& *&$ (! @ HD @ ! -P@#P!$ +@@A)&, :PD B"O
M@X!@ ^ " $"$D @ ! ^ " "/@X!@)[W_X*^_ !ROL0 8K[ %!A@
M \D8O__/ \0 "7O B G" /!$0 "8Q B !SX ACA@ # /@)
M "80__P"$0@K$"#_^0 "/OP <C[ %(^Q !@#X ()[T ((^.@' GO?_@
M/ \0 *^P !@E[P0U/! 0 '/""NOOP <%" $280!#0\&! CQ@+ 3
M % P0 W8" " A$ P ,$ -& @ @(8^9@' F$ 0 AD(*Q0@
M__$ C[\ '(^P !@#X ()[T (">]_]BOL 8 (" (:^_ !P6 #) /_
M_Q "4D O__D@( # P3@"#$< %#!8 @P3P &) $ A7A 8 !@A
M#! #=@( ("$0 " $ 8(0 &"&2! -#! "]*^C "2/HP D!$$ @ D
M ___D@( # P6 ($P !@ ".! (#! &&J^C "2/HP DK@ "(X9
M BB ,K@ !@$"&N&0 $C[\ '(^P !@#X ()[T *">]_^"OL 8 ("
M(18 !.OOP <CXZ <#P/$ E[P0U/! 0 '/""L4( *)A $-!( ,
M#! #=@( ("&/F(!P)A $ (8""L4(/_X ! #@ ! AD@, # P
M8@ "%$ ##!H 2.!0 D@0 #20& $,$ 9P 4H(XX9 BN 0(1
M "FN&0 $,&@ !!4 " P;0 @$$ 'C!M "". @ ( !! !HP;0 @C@D
M! 20@K$" %3!M " ,$ 14 @ @(9(# P ,&H !!5 XP;0 @
M,&L A%@ LP;0 @C@( " 00 ',&T ((X, 0 $P(*Q0@_^X
M ,&T (!&@ 0 !@A$ B0#__\ !@A & 0(8^_ !R/L 8 ^ "">]
M " GO?^PK[ '*^_ "ROLP H *" (:^R "2OL0 @KZ0 4)(# PD$0!")!(
M!B03 (P;@!2%BX )3!L !:2#P -/!D0 /P( #.,@ACSD"H(X" 0
M %D(*Q @ $\ CZ@ 4"0! J@2 C@D ! E*@ !K@H !).K %,
M $6$ ! "/H@!0$ 8(^_ "P,$ 14 @ @(20!__\400 $CZ, 4!
M ,D ___CZ, 4 0 !4 & 0(3!L !863 4,'@ $H^M % GI0!,HZT
M3)($ VN #! &>"0& $D 0 !%$$ ! "/H@!0$ 18^_ "R2#@ ,
M) +__S7/ " 0 _H@\ ##!X !(6> 0 (X" @ $$ # ".
M&0 $ !19 P C@@ 5 ( #!I $05( & 8(0P0
M!)H" " A$ @! &"$ !@A$& P 0 D) +__Y(# P ,&H
M1!5 _Z<P;@!2#! $5 ( ("&. @ "1"__\$00 &K@( ).D %,,$ /(
M @ H(1 J2#P ,CZL 4(X, 0 H8L (X- 0 ):X :X. 22
M#P , #'X " 3 $CZ, 4! ,D ___CZ, 4 8! AC[\ +(^P
M !R/L0 @C[( )(^S "@#X ()[T 4">]_^"OOP 4 ( X(8SC B0[P ,C.X
M! !@*"$Q^ !$K.4 !!, @!Q3 CD/D #3P)$ E*0*@ !E @ $)("$0 *
MK. )#J T\#! )8P"H *6( !;" AC(T !HQ CK.( (SB
M !$$ ! ! &"$0 " 8(0! &"&,C@ C.\ ! !S\ C P,(*A @
M H KZ4 '*^F !@ X" A#! %-J^G ""/I0 <CZ8 &(^G " &,
M#P $"&0Y -KZ< ( P0!GBOI@ 8CZ8 &(^G " 0P@ ' 0(9#Y PD O__
M-R@ (! *@Z , 0(8^_ !0GO0 @ ^ " GO?_HK[\ %)"" PD
M 0 ",$X $A'! P ,$\ @A7@ 8D ?_O#! &@R0$ D0 R) +__R0!
M_^\ 0< D-QD J"9 R,@P ( !1@ < #! $W:^D !B/I 8
M (R# @ C(@ ! 4: @ 0(9") P ,2H 1!5 !L ! A
MD(L #3P-$ EK0*@ M@@ &-*"&,K@ '#>".LCP C(( $
M00 $ $ 8(1 ( !@A $ 8(8RX ",F0 $ ,90",! P@J$" !
M$"$,$ 4V $"&/OP 4)[T & /@ @ )[W_X*^_ !0 @"@AD*X
M#)"C TQSP $$> # !@,"$\&1 )SE@" &P, #&1 A -(@#P!$ *0@A
MK*( ""1( @0 TK"@"H"C! (0( 3 !3 8 / ,0 "1C$ "L
MHP ($ !0!@$"$\ Q )&- *RC @ 8! AD*L #3P!$ "V" "P((21*
M( 0 ?K"H"H*^E " D!" (#! %5*^F !R/I0 @CZ8 '!! RLH@ (D*T
M#)"Y V,KP (/ $0 #6N @ &4" H*X # H""$E^" $ #*PX J \"Q
MD*P #25K8 @ !DC 2L0(3P!$ #&B "T((:RB @D2@ (K"H"H(RN @
MP" AK*X ! P0!HBOI0 @CZ4 (!! F/OP 4D*( # P3P $%> !(^_
M !0T60! H+D #(^_ !0GO0 @ ^ " "0C@ -/ ,0 .>( ;Q@AC&,"
MH(R8 0 '@0(P1! , ^ "*R# 2,F0 !9""H0( "
M *R" #X ( ) (#Z0 P#X ( #P!$ "L
M(@P8 ^ ""0"__\GO?^HK[8 +*^R !ROOP TK[< ,*^U "B/CH%PK[0 )*^S
M ""OL0 8 ("0(:^P !01P $ "P(8^%@800 +)Y6!<">"@70GE8%PKX*!
M?#1/ &OCX%P-K@ 0*@."&OF(%T $ H(:^'@7B/AX%X)!?__R04__X X(@A
M P(8XC & 0(3!9 $7( = B" (0!@@"&. @ )D0 !P $(((P
M2 !%0 #@ $(( "(#@AKX>!>!2P *N(@ B H(8XC &" (8X"
M ,$D 1$@__8 B00(0("""L4( # %$(*Q @ &H & 0
M(0(@@"$ 5(@D A$(*Q0@_]L CXJ!? 2"@ # ! 2OA8&$
M$C4 !23& &OA8&$$ :P $"$DQ@ !+,$ A0@_\P )D, !P #&(*O
MHP X *"((0 ("$,$ :@KX6!A(^+@7R/HP X)6P !!!, P 0( A)&8'_P &
M,L(P1 #$( $ &,T D#0 $ :08(P!@L"$ 0X A$ "@#6,"&/A8&$CXZ!
M? !Q7@C _ @P!X,",DQ@@ 8RP@ &,T "!L@A S (*Q @ 0\ 7__
M$ 00 $"$\ 7__-"'@ 0#!""L4( - ,"8(3P$?_\TA. #! &H*^F $B/
MI@!(%%< !#P!@ 0 S 0(3P!@ T(2 ,$P(0P0!J P" A%%< !0
M ,$ :L @ @(1 "@ ! ACXB!? (32"$!-E C)4O__*T0 "N"P CXR!
M? ( *"$EC0 $$@T !3:B &-C@ #7/ &MCP CA@ "OF(%\
MCYF!?! _W>O(@ $ X(0#P""L0( &-.D 8SH KXB!@*SC T
MZ0 !$+$ !*XI "OAX%X$ !*^%@80 X"@AKX6!A*^'@7@F(@ $C[\ -(^P
M !2/L0 8C[( '(^S ""/M DC[4 *(^V "R/MP P ^ "">] %@0@ - ( 0
M(22"__RO@H%XC$X "0!__X!P7@DK$\ (Q9 "/F(%\ !<9 (
MKX*!A /@ @ )[W_R*^P !@ @( A$@ .*^_ !R. O_\ #!. $1
MP ( % 8(P( ("$,$ 8:KZ4 /(^E #R. O_\ !0&", QB#KZ, ) "@
M("$,$ 54KZ4 /(^C "2/I0 \$$ !0! ("$04 # !2@ 0DIP #$
M(0" $"$DIP # <X@@#C""L0( " #@&"&OI T @ H(0 #,( ,$ (P
MKZ< ((^D #2/IP @ % (*Q @ ! =X@ !/&"$ < @K%" "P
M<,@C !E @X^8@8 "$B $E0(1 2M6 #! %5 "@("$ 0" A ( 0(8^_
M !R/L 8 ^ "">] #@ "0" _L ,$. P ($ 50
M /@ @ ) (#[ P0X # @0!5 ^ " "/@H&8
M ^ " "OA(&8 ^ " " $"$ ">]_["OOP <#! &@*^D %"/
MI !0KZ( )"0%5 @,$ :\)Z8 * 1! <D @ !CZ0 ) P0!H, $ @
M$"$D @ !C[\ '">] % #X ( #P#$ ",8PJ$) (#
M^0"#("$ ,%. !#P!$ 8! A ^ "*PD"H0($ 50 #P"$ ",0@J
M """"L0( " ! ("$D @/Y #!3@__0\ 1 K"0*A /@ @
M ! A D @0> #!#@ , "! %4 #X (
M #X (
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M (" @(" @(" @*"@H*"@@(" @(" @(" @(" @(" @("!($! 0$! 0$! 0
M$! 0$! 0A(2$A(2$A(2$A! 0$! 0$!"!@8&!@8$! 0$! 0$! 0$! 0$! 0$!
M 0$! 1 0$! 0$(*"@H*"@@(" @(" @(" @(" @(" @(" @("$! 0$"
M
M
M 0(#! 4&!P@)
M"@L,#0X/$!$2$Q05%A<8&1H;'!T>'R A(B,D)28G*"DJ*RPM+B\P,3(S-#4V
M-S@Y.CL\/3X_0&%B8V1E9F=H:6IK;&UN;W!Q<G-T=79W>'EZ6UQ=7E]@04)#
M1$5&1TA)2DM,34Y/4%%24U155E=865I[?'U^?P
M
M
M !#2%)#3$%34P O;&EB+V-H<F-L
M87-S+P
M
M
M ! 8"
M
M
M
M
M
M
M
M
M $ " 0 ! 8!@0 & 8!@(
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M 0 *= $ "G0
M 0&D $+(
M 0 &%S8VEI
M $ *=
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M < D""@ !D + P8 - ,R $Y ]L
M "$P 3%P A, !4J !B0 %ST '@ 8Q@ !< !K
MB (< &SX,/ @X# 00-! T$ 0(*"! !9 \# 0$!%@P% A(! 0(04%!04%
M!04%!04%!08',!$1(1$1(1$1(1$1(A,R$A(B$A(B$A(B$A(B%"$1$2$1$2$1
M$2$1$2$1(1$1$2(B$P$!,-" BP6(, "1$0,/ 4$A0F5! B)0& Z __*!
M \2$P4PX#$7%!$8 !<2$1@!$1)08! 0$! 0$! 0$! 0$! 0$! P$! 0$! 0
M$! 0$! 0$! 0$! P$" 0$! $!$1$0 0$1$10/ A,A 2$8( "A 0$7$0(! @
M$.! \($ "A(2,! @$!#0<! @$!#0<! @\# 0X(( #! 0$! 0$! 0(! 0$! 0
M$)" D0$-!R$! 0$" 0$-!0$!#0<A 0(! 0T( $,! T$ 0$7$0$! @$" 0
MX$#P@0 *$A(P$" 0$-!P$" 0$-!P$"#P,!#@@@ ,$! 0$! 0$! @$! 0$! 0
MD( "1 0T'(0$! 0(! 0T% 0$-!R$! @$!#0 ! 1$2$6%!(B!"<7%##0,- R
MT#&$ H3,103 T#0010C$R 5$"$2$Q! X! @\!,",-!V$R8T)"#P(?!(!!@(
M !@!" )2& H 1(8 3(0(. @\!02$!#P$/!H" 81%#$8""@' D @X2#P$. H
M!A@(!!@ $!#P$/ T 102$1$C(Q48&!@&) ) T#'02!#P,B@(-R 2\!#P$1#P
M. $@$/ 8 !$3. 1%! 1 !)A</ %<)1PT#0PX1 @X# 10A 5&$#P$!<6(! 0
M$B@A$Q% \!(0\!'P<1'P(A PX" W(Q%#\"81(B,1$4!"P$ 0D'(3$A @X$ B
M$A @(. E& ) T'$S%3$"@ )@/_WA +%1$5(. C$200%A<4$/ R% 0$1$1
M ! 1$1%"0"$!0,!0\!0B$20A(/ @$2#P$2$3$" 0$1$1 ! 1$1$
M @ /____\ !@ '0 . &<
M : 0 : #_____ !T 'P ((
M "$ &@ ' & ' _____P =
M !\ "/ DP !L !\ " !\ /____\
M '0 ? G@ * > "$ #_____
M !T 'P 'D !Y !@ E !@
M _____P = !\ !Z >@ $ P *0
M P /____\ '0 ? >P 'L "
M2 "T 2 #_____ !T 'P 'T !]
M P & Q & _____P = !\
M !^ ?@ 0 !X -0 !X /____\
M '0 ? ?P '\ % D #D D #_____
M !T 'P ($ "! !@ *@ ] *@
M_____P = !\ "" @@ < # 00 #
M /____\ '0 ? @P (, ( V
M $4 V #_____ !T 'P (4 "%
M"0 / !) / _____P = !\ "&
M A@ H $( 30 $( /____\
M'0 ? AP (< + !( %$ !( #_____
M !T 'P (D ") # 3P !5 3P ____
M_P = !\ "* B@ T %< A0 %<
M /____\ '0 ? L@ /< . $
M #_____ !T 'P ( "
M " ( #___UL_____P "L = !\ !?
M@P 0 " _____/____\ " '0 ?
M '0 "X $ @ , /____S_____
M @ !T 'P !X F (P # (P _____P
M = !\ S .0 D 0
M /____\ '0 ? 8@ )H $
M #_____ !T 'P X 2
M ! _____P = !\ . $@
M 0 /____\ '0 ?
M* 2X $ #_____
M !T 'P X 3 # _____P
M = !\ 7 ' !( !0 !* P _____/__
M__\ " '0 ? (0 "4 $ $ @ $
M /____S_____ @ !T 'P "H ] '@ #
M 'H ! #____T_____P * = !\ !. 90 X
M $X !0 $Z 0 _____/____\ " '0 ? <@
M (D B "@ < "@@ \ /___]S_____ !0 !T
M'P )H "Z -0 !+ ) !+( #____T_____P
M ( = !\ #2 W@ %8 7( "P 7* _____/____\
M !@ '0 ? Z@ /@ !K &U T &U@ /__
M__3_____ @ !T 'P 0, $; > "#@ / "
M#@ _____P = !\ $I !, )4
M 0 /____\ '0 ? #@ \
M $ #_____ !T 'P
M !$ > & (#_ #____<_____P
M6 = !\ !D Q0 ,8 " ,< /____\
M '0 ? S -L !. #6 H #7@ $ /___^3_
M____ X !T 'P .8 $! 5 !
M _____P = !\ . $@
M 0 /____\ '0 ? #@ !(
M $ #_____ !T 'P !\
M C P # P _____P =
M !\ J , $ 0 " ____S/____\
M % '0 ? '@ "@ $ #_____
M !T 'P !< ? # $ "P
M _____P = !\ E +P @ 0
M /____\ '0 ? #@ !(
M 0 L( + # (K___ %0! < 8( " %0 &@@( "
M '0! B@8( & '0 @@( $ *0! C 8( * *0 P@
M( & ,0! CP8( . ,0 @@( ( 0 @( 0
M L( " 0 @( 0 L( " 0 @(
M 0 L( " 0 @( 0 L( "* 0@ !AI8 )
M 2P E8 ( 60 ! E8 # : " E8 $ =0 $ E
M8 % @P & E8 & D@ ( E8 ' A8 ! H@
M !AI8 1 IP E8 ( M0 ! E8 # Q " E8 $
MT0 $ E8 % WP & E8 & [@ ( E8 ' A8 )
M _@ AM8 9 !!@ E8 ( !% E8 # !(P E
M8 $ !, E8 % !/@ E8 & !30 E8 '
M A8 1 !70 AM8 A !8@ E8 ( !< E8 # !
M?P E8 $ !C E8 % !F@ E8 & !J0 E8 '
M A8 9 !N0! E 8( "' <( D @@
M( B !N0 !@@( A !Q0! F@8( ") <( H
M @@( F !Q0 !@@( E !V ! H 8( "+ <( L
M @@( J !V !@@( I ![0! I@8( "- <( P
M @@( N ![0 !@@( M !^@! K 8( "/ <
M( T @@( R !^@ !@@( Q "#@! L@8( "1
M <( X @@( V "#@ !@@( U ") ! N 8( "3
M <( \ @@( Z ") !@@( Y "+P! O@8( "5
M <( ! @@( ^ "+P !@@( ] "00! Q 8
M( "7 <( !$ @@( !" "00 !@@( !! "50!
M R@8( "9 <( !( @@( !& "50 !@@( !% "
M80! T 8( "; <( !, @@( !* "80 !@@( !)
M "= ! U@8( "= <( !0 @@( !. "= !@@
M( !- "B0! W 8( "? <( !4 P@( !2 "B0
M !P@( !1 "E@! XP8( "A <( !8 ! @( !6 "
ME@ " @( !5 "I )AI8 !> "J0 E8 "F "K@ " E8 "I
M "MP $ E8 "L A8 !9 "O0 )!M8 !C "Q0 E
M8 #$ "R@ E8 #' "TP E8 #* A8 !> "V0
M 1Q8 !H "W@ E8 #B "X@ $E8 #C "Z (E8 #D
M A8 !C "[0 1Q8 !M "] E8 #K "^P $E8 #L
M # @ (E8 #M A8 !H #!P 1Q8 !Q ## E
M8 #T #$@ $E8 #U A8 !M #%P 1Q8 !U #'
M E8 #\ #( $E8 #] A8 !Q #* 1Q8 !Y #
M+0 E8 $$ #,P $E8 $% A8 !U #. I8 $&
M #0 1Q8 !^ #1@ E8 $, #3 $E8 $- A
M8 !Z #40 I8 $. #6@ 1Q8 "% #90 (E8 $4 #:0
M $E8 $5 #;0 E8 $6 #<@ ,E8 $7 A8 !_ #
M> ! ZP8( $8 <( "( = @( "& #> > @( "%
M 0 @( 0 L( $ % ! !9 8( - % @@
M( ! 0 @( 0 L( % "1 "L )K___ % !
M!: 8( - % .P@( " 0 @( 0 L( $
M#@! !I 8( - #@ #0@( ! 0 @( 0 L( &
M "@! !M 8( - "@ (P@( ! $0! !UPX( / $0 '0@
M( # 0 @( 0 L( ) #@! !] 8( " %0!
M"!@4+___ (@! "& 4+___ *0! "&@4+___ , ! "&P4+___
M-P! "' 4+___ #@ *@@( ! 0 @( 0 L( %
M #0! "( 8( " $P! ")@4+___ #0 " @( ! 0 @
M( 0 L( " 0 @( 0 L( " 0
M @( 0 L( % #0! "* 8( " $P! "+@4+___
M#0 " @( ! 0 @( 0 L( 9 #0! ", 8( "
M % ! "/ 4+___ 'P! "0P4+___ ,0! "1@4+___ /P! "2P4
M+___ 0P! "304+___ 40! "604+___ 7 ! "7P4+___ 9P!
M"9@4+___ < ! "9@4+___ ? ! "?04+___ B ! "C 4+___
MDP! "E04+___ GP! "G04+___ L@! "H@4+___ P ! "J04+___
M S@! "M04+___ V0! "NP4+___ Y ! "P@4+___ [@! "P@4
M+___ ^P! "V04+___ !" ! "Z 4+___ #0 P0@( ! 0
M @( 0 L( % #@! "] 8( " %0! "^@4+___
M#@ " @( ! 0 @( 0 L( ( "A "N )K___
M $Q B (3___ '@! "_ 8( - '@ $@@( # )0! ##@8
M( / )0 &@@( % 0 @( 0 L( 2 "@!
M#* 8( - "@ '@@( ! $P! #1@8( / $P , @( #
M&@! #=@8( 1 &@ 4@@( % (0! #R 8( 3 (0 C @( '
M *0! $5 8( 5 *0 1@@( ) ,@! $F@8( 7 ,@ 0P@
M( + .@! $W08( 9 .@ 60@( - 0P! %-@8( ; 0P
M % @( / 0 @( 0 L( $ # ! %3 8( "
M# ! @( ! 0 @( 0 L( $ #@! %4 8( "
M #@ ! @( ! 0 @( 0 L( " 0 @
M( 0 L( " 0 @( 0 L( - "A
M"_ )S___ $1 "_@)S___ &! "_P)S___ 'Q # )S___
M)A # 0)S___ +P! %5 8( - +P Q@@( & -@! &&@8( /
M -@ $ @( ( .P! &*@8( 1 .P 1 @( * 0 @
M( 0 L( % #@! &< 8( " %0! &=@4+___ #@
M " @( ! 0 @( 0 L( % #@! &> 8( "
M%0! &?@4+___ #@ " @( ! 0 @( 0 L( &
M # ! &@ 8( - # P@( ! %0! &@P8( / %0 P@
M( # 0 @( 0 L( $ "P! &B 8( - "P
M %0@( ! 0 @( 0 L( ( #0! &H 8( "
M#0 "@@( ! $P! &J@4+___ %P! &K 8( & ' ! &LP4+___
M %P #@@( $ 0 @( 0 L( % #@! &O 8
M( " %0! &P@4+___ #@ " @( ! 0 @( 0
M L( " 0 @( _____P $ /____\
M!@ #_____ @ _____P * &
M @ 0 & " H + P 4 ' "0 !H #
M # __ ! 0 @# # __ ! 0
M @# # __ ! 0 @$ # __ !
M 0 ! $ # __ ! 0 ! % # __ !
M 0 ! & # __ ! 0 " & # __ !
M 0 " ' # __ ! 0 " ( # __ !
M 0 " ( # __ ! 0 " ) # __
M! 0 " * # __ ! 0 " + #
M__ ! 0 $ # ! P 0 , $ $ ! ! 0 4 $ &
M ! !@ 0 < $ ( ! " 0 D $ * ! "P 0 P #__________PP
M #_\ ! P #__________PP #_\ ) T #_________
M_PT #_\ 1 T #__________PT #_\ 9 "4#
M *0, M P #$$ -00 Y!0 #T&
M 008 !%!P $D( 30@ !1"0
M %4* 60L , __________\, ! __ 60 , !(0__
M60 , #,P__ 0 #_\ $ " P/_P 0
M $ ) __ ! !( , ! __ 60 -
M __________\, ! __ 60 , !(0__ 60 , #,P__ 0
M #_\ $ " P/_P 0 $ ) __
M! !( - __ 7@ . __________\
M . __ 8P . __________\ .
M __ : . __________\ X #_\ !M X
M #__________P #@ /_P '$ #@ /__________
M . __ =0 . __________\ X #_\ !Z
M X #__________P ")!@ &
M @ 0 & " H + P 4 ' "0 !H
M #!@ & @ 0 & " H + P
M 4 ' "0 !H $!@ & @ 0 &
M" H + P 4 ' "0 !H #!@ &
M @ 0 & " H + P 4 ' "0 !H
M # P 0 4# ! _____P ( /____\
M! #_____ 0 _____P 8 /____\
M ! !@ ( $ !@ @ * "P , %
M !P D : !08 '&@ & @ 0
M & " H + P 4 ' "0 !H #&@
M 4& !P8 )!@ L& #08 /
M!@ !$& _____P # /____\ P
M !@ ( $ !@ @ * "P , % !P D
M : 8 " ! 8 ( "@ L # !0
M < ) &@ & @ 0 & " H +
M P 4 ' "0 !H (&@ 0 H: #!H $ #_
M____ 0 _____P $ & @ 0
M & " H + P 4 ' "0 !H #!@
M 4& 8 " ! 8 ( "@ L #
M!0 < ) &@ ,& _____P # /____\
M !P #_____ 0 &-R=#%T97AT+G, 4U1!4E1&
M4DT 7U]S=&%R= !?;6]N8V]N=')O; !?;6-O=6YT %]S<')O8VUO;G-T87)T
M O8F%B82]C>7!R97-S+W5S<B]I;F-L=61E+W)E9V1E9BYH O8F%B82]C
M>7!R97-S+W5S<B]I;F-L=61E+V%S;2YH !C<G0Q=&EN:70N<P 9V1B;64N
M8P \+S1$96)U9R\^ '!U<&EL.B]C>6=I;G0O<&QA>2]F;F8O9V1B;64N8P W
M,#(S-#@S-CD -3,X-@!T7W-T<G5C= !V7V-H87)?;65M8F5R '9?<VAO<G1?
M;65M8F5R '9?:6YT7VUE;6)E<@!V7VQO;F=?;65M8F5R '9?9FQO871?;65M
M8F5R '9?9&]U8FQE7VUE;6)E<@ N1C$Q '9?8VAA<E]M96UB97( =E]S:&]R
M=%]M96UB97( =E]I;G1?;65M8F5R '9?;&]N9U]M96UB97( =E]F;&]A=%]M
M96UB97( =E]D;W5B;&5?;65M8F5R '1?=6YI;VX =E]C:&%R7VUE;6)E<@!V
M7W-H;W)T7VUE;6)E<@!V7VEN=%]M96UB97( =E]L;VYG7VUE;6)E<@!V7V9L
M;V%T7VUE;6)E<@!V7V1O=6)L95]M96UB97( +D8Q,P!V7V-H87)?;65M8F5R
M '9?<VAO<G1?;65M8F5R '9?:6YT7VUE;6)E<@!V7VQO;F=?;65M8F5R '9?
M9FQO871?;65M8F5R '9?9&]U8FQE7VUE;6)E<@!V7V-H87)?9G5N8P!V7W-I
M9VYE9%]C:&%R7V9U;F, =E]U;G-I9VYE9%]C:&%R7V9U;F, =E]S:&]R=%]F
M=6YC '9?<VEG;F5D7W-H;W)T7V9U;F, =E]U;G-I9VYE9%]S:&]R=%]F=6YC
M '9?:6YT7V9U;F, =E]S:6=N961?:6YT7V9U;F, =E]U;G-I9VYE9%]I;G1?
M9G5N8P!V7VQO;F=?9G5N8P!V7W-I9VYE9%]L;VYG7V9U;F, =E]U;G-I9VYE
M9%]L;VYG7V9U;F, =E]F;&]A=%]F=6YC '9?9&]U8FQE7V9U;F, ;&EN:P!N
M97AT &QI;FMF=6YC '-T=69F '1U7VQI;FL ;F5X= !L:6YK9G5N8P!S='5F
M9@ N1C(Y ')E9 !G<F5E;@!B;'5E &-O;&]R<P!Y96QL;W< <'5R<&QE '!I
M;FL +D8S,0!C:&5V>0!F;W)D &-A<G, 8FUW '!O<G-C:&4 +D8S,P!&04Q3
M10!44E5% &)O;VQE86X 8G9A;', 9F%L<V4 =')U90!B;V]L96%N,@!M:7-O
M<F1E<F5D '1W;P!O;F4 >F5R;P!T:')E90!M86EN !G96XO<W1U8F9P97-T
M87)T+F, 7U]R96%D96YV7W-I9V9P90 8W1Y<&4N8P!F:7)S=%]C86QL %]S
M971C:')C;&%S<P 9V5N+V-U97AI="YC &5X:70 &=E=&5N=BYC &=E=&5N
M=@!N=FUA=&-H !G96XO<W1R8W!Y+G, <W1R8W!Y #$D,# P,# P,# P, D
M9&]C:#, )&1O8V@R "1D;V-H,0 D9&]C:# '-Y<R]?;W!E;BYS %]O<&5N
M #DD,# P,# P,# P, +V)A8F$O8WEP<F5S<R]U<W(O:6YC;'5D92]S>7,N
M<P +V)A8F$O8WEP<F5S<R]U<W(O:6YC;'5D92]S>7,O<WES8V%L;"YH !S
M>7,O7W)E860N<P!?<F5A9 Y)# P,# P,# P,# &=E;B]B8V]P>2YS &UE
M;6-P>0!G;V9O<G=A<F1S &9O<G=A<F1S7V)Y=&5C;W!Y #DY)# P,# P,# P
M,# <F5T &9O<G=A;&EG;F%B;&4 9F]R=U]C;W!Y,@!F;W)W7V-O<'DS &9O
M<G=A<F1S &9O<G=A<F1S7S,R &9O<G=A<F1S7S$V &9O<G=A<F1S7S0 9V]B
M86-K=V%R9', 8F%C:W=A<F1S7V)Y=&5C;W!Y #DY)# P,# P,# P,#$ 8F%C
M:V%L:6=N86)L90!B86-K7V-O<'DR &)A8VM?8V]P>3, 8F%C:W=A<F1S &)A
M8VMW87)D<U\S,@!B86-K=V%R9'-?,38 8F%C:W=A<F1S7S0 '-Y<R]?8VQO
M<V4N<P!?8VQO<V4 .20P,# P,# P,# P !A=&5X:70N8P!?7VYE>'1F;@!?
M7V5X:71?9FYS &%T97AI= !?7V-A;&Q?97AI=&9N<P 9FQS8G5F+F, 7V-L
M96%N=7 9F-L;W-E &9F;'5S: !?9FQS8G5F %]X9FQS8G5F %]W<G1C:&L
M7V9I;F1B=68 7V)U9G-Y;F, '-Y<R]E>&ET+G, 7V5X:70 &-R="]C97)R
M;W(N<P!?8V5R<F]R !D871A+F, &UP7V1E9BYC !M86QL;V,N8P!A;&QO
M8W, 86QL;V-P &%L;&]C= !A;&QO8W@ 86QL;V-E;F0 ;6%L;&]C &9R964
M<F5A;&QO8P <WES+U]L<V5E:RYS %]L<V5E:P Y)# P,# P,# P,# '-Y
M<R]?=W)I=&4N<P!?=W)I=&4 .20P,# P,# P,# P !?;W-E<G)O<BYC %]O
M<V5R<F]R %]S971O<V5R<F]R !?:7-A='1Y+F, 7VES871T>0 <WES+U]S
M8G)K+G, 7W-B<FL 97)R %]B<FL ,20P,# P,# P,# P !S>7,O7VEO8W1L
M+G, 7VEO8W1L #DD,# P,# P,# P, 8W)T;FEN:70N<P 7V5N=FER;VX
M96YV:7)O;@!?7T%R9V, 7U]!<F=V &5R<FYO %]?<W1A<G0 7V=P %]?:7-T
M87)T %]?<F5A9&5N=E]S:6=F<&4 7W-E=&-H<F-L87-S &UA:6X 97AI= !?
M;6]N8V]N=')O; !?;6-O=6YT %]S<')O8VUO;G-T87)T '9?8VAA<@!V7W-I
M9VYE9%]C:&%R '9?=6YS:6=N961?8VAA<@!V7W-H;W)T '9?<VEG;F5D7W-H
M;W)T '9?=6YS:6=N961?<VAO<G0 =E]I;G0 =E]S:6=N961?:6YT '9?=6YS
M:6=N961?:6YT '9?;&]N9P!V7W-I9VYE9%]L;VYG '9?=6YS:6=N961?;&]N
M9P!V7V9L;V%T '9?9&]U8FQE '9?8VAA<E]A<G)A>0!V7W-I9VYE9%]C:&%R
M7V%R<F%Y '9?=6YS:6=N961?8VAA<E]A<G)A>0!V7W-H;W)T7V%R<F%Y '9?
M<VEG;F5D7W-H;W)T7V%R<F%Y '9?=6YS:6=N961?<VAO<G1?87)R87D =E]I
M;G1?87)R87D =E]S:6=N961?:6YT7V%R<F%Y '9?=6YS:6=N961?:6YT7V%R
M<F%Y '9?;&]N9U]A<G)A>0!V7W-I9VYE9%]L;VYG7V%R<F%Y '9?=6YS:6=N
M961?;&]N9U]A<G)A>0!V7V9L;V%T7V%R<F%Y '9?9&]U8FQE7V%R<F%Y '9?
M8VAA<E]P;VEN=&5R '9?<VEG;F5D7V-H87)?<&]I;G1E<@!V7W5N<VEG;F5D
M7V-H87)?<&]I;G1E<@!V7W-H;W)T7W!O:6YT97( =E]S:6=N961?<VAO<G1?
M<&]I;G1E<@!V7W5N<VEG;F5D7W-H;W)T7W!O:6YT97( =E]I;G1?<&]I;G1E
M<@!V7W-I9VYE9%]I;G1?<&]I;G1E<@!V7W5N<VEG;F5D7VEN=%]P;VEN=&5R
M '9?;&]N9U]P;VEN=&5R '9?<VEG;F5D7VQO;F=?<&]I;G1E<@!V7W5N<VEG
M;F5D7VQO;F=?<&]I;G1E<@!V7V9L;V%T7W!O:6YT97( =E]D;W5B;&5?<&]I
M;G1E<@!V7W-T<G5C=#$ =E]S=')U8W0R '9?=6YI;VX =E]U;FEO;C( =E]C
M:&%R7V9U;F, =E]S:6=N961?8VAA<E]F=6YC '9?=6YS:6=N961?8VAA<E]F
M=6YC '9?<VAO<G1?9G5N8P!V7W-I9VYE9%]S:&]R=%]F=6YC '9?=6YS:6=N
M961?<VAO<G1?9G5N8P!V7VEN=%]F=6YC '9?<VEG;F5D7VEN=%]F=6YC '9?
M=6YS:6=N961?:6YT7V9U;F, =E]L;VYG7V9U;F, =E]S:6=N961?;&]N9U]F
M=6YC '9?=6YS:6=N961?;&]N9U]F=6YC '9?9FQO871?9G5N8P!V7V1O=6)L
M95]F=6YC '-?;&EN:P!U7VQI;FL <')I;6%R>0!N;VYP<FEM87)Y &-L=6YK
M97( <W!O<G1S8V%R %]C='EP90!G971E;G8 <W1R8W!Y %]O<&5N %]R96%D
M &UE;6-P>0!?8VQO<V4 7U]T<F%P7V9P95]O=F5R<FED90!?7V-A;&Q?97AI
M=&9N<P!?8VQE86YU< !?97AI= !?8V5R<F]R &%T97AI= !?8G5F96YD=&%B
M %]I;V( 7W-P<F]C960 7VQA<W1B=68 7W-I8G5F %]S;V)U9@!?<VUB=68
M9F9L=7-H &9C;&]S90!F<F5E %]L<V5E:P!?>&9L<V)U9@!?9FQS8G5F %]W
M<FET90!?=W)T8VAK %]B=69S>6YC %]S971O<V5R<F]R %]F:6YD8G5F &UA
M;&QO8P!?:7-A='1Y %]L;V-K %]U;&]C:P!?;FQO8VL 7VEL;V-K %]F;&]C
M:P!?=VQO8VL 7V-L;V-K %]T;&]C:P!?8W1L;V-K %]D;&]C:P!?8V%S %]U
M<U]R<W1H<F5A9%]S=&1I;P!?<V)R:P!?8G)K ')E86QL;V, 7V]S97)R;W(
M7VEO8W1L &5N9 !?;6EN8G)K %]C=7)B<FL 7V5N9 $ !P $
M 0 + "$ 0 $
M %&8 ? $ !P $ ! ) L "
M $ 0 4 %'8 $ !
MP $ !D (0 T " $ 0
M H %'8 $ !P $ "% #0 \
M " \ !'8
M $ "4 $ "2 #?0 !$ "* (0 ,\
M $ \ 0 !&@ ! ! 0 !\ _ $ %D $ 0/
M )0 )L $ \ ( 3 $ $J #P !$
M ! 8 %X ! $ %H $ 0T (0 )\ % \@
M #L 4 $ $Y #P !( ! 8 %\ 7 $ &
MD $ 15 $P *0 $ !+0 T 5 $ %(
M #P !, ! 8 '8 , $ &T $ 1H &0 *@
M & !.@ $ 6 ( %7 $0 !0 ! 8
M (( 0 $ 'T $ 2! /@ *X ) !>@ "H
M 8 $ %H ! !4 %&8 )( J $ (@ $ 2_
M ( +< % !I @ 9 $ %L ! !H
M %&8 +P % $ (@ $ 3? (0 +P "
M ! $ !\ %'8 $ (
M@ $ 4 *0 +X " ! $
M "0 %'8 $ (H $ 4I ( ,
M % !K @ : $ %P ! "D %&8
M ,$ % $ (P $ 5) !% ,4 9 !M ,8
M ; $ %T ! "X %&8 ,8 "T $ +T $ 9=
M (@ -X % ">@ @ < $ %X ! #,
M %&8 7H % $ +\ $ 9_ - ., ( "@@
M "P = ( %\ $0 #@ ! 8 7\ ( $ ,
MH $ :S 3 .L 2 "K@ B( ? @ &-
M '0 #D ! 8 8< "; $ 5, $ ;_ $@ /T
M $ $T 0 G $ &J ! #H %&8
M B( " $ 50 $ <1 %@ 0$ $ $U 0
M H $ &N ! #\ #&8 B0 # $ 54 $ <G
M " 04 " &R #0 $(
M ! 8 $ 54 $ <O "@ 0< "
M &_ #0 $, ! 8 $ 5
M4 $ <Y 0P 0D - $V 1L I , ',
M $P $0 ! 8 B< !N $ 9P $ =\ (@ 18
M % %\P @ L $ '? ! $4 %&8
M I4 % $ 9X $ >> (@ 1L % %^P @
M M $ 'C ! $H %&8 IH % $ : $ ?
M (0 2 & & P 8 N ( 'G $0 $\
M ! 8 I\ # $ :( $ ?A $P 28 $ &"0
M !4 P $ 'X #P % ! 8 J( ) $ :
M@ $ ?T *0 2H ( &'@ !H Q ( ('
M " %$ %&8 JL 0 $ :\ $ @= (@ 3(
M % &. @ S $ (/ ! %8 %&8
M KL %$$ ;$ $ @_ # 3< "
M %L !'8 $ !
M @ ( 0 $ " @ ! 0 (
M " P 0 % !@ < ( "0 ( " 0
M $ * 0 ( + # H ! @ L ,
M"@ $ " "P P - 0 ( + # X "
M @ $ ! #P $ " "P P 0 $0 !(
M ! @ L , $P $ " % !4 6 %P
M $ " "P P 8 0 ( + # !D :
M&P $ " "P P < 0 ( + # !T
M ! "K %K___ D0 JP!:___P 1$ ,$ 7/__\
M &! #!0%S___ !\0 P8!<___P E $ !P!@@
M ( +1 BH 4K___ P #$ 0!L<%L___P 4 Z $ %
MD!@@ $ & 2P! !: 8( " ! %@ 0 .L&" A0 < !=
M $ &D!@@ $ 8@! B@8( $ &X 0 (P&" !@
M !V $ "/!@@ @ $ A1 "Q %P ( ! (P0 L1!< "
M 0 ":$ +$@7 @ $ JA "Q0%P # ! +(0 L6!<
M P 0 #!$ +& 7 D $ TA "QP%P $ ! -@0 L@
M!< ! 0 #E$ +) 7 H $ ]! "R@%P % ! /L0
M LL!< !0 0 $)$ +, 7 L $ !&1 "S0%P & !
M 2$0 LX!< !P 0 $J$ +0 7 T $ !-Q "T(%P 3
M! 4L0 M$!< &0 0 %A$ +2 7 !\ $ !;Q "TP%P E
M ! 800 M0!< *P 0 &;$ +6 7 #$ $ !IQ "V %
MP W ! ;H0 MH!< /0 0 '/$ +< 7 $, $ !W!
M"W@%P !) ! ? 0 N !< 3P 0 (&$ +B 7 %4 $ "
M%! 8_ $8 !; ! B,0 N0!< 80 0 (R$ +E 7 &( $
M "2! "Y@%P !C ! F 0 N<!< 9 0 )P$ +H 7 &4
M $ "AQ "Z0%P !F ! J 0 NH!< 9P 0 *N$ +K 7
M &@ $ "PQ "[ %P !I ! MH0 NT!< :@ 0 +I$ +
MN 7 &L $ "_Q "[P%P !L ! Q<0 O !< ;0 0 ,G
M$ +Q 7 &X $ #.! 8\ $8 !R ! T(0 &/8!& > 0
M -,$ +R 7 'X $ #5! "] %P "$ ! UT 0 )0&" (0
M 0 -I $ ":!@@ "4 $ #? ! H 8( I ! Y$ 0 *8&"
M+0 0 .> $ "L!@@ #$ $ #L@! L@8( U ! \@ 0 +@
M&" .0 0 /3 $ "^!@@ #T $ #Y0! Q 8( !! ! _D
M0 ,H&" 10 0 0% $ #0!@@ $D $ $& ! U@8( !- !
M!"T 0 -P&" 40 0 0Z $ #C!@@ %4 $ $2! "]@%P "^
M! !$\0 &,P!& W 0 16$ +W 7 .4 $ $7A "^ %P #N
M ! !&D0 OD!< ]@ 0 1Q$ +Z 7 /X & $>Q $
M3___ " !(( 0 ;0&" 0 D 2) $ 'T!@@ $ * $D !
M"( 8( ! #0 !)8 0 B@&" 0 X 2< $ (P!@@ $ / $
MHP! "] 8( ! !P !*H0 K0!:___P ! 2^ $ ,.!@@ 4 1
M $S0! #* 8( ! $@ !-8 0!4P&" 0 !, 3< $ 50!@@ $
M 0 $Y ! "_ 8( # % !.L0 *@!$___P !0 3V$ $- 1/
M__\ 5 $^Q "P %K___ % !000 KP!:___P !0 4-$ 0
M 1O__\ 4 %%! 0 $;___ % !1L0 & (!&___P !$ 4B
M $ -V!@@ 4 1 %*0! #1@8( # %@ !3 0!AH&" " !<
M 4U $ 9P!@@ $ 1 %/ ! $5 8( ) $0 !44 0 \@&" !P
M !@ 5- $ 9X!@@ $ 1 %5 ! $F@8( + $0 !5P 0!38&"
M#P !D 5E $ :#!@@ , 1 %<0! $W08( - %@ !7H 0!50
M&" !@ !H 6! $ :(!@@ $ 5 %B1 #!P%S___ %0 !8\0
M P@!<___P !4 66$ ,) 7/__\ 5 %G1 #"@%S___ %0
M!:00 PL!<___P !4 6K$ ,, 7/__\ 5 %LA ##0%S___
M%0 !;D0 PX!<___P !4 7 $ ,/ 7/__\ 5 %R! #$ %S___
M %0 !<\0 Q$!<___P !4 74$ +! 6O__\ ; %YP! &H 8
M( ! &P !>T 0!JP&" ! !8 7R $ 8J!@@ H 9 %^@!
M&@ 8( ! ' !@, 0!KP&" 0 !L 8*$ "G0!1O__\ ; &
I#A "H $3___ &P !A80 J$!$___P __\ 8>$ "G0!1O__\;
end

View File

@ -0,0 +1,98 @@
/* Tests regarding examination of prologues. */
int
inner (z)
int z;
{
return 2 * z;
}
/* The native compiler seems to lack asm(). */
#if defined (__GNUC__) && defined (__mips__)
/* This is the verbatim output corresponding to the function middle.
Label names have been changed to avoid conflicts. It is here as
asm() so we don't have to worry that (a) the compiler might change
how it does things, and (b) we'd have to insure it gets compiled
with gcc -O2. */
asm ("\n\
.text \n\
.align 2 \n\
.globl middle \n\
.loc 1 22 \n\
\n\
.loc 1 21 \n\
.ent middle \n\
middle: \n\
.frame $sp,24,$31 # vars= 0, regs= 1/0, args = 16, extra= 0 \n\
.mask 0x80000000,-8 \n\
.fmask 0x00000000,0 \n\
subu $sp,$sp,24 \n\
\n\
.loc 1 23 \n\
.set noreorder \n\
.set nomacro \n\
beq $4,$0,middle_lab0 \n\
sw $31,16($sp) \n\
.set macro \n\
.set reorder \n\
\n\
\n\
.loc 1 26 \n\
.set noreorder \n\
.set nomacro \n\
jal inner \n\
li $4,0x00000006 # 6 \n\
.set macro \n\
.set reorder \n\
\n\
j middle_lab1 \n\
middle_lab0: \n\
\n\
.loc 1 24 \n\
.set noreorder \n\
.set nomacro \n\
jal inner \n\
li $4,0x00000005 # 5 \n\
.set macro \n\
.set reorder \n\
\n\
middle_lab1: \n\
.set noreorder \n\
lw $31,16($sp) \n\
nop \n\
j $31 \n\
addu $sp,$sp,24 \n\
.set reorder \n\
.end middle \n\
");
#if 0
/* Not necessary, and loses if gcc is not using stabs. */
asm (".stabs \"middle:F1\",36,0,13,middle");
asm (".stabs \"x:p1\",160,0,13,0");
#endif
#else
int
middle (x)
int x;
{
if (x == 0)
return inner (5);
else
return inner (6);
}
#endif
int
top (y)
int y;
{
return middle (y + 1);
}
int
main (argc, argv)
{
return top (-1) + top (1);
}

View File

@ -0,0 +1,35 @@
/* Test that things still (sort of) work when compiled without -g. */
int dataglobal = 3; /* Should go in global data */
static int datalocal = 4; /* Should go in local data */
int bssglobal; /* Should go in global bss */
static int bsslocal; /* Should go in local bss */
int
inner (x)
int x;
{
return 2 * x;
}
static int
middle (x)
int x;
{
return 2 * inner (x);
}
int
top (x)
int x;
{
return 2 * middle (x);
}
int
main (argc, argv)
int argc;
char **argv;
{
return top (argc);
}

View File

@ -0,0 +1,5 @@
#if defined (__GNUC__)
set gcc_compiled __GNUC__
#else
set gcc_compiled 0
#endif

View File

@ -0,0 +1,367 @@
# Copyright (C) 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Fred Fish. (fnf@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
set prms_id 0
set bug_id 0
set binfile "opaque"
set srcfile $binfile.c
if ![file exists $objdir/$subdir/$binfile] then {
perror "$objdir/$subdir/$binfile does not exist."
return 0
}
# Start with a fresh gdb.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
source gdb.base/opaque-info.exp
#
# Test basic opaque structure handling (statically).
# The ordering of the tests is significant. We first try the things that
# might fail if gdb fails to connect the uses of opaque structures to
# the actual opaque structure definition.
# When we start up, gdb sets the file containing main() as the current
# source file. The actual structure foo is defined in a different file.
# A pointer (foop) to an instance of the opaque struct is defined in the same
# source file as main(). Ensure that gdb correctly "connected" the definition
# in the other file with the pointer to the opaque struct in the file containing
# "foop".
# Define a procedure to set up an xfail for all targets that do not support
# this sort of cross reference.
# Any target gcc that has a DBX_NO_XREFS definition in its config file will
# not support it.
# XCOFF does not seem to support it either. See the very end of gcc/xcoffout.h.
# Native alpha ecoff doesn't support it either.
# I don't think this type of cross reference works for any COFF target
# either.
proc setup_xfail_on_opaque_pointer {} {
global gcc_compiled
setup_xfail "rs6000-*-*" "a29k-*-udi" "vax-*-*" "i*86-sequent-bsd*"
if {!$gcc_compiled} then {
setup_xfail "alpha-*-*"
}
}
setup_xfail_on_opaque_pointer
send "whatis foop\n"
expect {
-re "whatis foop\r
type = struct foo \[*\]+\r
$prompt $" { pass "whatis on opaque struct pointer (statically)"}
-re ".*$prompt $" { fail "whatis on opaque struct *" }
timeout { fail "(timeout) whatis on opaque struct *" }
}
# Ensure that we know the form of the structure that foop points to.
setup_xfail_on_opaque_pointer
send "ptype foop\n"
expect {
-re "ptype foop\r
type = struct foo \{\r
int a;\r
int b;\r
\} \[*\]+\r
$prompt $" { pass "ptype on opaque struct pointer (statically)" }
-re ".*$prompt $" { fail "ptype on opaque struct *" }
timeout { fail "(timeout) ptype on opaque struct *" }
}
# An instance of the opaque structure (afoo) is defined in a different file.
# Ensure that we can locate afoo and the structure definition.
send "whatis afoo\n"
expect {
-re "whatis afoo\r
type = struct foo\r
$prompt $" { pass "whatis on opaque struct instance (statically)" }
-re ".*$prompt $" { fail "whatis on opaque struct" }
timeout { fail "(timeout) whatis on opaque struct" }
}
# Ensure that we know the form of "afoo".
send "ptype afoo\n"
expect {
-re "ptype afoo\r
type = struct foo \{\r
int a;\r
int b;\r
\}\r
$prompt $" { pass "ptype on opaque struct instance (statically)" }
-re ".*$prompt $" { fail "ptype on opaque struct instance" }
timeout { fail "(timeout) ptype on opaque struct" }
}
# Ensure that we know what a struct foo looks like.
send "ptype struct foo\n"
expect {
-re "ptype struct foo\r
type = struct foo \{\r
int a;\r
int b;\r
\}\r
$prompt $" { pass "ptype on opaque struct tagname (statically)" }
-re ".*$prompt $" { fail "ptype on opaque struct" }
timeout { fail "(timeout) ptype on opaque struct" }
}
#
# Done with static tests, now test dynamic opaque structure handling.
# We reload the symbol table so we forget about anything we might
# have learned during the static tests.
#
if [istarget "mips-idt-*"] then {
# Restart because IDT/SIM runs out of file descriptors.
gdb_exit
gdb_start
}
gdb_reinitialize_dir $srcdir/$subdir
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
}
gdb_load $objdir/$subdir/$binfile
# Set breakpoint on main, where struct foo is incomplete.
send "break main\n"
expect {
-re "Breakpoint.*at.* file .*opaque0.c, line.*$prompt $" {}
-re ".*$prompt $" { fail "setting breakpoint at main" }
timeout { fail "(timeout) setting breakpoint" }
}
# Run until break at main. Struct foo is opaque in the file containing
# main().
send "run\n"
expect {
-re "Starting program:.*Breakpoint 1.*$prompt $" {}
-re ".*$prompt $" { fail "run until main()" }
timeout { fail "(timeout) run until main()" }
}
# The current source file is now the one containing main(). The structure foo
# is defined in a different file, but we have a pointer to an instance of
# the opaque structure in the current file. Ensure we know it's type.
setup_xfail_on_opaque_pointer
send "whatis foop\n"
expect {
-re "whatis foop\r
type = struct foo \[*\]+\r
$prompt $" { pass "whatis on opaque struct pointer (dynamically)"}
-re ".*$prompt $" { fail "whatis on opaque struct pointer" }
timeout { fail "(timeout) whatis on opaque struct ptr" }
}
# Ensure that we know the form of the thing foop points to.
setup_xfail_on_opaque_pointer
send "ptype foop\n"
expect {
-re "ptype foop\r
type = struct foo \{\r
int a;\r
int b;\r
\} \[*\]+\r
$prompt $" { pass "ptype on opaque struct pointer (dynamically)" }
-re ".*$prompt $" { fail "ptype on opaque struct *" }
timeout { fail "(timeout) ptype on opaque struct *" }
}
send "whatis afoo\n"
expect {
-re "whatis afoo\r
type = struct foo\r
$prompt $" { pass "whatis on opaque struct instance (dynamically)" }
-re ".*$prompt $" { fail "whatis on opaque struct" }
timeout { fail "(timeout) whatis on opaque struct" }
}
# Ensure that we know the form of afoo, an instance of a struct foo.
send "ptype afoo\n"
expect {
-re "ptype afoo\r
type = struct foo \{\r
int a;\r
int b;\r
\}\r
$prompt $" { pass "ptype on opaque struct instance (dynamically)" }
-re ".*$prompt $" { fail "ptype on opaque struct instance" }
timeout { fail "(timeout) ptype on opaque struct" }
}
# Ensure that we know the form of an explicit struct foo.
send "ptype struct foo\n"
expect {
-re "ptype struct foo\r
type = struct foo \{\r
int a;\r
int b;\r
\}\r
$prompt $" { pass "ptype on opaque struct tagname (dynamically)" }
-re ".*$prompt $" { fail "ptype on opaque struct" }
timeout { fail "(timeout) ptype on opaque struct" }
}
# Now reload the symbols again so we forget about anything we might
# have learned reading the symbols during the previous tests.
gdb_reinitialize_dir $srcdir/$subdir
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
}
gdb_load $objdir/$subdir/$binfile
# Disable the breakoint on main().
# Set breakpoint on getfoo, where struct foo is complete.
send "disable 1\n"
expect {
-re ".*$prompt $" {}
timeout { fail "(timeout) disabling breakpoint" }
}
send "break getfoo\n"
expect {
-re "Breakpoint.*at.* file .*opaque1\.c, line.*$prompt $" {}
-re ".*$prompt $" { fail "setting breakpoint at getfoo" }
timeout { fail "(timeout) setting breakpoint" }
}
# Run until break at getfoo(). Struct foo is defined here.
# Retry all the tests we we tried at main() where struct foo was opaque.
send "run\n"
expect {
-re "Starting program:.*Breakpoint.*$prompt $" {}
-re ".*$prompt $" { fail "run until getfoo()" }
timeout { fail "(timeout) run until getfoo()" }
}
# Ensure that we know what foop is.
setup_xfail_on_opaque_pointer
send "whatis foop\n"
expect {
-re "whatis foop\r
type = struct foo \[*\]+\r
$prompt $" { pass "whatis on opaque struct pointer (dynamically)"}
-re ".*$prompt $" { fail "whatis on opaque struct pointer" }
timeout { fail "(timeout) whatis on opaque struct ptr" }
}
# Ensure that we know the form of the thing foop points to.
setup_xfail_on_opaque_pointer
send "ptype foop\n"
expect {
-re "ptype foop\r
type = struct foo \{\r
int a;\r
int b;\r
\} \[*\]+\r
$prompt $" { pass "ptype on opaque struct pointer (dynamically)" }
-re ".*$prompt $" { fail "ptype on opaque struct *" }
timeout { fail "(timeout) ptype on opaque struct *" }
}
send "whatis afoo\n"
expect {
-re "whatis afoo\r
type = struct foo\r
$prompt $" { pass "whatis on opaque struct instance (dynamically)" }
-re ".*$prompt $" { fail "whatis on opaque struct" }
timeout { fail "(timeout) whatis on opaque struct" }
}
# Ensure that we know the form of afoo, an instance of a struct foo.
send "ptype afoo\n"
expect {
-re "ptype afoo\r
type = struct foo \{\r
int a;\r
int b;\r
\}\r
$prompt $" { pass "ptype on opaque struct instance (dynamically)" }
-re ".*$prompt $" { fail "ptype on opaque struct instance" }
timeout { fail "(timeout) ptype on opaque struct" }
}
# Ensure that we know the form of an explicit struct foo.
send "ptype struct foo\n"
expect {
-re "ptype struct foo\r
type = struct foo \{\r
int a;\r
int b;\r
\}\r
$prompt $" { pass "ptype on opaque struct tagname (dynamically)" }
-re ".*$prompt $" { fail "ptype on opaque struct" }
timeout { fail "(timeout) ptype on opaque struct" }
}
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
}

View File

@ -0,0 +1,16 @@
/* Note that struct foo is opaque (never defined) in this file. This
is allowed by C since this file does not reference any members of
the structure. The debugger needs to be able to associate this
opaque structure definition with the full definition in another
file.
*/
struct foo *foop;
extern struct foo *getfoo ();
int main ()
{
foop = getfoo ();
putfoo (foop);
return 0;
}

View File

@ -0,0 +1,18 @@
struct foo {
int a;
int b;
} afoo = { 1, 2};
struct foo *getfoo ()
{
return (&afoo);
}
#ifdef __STDC__
void putfoo (struct foo *foop)
#else
void putfoo (foop)
struct foo *foop;
#endif
{
}

View File

@ -0,0 +1,97 @@
/* This table is used as a source for every ascii character.
It is explicitly unsigned to avoid differences due to native characters
being either signed or unsigned. */
unsigned char ctable1[256] = {
0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,
0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,
0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027,
0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037,
0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,
0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,
0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,
0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,
0100, 0101, 0102, 0103, 0104, 0105, 0106, 0107,
0110, 0111, 0112, 0113, 0114, 0115, 0116, 0117,
0120, 0121, 0122, 0123, 0124, 0125, 0126, 0127,
0130, 0131, 0132, 0133, 0134, 0135, 0136, 0137,
0140, 0141, 0142, 0143, 0144, 0145, 0146, 0147,
0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,
0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,
0170, 0171, 0172, 0173, 0174, 0175, 0176, 0177,
0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207,
0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217,
0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227,
0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237,
0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247,
0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257,
0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267,
0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277,
0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307,
0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317,
0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327,
0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337,
0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347,
0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357,
0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367,
0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377
};
unsigned char ctable2[] = {
'a','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
'a','a','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
'a','a','a','X','X','X','X','X','X','X','X','X','X','X','X','X',
'a','a','a','a','X','X','X','X','X','X','X','X','X','X','X','X',
'a','a','a','a','a','X','X','X','X','X','X','X','X','X','X','X',
'a','a','a','a','a','a','X','X','X','X','X','X','X','X','X','X',
'a','a','a','a','a','a','a','X','X','X','X','X','X','X','X','X',
'a','a','a','a','a','a','a','a','X','X','X','X','X','X','X','X',
'a','a','a','a','a','a','a','a','a','X','X','X','X','X','X','X',
'a','a','a','a','a','a','a','a','a','a','X','X','X','X','X','X',
'a','a','a','a','a','a','a','a','a','a','a','X','X','X','X','X',
'a','a','a','a','a','a','a','a','a','a','a','a','X','X','X','X',
'a','a','a','a','a','a','a','a','a','a','a','a','a','X','X','X',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','X','X',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','X',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a'
};
/* Single and multidimensional arrays to test access and printing of array
members. */
int int1dim[12] = {0,1,2,3,4,5,6,7,8,9,10,11};
int int2dim[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
int int3dim[2][3][2] = {{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}};
int int4dim[1][2][3][2] = {{{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}}};
char *teststring = "teststring contents";
/* Test printing of a struct containing character arrays. */
struct some_arrays {
unsigned char array1[4];
unsigned char array2[1];
unsigned char array3[1];
unsigned char array4[2];
unsigned char array5[4];
} arrays = {
{'a', 'b', 'c', '\0'},
{'d'},
{'e'},
{'f', 'g' },
{'h', 'i', 'j', '\0'}
};
struct some_arrays *parrays = &arrays;
/* -- */
main ()
{
malloc(1);
/* Prevent AIX linker from removing variables. */
return ctable1[0] + ctable2[0] + int1dim[0] + int2dim[0][0]
+ int3dim[0][0][0] + int4dim[0][0][0][0] + teststring[0] +
*parrays -> array1;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,301 @@
/*
* Test file with lots of different types, for testing the
* "ptype" command.
*/
/*
* First the basic C types.
*/
#if !defined (__STDC__) && !defined (_AIX)
#define signed /**/
#endif
char v_char;
signed char v_signed_char;
unsigned char v_unsigned_char;
short v_short;
signed short v_signed_short;
unsigned short v_unsigned_short;
int v_int;
signed int v_signed_int;
unsigned int v_unsigned_int;
long v_long;
signed long v_signed_long;
unsigned long v_unsigned_long;
float v_float;
double v_double;
/*
* Now some derived types, which are arrays, functions-returning,
* pointers, structures, unions, and enumerations.
*/
/**** arrays *******/
char v_char_array[2];
signed char v_signed_char_array[2];
unsigned char v_unsigned_char_array[2];
short v_short_array[2];
signed short v_signed_short_array[2];
unsigned short v_unsigned_short_array[2];
int v_int_array[2];
signed int v_signed_int_array[2];
unsigned int v_unsigned_int_array[2];
long v_long_array[2];
signed long v_signed_long_array[2];
unsigned long v_unsigned_long_array[2];
float v_float_array[2];
double v_double_array[2];
/**** pointers *******/
char *v_char_pointer;
signed char *v_signed_char_pointer;
unsigned char *v_unsigned_char_pointer;
short *v_short_pointer;
signed short *v_signed_short_pointer;
unsigned short *v_unsigned_short_pointer;
int *v_int_pointer;
signed int *v_signed_int_pointer;
unsigned int *v_unsigned_int_pointer;
long *v_long_pointer;
signed long *v_signed_long_pointer;
unsigned long *v_unsigned_long_pointer;
float *v_float_pointer;
double *v_double_pointer;
/**** structs *******/
struct t_struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct1;
struct t_struct *v_t_struct_p;
struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct2;
/* typedef'd struct without a tag. */
typedef struct {
double v_double_member;
int v_int_member;
} t_struct3;
/* GCC seems to want a variable of this type, or else it won't put out
a symbol. */
t_struct3 v_struct3;
/**** unions *******/
union t_union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union;
union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union2;
/* typedef'd union without a tag. */
typedef union {
double v_double_member;
int v_int_member;
} t_union3;
/* GCC seems to want a variable of this type, or else it won't put out
a symbol. */
t_union3 v_union3;
/*** Functions returning type ********/
char v_char_func () { return(0); }
signed char v_signed_char_func () { return (0); }
unsigned char v_unsigned_char_func () { return (0); }
short v_short_func () { return (0); }
signed short v_signed_short_func () { return (0); }
unsigned short v_unsigned_short_func () { return (0); }
int v_int_func () { return (0); }
signed int v_signed_int_func () { return (0); }
unsigned int v_unsigned_int_func () { return (0); }
long v_long_func () { return (0); }
signed long v_signed_long_func () { return (0); }
unsigned long v_unsigned_long_func () { return (0); }
float v_float_func () { return (0.0); }
double v_double_func () { return (0.0); }
/**** Some misc more complicated things *******/
struct link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} *s_link;
union tu_link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} u_link;
struct outer_struct {
int outer_int;
struct inner_struct {
int inner_int;
long inner_long;
}inner_struct_instance;
union inner_union {
int inner_union_int;
long inner_union_long;
}inner_union_instance;
long outer_long;
} nested_su;
/**** Enumerations *******/
enum
/* Work around the bug for compilers which don't put out the right stabs. */
#if __GNUC__ < 2 && !defined (_AIX)
primary1_tag
#endif
{red1, green1, blue1} primary1;
enum {red, green, blue} primary;
enum colors {yellow, purple, pink} nonprimary;
enum {chevy, ford} clunker;
enum cars {bmw, porsche} sportscar;
typedef enum {FALSE, TRUE} boolean;
boolean v_boolean;
typedef enum bvals {false, true} boolean2;
enum misordered {two = 2, one = 1, zero = 0, three = 3};
/***********/
main ()
{
/* Seems like we need a variable of this type to get the type to be put
in the executable, at least for AIX xlc. */
enum misordered v_misordered = three;
/* Some of the tests in ptype.exp require invoking malloc, so make
sure it is linked in to this program. */
v_char_pointer = (char *) malloc (1);
/* Some linkers (e.g. on AIX) remove unreferenced variables,
so make sure to reference them. */
primary = blue;
primary1 = blue1;
nonprimary = pink;
sportscar = porsche;
clunker = ford;
v_struct1.v_int_member = 5;
v_struct2.v_int_member = 6;
v_struct3.v_int_member = 7;
v_char = 0;
v_signed_char = 0;
v_unsigned_char = 0;
v_short = 0;
v_signed_short = 0;
v_unsigned_short = 0;
v_int = 0;
v_signed_int = 0;
v_unsigned_int = 0;
v_long = 0;
v_signed_long = 0;
v_unsigned_long = 0;
v_float = 0;
v_double = 0;
v_char_array[0] = 0;
v_signed_char_array[0] = 0;
v_unsigned_char_array[0] = 0;
v_short_array[0] = 0;
v_signed_short_array[0] = 0;
v_unsigned_short_array[0] = 0;
v_int_array[0] = 0;
v_signed_int_array[0] = 0;
v_unsigned_int_array[0] = 0;
v_long_array[0] = 0;
v_signed_long_array[0] = 0;
v_unsigned_long_array[0] = 0;
v_float_array[0] = 0;
v_double_array[0] = 0;
v_char_pointer = 0;
v_signed_char_pointer = 0;
v_unsigned_char_pointer = 0;
v_short_pointer = 0;
v_signed_short_pointer = 0;
v_unsigned_short_pointer = 0;
v_int_pointer = 0;
v_signed_int_pointer = 0;
v_unsigned_int_pointer = 0;
v_long_pointer = 0;
v_signed_long_pointer = 0;
v_unsigned_long_pointer = 0;
v_float_pointer = 0;
v_double_pointer = 0;
nested_su.outer_int = 0;
v_t_struct_p = 0;
v_boolean = FALSE;
}

View File

@ -0,0 +1,713 @@
# Copyright (C) 1988, 1990, 1991, 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Rob Savoye. (rob@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
#
# test running programs
#
set prms_id 0
set bug_id 0
set binfile "ptype"
if ![file exists $objdir/$subdir/$binfile] then {
perror "$objdir/$subdir/$binfile does not exist."
return 0
}
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
# Test ptype of unnamed enumeration members before any action causes
# the partial symbol table to be expanded to full symbols. This fails
# with stabs compilers which fail to use a nameless stab (such as
# pre-2.4.5 versions of gcc and most non-gcc compilers).
send "ptype red1\n"
expect {
-re "type = enum primary1_tag \{red1, green1, blue1\}.*$prompt $"\
{
# The workaround is in effect. As this is a compiler, not GDB,
# bug, we'll make it a PASS but perhaps it should be an XFAIL.
pass "ptype unnamed enumeration member (worked around)"
}
-re "type = enum \{red1, green1, blue1\}.*$prompt $"\
{ pass "ptype unnamed enumeration member" }
-re ".*$prompt $" { fail "ptype unnamed enumeration member" }
timeout { fail "(timeout) ptype unnamed enumeration member" }
}
#
# test ptype command with structures
#
# Here and elsewhere, we accept
# "long", "long int", or "int" for long variables (whatis.exp already
# has an XFAIL for "int" (Sun cc bug), so no need to fail it here).
send "ptype struct t_struct\n"
expect {
-re "type = struct t_struct \{.*
(unsigned |)char v_char_member;.*
(short|short int) v_short_member;.*
int v_int_member;.*
(long|long int|int) v_long_member;.*
float v_float_member;.*
double v_double_member;.*
\}.*$prompt $" { pass "ptype structure" }
-re ".*$prompt $" { fail "ptype structure" }
timeout { fail "(timeout) ptype structure" }
}
# Test the equivalence between '.' and '->' for struct member references.
if [gdb_test "ptype v_struct1.v_float_member" "type = float"]<0 then {
gdb_exit
gdb_start
return -1
}
if [gdb_test "ptype v_struct1->v_float_member" "type = float"]<0 then {
gdb_exit
gdb_start
return -1
}
if [gdb_test "ptype v_t_struct_p.v_float_member" "type = float"]<0 then {
gdb_exit
gdb_start
return -1
}
if [gdb_test "ptype v_t_struct_p->v_float_member" "type = float"]<0 then {
gdb_exit
gdb_start
return -1
}
send "ptype struct link\n"
expect {
-re "type = struct link \{.*
struct link \[*\]next;.*
struct link \[*(\]+linkfunc\[)(\]+;.*
struct t_struct stuff.1..2..3.;.*
\}.*$prompt $" { pass "ptype linked list structure" }
-re ".*$prompt $" {
# IBM's xlc puts out bogus stabs--the stuff field is type 42,
# which isn't defined.
fail "ptype linked list structure (compiler bug in IBM's xlc)"
}
timeout { fail "(timeout) ptype linked list structure" }
}
#
# test ptype command with unions
#
send "ptype union t_union\n"
expect {
-re "type = union t_union \{.*
(unsigned |)char v_char_member;.*
(short|short int) v_short_member;.*
int v_int_member;.*
(long|long int|int) v_long_member;.*
float v_float_member;.*
double v_double_member;.*
\}.*$prompt $" { pass "ptype union" }
-re ".*$prompt $" { fail "ptype union" }
timeout { fail "(timeout) ptype union" }
}
send "ptype union tu_link\n"
expect {
-re "type = union tu_link .*
struct link \[*\]next;.*
struct link \[(\*\]+linkfunc\[)(\]+;.*
struct t_struct stuff.1..2..3.;.*
\}.*$prompt $" { pass "ptype linked list union" }
-re ".*$prompt $" {
# IBM's xlc puts out bogus stabs--the stuff field is type 42,
# which isn't defined.
fail "ptype linked list union (compiler bug in IBM's xlc)"
}
timeout { fail "(timeout) ptype linked list union" }
}
#
# test ptype command with enums
#
send "ptype primary\n"
expect {
-re "type = enum .red, green, blue.*$prompt $" { pass "ptype unnamed enumeration" }
-re ".*$prompt $" { fail "ptype unnamed enumeration" }
timeout { fail "(timeout) ptype unnamed enumeration" }
}
send "ptype enum colors\n"
expect {
-re "type = enum colors \{yellow, purple, pink\}.*$prompt $"\
{ pass "ptype named enumeration" }
-re ".*$prompt $" { fail "ptype named enumeration" }
timeout { fail "(timeout) ptype named enumeration" }
}
#
# test ptype command with enums as typedef
#
send "ptype boolean\n"
expect {
-re "type = enum \{FALSE, TRUE\}.*$prompt $" { pass "ptype unnamed typedef'd enumeration" }
-re ".*$prompt $" { fail "ptype unnamed typedef'd enumeration" }
timeout { fail "(timeout) ptype unnamed typedef'd enumeration" }
}
# And check that whatis shows the name, not "enum {...}".
# The problem with xlc is that the stabs look like
# :t51=eFALSE:0,TRUE:1,;
# boolean:t55=51
# v_boolean:G51
# GDB's behavior is correct; the type which the variable is defined
# as (51) doesn't have a name. Only 55 has a name.
gdb_test "whatis v_boolean" "type = boolean" \
"whatis unnamed typedef'd enum (compiler bug in IBM's xlc)"
# Same thing with struct and union.
gdb_test "ptype t_struct3" "type = struct \{.*
*double v_double_member;.*
*int v_int_member;.*\}" "printing typedef'd struct"
gdb_test "ptype t_union3" "type = union \{.*
*double v_double_member;.*
*int v_int_member;.*\}" "printing typedef'd union"
send "ptype enum bvals\n"
expect {
-re "type = enum bvals \{false, true\}.*$prompt $" { pass "ptype named typedef'd enumf'd enum" }
-re ".*$prompt $" { fail "ptype named typedef'd enumeration" }
timeout { fail "(timeout) ptype named typedef'd enumeration" }
}
#
# test ptype command with out-of-order enum values
#
send "ptype enum misordered\n"
expect {
-re "type = enum misordered \{two = 2, one = 1, zero = 0, three = 3\}.*$prompt $"\
{ pass "ptype misordered enumeration" }
-re ".*$prompt $" { fail "ptype misordered enumeration" }
timeout { fail "(timeout) ptype misordered enumeration" }
}
#
# test ptype command with a named enum's value
#
send "ptype three\n"
expect {
-re "type = enum misordered \{two = 2, one = 1, zero = 0, three = 3\}.*$prompt $"\
{ pass "ptype named enumeration member" }
-re ".*$prompt $" { fail "ptype named enumeration member" }
timeout { fail "(timeout) ptype named enumeration member" }
}
send "ptype red\n"
expect {
-re "type = enum \{red, green, blue\}.*$prompt $"\
{ pass "ptype unnamed enumeration member" }
-re ".*$prompt $" { fail "ptype unnamed enumeration member" }
timeout { fail "(timeout) ptype unnamed enumeration member" }
}
#
# test ptype command with basic C types
#
# I've commented most of this out because it duplicates tests in whatis.exp.
# I've just left in a token test or 2 which is designed to test that ptype
# acts like whatis for basic types. If it is thought to be necessary to
# test both whatis and ptype for all the types, the tests should be
# merged into whatis.exp, or else maintenance will be a royal pain -kingdon
#setup_xfail "i960-*-*" 1821
#setup_xfail "mips-idt-*" "mips-sgi-*" "a29k-*-*"
#send "ptype v_char\n"
#expect {
# -re "type = char.*$prompt $" { pass "ptype char" }
# -re ".*$prompt $" { fail "ptype char" }
# timeout { fail "(timeout) ptype char" }
#}
#
#
#setup_xfail "mips-*-*" "a29k-*-*"
#send "ptype v_signed_char\n"
#expect {
# -re "type = signed char.*$prompt $" { pass "ptype signed char" }
# -re ".*$prompt $" { fail "ptype signed char" }
# timeout { fail "(timeout) ptype signed char" }
#}
#
#
#send "ptype v_unsigned_char\n"
#expect {
# -re "type = unsigned char.*$prompt $" { pass "ptype unsigned char" }
# -re ".*$prompt $" { fail "ptype unsigned char" }
# timeout { fail "(timeout) ptype unsigned char" }
#}
send "ptype v_short\n"
expect {
-re "type = short(| int).*$prompt $" { pass "ptype short" }
-re ".*$prompt $" { fail "ptype short" }
timeout { fail "(timeout) ptype short" }
}
#send "ptype v_signed_short\n"
#expect {
# -re "type = short.*$prompt $" { pass "ptype signed short" }
# -re ".*$prompt $" { fail "ptype signed short" }
# timeout { fail "(timeout) ptype signed short" }
#}
#
#
#send "ptype v_unsigned_short\n"
#expect {
# -re "type = unsigned short.*$prompt $" { pass "ptype unsigned short" }
# -re ".*$prompt $" { fail "ptype unsigned short" }
# timeout { fail "(timeout) ptype unsigned short" }
#}
send "ptype v_int\n"
expect {
-re "type = int.*$prompt $" { pass "ptype int" }
-re ".*$prompt $" { fail "ptype int" }
timeout { fail "(timeout) ptype int" }
}
#send "ptype v_signed_int\n"
#expect {
# -re "type = int.*$prompt $" { pass "ptype signed int" }
# -re ".*$prompt $" { fail "ptype signed int" }
# timeout { fail "(timeout) ptype signed int" }
#}
#
#
#send "ptype v_unsigned_int\n"
#expect {
# -re "type = unsigned int.*$prompt $" { pass "ptype unsigned int" }
# -re ".*$prompt $" { fail "ptype unsigned int" }
# timeout { fail "(timeout) ptype unsigned int" }
#}
#
#
#send "ptype v_long\n"
#expect {
# -re "type = long.*$prompt $" { pass "ptype long" }
# -re ".*$prompt $" { fail "ptype long" }
# timeout { fail "(timeout) ptype long" }
#}
#
#
#send "ptype v_signed_long\n"
#expect {
# -re "type = long.*$prompt $" { pass "ptype signed long" }
# -re ".*$prompt $" { fail "ptype signed long" }
# timeout { fail "(timeout) ptype signed long" }
#}
#
#
#send "ptype v_unsigned_long\n"
#expect {
# -re "type = unsigned long.*$prompt $" { pass "ptype unsigned long" }
# -re ".*$prompt $" { fail "ptype unsigned long" }
# timeout { fail "(timeout) ptype unsigned long" }
#}
#
#
#send "ptype v_float\n"
#expect {
# -re "type = float.*$prompt $" { pass "ptype float" }
# -re ".*$prompt $" { fail "ptype float" }
# timeout { fail "(timeout) ptype float" }
#}
#
#
#send "ptype v_double\n"
#expect {
# -re "type = double.*$prompt $" { pass "ptype double" }
# -re ".*$prompt $" { fail "ptype double" }
# timeout { fail "(timeout) ptype double" }
#}
#
# test ptype command with arrays
#
#setup_xfail "i960-*-*" 1821
#setup_xfail "mips-idt-*" "mips-sgi-*" "a29k-*-*"
#send "ptype v_char_array\n"
#expect {
# -re "type = char .2..*$prompt $" { pass "ptype char array" }
# -re ".*$prompt $" { fail "ptype char array" }
# timeout { fail "(timeout) ptype char array" }
#}
#
#
#setup_xfail "mips-*-*" "a29k-*-*"
#send "ptype v_signed_char_array\n"
#expect {
# -re "type = (|signed )char .2..*$prompt $" { pass "ptype signed char array" }
# -re ".*$prompt $" { fail "ptype signed char array" }
# timeout { fail "(timeout) ptype signed char array" }
#}
#
#
#send "ptype v_unsigned_char_array\n"
#expect {
# -re "type = unsigned char .2..*$prompt $" { pass "ptype unsigned char array" }
# -re ".*$prompt $" { fail "ptype unsigned char array" }
# timeout { fail "(timeout) ptype unsigned char array" }
#}
#
#
#
#send "ptype v_int_array\n"
#expect {
# -re "type = int .2..*$prompt $" { pass "ptype int array" }
# -re ".*$prompt $" { fail "ptype int array" }
# timeout { fail "(timeout) ptype int array" }
#}
#
#
#send "ptype v_signed_int_array\n"
#expect {
# -re "type = int .2..*$prompt $" { pass "ptype signed int array" }
# -re ".*$prompt $" { fail "ptype signed int array" }
# timeout { fail "(timeout) ptype signed int array" }
#}
#
#
#send "ptype v_unsigned_int_array\n"
#expect {
# -re "type = unsigned int .2..*$prompt $" { pass "ptype unsigned int array" }
# -re ".*$prompt $" { fail "ptype unsigned int array" }
# timeout { fail "(timeout) ptype unsigned int array" }
#}
#
#
#send "ptype v_long_array\n"
#expect {
# -re "type = (long|int|long int) .2..*$prompt $" {
# pass "ptype long array" }
# -re ".*$prompt $" { fail "ptype long array" }
# timeout { fail "(timeout) ptype long array" }
#}
#
#
#send "ptype v_signed_long_array\n"
#expect {
# -re "type = (long|int|long int) .2..*$prompt $" {
# pass "ptype signed long array" }
# -re ".*$prompt $" { fail "ptype signed long array" }
# timeout { fail "(timeout) ptype signed long array" }
#}
#
#
#send "ptype v_unsigned_long_array\n"
#expect {
# -re "type = unsigned long .2..*$prompt $" { pass "ptype unsigned long array" }
# -re ".*$prompt $" { fail "ptype unsigned long array" }
# timeout { fail "(timeout) ptype unsigned long array" }
#}
#
#
#send "ptype v_float_array\n"
#expect {
# -re "type = float .2..*$prompt $" { pass "ptype float array" }
# -re ".*$prompt $" { fail "ptype float array" }
# timeout { fail "(timeout) ptype float array" }
#}
#
#
#send "ptype v_double_array\n"
#expect {
# -re "type = double .2..*$prompt $" { pass "ptype double array" }
# -re ".*$prompt $" { fail "ptype double array" }
# timeout { fail "(timeout) ptype double array" }
#}
#
#
##
## test ptype command with pointers
##
#setup_xfail "i960-*-*" 1821
#setup_xfail "mips-idt-*" "mips-sgi-*" "a29k-*-*"
#send "ptype v_char_pointer\n"
#expect {
# -re "type = char \*.*$prompt $" { pass "ptype char pointer" }
# -re ".*$prompt $" { fail "ptype char pointer" }
# timeout { fail "(timeout) ptype char pointer" }
#}
#
#
#setup_xfail "mips-*-*" "a29k-*-*"
#send "ptype v_signed_char_pointer\n"
#expect {
# -re "type = (|signed )char \*.*$prompt $"
# { pass "ptype signed char pointer" }
# -re ".*$prompt $" { fail "ptype signed char pointer" }
# timeout { fail "(timeout) ptype signed char pointer" }
#}
#
#
#send "ptype v_unsigned_char_pointer\n"
#expect {
# -re "type = unsigned char \*.*$prompt $" { pass "ptype unsigned char pointer" }
# -re ".*$prompt $" { fail "ptype unsigned char pointer" }
# timeout { fail "(timeout) ptype unsigned char pointer" }
#}
#
#
#send "ptype v_short_pointer\n"
#expect {
# -re "type = (short|short int) \*.*$prompt $" { pass "ptype short pointer" }
# -re ".*$prompt $" { fail "ptype short pointer" }
# timeout { fail "(timeout) ptype short pointer" }
#}
#
#
#send "ptype v_signed_short_pointer\n"
#expect {
# -re "type = short \*.*$prompt $" { pass "ptype signed short pointer" }
# -re ".*$prompt $" { fail "ptype signed short pointer" }
# timeout { fail "(timeout) ptype signed short pointer" }
#}
#
#
#send "ptype v_unsigned_short_pointer\n"
#expect {
# -re "type = unsigned short \*.*$prompt $" { pass "ptype unsigned short pointer" }
# -re ".*$prompt $" { fail "ptype unsigned short pointer" }
# timeout { fail "(timeout) ptype unsigned short pointer" }
#}
#
#
#send "ptype v_int_pointer\n"
#expect {
# -re "type = int \*.*$prompt $" { pass "ptype int pointer" }
# -re ".*$prompt $" { fail "ptype int pointer" }
# timeout { fail "(timeout) ptype int pointer" }
#}
#
#
#send "ptype v_signed_int_pointer\n"
#expect {
# -re "type = int \*.*$prompt $" { pass "ptype signed int pointer" }
# -re ".*$prompt $" { fail "ptype signed int pointer" }
# timeout { fail "(timeout) ptype signed int pointer" }
#}
#
#
#send "ptype v_unsigned_int_pointer\n"
#expect {
# -re "type = unsigned int \*.*$prompt $" { pass "ptype unsigned int pointer" }
# -re ".*$prompt $" { fail "ptype unsigned int pointer" }
# timeout { fail "(timeout) ptype unsigned int pointer" }
#}
#
#
#send "ptype v_long_pointer\n"
#expect {
# -re "type = long \*.*$prompt $" { pass "ptype long pointer" }
# -re ".*$prompt $" { fail "ptype long pointer" }
# timeout { fail "(timeout) ptype long pointer" }
#}
#
#
#send "ptype v_signed_long_pointer\n"
#expect {
# -re "type = long \*.*$prompt $" { pass "ptype signed long pointer" }
# -re ".*$prompt $" { fail "ptype signed long pointer" }
# timeout { fail "(timeout) ptype signed long pointer" }
#}
#
#
#send "ptype v_unsigned_long_pointer\n"
#expect {
# -re "type = unsigned long \*.*$prompt $" { pass "ptype unsigned long pointer" }
# -re ".*$prompt $" { fail "ptype unsigned long pointer" }
# timeout { fail "(timeout) ptype unsigned long pointer" }
#}
#
#
#send "ptype v_float_pointer\n"
#expect {
# -re "type = float \*.*$prompt $" { pass "ptype float pointer" }
# -re ".*$prompt $" { fail "ptype float pointer" }
# timeout { fail "(timeout) ptype float pointer" }
#}
#
#
#send "ptype v_double_pointer\n"
#expect {
# -re "type = double \*.*$prompt $" { pass "ptype double pointer" }
# -re ".*$prompt $" { fail "ptype double pointer" }
# timeout { fail "(timeout) ptype double pointer" }
#}
#
# test ptype command with nested structure and union
#
send "ptype struct outer_struct\n"
expect {
-re "type = struct outer_struct \{.*
int outer_int;.*
struct inner_struct inner_struct_instance;.*
union inner_union inner_union_instance;.*
(long|long int|int) outer_long;.*
\}.*$prompt $" { pass "ptype outer structure" }
-re ".*$prompt $" { fail "ptype outer structure" }
timeout { fail "(timeout) ptype outer structure" }
}
send "ptype struct inner_struct\n"
expect {
-re "type = struct inner_struct \{.*
int inner_int;.*
(long|long int|int) inner_long;.*
\}.*$prompt $" { pass "ptype inner structure" }
-re ".*$prompt $" { fail "ptype inner structure" }
timeout { fail "(timeout) ptype inner structure" }
}
send "ptype union inner_union\n"
expect {
-re "type = union inner_union \{.*
int inner_union_int;.*
(long|long int|int) inner_union_long;.*
\}.*$prompt $" { pass "ptype inner union" }
-re ".*$prompt $" { fail "ptype inner union" }
timeout { fail "(timeout) ptype inner union" }
}
send "ptype nested_su\n"
expect {
-re "type = struct outer_struct \{.*
int outer_int;.*
struct inner_struct inner_struct_instance;.*
union inner_union inner_union_instance;.*
(long|long int|int) outer_long;.*
\}.*$prompt $" { pass "ptype nested structure" }
-re ".*$prompt $" { fail "ptype nested structure" }
timeout { fail "(timeout) ptype nested structure" }
}
send "ptype nested_su.outer_int\n"
expect {
-re "type = int.*$prompt $" { pass "ptype outer int" }
-re ".*$prompt $" { fail "ptype outer int" }
timeout { fail "(timeout) ptype outer int" }
}
send "ptype nested_su.inner_struct_instance\n"
expect {
-re "type = struct inner_struct \{.*
int inner_int;.*
(long|long int|int) inner_long;.*
\}.*$prompt $" { pass "ptype nested structure" }
-re ".*$prompt $" { fail "ptype nested structure" }
timeout { fail "(timeout) ptype nested structure" }
}
send "ptype nested_su.inner_struct_instance.inner_int\n"
expect {
-re "type = int.*$prompt $" { pass "ptype inner int" }
-re ".*$prompt $" { fail "ptype inner int" }
timeout { fail "(timeout) ptype inner int" }
}
send "ptype nested_su.inner_union_instance\n"
expect {
-re "type = union inner_union \{.*
int inner_union_int;.*
(long|long int|int) inner_union_long;.*
\}.*$prompt $" { pass "ptype nested union" }
-re ".*$prompt $" { fail "ptype nested union" }
timeout { fail "(timeout) ptype nested union" }
}
# Test printing type of string constants and array constants, but
# requires a running process. These call malloc, and can take a long
# time to execute over a slow serial link, so increase the timeout.
# UDI can't do this (PR 2416). XFAIL is not suitable, because attempting
# the operation causes a slow painful death rather than a nice simple failure.
if ![istarget "*-*-udi*"] then {
if [runto main] then {
set timeout 120
setup_xfail "a29k-*-udi" 2416
gdb_test "ptype \\\"abc\\\"" "type = char \\\[4\\\]"
setup_xfail "a29k-*-udi" 2416
gdb_test "ptype {'a','b','c'}" "type = char \\\[3\\\]"
setup_xfail "a29k-*-udi" 2416
gdb_test "ptype {0,1,2}" "type = int \\\[3\\\]"
setup_xfail "a29k-*-udi" 2416
gdb_test "ptype {(long)0,(long)1,(long)2}" "type = long \\\[3\\\]"
setup_xfail "a29k-*-udi" 2416
gdb_test "ptype {(float)0,(float)1,(float)2}" "type = float \\\[3\\\]"
setup_xfail "a29k-*-udi" 2416
gdb_test "ptype {{0,1,2},{3,4,5}}" "type = int \\\[2\\\]\\\[3\\\]"
setup_xfail "a29k-*-udi" 2416
gdb_test "ptype {4,5,6}\\\[2\\\]" "type = int"
setup_xfail "a29k-*-udi" 2416
gdb_test "ptype *&{4,5,6}\\\[1\\\]" "type = int"
set timeout 10
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
}
}
}

View File

@ -0,0 +1,185 @@
# Copyright (C) 1993 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Fred Fish. (fnf@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
set prms_id 0
set bug_id 0
proc test_input_radix_2 {} {
gdb_test "set radix" \
"Input and output radices now set to decimal 10, hex a, octal 12."
gdb_test "set input-radix 2" \
"Input radix now set to decimal 2, hex 2, octal 2."
gdb_test "show radix" \
"Input radix set to decimal 2, hex 2, octal 2.\r\nOutput radix set to decimal 10, hex a, octal 12."
gdb_test "p 010" "8"
gdb_test "p 20." "20"
gdb_test "p (int) 20." "20"
gdb_test "p 0xf" "15"
gdb_test "p 10" "2"
gdb_test "p -101" "-5"
gdb_test "p 101" "5"
gdb_test "p 10101" "21"
gdb_test "p 4" "Invalid number \"4\""
gdb_test "p -2" "Invalid number \"2\""
}
# Test input radix 3 (an non-typical radix)
proc test_input_radix_3 {} {
gdb_test "set radix" \
"Input and output radices now set to decimal 10, hex a, octal 12."
gdb_test "set input-radix 3" \
"Input radix now set to decimal 3, hex 3, octal 3."
gdb_test "show radix" \
"Input radix set to decimal 3, hex 3, octal 3.\r\nOutput radix set to decimal 10, hex a, octal 12."
gdb_test "p 010" "8"
gdb_test "p 20." "20"
gdb_test "p (int) 20." "20"
gdb_test "p 0xf" "15"
gdb_test "p 10" "3"
gdb_test "p 0" "0"
gdb_test "p 1" "1"
gdb_test "p 2" "2"
gdb_test "p 10" "3"
gdb_test "p 20" "6"
gdb_test "p 100" "9"
gdb_test "p -100" "-9"
gdb_test "p 3" "Invalid number \"3\"."
gdb_test "p 30" "Invalid number \"30\"."
}
proc test_input_radix_8 {} {
gdb_test "set radix" \
"Input and output radices now set to decimal 10, hex a, octal 12."
gdb_test "set input-radix 8" \
"Input radix now set to decimal 8, hex 8, octal 10."
gdb_test "show radix" \
"Input radix set to decimal 8, hex 8, octal 10.\r\nOutput radix set to decimal 10, hex a, octal 12."
gdb_test "p 010" "8"
gdb_test "p 20." "20"
gdb_test "p (int) 20." "20"
gdb_test "p 0xf" "15"
gdb_test "p 10" "8"
gdb_test "p 20" "16"
gdb_test "p -20" "-16"
gdb_test "p 100" "64"
gdb_test "p 8" "Invalid number \"8\"."
gdb_test "p -9" "Invalid number \"9\"."
}
proc test_input_radix_10 {} {
gdb_test "set radix" \
"Input and output radices now set to decimal 10, hex a, octal 12."
gdb_test "set input-radix 10" \
"Input radix now set to decimal 10, hex a, octal 12."
gdb_test "show radix" \
"Input and output radices set to decimal 10, hex a, octal 12."
gdb_test "p 010" "8"
gdb_test "p 20." "20"
gdb_test "p (int) 20." "20"
gdb_test "p 0xf" "15"
gdb_test "p 10" "10"
gdb_test "p -12" "-12"
}
proc test_input_radix_16 {} {
gdb_test "set radix" \
"Input and output radices now set to decimal 10, hex a, octal 12."
gdb_test "set input-radix 16" \
"Input radix now set to decimal 16, hex 10, octal 20."
gdb_test "show radix" \
"Input radix set to decimal 16, hex 10, octal 20.\r\nOutput radix set to decimal 10, hex a, octal 12."
gdb_test "p 010" "8"
gdb_test "p 20." "20"
gdb_test "p (int) 20." "20"
gdb_test "p 0xf" "15"
gdb_test "p 10" "16"
gdb_test "p 100" "256"
}
proc test_output_radix_8 {} {
gdb_test "set radix" \
"Input and output radices now set to decimal 10, hex a, octal 12."
gdb_test "set output-radix 8" \
"Output radix now set to decimal 8, hex 8, octal 10."
gdb_test "show radix" \
"Input radix set to decimal 10, hex a, octal 12.\r\nOutput radix set to decimal 8, hex 8, octal 10."
gdb_test "p 010" "010"
# FIXME: If gdb can't handle float printing in different radices, it
# should at least warn once the first time that is attempted.
setup_xfail "*-*-*"
gdb_test "p 20." "24" "Float printing when output radix is 8"
gdb_test "p (int) 20." "24"
gdb_test "p 0xf" "17"
gdb_test "p 10" "12"
gdb_test "p 100" "144"
}
proc test_output_radix_10 {} {
gdb_test "set radix" \
"Input and output radices now set to decimal 10, hex a, octal 12."
gdb_test "set output-radix 10" \
"Output radix now set to decimal 10, hex a, octal 12."
gdb_test "show radix" \
"Input and output radices set to decimal 10, hex a, octal 12."
gdb_test "p 010" "8"
gdb_test "p 20." "20"
gdb_test "p (int) 20." "20"
gdb_test "p 0xf" "15"
gdb_test "p 10" "10"
gdb_test "p 100" "100"
}
proc test_output_radix_16 {} {
gdb_test "set radix" \
"Input and output radices now set to decimal 10, hex a, octal 12."
gdb_test "set output-radix 16" \
"Output radix now set to decimal 16, hex 10, octal 20."
gdb_test "show radix" \
"Input radix set to decimal 10, hex a, octal 12.\r\nOutput radix set to decimal 16, hex 10, octal 20."
gdb_test "p 010" "8"
# FIXME: If gdb can't handle float printing in different radices, it
# should at least warn once the first time that is attempted.
setup_xfail "*-*-*"
gdb_test "p 20." "14" "Float printing when output radix is 16"
gdb_test "p (int) 20." "14"
gdb_test "p 0xf" "f"
gdb_test "p 10" "a"
gdb_test "p 100" "64"
}
# Start with a fresh gdb.
gdb_exit
gdb_start
test_input_radix_2
test_input_radix_3
test_input_radix_8
test_input_radix_10
test_input_radix_16
test_output_radix_8
test_output_radix_10
test_output_radix_16

View File

@ -0,0 +1,21 @@
/* Trivial code used to test watchpoints in recursive code and
auto-deletion of watchpoints as they go out of scope. */
static int
recurse (a)
int a;
{
int b = 0;
if (a == 1)
return 1;
b = a;
b *= recurse (a - 1);
return b;
}
main()
{
recurse (10);
}

View File

@ -0,0 +1,159 @@
# Copyright (C) 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Jeff Law. (law@cs.utah.edu)
if $tracelevel then {
strace $tracelevel
}
set prms_id 0
set bug_id 0
set binfile "recurse"
set srcfile $binfile.c
if ![file exists $objdir/$subdir/$binfile] then {
perror "$objdir/$subdir/$binfile does not exist."
return 0
}
# Start with a fresh gdb.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
# For now we only run this on PAs running BSD.
if {[file exists $objdir/$subdir/$binfile] && [istarget "hppa*-*-bsd*"]} then {
# Preserve the old timeout, and set a new one that should be
# sufficient to avoid timing out during this test.
set timeoutsave $timeout
set timeout 60
if [runto recurse] then {
gdb_test "watch b" ".*\[Ww\]atchpoint \[0-9]*: b"
# Continue until initial set of b.
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*, b.*Old value = 0.*New value = 10.*$prompt $" { pass "watchpoint hit, first time" }
-re ".*$prompt $" { fail "missed first watchpoint" ; return }
timeout { fail "missed first watchpoint (timeout)" ; return }
}
# Continue inward for a few iterations
gdb_test "continue" "Breakpoint.* recurse \[(\]+a=9\[)\]+"
gdb_test "continue" "Breakpoint.* recurse \[(\]+a=8\[)\]+"
gdb_test "continue" "Breakpoint.* recurse \[(\]+a=7\[)\]+"
gdb_test "continue" "Breakpoint.* recurse \[(\]+a=6\[)\]+"
gdb_test "continue" "Breakpoint.* recurse \[(\]+a=5\[)\]+"
# Put a watchpoint on another instance of b
gdb_test "watch b" ".*\[Ww\]atchpoint \[0-9]*: b"
# Continue until initial set of b (second instance).
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*, b.*Old value = 0.*New value = 5.*$prompt $" { pass "watchpoint hit (second instance)" }
-re ".*$prompt $" {
fail "missed watchpoint (second instance)"
return
}
timeout {
fail "missed watchpoint (second instance) (timeout)"
return
}
}
# Continue inward for a few iterations
gdb_test "continue" "Breakpoint.* recurse \[(\]+a=4\[)\]+"
gdb_test "continue" "Breakpoint.* recurse \[(\]+a=3\[)\]+"
gdb_test "continue" "Breakpoint.* recurse \[(\]+a=2\[)\]+"
gdb_test "continue" "Breakpoint.* recurse \[(\]+a=1\[)\]+"
# Continue until second set of b (second instance).
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*, b.*Old value = 5.*New value = 120.*return.*$prompt $" { pass "watchpoint hit, second time (second instance)" }
-re ".*$prompt $" {
fail "missed watchpoint, second time (second instance)"
return
}
timeout {
fail "missed watchpoint, second time (second instance)(timeout)"
return
}
}
# Continue again. We should have a watchpoint go out of scope now
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*deleted.*recurse \[(\]+a=6\[)\]+ .*$prompt $" {pass "watchpoint deleted when leaving scope (second instance)" }
-re ".*prompt $" {
fail "watchpoint not deleted when leaving scope (second instance)"
return
}
timeout {
fail "watchpoint not deleted when leaving scope (second instance) (timeout)"
return
}
}
# Continue until second set of b (first instance).
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*b.*Old value = 10.*New value = 3628800.*return.*$prompt $" { pass "watchpoint hit, second time" }
-re ".*$prompt $" {
fail "missed watchpoint, second time)"
return
}
timeout {
fail "missed watchpoint, second time (timeout)"
return
}
}
# Continue again. We should have a watchpoint go out of scope now
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*deleted.*main \[(\]+\[)\]+ .*$prompt $" {pass "watchpoint deleted when leaving scope" }
-re ".*prompt $" {
fail "watchpoint not deleted when leaving scope"
return
}
timeout {
fail "watchpoint not deleted when leaving scope (timeout)"
return
}
}
}
# Restore the preserved old timeout value.
set timeout $timeoutsave
}
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
}

View File

@ -0,0 +1,26 @@
/* Test "return" command. */
func1 ()
{
printf("in func1\n");
}
int
func2 ()
{
return -5;
}
double
func3 ()
{
return -5.0;
}
main ()
{
func1 ();
printf("in main after func1\n");
printf("func2 = %d\n", func2 ());
printf("func3 = %f\n", func3 ());
}

View File

@ -0,0 +1,59 @@
/*
* This simple classical example of recursion is useful for
* testing stack backtraces and such.
*/
#ifdef vxworks
# include <vxWorks.h>
# include <stdioLib.h>
/* VxWorks does not supply atoi. */
static int
atoi (z)
char *z;
{
int i = 0;
while (*z >= '0' && *z <= '9')
i = i * 10 + (*z++ - '0');
return i;
}
/* I don't know of any way to pass an array to VxWorks. This function
can be called directly from gdb. */
vxmain (arg)
char *arg;
{
char *argv[2];
argv[0] = "";
argv[1] = arg;
main (2, argv, (char **) 0);
}
#else /* ! vxworks */
# include <stdio.h>
#endif /* ! vxworks */
main (argc, argv, envp)
int argc;
char *argv[], **envp;
{
if (argc != 2) {
printf ("usage: factorial <number>\n");
return 1;
} else {
printf ("%d\n", factorial (atoi (argv[1])));
}
return 0;
}
int factorial (value)
int value;
{
if (value > 1) {
value *= factorial (value - 1);
}
return (value);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,172 @@
static int filelocal = 1; /* In Data section */
static int filelocal_bss; /* In BSS section */
#ifndef __STDC__
#define const /**/
#endif
static const int filelocal_ro = 201; /* In Read-Only Data section */
main ()
{
init ();
foo ();
autovars (5, 6);
localscopes (0);
}
/* On some systems, such as AIX, unreferenced variables are deleted
from the executable. */
usestatics ()
{
useit (filelocal);
useit (filelocal_bss);
useit (filelocal_ro);
}
init ()
{
filelocal_bss = 101;
init1 ();
}
/* This is to derail optimizer in localscopes.
Return 1 + 2 + . . . + N. */
int
sum_upto (n)
int n;
{
int i;
int retval = 0;
for (i = 1; i <= n; ++i)
retval += i;
return retval;
}
int
useit (val)
{
static int usedval;
usedval = val;
return val + sum_upto (0);
}
int
autovars (bcd, abc)
int bcd;
int abc;
{
int i0 = useit (0), i1 = useit (1), i2 = useit (2);
int i3 = useit (3), i4 = useit (4), i5 = useit (5);
int i6 = useit (6), i7 = useit (7), i8 = useit (8);
int i9 = useit (9), i10 = useit (10), i11 = useit (11);
int i12 = useit (12), i13 = useit (13), i14 = useit (14);
int i15 = useit (15), i16 = useit (16), i17 = useit (17);
int i18 = useit (18), i19 = useit (19), i20 = useit (20);
int i21 = useit (21), i22 = useit (22), i23 = useit (23);
int i24 = useit (24), i25 = useit (25), i26 = useit (26);
int i27 = useit (27), i28 = useit (28), i29 = useit (29);
int i30 = useit (30), i31 = useit (31), i32 = useit (32);
int i33 = useit (33), i34 = useit (34), i35 = useit (35);
int i36 = useit (36), i37 = useit (37), i38 = useit (38);
int i39 = useit (39), i40 = useit (40), i41 = useit (41);
int i42 = useit (42), i43 = useit (43), i44 = useit (44);
int i45 = useit (45), i46 = useit (46), i47 = useit (47);
int i48 = useit (48), i49 = useit (49), i50 = useit (50);
int i51 = useit (51), i52 = useit (52), i53 = useit (53);
int i54 = useit (54), i55 = useit (55), i56 = useit (56);
int i57 = useit (57), i58 = useit (58), i59 = useit (59);
int i60 = useit (60), i61 = useit (61), i62 = useit (62);
int i63 = useit (63), i64 = useit (64), i65 = useit (65);
int i66 = useit (66), i67 = useit (67), i68 = useit (68);
int i69 = useit (69), i70 = useit (70), i71 = useit (71);
int i72 = useit (72), i73 = useit (73), i74 = useit (74);
int i75 = useit (75), i76 = useit (76), i77 = useit (77);
int i78 = useit (78), i79 = useit (79), i80 = useit (80);
int i81 = useit (81), i82 = useit (82), i83 = useit (83);
int i84 = useit (84), i85 = useit (85), i86 = useit (86);
int i87 = useit (87), i88 = useit (88), i89 = useit (89);
int i90 = useit (90), i91 = useit (91), i92 = useit (92);
int i93 = useit (93), i94 = useit (94), i95 = useit (95);
int i96 = useit (96), i97 = useit (97), i98 = useit (98);
int i99 = useit (99);
/* Use all 100 of the local variables to derail agressive optimizers. */
useit ( i0); useit ( i1); useit ( i2); useit ( i3); useit ( i4);
useit ( i5); useit ( i6); useit ( i7); useit ( i8); useit ( i9);
useit (i10); useit (i11); useit (i12); useit (i13); useit (i14);
useit (i15); useit (i16); useit (i17); useit (i18); useit (i19);
useit (i20); useit (i21); useit (i22); useit (i23); useit (i24);
useit (i25); useit (i26); useit (i27); useit (i28); useit (i29);
useit (i30); useit (i31); useit (i32); useit (i33); useit (i34);
useit (i35); useit (i36); useit (i37); useit (i38); useit (i39);
useit (i40); useit (i41); useit (i42); useit (i43); useit (i44);
useit (i45); useit (i46); useit (i47); useit (i48); useit (i49);
useit (i50); useit (i51); useit (i52); useit (i53); useit (i54);
useit (i55); useit (i56); useit (i57); useit (i58); useit (i59);
useit (i60); useit (i61); useit (i62); useit (i63); useit (i64);
useit (i65); useit (i66); useit (i67); useit (i68); useit (i69);
useit (i70); useit (i71); useit (i72); useit (i73); useit (i74);
useit (i75); useit (i76); useit (i77); useit (i78); useit (i79);
useit (i80); useit (i81); useit (i82); useit (i83); useit (i84);
useit (i85); useit (i86); useit (i87); useit (i88); useit (i89);
useit (i90); useit (i91); useit (i92); useit (i93); useit (i94);
useit (i95); useit (i96); useit (i97); useit (i98); useit (i99);
useit (abc); useit (bcd);
marker1 ();
return i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10
+ i11 + i12 + i13 + i14 + i15 + i16 + i17 + i18 + i19 + i20
+ i21 + i22 + i23 + i24 + i25 + i26 + i27 + i28 + i29 + i30
+ i31 + i32 + i33 + i34 + i35 + i36 + i37 + i38 + i39 + i40
+ i41 + i42 + i43 + i44 + i45 + i46 + i47 + i48 + i49 + i50
+ i51 + i52 + i53 + i54 + i55 + i56 + i57 + i58 + i59 + i60
+ i61 + i62 + i63 + i64 + i65 + i66 + i67 + i68 + i69 + i70
+ i71 + i72 + i73 + i74 + i75 + i76 + i77 + i78 + i79 + i80
+ i81 + i82 + i83 + i84 + i85 + i86 + i87 + i88 + i89 + i90
+ i91 + i92 + i93 + i94 + i95 + i96 + i97 + i98 + i99 + abc + bcd;
}
int
localscopes (x)
int x;
{
int localval;
int retval;
int i;
localval = 0;
useit (localval);
{
int localval = x + 4 + sum_upto (3); /* 10 */
int localval1 = x + 5 + sum_upto (3); /* 11 */
useit (localval);
useit (localval1);
marker2 ();
{
int localval = localval1 + 3 + sum_upto (3); /* 20 */
int localval2 = localval1 + sum_upto (1); /* 12 */
useit (localval);
useit (localval2);
marker3 ();
{
int localval = localval2 + 3 + sum_upto (5); /* 30 */
int localval3 = localval2 + sum_upto (1); /* 13 */
useit (localval);
useit (localval3);
marker4 ();
retval = x + localval1 + localval2 + localval3;
}
}
}
return retval;
}
marker1 () {}
marker2 () {}
marker3 () {}
marker4 () {}

View File

@ -0,0 +1,45 @@
static int filelocal = 2; /* In Data section */
static int filelocal_bss; /* In BSS section */
#ifndef __STDC__
#define const /**/
#endif
static const int filelocal_ro = 202; /* In Read-Only Data section */
foo ()
{
static int funclocal = 3; /* In Data section */
static int funclocal_bss; /* In BSS section */
static const int funclocal_ro = 203; /* RO Data */
static const int funclocal_ro_bss; /* RO Data */
funclocal_bss = 103;
bar ();
}
bar ()
{
static int funclocal = 4; /* In data section */
static int funclocal_bss; /* In BSS section */
funclocal_bss = 104;
}
init1 ()
{
filelocal_bss = 102;
}
/* On some systems, such as AIX, unreferenced variables are deleted
from the executable. */
usestatics1 ()
{
useit1 (filelocal);
useit1 (filelocal_bss);
useit1 (filelocal_ro);
}
useit1 (val)
{
static int usedval;
usedval = val;
}

View File

@ -0,0 +1,248 @@
main (argc, argv, envp)
int argc;
char **argv;
char **envp;
{
extern void dummy();
dummy();
}
/* We put main() right up front so its line number doesn't keep changing. */
/*
* Test file with lots of different types, for testing the
* "whatis" command.
*/
/*
* First the basic C types.
*/
#if !defined (__STDC__) && !defined (_AIX)
#define signed /**/
#endif
char v_char;
signed char v_signed_char;
unsigned char v_unsigned_char;
short v_short;
signed short v_signed_short;
unsigned short v_unsigned_short;
int v_int;
signed int v_signed_int;
unsigned int v_unsigned_int;
long v_long;
signed long v_signed_long;
unsigned long v_unsigned_long;
float v_float;
double v_double;
/*
* Now some derived types, which are arrays, functions-returning,
* pointers, structures, unions, and enumerations.
*/
/**** arrays *******/
char v_char_array[2];
signed char v_signed_char_array[2];
unsigned char v_unsigned_char_array[2];
short v_short_array[2];
signed short v_signed_short_array[2];
unsigned short v_unsigned_short_array[2];
int v_int_array[2];
signed int v_signed_int_array[2];
unsigned int v_unsigned_int_array[2];
long v_long_array[2];
signed long v_signed_long_array[2];
unsigned long v_unsigned_long_array[2];
float v_float_array[2];
double v_double_array[2];
/**** pointers *******/
char *v_char_pointer;
signed char *v_signed_char_pointer;
unsigned char *v_unsigned_char_pointer;
short *v_short_pointer;
signed short *v_signed_short_pointer;
unsigned short *v_unsigned_short_pointer;
int *v_int_pointer;
signed int *v_signed_int_pointer;
unsigned int *v_unsigned_int_pointer;
long *v_long_pointer;
signed long *v_signed_long_pointer;
unsigned long *v_unsigned_long_pointer;
float *v_float_pointer;
double *v_double_pointer;
/**** structs *******/
struct t_struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct1;
struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct2;
/**** unions *******/
union t_union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union;
union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union2;
/*** Functions returning type ********/
char v_char_func () { return(0); }
signed char v_signed_char_func () { return (0); }
unsigned char v_unsigned_char_func () { return (0); }
short v_short_func () { return (0); }
signed short v_signed_short_func () { return (0); }
unsigned short v_unsigned_short_func () { return (0); }
int v_int_func () { return (0); }
signed int v_signed_int_func () { return (0); }
unsigned int v_unsigned_int_func () { return (0); }
long v_long_func () { return (0); }
signed long v_signed_long_func () { return (0); }
unsigned long v_unsigned_long_func () { return (0); }
float v_float_func () { return (0.0); }
double v_double_func () { return (0.0); }
/**** Some misc more complicated things *******/
struct link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} *s_link;
union tu_link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} u_link;
/**** Enumerations *******/
enum colors {red, green, blue} color;
enum cars {chevy, ford, porsche} clunker;
void dummy()
{
/* Some linkers (e.g. on AIX) remove unreferenced variables,
so make sure to reference them. */
v_char = 0;
v_signed_char = 1;
v_unsigned_char = 2;
v_short = 3;
v_signed_short = 4;
v_unsigned_short = 5;
v_int = 6;
v_signed_int = 7;
v_unsigned_int = 8;
v_long = 9;
v_signed_long = 10;
v_unsigned_long = 11;
v_float = 100.0;
v_double = 200.0;
v_char_array[0] = v_char;
v_signed_char_array[0] = v_signed_char;
v_unsigned_char_array[0] = v_unsigned_char;
v_short_array[0] = v_short;
v_signed_short_array[0] = v_signed_short;
v_unsigned_short_array[0] = v_unsigned_short;
v_int_array[0] = v_int;
v_signed_int_array[0] = v_signed_int;
v_unsigned_int_array[0] = v_unsigned_int;
v_long_array[0] = v_long;
v_signed_long_array[0] = v_signed_long;
v_unsigned_long_array[0] = v_unsigned_long;
v_float_array[0] = v_float;
v_double_array[0] = v_double;
v_char_pointer = &v_char;
v_signed_char_pointer = &v_signed_char;
v_unsigned_char_pointer = &v_unsigned_char;
v_short_pointer = &v_short;
v_signed_short_pointer = &v_signed_short;
v_unsigned_short_pointer = &v_unsigned_short;
v_int_pointer = &v_int;
v_signed_int_pointer = &v_signed_int;
v_unsigned_int_pointer = &v_unsigned_int;
v_long_pointer = &v_long;
v_signed_long_pointer = &v_signed_long;
v_unsigned_long_pointer = &v_unsigned_long;
v_float_pointer = &v_float;
v_double_pointer = &v_double;
color = red;
clunker = porsche;
u_link.next = s_link;
v_struct2.v_int_member = v_struct1.v_int_member;
v_union2.v_short_member = v_union.v_short_member;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,732 @@
begin 777 sparc-aout
M@0,!"P ( " #YP " @ "\$" T .@0)(#H$25
M*B "E *@!)0"0 H7 0U"+@H , C" &((@) 0* 0! 0 "@$
M ! @$ 0 $ -6<(Z @0 ( P$ ! @$ 0 )WCOV@O (KA7B
M*!$ B0$B(,0 2Y(0( "L$ (D@.@7$ $N4$" @@*(@(!* $\!
MPA.@7H"@80L2@ !+ 0 .@#H&#" Z!DX@.@:*0% &2!( 1+P "*X5XDB0
M$" E! @!1<@ "6$N "F! %D #2:$" IA ") " !32 Z!DE! @!Q<@
M "6$N 2F! %D "N:$ 4+P "*X5XG01 (D!(B&T ".2$" JA
M",(#H&B D ! H "R\ BN%>)(D 3 $I(0 !&4$" '%R )82X!*8$ 5
M0 %YH0( #" Z!PH 3 >8CH'SJ(Z" [".@A , C" &((PB.@B , !#"
M &"@PB.@C , B"$&!DPB.@D) 0( &?Q DA @?(''X B!Z $( !H(0
M( 40@ $@A @1Q" *"$" #D= @ J 0! @</@" $ "0$" "D@7@
M!-0%P ""$" $D= @ ) 0('^"$" !D= @ 0 O=7-R+VQI8B]L9"YS;P O
M9&5V+WIE<F\ &6-R=# Z(&YO("]U<W(O;&EB+VQD+G-O"@
M F8W)T,#H@+W5S<B]L:6(O;&0N<V\@;6%P<&EN9R!F86EL=7)E"@
M !1C<G0P.B!N;R O9&5V+WIE<F\* "=X[^0L! @ #" &!Q^ (@>@
M )WCOY"P$" ,( 8''X B!Z G>._D+ 0( P@ !@<?@"('H "=X[^0
ML! @ #" &!Q^ (@>@ )WCOY"P$" ,( 8''X B!Z G>._D+ 0( P
M@ !@<?@"('H "=X[^0L! @ #" &!Q^ (@>@ )WCOY"P$" ,( 8''
MX B!Z G>._D+ 0( P@ !@<?@"('H "=X[^0L! @ #" &!Q^ (@>@
M )WCOY"P$" ,( 8''X B!Z G>._D+ 0( P@ !@<?@"('H
MG>._D!$ C! B. ,( 8''X B!Z G>._D!$ !#!&B"H,( 8''X B!
MZ 0L@ )WCOWA #D 0 !$ !# *B,0$0 $)(0( '2*B)8$0 $)(0
M( +2*B%X$0 $)(0( /2,B$P$0 $)(0( 32,B$($0 $)(0( 72,B'@$0
M$)(0( ;2(B'($0 $)(0( ?2(B&@$0 $)(0( C2(B$ $0 $)(0( G2(B,(
M$0 $)(0( K2(B)($0 $)(0( O2(B%@$0 $!, C4 F.TU"(A*!$ ! 3
M 0U!I@L-0Z(8@1 0$P $-0*8Q#4*B&P$0 $!, !#4"F)8U"HAF!$
M ! 3 0U IA>-0J(.@1 0$P $-0283#4,B)H$0 $!, !#4$F$(U#(B
M,!$ ! 3 0U!)AX-0R(5@1 0$P $-0"8<C4(B% $0 $!, !#4 F&@
MU"(A.!$ ! 3 0U )A -0B(B@1 0$P $-0"8PC4(B&H$0 $!, !#4
M F)(U"(AD!$ ! 3 0U )A8-0B(. 1 0$P $-0"82C4(B)@$0 $!,
M !#4&F&(U#HA$!$ ! 5 0DA*C$-(B(/@1 0%0 $)(2HEC2(B#8$0
M$!4 !"2$J%XTB(AP!$ ! 5 0DA*A,-(B(7 1 0%0 $)(2H0C2(B%0
M$0 $!4 !"2$J'@TB(C !$ ! 5 0DA*AR-(B(E 1 0%0 $)(2H:#2
M(B(@$0 $!4 !"2$J$ TB(A2!$ ! 5 0DA*C"-(B(/ 1 0%0 $)(2
MHDC2(B#0$0 $!4 !"2$J%@TB(AN!$ ! 5 0DA*A*-(B(6@1 0%0
M$)(2H8C2(B'8$0 $)(0( +2(B#($0 $)(0( +2(B(X$0 $)(0( '2(B'0
M$0 $)(0( '2(B'H$0 $!, !#4 F) U"(B<!$ ! 3 0U!)A(-0R(8"!
MQ^ (@>@ )WCOY 1 0U (C(("BO_\2@ -DA(C(- "8 2 HB H "900
M( "6 F $DA @ )("8 30 D +@*(@ !*___V4 J !DI* 2 H1 0HA(C
M(*$J8 +0! 1G\( * $/_R I" -+___= $ !&!Q^ (@>@ )WCOY 1 0
MT@(C'("B8 "@ )H!(C'- $ "?P@ H 0@!- $ " HB $K__^P$ 1
M )D!(BB$ !E62$" @<?@"('H "=X[^0$P $- "8+R HB $H !) 0
M( %____GT")@O(''X B!Z 0&P 26____Q 0'@ F6____
MM 0(0 66____K 0) $V6____3 4 6 2@
M & H 7 ! !D ) 50 T A (@ "T
M G 1_____\ -@ #_____ $$ !@
M #X " %0 P R *@ K ,P "0 U
M!P "0 ! ( , : " #@ + , X <
M #P !L 0 )0 !$ = $@ !X 3 'P !0
M Y %0 "( 6 *P !< !& & ", 9 ,0
M !H G &P "8 < * !T J '@ "D ?
M/P " !! (0 "P C +P "4 N )@ H
M "D [ + #8 M -P "X T +P #T
M P .@ #$ !/ ,@ S 0@ #0 -0
M $4 W / #@ ! .0 Z #L !4
M/ %( ] 0P #X !$ /P $D ! 2 $(
M 0P !$ 30 $4 !* 1@ $P !' 2P $@
M !0 20 $X !+ 40 $P !3 30 !.
M $\ 4 !1 %( 4P !0 '
MC ,[@ '!P &X0 0,@ ."0 %S 0R@ 3!0 %#@ (" 9
M 0 #8@ E 0 &X@ L!0 #?@ ([@ R!P %<@ 0*
M [!P '.0 0 !% 0 #H !+!0 \P (QP !>!0 'KP
M(P@ !J"0 'SP 0,@ !S!0 "@P (O0 "*"0 &] 0- "A"0 #
M^@ 0-@ "X"0 '3P 0. #/"0 $:0 0.@ #F"0 "K@ 0/ #V
M"0 (4@ 0/@ $&"0 &@ 00 $6"0 3 00@ $F"0 N0 01
M $V"0 'Q@ 02 $_"0 &R 02@ %("0 'F@ 03 %1!0 $DP
M(U@ %E!0 ';P (J0 %Y"0 " P 03@ &-!0 SP (T0 &:!0 #
MJP (I &G"0 &W0 04 &T!0 $I@ )TP &\"0 (A 04@ '4
M"0 &% 05 'L"0 %(P 05@ ($"0 $V0 06 (5"0 "]@ 06@
M (F"0 &)@ 07 (W"0 $9@ 07@ )("0 '( 08 )2"0 %:P
M08@ )<!0 $Q0 (S )Q!0 $=P (N *&"0 I0 09 *;"0 &
M70 09@ *P!0 %)P (X0 *^!0 %C0 (LP +,"0 (1 0: +:
M"0 !NP 0:@ +H"0 '<P 0; +V"0 'P@ 0;@ ,/"0 $R 0<
M ,H"0 '\ 0<@ ,O"0 "^ 0= ,Z"0 '1 0=@ -,"0 !V@
M0> ->"0 $G@ 0>@ -G"0 '*P 0? -R"0 '+ 0@@ -]!0 #
MF0 (VP .3!0 &=0 (K@ .I"0 #S@ 0B ._"0 !"0 0B@ /5
M"0 ;0 0C /K"0 "=P 0C@ /W"0 '10 0D /_!0 $G0 (YP
M 0."0 (80 0D@ 0="0 %^@ 0E 0L"0 '[@ 0E@ 0["0 !S0
M0F 1*"0 "F0 0F@ 19"0 'A0 0G 1A"0 'K 0P 1["0 '
MN0 0P@ 2#"0 '1@ 0Q 2+ 0 &= 24!P "F 0, 2F
M"0 '<0 0Q@ 2U"0 "TP 0R 3$!0 &>0 )P 37!0 &B0 )H@
M 3J!P %H 0+A?971E>'0 7V5D871A %]E;F0 <W1A<G0 <W1A<G1?9FQO
M870 7U]E>&ET %]M86EN %]E;G9I<F]N %]?1%E.04U)0P!?97AI= !?=E]S
M:6=N961?:6YT7V9U;F, 7W9?:6YT7V9U;F, 7W!R:6UA<GD 7W9?=6YS:6=N
M961?<VAO<G1?9G5N8P!?=E]S:6=N961?;&]N9U]P;VEN=&5R %]V7W-I9VYE
M9%]C:&%R7W!O:6YT97( 7W9?=6YS:6=N961?;&]N9U]A<G)A>0!?=E]U;G-I
M9VYE9%]C:&%R7V%R<F%Y %]V7VQO;F=?<&]I;G1E<@!?=E]C:&%R7W!O:6YT
M97( 7W9?=6YS:6=N961?:6YT %]V7W-I9VYE9%]S:&]R= !?=E]D;W5B;&5?
M87)R87D 7W9?=6YI;VX 7W9?9FQO870 7W9?<VAO<G0 7W9?<VEG;F5D7VQO
M;F=?9G5N8P!?=E]S:6=N961?8VAA<E]F=6YC %]V7W-I9VYE9%]I;G1?87)R
M87D 7W9?;&]N9U]F=6YC %]V7V-H87)?9G5N8P!?=E]I;G1?87)R87D 7U]?
M;6%I;@!?=E]U;G-I9VYE9%]I;G1?<&]I;G1E<@!?=E]S:6=N961?<VAO<G1?
M<&]I;G1E<@!?=E]U;G-I9VYE9%]S:&]R=%]A<G)A>0!?=E]U;G-I9VYE9%]L
M;VYG %]V7V9L;V%T7W!O:6YT97( 7W9?<VAO<G1?<&]I;G1E<@!?=E]U;G-I
M9VYE9%]C:&%R %]V7W5N:6]N,@!?=E]D;W5B;&4 7W9?=6YS:6=N961?:6YT
M7V9U;F, 7W9?<VEG;F5D7W-H;W)T7V9U;F, 7W9?<VEG;F5D7VQO;F=?87)R
M87D 7W9?<VEG;F5D7V-H87)?87)R87D 7W9?9FQO871?9G5N8P!?=E]S:&]R
M=%]F=6YC %]V7W-I9VYE9%]I;G0 7W9?;&]N9U]A<G)A>0!?=E]C:&%R7V%R
M<F%Y %]V7W5N<VEG;F5D7VQO;F=?<&]I;G1E<@!?=E]U;G-I9VYE9%]C:&%R
M7W!O:6YT97( 7W9?:6YT %]S<&]R='-C87( 7W9?9&]U8FQE7W!O:6YT97(
M7W9?=6YS:6=N961?<VAO<G0 7V-L=6YK97( 7W9?<W1R=6-T,0!?=E]S=')U
M8W0R %]V7W5N<VEG;F5D7VQO;F=?9G5N8P!?=E]U;G-I9VYE9%]C:&%R7V9U
M;F, 7W9?<VEG;F5D7VEN=%]P;VEN=&5R %]V7W5N<VEG;F5D7VEN=%]A<G)A
M>0!?=E]S:6=N961?<VAO<G1?87)R87D 7VYO;G!R:6UA<GD 7W-?;&EN:P!?
M=E]D;W5B;&5?9G5N8P!?=E]S:6=N961?;&]N9P!?=E]I;G1?<&]I;G1E<@!?
M=E]S:6=N961?8VAA<@!?=E]F;&]A=%]A<G)A>0!?=E]S:&]R=%]A<G)A>0!?
M=5]L:6YK %]V7W5N<VEG;F5D7W-H;W)T7W!O:6YT97( 7W9?;&]N9P!?=E]C
M:&%R %]O;E]E>&ET %]?97AI=%]D=6UM>5]D96-L %]?7T-43U)?3$E35%]?
M %]?7T143U)?3$E35%]? %]?7V1O7V=L;V)A;%]C=&]R<P!?7U]D;U]G;&]B
M86Q?9'1O<G, 7U]E>&ET7V1U;6UY7W)E9@ "]U<W(O;&]C86PO;&EB
M+V=C8RUL:6(O<W5N-"\R+C$O.B]U<W(O;&]C86PO;&EB+P 3
MD( 0 & &,
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M # ! # 0"0 3
M@ $T@ $!< ! 8 !W@ >H *6 5 .2 !0 "
M / 0 # @<!@ $ "=X[^@?____ $ "=X[^@?___^0$ &=
MX[^@?___]@$ *=X[^@?___\P$ , $!I
M ! P
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M 0& ! X$ @( !4$ BD !T$
M BD "QD BD %5D BD %V
M '^ )& +B -&
M .^ 0V 2> 4F
M 6R 8F :6 ;>
M <J >* >Z
M HB !$ !Y BD !$ !Y BE !$ !Y B
MG QHD BD !$ !Z BI !$ !Z BJ !$ !Z
M BL RDD BI !$ ![ BN !$ ![ BO !$
M ![ BQ T D BN !$ !] BS !$ !] BT
M !$ !] BV UDD BS !$ !^ BX !$ !^ B
MY !$ !^ B[ VDD BX !$ !_ B] !$ !_
M B^ !$ !_ C X D B] !$ "! C" !$
M "! C# !$ "! C% YDD C" !$ "" C'
M !$ "" C( !$ "" C* Z<D C' !$ "# C
M, !$ "# C- !$ "# C/ [PD C, !$ "%
M C1 !$ "% C2 !$ "% C4 ],D C1 !$
M "& C6 !$ "& C7 !$ "& C9 ^(D C6
M !$ "' C; !$ "' C< !$ "' C> _@D C
M; !$ ") CA !$ ") CB !$ ") CE !! D
M CA !$ "* CG !$ "* CH !$ "* CK !"$D
M CG !#. !)^ !-^
M!0: !2* !4" !5R
M !6F !$ "R CN !$ "U CQ !$ "V
M CS !$ "W CV !$ "Y CY !$ "Z C\ !$
M "[ C_ !$ "] D" !$ "^ D% !$ "_ D(
M !$ #! D+ !$ #" D. !$ ## D1 !$ #% D
M4 !$ #& D8 !$ #) D< !$ #* D@ !$ #+
M DD !$ #- DH !$ #. DL !$ #/ DP !$
M #1 DT !$ #2 DX !$ #3 D\ !$ #5 E
M !$ #6 E$ !$ #7 E( !$ #9 E, !$ #: E
M0 !$ #< E4 !$ #= E8 !$ #> E< !$ #@
M E@ !$ #A ED !$ #B EH !$ #D EL !$
M #E EP !$ #F ET !$ #H EX !$ #I E\
M !$ #J F !$ #L F$ !$ #M F( !$ #O F
M, !$ #P F/ !$ #Q F2 !$ #R F5 !$ #T
M F8 !$ #V F< !$ #W F@ !$ #W F@ !98D
M CN !9X@ !:@@ !;H@
M!<X@ !=D@ !>L@ !?\@
M !@@@ !A@@ !BH@ !C0@
M !D4@ !E@@ !F0@ !G$@
M !HP@ !J\@ !M0@
M!O @ !PD@ !RX@ !T@@
M !U\@ !X(@ !YT@ ![4@
M !]D@ !_8@ "!0@ ""H@
M "$@@ "&@@ "'\@
M")H@ "+H@ ",\@ ".@@
M "08@ "1P@ "38@ "54@
M "6T@ "88@ "90@ "B\@
M "CL@ "LX@ "MD@
M"N0@ "P@@ "Q<@ "S4@
M "T,$ FB "TP$ FB "UL& ! O "VID
M FB "WUD FB "XF "ZN "[V
M "^2 "_V #!N
M##F #%. #'6 #)B
M #+6 #-& #.. #/:
M #0Z #1J #6N #7B
M #8* #8V #;:
M#=R #?$D FB #@<@ #AXD G
M #C0D G3 #C\$ G> #D<$ G> #E9D
M G> #FED G> #G6 #I> #JF
M #M" #NF #P>
M#R6 #S^ #V& #X2
M #Z& #[V #\^ #^*
M #_J $ : $%> $&2
M $&Z $'F $**
M$,B $-T@ $/$@ $0X@
M $2 $ G> $21D G> !$ /__ G> $2L% >,
M SN $3(' ;A ! R $3D) 7, !#* $3X% 4. @( $40%
M -^ CN $4H' 5R ! H $5,% #S C' $68% >O C"
M$7() ?/ ! R $7L% *# B] $9() ;T ! T $:D) /Z !
MV $< ) =/ ! X $=<) 1I ! Z $>X) *N ! \ $?X) A2
M ! ^ $@X) : !! $AX) !, !!" $BX) "Y !!$ $CX)
M ?& !!( $D<) ;( !!* $E ) >: !!, $ED% 23 C6
M$FT% =O BI $H$) (# !!. $I4% #/ C1 $J(% .K B
MD $J\) ;= !!0 $KP% 2F G3 $L0) B$ !!2 $MP) 84
M !!4 $O0) 4C !!6 $PP) 39 !!8 $QT) +V !!: $RX)
M 8F !!< $S\) 1F !!> $U ) <@ !!@ $UH) 5K !!B
M$V0% 3% C, $WD% 1W BX $XX) "E !!D $Z,) 9= !!
MF $[@% 4G CA $\8% 6- BS $]0) A$ !!H $^() &[
M !!J $_ ) =S !!L $_X) ?" !!N %!<) 3( !!P %# )
M ?P !!R %#<) +X !!T %$() =$ !!V %%0) ': !!X
M%&8) 2> !!Z %&\) <K !!\ %'H) <L !"" %(4% .9 C
M; %)L% 9U BN %+$) /. !"( %,<) $) !"* %-T) !M
M !", %/,) )W !". %/\) =% !"0 %0<% 2= CG %18)
M AA !"2 %24) 7Z !"4 %30) ?N !"6 %4,) '- !"8
M%5() *9 !": %6$) >% !"< %6D) >L !# %8,) >Y !#
M" %8L) =& !#$ %9,' *8 ! P %:4) =Q !#& %;0) +3
M !#( %<,% 9Y G %=8% :) FB %>D' 6@ ! N %?I?
M7T193D%-24, 8W)T,"YO &=D8FUE+F\ 9V-C,E]C;VUP:6QE9"X +VAO;64O
M9VYU+V=D8B]W;W)K+VYE=R]D979O+V=D8G1E<W0O=#$P+P!G9&)M92YC &EN
M=#IT,3UR,3LM,C$T-S0X,S8T.#LR,30W-#@S-C0W.P!C:&%R.G0R/7(R.S [
M,3(W.P!L;VYG(&EN=#IT,SUR,3LM,C$T-S0X,S8T.#LR,30W-#@S-C0W.P!U
M;G-I9VYE9"!I;G0Z=#0]<C$[,#LM,3L ;&]N9R!U;G-I9VYE9"!I;G0Z=#4]
M<C$[,#LM,3L <VAO<G0@:6YT.G0V/7(Q.RTS,C<V.#LS,C<V-SL ;&]N9R!L
M;VYG(&EN=#IT-SUR,3LP.RTQ.P!S:&]R="!U;G-I9VYE9"!I;G0Z=#@]<C$[
M,#LV-34S-3L ;&]N9R!L;VYG('5N<VEG;F5D(&EN=#IT.3UR,3LP.RTQ.P!S
M:6=N960@8VAA<CIT,3 ]<C$[+3$R.#LQ,C<[ '5N<VEG;F5D(&-H87(Z=#$Q
M/7(Q.S [,C4U.P!F;&]A=#IT,3(]<C$[-#LP.P!D;W5B;&4Z=#$S/7(Q.S@[
M,#L ;&]N9R!D;W5B;&4Z=#$T/7(Q.S@[,#L =F]I9#IT,34],34 =%]S=')U
M8W0Z5#$V/7,R-'9?8VAA<E]M96UB97(Z,BPP+#@[=E]S:&]R=%]M96UB97(Z
M-BPQ-BPQ-CMV7VEN=%]M96UB97(Z,2PS,BPS,CMV7VQO;F=?;65M8F5R.C,L
M-C0L,S([=E]F;&]A=%]M96UB97(Z,3(L.38L,S([=E]D;W5B;&5?;65M8F5R
M.C$S+#$R."PV-#L[ '1?=6YI;VXZ5#$W/74X=E]C:&%R7VUE;6)E<CHR+# L
M.#MV7W-H;W)T7VUE;6)E<CHV+# L,38[=E]I;G1?;65M8F5R.C$L,"PS,CMV
M7VQO;F=?;65M8F5R.C,L,"PS,CMV7V9L;V%T7VUE;6)E<CHQ,BPP+#,R.W9?
M9&]U8FQE7VUE;6)E<CHQ,RPP+#8T.SL =E]C:&%R7V9U;F,Z1C( =E]S:6=N
M961?8VAA<E]F=6YC.D8Q, !V7W5N<VEG;F5D7V-H87)?9G5N8SI&,3$ =E]S
M:&]R=%]F=6YC.D8V '9?<VEG;F5D7W-H;W)T7V9U;F,Z1C8 =E]U;G-I9VYE
M9%]S:&]R=%]F=6YC.D8X '9?:6YT7V9U;F,Z1C$ =E]S:6=N961?:6YT7V9U
M;F,Z1C$ =E]U;G-I9VYE9%]I;G1?9G5N8SI&- !V7VQO;F=?9G5N8SI&,P!V
M7W-I9VYE9%]L;VYG7V9U;F,Z1C, =E]U;G-I9VYE9%]L;VYG7V9U;F,Z1C4
M=E]F;&]A=%]F=6YC.D8Q,@!V7V1O=6)L95]F=6YC.D8Q,P!L:6YK.E0Q.#US
M,34R;F5X=#HQ.3TJ,3@L,"PS,CML:6YK9G5N8SHR,#TJ,C$]9C$Y+#,R+#,R
M.W-T=69F.C(R/6%R,3LP.S [,C,]87(Q.S [,3LR-#UA<C$[,#LR.S$V+#8T
M+#$Q-3([.P!T=5]L:6YK.E0R-3UU,30T;F5X=#HQ.2PP+#,R.VQI;FMF=6YC
M.C(P+# L,S([<W1U9F8Z,C(L,"PQ,34R.SL 8V]L;W)S.E0R-CUE>65L;&]W
M.C L<'5R<&QE.C$L<&EN:SHR+#L 8V%R<SI4,C<]96)M=SHP+'!O<G-C:&4Z
M,2P[ &)O;VQE86XZ=#(X/65&04Q313HP+%12544Z,2P[ &)V86QS.E0R.3UE
M9F%L<V4Z,"QT<G5E.C$L.P!B;V]L96%N,CIT,CD ;6ES;W)D97)E9#I4,S ]
M971W;SHR+&]N93HQ+'IE<F\Z,"QT:')E93HS+#L ;6%I;CI&,0!V7V-H87(Z
M1S( =E]S:6=N961?8VAA<CI',3 =E]U;G-I9VYE9%]C:&%R.D<Q,0!V7W-H
M;W)T.D<V '9?<VEG;F5D7W-H;W)T.D<V '9?=6YS:6=N961?<VAO<G0Z1S@
M=E]I;G0Z1S$ =E]S:6=N961?:6YT.D<Q '9?=6YS:6=N961?:6YT.D<T '9?
M;&]N9SI',P!V7W-I9VYE9%]L;VYG.D<S '9?=6YS:6=N961?;&]N9SI'-0!V
M7V9L;V%T.D<Q,@!V7V1O=6)L93I',3, =E]C:&%R7V%R<F%Y.D<S,3UA<C$[
M,#LQ.S( =E]S:6=N961?8VAA<E]A<G)A>3I',S(]87(Q.S [,3LQ, !V7W5N
M<VEG;F5D7V-H87)?87)R87DZ1S,S/6%R,3LP.S$[,3$ =E]S:&]R=%]A<G)A
M>3I',S0]87(Q.S [,3LV '9?<VEG;F5D7W-H;W)T7V%R<F%Y.D<S- !V7W5N
M<VEG;F5D7W-H;W)T7V%R<F%Y.D<S-3UA<C$[,#LQ.S@ =E]I;G1?87)R87DZ
M1S,V/6%R,3LP.S$[,0!V7W-I9VYE9%]I;G1?87)R87DZ1S,V '9?=6YS:6=N
M961?:6YT7V%R<F%Y.D<S-SUA<C$[,#LQ.S0 =E]L;VYG7V%R<F%Y.D<S.#UA
M<C$[,#LQ.S, =E]S:6=N961?;&]N9U]A<G)A>3I',S@ =E]U;G-I9VYE9%]L
M;VYG7V%R<F%Y.D<S.3UA<C$[,#LQ.S4 =E]F;&]A=%]A<G)A>3I'-# ]87(Q
M.S [,3LQ,@!V7V1O=6)L95]A<G)A>3I'-#$]87(Q.S [,3LQ,P!V7V-H87)?
M<&]I;G1E<CI'-#(]*C( =E]S:6=N961?8VAA<E]P;VEN=&5R.D<T,STJ,3
M=E]U;G-I9VYE9%]C:&%R7W!O:6YT97(Z1S0T/2HQ,0!V7W-H;W)T7W!O:6YT
M97(Z1S0U/2HV '9?<VEG;F5D7W-H;W)T7W!O:6YT97(Z1S0U '9?=6YS:6=N
M961?<VAO<G1?<&]I;G1E<CI'-#8]*C@ =E]I;G1?<&]I;G1E<CI'-#<]*C$
M=E]S:6=N961?:6YT7W!O:6YT97(Z1S0W '9?=6YS:6=N961?:6YT7W!O:6YT
M97(Z1S0X/2HT '9?;&]N9U]P;VEN=&5R.D<T.3TJ,P!V7W-I9VYE9%]L;VYG
M7W!O:6YT97(Z1S0Y '9?=6YS:6=N961?;&]N9U]P;VEN=&5R.D<U,#TJ-0!V
M7V9L;V%T7W!O:6YT97(Z1S4Q/2HQ,@!V7V1O=6)L95]P;VEN=&5R.D<U,CTJ
M,3, =E]S=')U8W0Q.D<Q-@!V7W-T<G5C=#(Z1S4S/7,R-'9?8VAA<E]M96UB
M97(Z,BPP+#@[=E]S:&]R=%]M96UB97(Z-BPQ-BPQ-CMV7VEN=%]M96UB97(Z
M,2PS,BPS,CMV7VQO;F=?;65M8F5R.C,L-C0L,S([=E]F;&]A=%]M96UB97(Z
M,3(L.38L,S([=E]D;W5B;&5?;65M8F5R.C$S+#$R."PV-#L[ '9?=6YI;VXZ
M1S$W '9?=6YI;VXR.D<U-#UU.'9?8VAA<E]M96UB97(Z,BPP+#@[=E]S:&]R
M=%]M96UB97(Z-BPP+#$V.W9?:6YT7VUE;6)E<CHQ+# L,S([=E]L;VYG7VUE
M;6)E<CHS+# L,S([=E]F;&]A=%]M96UB97(Z,3(L,"PS,CMV7V1O=6)L95]M
M96UB97(Z,3,L,"PV-#L[ '-?;&EN:SI',3D =5]L:6YK.D<R-0!P<FEM87)Y
M.D<U-3UE<F5D.C L9W)E96XZ,2QB;'5E.C(L.P!N;VYP<FEM87)Y.D<R-@!C
M;'5N:V5R.D<U-CUE8VAE=GDZ,"QF;W)D.C$L.P!S<&]R='-C87(Z1S(W %]?
M;6%I;BYO &=C8S)?8V]M<&EL960N %]I;FET:6%L:7IE9"XP "]G;G4O9V-C
M+V=C8S(O<W)C+P N+VQI8F=C8S(N8P!I;G0Z=#$]<C$[+3(Q-#<T.#,V-#@[
M,C$T-S0X,S8T-SL 8VAA<CIT,CUR,CLP.S$R-SL ;&]N9R!I;G0Z=#,]<C$[
M+3(Q-#<T.#,V-#@[,C$T-S0X,S8T-SL =6YS:6=N960@:6YT.G0T/7(Q.S [
M+3$[ &QO;F<@=6YS:6=N960@:6YT.G0U/7(Q.S [+3$[ '-H;W)T(&EN=#IT
M-CUR,3LM,S(W-C@[,S(W-C<[ &QO;F<@;&]N9R!I;G0Z=#<]<C$[,#LM,3L
M<VAO<G0@=6YS:6=N960@:6YT.G0X/7(Q.S [-C4U,S4[ &QO;F<@;&]N9R!U
M;G-I9VYE9"!I;G0Z=#D]<C$[,#LM,3L <VEG;F5D(&-H87(Z=#$P/7(Q.RTQ
M,C@[,3(W.P!U;G-I9VYE9"!C:&%R.G0Q,3UR,3LP.S(U-3L 9FQO870Z=#$R
M/7(Q.S0[,#L 9&]U8FQE.G0Q,SUR,3LX.S [ &QO;F<@9&]U8FQE.G0Q-#UR
M,3LX.S [ '9O:60Z=#$U/3$U ')E9U]C;&%S<SI4,38]94Y/7U)%1U,Z,"Q'
M14Y%4D%,7U)%1U,Z,2Q&4%]214=3.C(L04Q,7U)%1U,Z,RQ,24U?4D5'7T-,
M05-315,Z-"P[ '!T<F1I9F9?=#IT,0!S:7IE7W0Z=#$ =V-H87)?=#IT. !L
M;VYG;&]N9SI4,3<]<SAH:6=H.C,L,"PS,CML;W<Z,RPS,BPS,CL[ &QO;F=?
M;&]N9SIT,3@]=3AS.C$W+# L-C0[;&PZ-RPP+#8T.SL 9G5N8U]P='(Z=#$Y
M/2HR,#UF,34 7U]D;U]G;&]B86Q?9'1O<G,Z1C$U %]E>&ET7V1U;6UY7W)E
M9CI',C$]*C$ 7U]D;U]G;&]B86Q?8W1O<G,Z1C$U %]?;6%I;CI&,34 7V5X
M:70N;P!G8V,R7V-O;7!I;&5D+@ O9VYU+V=C8R]G8V,R+W-R8R\ +B]L:6)G
M8V,R+F, :6YT.G0Q/7(Q.RTR,30W-#@S-C0X.S(Q-#<T.#,V-#<[ &-H87(Z
M=#(]<C([,#LQ,C<[ &QO;F<@:6YT.G0S/7(Q.RTR,30W-#@S-C0X.S(Q-#<T
M.#,V-#<[ '5N<VEG;F5D(&EN=#IT-#UR,3LP.RTQ.P!L;VYG('5N<VEG;F5D
M(&EN=#IT-3UR,3LP.RTQ.P!S:&]R="!I;G0Z=#8]<C$[+3,R-S8X.S,R-S8W
M.P!L;VYG(&QO;F<@:6YT.G0W/7(Q.S [+3$[ '-H;W)T('5N<VEG;F5D(&EN
M=#IT.#UR,3LP.S8U-3,U.P!L;VYG(&QO;F<@=6YS:6=N960@:6YT.G0Y/7(Q
M.S [+3$[ '-I9VYE9"!C:&%R.G0Q,#UR,3LM,3(X.S$R-SL =6YS:6=N960@
M8VAA<CIT,3$]<C$[,#LR-34[ &9L;V%T.G0Q,CUR,3LT.S [ &1O=6)L93IT
M,3,]<C$[.#LP.P!L;VYG(&1O=6)L93IT,30]<C$[.#LP.P!V;VED.G0Q-3TQ
M-0!R96=?8VQA<W,Z5#$V/65.3U]214=3.C L1T5.15)!3%]214=3.C$L1E!?
M4D5'4SHR+$%,3%]214=3.C,L3$E-7U)%1U]#3$%34T53.C0L.P!P=')D:69F
M7W0Z=#$ <VEZ95]T.G0Q '=C:&%R7W0Z=#@ ;&]N9VQO;F<Z5#$W/7,X:&EG
M:#HS+# L,S([;&]W.C,L,S(L,S([.P!L;VYG7VQO;F<Z=#$X/74X<SHQ-RPP
M+#8T.VQL.C<L,"PV-#L[ &9U;F-?<'1R.G0Q.3TJ,C ]9C$U %]E>&ET7V1U
M;6UY7V1E8VPZ1S$ 7U]#5$]27TQ)4U1?7SI',C$]87(Q.S [,3LQ.0!?7T14
M3U)?3$E35%]?.D<R,0 M;&< ;&EB9RYS %]E=&5X= !?961A=&$ 7V5N9 !S
M=&%R= !?;6%I;@!?96YV:7)O;@!?=E]S:6=N961?:6YT7V9U;F, 7W9?:6YT
M7V9U;F, 7W!R:6UA<GD 7W9?=6YS:6=N961?<VAO<G1?9G5N8P!?=E]S:6=N
M961?;&]N9U]P;VEN=&5R %]V7W-I9VYE9%]C:&%R7W!O:6YT97( 7W9?=6YS
M:6=N961?;&]N9U]A<G)A>0!?=E]U;G-I9VYE9%]C:&%R7V%R<F%Y %]V7VQO
M;F=?<&]I;G1E<@!?=E]C:&%R7W!O:6YT97( 7W9?=6YS:6=N961?:6YT %]V
M7W-I9VYE9%]S:&]R= !?=E]D;W5B;&5?87)R87D 7W9?=6YI;VX 7W9?9FQO
M870 7W9?<VAO<G0 7W9?<VEG;F5D7VQO;F=?9G5N8P!?=E]S:6=N961?8VAA
M<E]F=6YC %]V7W-I9VYE9%]I;G1?87)R87D 7W9?;&]N9U]F=6YC %]V7V-H
M87)?9G5N8P!?=E]I;G1?87)R87D 7U]?;6%I;@!?=E]U;G-I9VYE9%]I;G1?
M<&]I;G1E<@!?=E]S:6=N961?<VAO<G1?<&]I;G1E<@!?=E]U;G-I9VYE9%]S
M:&]R=%]A<G)A>0!?=E]U;G-I9VYE9%]L;VYG %]V7V9L;V%T7W!O:6YT97(
M7W9?<VAO<G1?<&]I;G1E<@!?=E]U;G-I9VYE9%]C:&%R %]V7W5N:6]N,@!?
M=E]D;W5B;&4 7W9?=6YS:6=N961?:6YT7V9U;F, 7W9?<VEG;F5D7W-H;W)T
M7V9U;F, 7W9?<VEG;F5D7VQO;F=?87)R87D 7W9?<VEG;F5D7V-H87)?87)R
M87D 7W9?9FQO871?9G5N8P!?=E]S:&]R=%]F=6YC %]V7W-I9VYE9%]I;G0
M7W9?;&]N9U]A<G)A>0!?=E]C:&%R7V%R<F%Y %]V7W5N<VEG;F5D7VQO;F=?
M<&]I;G1E<@!?=E]U;G-I9VYE9%]C:&%R7W!O:6YT97( 7W9?:6YT %]S<&]R
M='-C87( 7W9?9&]U8FQE7W!O:6YT97( 7W9?=6YS:6=N961?<VAO<G0 7V-L
M=6YK97( 7W9?<W1R=6-T,0!?=E]S=')U8W0R %]V7W5N<VEG;F5D7VQO;F=?
M9G5N8P!?=E]U;G-I9VYE9%]C:&%R7V9U;F, 7W9?<VEG;F5D7VEN=%]P;VEN
M=&5R %]V7W5N<VEG;F5D7VEN=%]A<G)A>0!?=E]S:6=N961?<VAO<G1?87)R
M87D 7VYO;G!R:6UA<GD 7W-?;&EN:P!?=E]D;W5B;&5?9G5N8P!?=E]S:6=N
M961?;&]N9P!?=E]I;G1?<&]I;G1E<@!?=E]S:6=N961?8VAA<@!?=E]F;&]A
M=%]A<G)A>0!?=E]S:&]R=%]A<G)A>0!?=5]L:6YK %]V7W5N<VEG;F5D7W-H
M;W)T7W!O:6YT97( 7W9?;&]N9P!?=E]C:&%R %]?97AI=%]D=6UM>5]D96-L
M %]?7T-43U)?3$E35%]? %]?7T143U)?3$E35%]? %]?7V1O7V=L;V)A;%]C
M=&]R<P!?7U]D;U]G;&]B86Q?9'1O<G, 7U]E>&ET7V1U;6UY7W)E9@
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
(
end

View File

@ -0,0 +1,336 @@
begin 777 sparc-elf
M?T5,1@$" 0 " ( ! $/% #0 #;0 T "
M!0 H !< $P 8 T $ - "@ H 4 P
M -0 !$ ! ! - ! #0 3
M= $W0 % $ $ !.H (3J #L "M < 0
M @ % P A0, (@ !P O=7-R+VQI8B]L9"YS
M;RXQ %, !H 2P .@ &( W 5
M 4P %\ !D 4 $ !* 5P #8
M20 #, M /P %X "4 < 0P !1
M * !" "0 !; , #$ R 1P $4
M !. 8 C +@ %@ /0 (
M $0 !< 2 + !/ !6
M &< !: 60 &8 .P %T
M +P !E !A
M
M
M (0
M *@ "D
M 9 'P
M "8 ; !T !H ^ 00 "L U
M 7 "( $P
M $8 X 4@ #0 !- #P
M G %4 !@ > Y 8P
M $ U # ! ! .@ P
M @ 0/< , , $*7 # $ !#M@
M P !0 0[D , 8 $/" # ' !#Q0
M P " 1-P , D $3@ # * "
M$Z@ P "P A0 , P (4# # -
M "%)@ P #@ , \ # 0
M P $0 , !( #
M 3 P % , !4
M # 6 0 "%)@ ($0 #@ D 1-P !( D / (4
MH 01 . %@ "%*@ "0$0 #@ !T A4X !!$ X T
M (5/ 01 . .@ "%4 !$0 #@ $@ A5$ !!$ X
M !6 (52 @1 . 7P "%5 ($0 #@ '4 A58 "!$
M X "* (58 01 . GP "%60 $$0 #@ *< A5H
M!!$ X "T $09 !02 ( R0 !#X@ 4$@ " -4 A5P
M "!$ X #> (5> 01 . Z "%7P "$0 #@ /X
M A5^ A$ X $/ (5@ @1 . !(P !#P@ $@ !P
M 2D A6( A$ X $X $/Q !02 ( !10 "%8P $$0
M#@ 4T A60 A$ X %: (5F !@1 . !9 "%; 8
M$0 #@ 6X A7( !!$ X %U (5S 01 . !A "%=
M $$0 #@ 9P 1!0 %!( @ &O (5U 01 . !Q@ "
M%=@ "$0 #@ <X 0_L %!( @ 'D (4# 1 /_Q !
M[0 !$*@ +($@ " ?( 1. !!$ H '_ $0D !@2 (
M "#0 "%=H "$0 #@ B$ 1 4 %!( @ (S (5W 01
M . "0P "%> $$0 #@ E( A7H $!$ X )A $/%
M '02 ( ": "%)0 $0#_\0 F\ 1 H %!( @ *# (5
M^ @1 . "CP "%@ $$0 #@ I< 1!X &!( @ *D
M $0/ !02 ( "L "%@0 ($0 #@ L, A90 !"$ X
M ++ (6# 01 . "W "%A $$0 #@ O( 0_8 %!(
M @ ,& (6% 01 . #%0 "%A@ $$0 #@ RT 0^P
M%!( @ -" (67 1 /_Q #1P "%AP $$0 #@ UX A8@
M !!$ X -L (6) $1 . #? "%B@ $$0 #@ XP
M A8L !!$ X .< $3J 1 /_Q #HP "%C ($0 #@
M [$ A8X !!$ X /& (4 1 /_Q #W !$ 4$@
M" ^< 0^< %!( @ /Z (6/ 01 . $" "%D !
M$0 #@ ! \ A9$ !!$ X 0: (62 @1 . $)P "$^0
M 0$@ !"P A/8 6!( 0S (3\ @2 $.0 "
M%E $$0 #@ !$( A94 !!$ X 1; (66 01 . '9?
M=6YI;VX 7V9I;FD <U]L:6YK '5?;&EN:P!V7W-I9VYE9%]S:&]R=%]P;VEN
M=&5R '9?:6YT '9?<VEG;F5D7V-H87( =E]I;G1?<&]I;G1E<@!V7V1O=6)L
M90!V7W5N<VEG;F5D7VQO;F=?87)R87D =E]U;G-I9VYE9%]I;G1?87)R87D
M=E]S:6=N961?:6YT7W!O:6YT97( 8VQU;FME<@!V7W-I9VYE9%]I;G0 =E]U
M;G-I9VYE9%]L;VYG7V9U;F, =E]C:&%R7V9U;F, =E]U;FEO;C( <W!O<G1S
M8V%R '9?=6YS:6=N961?8VAA<E]A<G)A>0!V7W5N<VEG;F5D7W-H;W)T '9?
M<VEG;F5D7VQO;F=?87)R87D 7VEN:70 =E]S:6=N961?<VAO<G0 =E]S:&]R
M=%]F=6YC '9?9FQO870 =E]C:&%R7V%R<F%Y '9?<W1R=6-T,0!V7W-T<G5C
M=#( =E]L;VYG '9?;&]N9U]P;VEN=&5R '9?=6YS:6=N961?;&]N9U]P;VEN
M=&5R '9?<VEG;F5D7VQO;F=?9G5N8P!V7W5N<VEG;F5D7VEN=%]P;VEN=&5R
M '9?<VAO<G0 =E]U;G-I9VYE9%]S:&]R=%]F=6YC %]$64Y!34E# &UA:6X
M7VQI8E]V97)S:6]N '9?9&]U8FQE7V9U;F, =E]S:6=N961?8VAA<E]A<G)A
M>0!V7W-I9VYE9%]I;G1?9G5N8P!V7W5N<VEG;F5D7VQO;F< =E]U;G-I9VYE
M9%]I;G0 =E]D;W5B;&5?87)R87D 7W-T87)T %]E9&%T80!V7W5N<VEG;F5D
M7VEN=%]F=6YC '9?:6YT7V%R<F%Y '!R:6UA<GD =E]F;&]A=%]F=6YC '9?
M;&]N9U]F=6YC '9?<VEG;F5D7VEN=%]A<G)A>0!E;G9I<F]N '9?9&]U8FQE
M7W!O:6YT97( =E]S:6=N961?8VAA<E]P;VEN=&5R '9?<VEG;F5D7W-H;W)T
M7V9U;F, =E]C:&%R7W!O:6YT97( =E]U;G-I9VYE9%]C:&%R7W!O:6YT97(
M=E]U;G-I9VYE9%]C:&%R7V9U;F, 7V5N9 !V7W5N<VEG;F5D7W-H;W)T7V%R
M<F%Y '9?<VEG;F5D7VQO;F< =E]U;G-I9VYE9%]C:&%R '9?<VAO<G1?<&]I
M;G1E<@!V7V9L;V%T7W!O:6YT97( 7V5T97AT '9?9FQO871?87)R87D =E]S
M:6=N961?<VAO<G1?87)R87D 7T=,3T)!3%]/1D93151?5$%"3$5? '9?:6YT
M7V9U;F, =E]S:6=N961?8VAA<E]F=6YC '9?<VAO<G1?87)R87D =E]C:&%R
M &YO;G!R:6UA<GD =E]L;VYG7V%R<F%Y &5X:70 871E>&ET %]E>&ET %]E
M;G9I<F]N '9?=6YS:6=N961?<VAO<G1?<&]I;G1E<@!V7W-I9VYE9%]L;VYG
M7W!O:6YT97( ;&EB8RYS;RXQ A90 !E$P A/8 !C%0
M A/D !B%0 A/P !D%0 "=X[^@@<?@"('H "\$" X .@0*(#
MH$2<(Z @@) 0* 20$ !0 !!*@$ 1 !$D!(C<$ 028! ?___
M\ $ "0$ 0DA $94L( *4 J $E 1 "A< (66$N)0U"+ $ $X!
M0 !!&P$ ! $$< 0 )WCOY"P$" ,( 8''X B!Z G>._D+ 0( P
M@ !@<?@"('H "=X[^0L! @ #" &!Q^ (@>@ )WCOY"P$" ,( 8''
MX B!Z G>._D+ 0( P@ !@<?@"('H "=X[^0L! @ #" &!Q^ (@>@
M )WCOY"P$" ,( 8''X B!Z G>._D+ 0( P@ !@<?@"('H "=X[^0
ML! @ #" &!Q^ (@>@ )WCOY"P$" ,( 8''X B!Z G>._D+ 0( P
M@ !@<?@"('H "=X[^0L! @ #" &!Q^ (@>@ )WCOY 1 !$P0(CB#"
M &!Q^ (@>@ )WCOY 1 !$P1HCD#" &!Q^ (@>@ )WCOY 1 "%P"HB
M0!$ (62$" !TBHA0!$ (62$" "TBHB)!$ (62$" #TC(AV!$ (62$" $
MTC(AB!$ (62$" %TC(A?A$ (62$" &TB(A/!$ (62$" 'TB(A:!$ (62
M$" (TB(AX!$ (62$" )TB(AR!$ (62$" *TB(B(!$ (62$" +TB(AW!$
M (43 !$U )CF-0B(8P1 "%$P 1-0:8Z#4.B%($0 A1, (74"F) U"HA
MD!$ (43 "%U IA0-0J(=H1 "%$P A=0*8B34*B%\$0 A1, (74$F'8
MU#(B/!$ (43 "%U!)AB-0R(C@1 "%$P A=0287[4,B(<$0 A1, (74
M F$\U"(A^!$ (43 "%U )A:-0B(@01 "%$P A=0"8>#4(B%8$0 A1,
M (74 F'(U"(B2!$ (43 "%U )B(-0B(8 1 "%$P A=0"8=S4(B%0$0
MA1, (74 F&,U"(B,!$ (43 "%U!IA2-0Z(>@1 "%%0 A9(2HD#2(B(4
M$0 A14 (62$J% TB(B$!$ (45 "%DA*B)-(B(A@1 "%%0 A9(2H=C2
M(B(H$0 A14 (62$J&(TB(A.!$ (45 "%DA*A?M(B(E01 "%%0 A9(2
MH3S2(B%$$0 A14 (62$J%HTB(A8!$ (45 "%DA*AX-(B(=01 "%%0
MA9(2H<C2(B',$0 A14 (62$J(@TB(B6!$ (45 "%DA*AW-(B(= 1 "%
M%0 A9(2H8S2(B(L$0 A14 (62$J%(TB(B#!$ (62$" "TB(B !$ (62
M$" "TB(B1!$ (62$" !TB(A>!$ (62$" !TB(A9!$ (43 "%U )@H-0B
M(*@1 "%$P A=028)C4,B%P@<?@"('H "=X[^@@<?@"('H
M 0 0L@ ! :0
M , # P
MO__S 0 , #PPO__P 0 , $@PO__M 0 $ A0,
M ! $<0 P 0\( #0 !$W $ $ Z 4 0I<
M!@ ! ]P * $>P L 0 %0 # (3J ( D
M % < 7 $.Y < 0[8 " # ) #
M ! $ /_Q !
M -0 P 0 0#H , ( $#W # #
M !"EP P ! 0[8 , 4 $.Y # &
M !#P@ P !P 0\4 , @ $3< #
M ) !$X P "@ A.H , L (4
M # , "% P P #0 A28 , X
M # / P $ , !$
M # 2 P $P , !0
M # 5 P %@ < 0
M__$ . $ /_Q &@ ! #_\0 "(
M 0 __$ I (4F @1 . ,0 !$W $@ "0 #< A2@
M !!$ X ^ (4J ) 1 . 10 "%3@ $$0 #@ %P
M A4\ !!$ X !B (50 $1 . < "%40 $$0 #@
M 'X A5( "!$ X "' (54 @1 . G0 "%5@ ($0
M#@ +( A5@ !!$ X #' (59 01 . SP "%6@ $
M$0 #@ -P 1!D %!( @ #Q $/B !02 ( _0 "%7
M ($0 #@ 08 A5X !!$ X $0 (5? (1 . !)@ "
M%7X "$0 #@ 3< A6 "!$ X %+ $/" 2 ' !
M40 "%8@ "$0 #@ 6 0_$ %!( @ %M (5C 01 .
M !=0 "%9 "$0 #@ 8( A68 &!$ X &, (5L !@1
M . !E@ "%<@ $$0 #@ 9T A7, !!$ X &L (5T
M 01 . !Q !$% 4$@ " =< A74 !!$ X 'N (5
MV (1 . !]@ !#^P 4$@ " @P A0, !$ __$ (5
M $0J L@2 ( "&@ !$X $$0 "@ B< 1"0 &!( @
M (U (5V@ (1 . "20 !$!0 4$@ " EL A7< !!$
M X )K (5X 01 . ">@ "%>@ 0$0 #@ HD 0\4
M=!( @ *0 (4E 1 /_Q "EP !$"@ 4$@ " JL A7X
M "!$ X *W (6 01 . "OP !$'@ 8$@ " LP
M 1 \ %!( @ +8 (6! @1 . "ZP "%E $(0 #@
M O, A8, !!$ X ,$ (6$ 01 . #&@ !#]@ 4$@
M" RX A84 !!$ X ,] (6& 01 . #50 !#[ 4
M$@ " VH A9< !$ __$ -O (6' 01 . #A@ "%B
M $$0 #@ Y0 A8D 1$ X .D (6* 01 . #M "
M%BP $$0 #@ \0 1.H !$ __$ /+ (6, @1 . #
MV0 "%C@ $$0 #@ ^X A0 !$ __$ 0$ $0 !02 (
M $#P !#YP 4$@ " !"( A8\ !!$ X 0P (60 $1
M . $-P "%D0 $$0 #@ !$( A9( "!$ X 1/ (3Y
M ! 2 $5 "$]@ !8$@ !%L A/P "!( 1A (6
M4 01 . $:@ "%E0 $$0 #@ !(, A98 !!$ X 9V1B
M;64 8W)T:2YS '9A;'5E<RU882YC &=D8FUE+F, 8W)T;BYS '9?=6YI;VX
M7V9I;FD <U]L:6YK '5?;&EN:P!V7W-I9VYE9%]S:&]R=%]P;VEN=&5R '9?
M:6YT '9?<VEG;F5D7V-H87( =E]I;G1?<&]I;G1E<@!V7V1O=6)L90!V7W5N
M<VEG;F5D7VQO;F=?87)R87D =E]U;G-I9VYE9%]I;G1?87)R87D =E]S:6=N
M961?:6YT7W!O:6YT97( 8VQU;FME<@!V7W-I9VYE9%]I;G0 =E]U;G-I9VYE
M9%]L;VYG7V9U;F, =E]C:&%R7V9U;F, =E]U;FEO;C( <W!O<G1S8V%R '9?
M=6YS:6=N961?8VAA<E]A<G)A>0!V7W5N<VEG;F5D7W-H;W)T '9?<VEG;F5D
M7VQO;F=?87)R87D 7VEN:70 =E]S:6=N961?<VAO<G0 =E]S:&]R=%]F=6YC
M '9?9FQO870 =E]C:&%R7V%R<F%Y '9?<W1R=6-T,0!V7W-T<G5C=#( =E]L
M;VYG '9?;&]N9U]P;VEN=&5R '9?=6YS:6=N961?;&]N9U]P;VEN=&5R '9?
M<VEG;F5D7VQO;F=?9G5N8P!V7W5N<VEG;F5D7VEN=%]P;VEN=&5R '9?<VAO
M<G0 =E]U;G-I9VYE9%]S:&]R=%]F=6YC %]$64Y!34E# &UA:6X 7VQI8E]V
M97)S:6]N '9?9&]U8FQE7V9U;F, =E]S:6=N961?8VAA<E]A<G)A>0!V7W-I
M9VYE9%]I;G1?9G5N8P!V7W5N<VEG;F5D7VQO;F< =E]U;G-I9VYE9%]I;G0
M=E]D;W5B;&5?87)R87D 7W-T87)T %]E9&%T80!V7W5N<VEG;F5D7VEN=%]F
M=6YC '9?:6YT7V%R<F%Y '!R:6UA<GD =E]F;&]A=%]F=6YC '9?;&]N9U]F
M=6YC '9?<VEG;F5D7VEN=%]A<G)A>0!E;G9I<F]N '9?9&]U8FQE7W!O:6YT
M97( =E]S:6=N961?8VAA<E]P;VEN=&5R '9?<VEG;F5D7W-H;W)T7V9U;F,
M=E]C:&%R7W!O:6YT97( =E]U;G-I9VYE9%]C:&%R7W!O:6YT97( =E]U;G-I
M9VYE9%]C:&%R7V9U;F, 7V5N9 !V7W5N<VEG;F5D7W-H;W)T7V%R<F%Y '9?
M<VEG;F5D7VQO;F< =E]U;G-I9VYE9%]C:&%R '9?<VAO<G1?<&]I;G1E<@!V
M7V9L;V%T7W!O:6YT97( 7V5T97AT '9?9FQO871?87)R87D =E]S:6=N961?
M<VAO<G1?87)R87D 7T=,3T)!3%]/1D93151?5$%"3$5? '9?:6YT7V9U;F,
M=E]S:6=N961?8VAA<E]F=6YC '9?<VAO<G1?87)R87D =E]C:&%R &YO;G!R
M:6UA<GD =E]L;VYG7V%R<F%Y &5X:70 871E>&ET %]E>&ET %]E;G9I<F]N
M '9?=6YS:6=N961?<VAO<G1?<&]I;G1E<@!V7W-I9VYE9%]L;VYG7W!O:6YT
M97( '9A;'5E<RU882YC "]D:79E+W)E;&5A<V4O8BUS>7-I9FEX+W5S<B]S
M<F,O;&EB+VQI8F,O '!O<G0O9V5N+W9A;'5E<RU882YC 6'0@.R!6/3(N
M, !M86EN %]L:6)?=F5R<VEO;@ O=&UP "]U<W(O8V-S+VQI8B]V86QU97,M
M6&$N;P 9V1B;64N8P O=&UP+P!G9&)M92YC &=C8S)?8V]M<&EL960N &EN
M=#IT,3UR,3LM,C$T-S0X,S8T.#LR,30W-#@S-C0W.P!C:&%R.G0R/7(R.S [
M,3(W.P!L;VYG(&EN=#IT,SUR,3LM,C$T-S0X,S8T.#LR,30W-#@S-C0W.P!U
M;G-I9VYE9"!I;G0Z=#0]<C$[,#LM,3L ;&]N9R!U;G-I9VYE9"!I;G0Z=#4]
M<C$[,#LM,3L <VAO<G0@:6YT.G0V/7(Q.RTS,C<V.#LS,C<V-SL ;&]N9R!L
M;VYG(&EN=#IT-SUR,3LP.RTQ.P!S:&]R="!U;G-I9VYE9"!I;G0Z=#@]<C$[
M,#LV-34S-3L ;&]N9R!L;VYG('5N<VEG;F5D(&EN=#IT.3UR,3LP.RTQ.P!S
M:6=N960@8VAA<CIT,3 ]<C$[+3$R.#LQ,C<[ '5N<VEG;F5D(&-H87(Z=#$Q
M/7(Q.S [,C4U.P!F;&]A=#IT,3(]<C$[-#LP.P!D;W5B;&4Z=#$S/7(Q.S@[
M,#L ;&]N9R!D;W5B;&4Z=#$T/7(Q.S@[,#L =F]I9#IT,34],34 =%]S=')U
M8W0Z5#$V/7,R-'9?8VAA<E]M96UB97(Z,BPP+#@[=E]S:&]R=%]M96UB97(Z
M-BPQ-BPQ-CMV7VEN=%]M96UB97(Z,2PS,BPS,CMV7VQO;F=?;65M8F5R.C,L
M-C0L,S([=E]F;&]A=%]M96UB97(Z,3(L.38L,S([=E]D;W5B;&5?;65M8F5R
M.C$S+#$R."PV-#L[ '1?=6YI;VXZ5#$W/74X=E]C:&%R7VUE;6)E<CHR+# L
M.#MV7W-H;W)T7VUE;6)E<CHV+# L,38[=E]I;G1?;65M8F5R.C$L,"PS,CMV
M7VQO;F=?;65M8F5R.C,L,"PS,CMV7V9L;V%T7VUE;6)E<CHQ,BPP+#,R.W9?
M9&]U8FQE7VUE;6)E<CHQ,RPP+#8T.SL =E]C:&%R7V9U;F,Z1C( =E]S:6=N
M961?8VAA<E]F=6YC.D8Q, !V7W5N<VEG;F5D7V-H87)?9G5N8SI&,3$ =E]S
M:&]R=%]F=6YC.D8V '9?<VEG;F5D7W-H;W)T7V9U;F,Z1C8 =E]U;G-I9VYE
M9%]S:&]R=%]F=6YC.D8X '9?:6YT7V9U;F,Z1C$ =E]S:6=N961?:6YT7V9U
M;F,Z1C$ =E]U;G-I9VYE9%]I;G1?9G5N8SI&- !V7VQO;F=?9G5N8SI&,P!V
M7W-I9VYE9%]L;VYG7V9U;F,Z1C, =E]U;G-I9VYE9%]L;VYG7V9U;F,Z1C4
M=E]F;&]A=%]F=6YC.D8Q,@!V7V1O=6)L95]F=6YC.D8Q,P!L:6YK.E0Q.#US
M,34R;F5X=#HQ.3TJ,3@L,"PS,CML:6YK9G5N8SHR,#TJ,C$]9C$Y+#,R+#,R
M.W-T=69F.C(R/6%R,3LP.S [,C,]87(Q.S [,3LR-#UA<C$[,#LR.S$V+#8T
M+#$Q-3([.P!T=5]L:6YK.E0R-3UU,30T;F5X=#HQ.2PP+#,R.VQI;FMF=6YC
M.C(P+# L,S([<W1U9F8Z,C(L,"PQ,34R.SL 8V]L;W)S.E0R-CUE>65L;&]W
M.C L<'5R<&QE.C$L<&EN:SHR+#L 8V%R<SI4,C<]96)M=SHP+'!O<G-C:&4Z
M,2P[ &)O;VQE86XZ=#(X/65&04Q313HP+%12544Z,2P[ &)V86QS.E0R.3UE
M9F%L<V4Z,"QT<G5E.C$L.P!B;V]L96%N,CIT,CD ;6ES;W)D97)E9#I4,S ]
M971W;SHR+&]N93HQ+'IE<F\Z,"QT:')E93HS+#L ;6%I;CI&,0!V7V-H87(Z
M1S( =E]S:6=N961?8VAA<CI',3 =E]U;G-I9VYE9%]C:&%R.D<Q,0!V7W-H
M;W)T.D<V '9?<VEG;F5D7W-H;W)T.D<V '9?=6YS:6=N961?<VAO<G0Z1S@
M=E]I;G0Z1S$ =E]S:6=N961?:6YT.D<Q '9?=6YS:6=N961?:6YT.D<T '9?
M;&]N9SI',P!V7W-I9VYE9%]L;VYG.D<S '9?=6YS:6=N961?;&]N9SI'-0!V
M7V9L;V%T.D<Q,@!V7V1O=6)L93I',3, =E]C:&%R7V%R<F%Y.D<S,3UA<C$[
M,#LQ.S( =E]S:6=N961?8VAA<E]A<G)A>3I',S(]87(Q.S [,3LQ, !V7W5N
M<VEG;F5D7V-H87)?87)R87DZ1S,S/6%R,3LP.S$[,3$ =E]S:&]R=%]A<G)A
M>3I',S0]87(Q.S [,3LV '9?<VEG;F5D7W-H;W)T7V%R<F%Y.D<S- !V7W5N
M<VEG;F5D7W-H;W)T7V%R<F%Y.D<S-3UA<C$[,#LQ.S@ =E]I;G1?87)R87DZ
M1S,V/6%R,3LP.S$[,0!V7W-I9VYE9%]I;G1?87)R87DZ1S,V '9?=6YS:6=N
M961?:6YT7V%R<F%Y.D<S-SUA<C$[,#LQ.S0 =E]L;VYG7V%R<F%Y.D<S.#UA
M<C$[,#LQ.S, =E]S:6=N961?;&]N9U]A<G)A>3I',S@ =E]U;G-I9VYE9%]L
M;VYG7V%R<F%Y.D<S.3UA<C$[,#LQ.S4 =E]F;&]A=%]A<G)A>3I'-# ]87(Q
M.S [,3LQ,@!V7V1O=6)L95]A<G)A>3I'-#$]87(Q.S [,3LQ,P!V7V-H87)?
M<&]I;G1E<CI'-#(]*C( =E]S:6=N961?8VAA<E]P;VEN=&5R.D<T,STJ,3
M=E]U;G-I9VYE9%]C:&%R7W!O:6YT97(Z1S0T/2HQ,0!V7W-H;W)T7W!O:6YT
M97(Z1S0U/2HV '9?<VEG;F5D7W-H;W)T7W!O:6YT97(Z1S0U '9?=6YS:6=N
M961?<VAO<G1?<&]I;G1E<CI'-#8]*C@ =E]I;G1?<&]I;G1E<CI'-#<]*C$
M=E]S:6=N961?:6YT7W!O:6YT97(Z1S0W '9?=6YS:6=N961?:6YT7W!O:6YT
M97(Z1S0X/2HT '9?;&]N9U]P;VEN=&5R.D<T.3TJ,P!V7W-I9VYE9%]L;VYG
M7W!O:6YT97(Z1S0Y '9?=6YS:6=N961?;&]N9U]P;VEN=&5R.D<U,#TJ-0!V
M7V9L;V%T7W!O:6YT97(Z1S4Q/2HQ,@!V7V1O=6)L95]P;VEN=&5R.D<U,CTJ
M,3, =E]S=')U8W0Q.D<Q-@!V7W-T<G5C=#(Z1S4S/7,R-'9?8VAA<E]M96UB
M97(Z,BPP+#@[=E]S:&]R=%]M96UB97(Z-BPQ-BPQ-CMV7VEN=%]M96UB97(Z
M,2PS,BPS,CMV7VQO;F=?;65M8F5R.C,L-C0L,S([=E]F;&]A=%]M96UB97(Z
M,3(L.38L,S([=E]D;W5B;&5?;65M8F5R.C$S+#$R."PV-#L[ '9?=6YI;VXZ
M1S$W '9?=6YI;VXR.D<U-#UU.'9?8VAA<E]M96UB97(Z,BPP+#@[=E]S:&]R
M=%]M96UB97(Z-BPP+#$V.W9?:6YT7VUE;6)E<CHQ+# L,S([=E]L;VYG7VUE
M;6)E<CHS+# L,S([=E]F;&]A=%]M96UB97(Z,3(L,"PS,CMV7V1O=6)L95]M
M96UB97(Z,3,L,"PV-#L[ '-?;&EN:SI',3D =5]L:6YK.D<R-0!P<FEM87)Y
M.D<U-3UE<F5D.C L9W)E96XZ,2QB;'5E.C(L.P!N;VYP<FEM87)Y.D<R-@!C
M;'5N:V5R.D<U-CUE8VAE=GDZ,"QF;W)D.C$L.P!S<&]R='-C87(Z1S(W N
M:6YT97)P "YH87-H "YD>6YS>6T +F1Y;G-T<@ N<F5L82YB<W, +G)E;&$N
M<&QT "YI;FET "YT97AT "YF:6YI "YR;V1A=&$ +G!L= N9V]T "YD>6YA
M;6EC "YB<W, +G-Y;71A8@ N<W1R=&%B "YS=&%B+FEN9&5X<W1R "YS=&%B
M<W1R "YS:'-T<G1A8@ N8V]M;65N= N<W1A8BYI;F1E> N<W1A8@ 87,Z
M($,@1&5V96QO<&UE;G0@4V5T(" H0T13*2!34$%20V]M<&EL97)S(#(N," Q
M."!-87D@,3DY,@H &%S.B!#($1E=F5L;W!M96YT(%-E=" @*$-$4RD@4U!!
M4D-O;7!I;&5R<R R+C @,3@@36%Y(#$Y.3(* ! *",I4W5N3U,@-2XP(&9C
M<RX@($IU;F4@,3DY,@ 87,Z($,@1&5V96QO<&UE;G0@4V5T(" H0T13*2!3
M4$%20V]M<&EL97)S(#(N," Q."!-87D@,3DY,@H 1T-#.B H1TY5*2!C>6=N
M=7,M,BXP+C( &%S.B!#($1E=F5L;W!M96YT(%-E=" @*$-$4RD@4U!!4D-O
M;7!I;&5R<R R+C @,3@@36%Y(#$Y.3(* &QD.B H4T=5*2!3=6Y/4R]35E(T
M("A,2RTQ+C I $ ' B0 UD #=D #
M &LX ' X $X\ *A=6!@ %DJ
M %X@ $ "\ +# ED $/B
M ]D $/B !<\ ": $B
M %J (& )J +B
M -: /" 1* 36
M 5* 6Z 8"
M 9. :N ;> E&
M N,D $/B !$ !Y !$ !Y ! !$ !Y
M # O(D $/G !$ !Z !$ !Z ! !$
M !Z # PDD $/L !$ ![ !$ ![ !
M !$ ![ # R(D $/Q !$ !] !$ !]
M! !$ !] # S(D $/V !$ !^ !$ !^
M ! !$ !^ # TDD $/[ !$ !_ !$
M !_ ! !$ !_ # V(D $0 !$ "!
M !$ "! ! !$ "! # W D $0% !$ ""
M !$ "" ! !$ "" # X4D $0* !$ "#
M !$ "# ! !$ "# # YPD $0/ !$
M "% !$ "% ! !$ "% # ZLD $04
M !$ "& !$ "& ! !$ "& # \$D $0
M9 !$ "' !$ "' ! !$ "' # ]DD
M $0> !$ ") !$ ") ! !$ ") $ ^HD
M $0D !$ "* !$ "* ! !$ "* $
M _R !&B !*B !,^
M !.N !0F !26 !3*
M !5\D $0J !$ "R !$ "U ! !$
M "V # !$ "W & !$ "Y ) !$ "Z ,
M !$ "[ / !$ "] 2 !$ "^ 5 !$ "_
M8 !$ #! ; !$ #" > !$ ## A !$ #%
M D !$ #& H !$ #) L !$ #* P !$
M #+ T !$ #- X !$ #. \ !$ #/ !
M !$ #1 !$ !$ #2 !( !$ #3 !, !$ #5 !
M0 !$ #6 !4 !$ #7 !8 !$ #9 !< !$ #:
M !@ !$ #< !D !$ #= !H !$ #> !L !$
M #@ !P !$ #A !T !$ #B !X !$ #D !\
M !$ #E " !$ #F "$ !$ #H "( !$ #I "
M, !$ #J "0 !$ #L "4 !$ #M "8 !$ #O
M "< !$ #P "? !$ #Q "B !$ #R "E !$
M #T "H !$ #V "L !$ #W "P !$ #W "P
M!6<@ !7$@ !8,@ !9<@
M !:(@ !;0@ !<@@ !=$@
M !>$@ !?,@ !?T@ !@X@
M !B$@ !BT@ !CH@
M!E4@ !G@@ !IT@ !KD@
M !M(@ !O<@ !Q$@ !R@@
M !TL@ !V8@ !WX@ !Z(@
M ![\@ !]T@ !_,@
M"!$@ "#$@ "$@@ "&,@
M "(,@ ")@@ "+$@ ",\@
M ".4@ "/\@ "1X@ "38@
M "4\@ "5T@ "?@@
M"@0@ "I<@ "J(@ "JT@
M "M$@ "N @ "OX@
M ! 0 (
M 0#4 U !$ $ "0 4 " $ Z
M .@ +T P $ ! \ + @ ! ]P /< &
M@ 0 7 ! ! 7 P ( 0I< *7 !'L
M $ 'P 0 " $.V #M@ , P X
M $ # "D $ @ !#N0 [D ) , + !
M P S 0 8 0\( /" P 0
M.0 $ & $/% #Q0 1< $ #\ !
M !@ !$W !-P # ! !% 0 (
M 1. 3@ "@ @ 30 $ ' (3J
M$Z@ !8 $ ! %( ! P "% !0
M# ! 0 !7 !@ , A0, 4# (@ $
M 0 ( 8 @ # (4F %)@ '$
M ( &4 " !28 &T ! < !
M ! !M P ;: !)D $
M=0 , ( $ ") ! (0 #
M ""* +# 0 "- P
M KE@ +( $ EP $
M+$@ %) ! * ! "V4
M8 ! P "L 0 M] "-P
, 0 ,
end

View File

@ -0,0 +1,95 @@
# Copyright (C) 1988, 1990, 1991, 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Rob Savoye. (rob@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
# This only works for native, I think.
if ![isnative] then {
warning "Term test case can't run on a target system."
continue
}
#
# test running programs
#
set prms_id 0
set bug_id 0
set binfile "run"
if ![file exists $objdir/$subdir/$binfile] then {
perror "$objdir/$subdir/$binfile does not exist."
return 0
}
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
# Test that GDB correctly identifies that it does not control a terminal.
send "info terminal\n"
expect {
-re "No saved terminal information..*$prompt $"\
{ send "run 5\n"
expect {
-re "Starting program.*$binfile.*120.*Program exited normally..*$prompt $"\
{ send "info terminal\n"
expect {
-re "No saved terminal information..*$prompt $"\
{ pass "info terminal" }
-re ".*$prompt $" { fail "info terminal" }
timeout { fail "(timeout) info terminal" }
}
}
-re ".*$prompt $" { fail "info terminal" }
timeout { fail "(timeout) info terminal" }
}
}
-re ".*$prompt $" { fail "info terminal" }
timeout { fail "(timeout) info terminal" }
}
# In mid-execution
send "break main\n"
expect {
-re "Breakpoint.*at.* file .*, line.*$prompt $"\
{ send "run 5\n"
expect {
-re "Starting program.*Breakpoint \[0-9\]+,.*main.*if .argc != 2.*$prompt $"\
{ send "info terminal\n"
expect {
-re "Inferior's terminal status .currently saved by GDB.:.*$prompt $"\
{ pass "info terminal at breakpoint" }
-re ".*$prompt $" { fail "info terminal at breakpoint" }
timeout { fail "(timeout) info terminal at breakpoint" }
}
}
-re ".*$prompt $" { fail "info terminal at breakpoint" }
timeout { fail "(timeout) info terminal at breakpoint" }
}
}
-re ".*$prompt $" { fail "info terminal at breakpoint" }
timeout { fail "(timeout) info terminal at breakpoint" }
}

View File

@ -0,0 +1,16 @@
int nothing ()
{
int x = 3 ;
return x ;
}
main ()
{
int y ;
y = nothing () ;
printf ("hello\n") ;
}

View File

@ -0,0 +1,247 @@
/*
* Test file with lots of different types.
*/
/*
* First the basic C types.
*/
#ifndef __STDC__
#define signed /**/
#endif
char v_char;
signed char v_signed_char;
unsigned char v_unsigned_char;
short v_short;
signed short v_signed_short;
unsigned short v_unsigned_short;
int v_int;
signed int v_signed_int;
unsigned int v_unsigned_int;
long v_long;
signed long v_signed_long;
unsigned long v_unsigned_long;
float v_float;
double v_double;
/*
* Now some derived types, which are arrays, functions-returning,
* pointers, structures, unions, and enumerations.
*/
/**** arrays *******/
char v_char_array[2];
signed char v_signed_char_array[2];
unsigned char v_unsigned_char_array[2];
short v_short_array[2];
signed short v_signed_short_array[2];
unsigned short v_unsigned_short_array[2];
int v_int_array[2];
signed int v_signed_int_array[2];
unsigned int v_unsigned_int_array[2];
long v_long_array[2];
signed long v_signed_long_array[2];
unsigned long v_unsigned_long_array[2];
float v_float_array[2];
double v_double_array[2];
/**** pointers *******/
char *v_char_pointer;
signed char *v_signed_char_pointer;
unsigned char *v_unsigned_char_pointer;
short *v_short_pointer;
signed short *v_signed_short_pointer;
unsigned short *v_unsigned_short_pointer;
int *v_int_pointer;
signed int *v_signed_int_pointer;
unsigned int *v_unsigned_int_pointer;
long *v_long_pointer;
signed long *v_signed_long_pointer;
unsigned long *v_unsigned_long_pointer;
float *v_float_pointer;
double *v_double_pointer;
/**** structs *******/
struct t_struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct1;
struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct2;
/**** unions *******/
union t_union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union;
union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union2;
/*** Functions returning type ********/
char v_char_func () { return(0); }
signed char v_signed_char_func () { return (0); }
unsigned char v_unsigned_char_func () { return (0); }
short v_short_func () { return (0); }
signed short v_signed_short_func () { return (0); }
unsigned short v_unsigned_short_func () { return (0); }
int v_int_func () { return (0); }
signed int v_signed_int_func () { return (0); }
unsigned int v_unsigned_int_func () { return (0); }
long v_long_func () { return (0); }
signed long v_signed_long_func () { return (0); }
unsigned long v_unsigned_long_func () { return (0); }
float v_float_func () { return (0.0); }
double v_double_func () { return (0.0); }
/**** Some misc more complicated things *******/
struct link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} *s_link;
union tu_link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} u_link;
/**** Enumerations *******/
enum {red, green, blue} primary;
enum colors {yellow, purple, pink} nonprimary;
enum {chevy, ford} clunker;
enum cars {bmw, porsche} sportscar;
typedef enum {FALSE, TRUE} boolean;
typedef enum bvals {false, true} boolean2;
enum misordered {two = 2, one = 1, zero = 0, three = 3};
/***********/
main ()
{
/* Some linkers (e.g. on AIX) remove unreferenced variables,
so make sure to reference them. */
v_char = 0;
v_signed_char = 1;
v_unsigned_char = 2;
v_short = 3;
v_signed_short = 4;
v_unsigned_short = 5;
v_int = 6;
v_signed_int = 7;
v_unsigned_int = 8;
v_long = 9;
v_signed_long = 10;
v_unsigned_long = 11;
v_float = 100.0;
v_double = 200.0;
v_char_array[0] = v_char;
v_signed_char_array[0] = v_signed_char;
v_unsigned_char_array[0] = v_unsigned_char;
v_short_array[0] = v_short;
v_signed_short_array[0] = v_signed_short;
v_unsigned_short_array[0] = v_unsigned_short;
v_int_array[0] = v_int;
v_signed_int_array[0] = v_signed_int;
v_unsigned_int_array[0] = v_unsigned_int;
v_long_array[0] = v_long;
v_signed_long_array[0] = v_signed_long;
v_unsigned_long_array[0] = v_unsigned_long;
v_float_array[0] = v_float;
v_double_array[0] = v_double;
v_char_pointer = &v_char;
v_signed_char_pointer = &v_signed_char;
v_unsigned_char_pointer = &v_unsigned_char;
v_short_pointer = &v_short;
v_signed_short_pointer = &v_signed_short;
v_unsigned_short_pointer = &v_unsigned_short;
v_int_pointer = &v_int;
v_signed_int_pointer = &v_signed_int;
v_unsigned_int_pointer = &v_unsigned_int;
v_long_pointer = &v_long;
v_signed_long_pointer = &v_signed_long;
v_unsigned_long_pointer = &v_unsigned_long;
v_float_pointer = &v_float;
v_double_pointer = &v_double;
primary = blue;
nonprimary = pink;
sportscar = porsche;
clunker = ford;
u_link.next = s_link;
v_union2.v_short_member = v_union.v_short_member;
}

View File

@ -0,0 +1,120 @@
#include <stdio.h>
#include <stdio.h>
/*
* Since using watchpoints can be very slow, we have to take some pains to
* ensure that we don't run too long with them enabled or we run the risk
* of having the test timeout. To help avoid this, we insert some marker
* functions in the execution stream so we can set breakpoints at known
* locations, without worrying about invalidating line numbers by changing
* this file. We use null bodied functions are markers since gdb does
* not support breakpoints at labeled text points at this time.
*
* One place we need is a marker for when we start executing our tests
* instructions rather than any process startup code, so we insert one
* right after entering main(). Another is right before we finish, before
* we start executing any process termination code.
*
* Another problem we have to guard against, at least for the test
* suite, is that we need to ensure that the line that causes the
* watchpoint to be hit is still the current line when gdb notices
* the hit. Depending upon the specific code generated by the compiler,
* the instruction after the one that triggers the hit may be part of
* the same line or part of the next line. Thus we ensure that there
* are always some instructions to execute on the same line after the
* code that should trigger the hit.
*/
int count = -1;
int ival1 = -1;
int ival2 = -1;
int ival3 = -1;
int ival4 = -1;
char buf[10];
struct foo
{
int val;
};
struct foo struct1, struct2, *ptr1, *ptr2;
int doread = 0;
void marker1 ()
{
}
void marker2 ()
{
}
void marker4 ()
{
}
void marker5 ()
{
}
void
func2 ()
{
}
int
func1 ()
{
/* The point of this is that we will set a breakpoint at this call.
Then, if DECR_PC_AFTER_BREAK equals the size of a function call
instruction (true on a sun3 if this is gcc-compiled--FIXME we
should use asm() to make it work for any compiler, present or
future), then we will end up branching to the location just after
the breakpoint. And we better not confuse that with hitting the
breakpoint. */
func2 ();
return 73;
}
int main ()
{
struct1.val = 1;
struct2.val = 2;
ptr1 = &struct1;
ptr2 = &struct2;
marker1 ();
func1 ();
for (count = 0; count < 4; count++) {
ival1 = count;
ival3 = count; ival4 = count;
}
ival1 = count; /* Outside loop */
ival2 = count;
ival3 = count; ival4 = count;
marker2 ();
if (doread)
read (0, &buf[0], 5);
marker4 ();
/* We have a watchpoint on ptr1->val. It should be triggered if
ptr1's value changes. */
ptr1 = ptr2;
/* This should not trigger the watchpoint. If it does, then we
used the wrong value chain to re-insert the watchpoints or we
are not evaluating the watchpoint expression correctly. */
struct1.val = 5;
marker5 ();
if (doread)
read (0, &buf[0], 5);
marker4 ();
/* We have a watchpoint on ptr1->val. It should be triggered if
ptr1's value changes. */
ptr1 = ptr2;
/* This should not trigger the watchpoint. If it does, then we
used the wrong value chain to re-insert the watchpoints or we
are not evaluating the watchpoint expression correctly. */
struct1.val = 5;
marker5 ();
return 0;
}

View File

@ -0,0 +1,715 @@
# Copyright (C) 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This file was written by Fred Fish. (fnf@cygnus.com)
if $tracelevel then {
strace $tracelevel
}
set prms_id 0
set bug_id 0
set binfile "watchpoint"
set srcfile $binfile.c
if ![file exists $objdir/$subdir/$binfile] then {
perror "$objdir/$subdir/$binfile does not exist."
return 0
}
# Prepare for watchpoint tests by setting up two breakpoints and one
# watchpoint.
#
# We use breakpoints at marker functions to get past all the startup code,
# so we can get to the watchpoints in a reasonable amount of time from a
# known starting point.
#
# For simplicity, so we always know how to reference specific breakpoints or
# watchpoints by number, we expect a particular ordering and numbering of
# each in the combined breakpoint/watchpoint table, as follows:
#
# Number What Where
# 1 Breakpoint marker1()
# 2 Breakpoint marker2()
# 3 Watchpoint ival3
proc initialize {} {
global prompt
global hex
global decimal
global srcfile
send "break marker1\n"
expect {
-re "Breakpoint 1 at $hex: file .*$srcfile, line $decimal.*$prompt $" {}
-re ".*$prompt $" { fail "set breakpoint at marker1" ; return 0 }
timeout { fail "set breakpoint at marker1 (timeout)" ; return 0 }
}
send "break marker2\n"
expect {
-re "Breakpoint 2 at $hex: file .*$srcfile, line $decimal.*$prompt $" {}
-re ".*$prompt $" { fail "set breakpoint at marker2" ; return 0 }
timeout { fail "set breakpoint at marker2 (timeout)" ; return 0 }
}
send "info break\n"
expect {
-re "1\[ \]*breakpoint.*marker1.*\r\n2\[ \]*breakpoint.*marker2.*\r\n$prompt $" { }
-re ".*$prompt $" { fail "breakpoints not setup right" ; return 0 }
timeout { fail "info break (timeout)" ; return 0 }
}
send "watch ival3\n"
expect {
-re ".*\[Ww\]atchpoint 3: ival3\r\n$prompt $" { pass "set watchpoint" }
-re ".*$prompt $" { fail "set watchpoint on ival3" ; return 0 }
timeout { fail "set watchpoint on ival3 (timeout)" ; return 0 }
}
# "info watch" is the same as "info break"
send "info watch\n"
expect {
-re "1\[ \]*breakpoint.*marker1.*\r\n2\[ \]*breakpoint.*marker2.*\r\n3\[ \]*.*watchpoint.*ival3\r\n$prompt $" {
pass "watchpoint found in watchpoint/breakpoint table"
}
-re ".*$prompt $" { fail "watchpoint/breakpoint not set" ; return 0 }
timeout { fail "info break (timeout)" ; return 0 }
}
# After installing the watchpoint, we disable it until we are ready
# to use it. This allows the test program to run at full speed until
# we get to the first marker function.
send "disable 3\n"
expect {
-re "disable 3\r\n$prompt $" { pass "watchpoint disabled" }
-re ".*$prompt $" { fail "watchpoint not disabled" ; return 0 }
timeout { fail "watchpoint not disabled (timeout)" ; return 0 }
}
return 1
}
#
# Test simple watchpoint.
#
proc test_simple_watchpoint {} {
global prompt
global hex
global decimal
# Ensure that the watchpoint is disabled when we startup.
send "disable 3\n"
expect {
-re "disable 3\r\n$prompt $" { }
-re ".*$prompt $" { fail "watchpoint not disabled" ; return 0 }
timeout { fail "watchpoint not disabled (timeout)" ; return 0 }
}
# Run until we get to the first marker function.
send "run\n"
expect {
-re "The program .* has been started already.* \(y or n\) $" {
send "y\n"
exp_continue
}
-re "Starting program.*Breakpoint 1, marker1 .*$prompt $" {}
-re ".*$prompt $" { fail "run until marker1 function hit" ; return }
timeout { fail "run until marker1 function hit (timeout)" ; return }
}
# After reaching the marker function, enable the watchpoint.
send "enable 3\n"
expect {
-re "enable 3\r\n$prompt $" { pass "watchpoint enabled" }
-re ".*$prompt $" { fail "watchpoint not enabled" ; return }
timeout { fail "watchpoint not enabled (timeout)" ; return }
}
gdb_test "break func1" "Breakpoint.*at"
gdb_test "set \\\$func1_breakpoint_number = \\\$bpnum" ""
gdb_test "continue" "Continuing.*Breakpoint \[0-9\]*, func1" \
"continue to breakpoint at func1"
# Continue until the first change, from -1 to 0
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count; ival4 = count;.*$prompt $" {
pass "watchpoint hit, first time"
}
-re "Continuing.*Watchpoint.*ival3.*Old value = -1.*New value = 0.*for .count = 0; count < 4; count\[+)\]+ \{.*$prompt $" {
# setup_xfail "m68*-*-sunos*" 1836
fail "missed first watchpoint"
return
}
-re "Continuing.*Breakpoint.*func1.*$prompt $" {
setup_xfail "m68*-*-*" 2597
fail "thought it hit breakpoint at func1 twice"
gdb_test "delete \\\$func1_breakpoint_number" ""
gdb_test "continue" "\
Continuing.*Watchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count;" \
"watchpoint hit, first time"
}
-re ".*$prompt $" { fail "missed first watchpoint" ; return }
timeout { fail "run to first watchpoint (timeout)" ; return }
eof { fail "run to first watchpoint (eof)" ; return }
}
gdb_test "delete \\\$func1_breakpoint_number" ""
# Continue until the next change, from 0 to 1.
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*ival3.*Old value = 0.*New value = 1.*ival3 = count; ival4 = count;.*$prompt $" {
pass "watchpoint hit, second time"
}
-re ".*$prompt $" { fail "missed second watchpoint" ; return }
timeout { fail "run to second watchpoint (timeout)" ; return }
}
# Continue until the next change, from 1 to 2.
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*ival3.*Old value = 1.*New value = 2.*ival3 = count; ival4 = count;.*$prompt $" {
pass "watchpoint hit, third time"
}
-re ".*$prompt $" { fail "missed third watchpoint" ; return }
timeout { fail "run to third watchpoint (timeout)" ; return }
}
# Continue until the next change, from 2 to 3.
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*ival3.*Old value = 2.*New value = 3.*ival3 = count; ival4 = count;.*$prompt $" {
pass "watchpoint hit, fourth time"
}
-re ".*$prompt $" { fail "missed fourth watchpoint" ; return }
timeout { fail "run to fourth watchpoint (timeout)" ; return }
}
# Continue until the next change, from 3 to 4.
# Note that this one is outside the loop.
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*ival3.*Old value = 3.*New value = 4.*ival3 = count; ival4 = count;.*$prompt $" {
pass "watchpoint hit, fifth time"
}
-re ".*$prompt $" { fail "missed fifth watchpoint" ; return }
timeout { fail "run to fifth watchpoint (timeout)" ; return }
}
# Continue until we hit the finishing marker function.
# Make sure we hit no more watchpoints.
# This used to fail for a29k-amd-udi (PR 2421), but has been fixed.
send "cont\n"
expect {
-re "Continuing.*Breakpoint.*marker2 \(\).*$prompt $" { }
-re "Continuing.*Watchpoint.*ival3.*$prompt $" {
fail "hit a disabled watchpoint" ; return
}
-re ".*$prompt $" { fail "marker2 function missed" ; return }
timeout { fail "run to marker2 function (timeout)" ; return }
}
# Disable the watchpoint so we run at full speed until we exit.
send "disable 3\n"
expect {
-re "disable 3\r\n$prompt $" { pass "watchpoint disabled" }
-re ".*$prompt $" { fail "watchpoint not disabled" ; return }
timeout { fail "watchpoint not disabled (timeout)" ; return }
}
# Run until process exits.
send "cont\n"
expect {
-re "Continuing.*Program exited normally.*$prompt $" { }
-re ".*$prompt $" { fail "watchpoints not removed" ; return }
timeout { fail "looking for process exit (timeout)" }
}
}
# Test disabling watchpoints.
proc test_disabling_watchpoints {} {
global prompt
global binfile
global srcfile
global decimal
global hex
# Ensure that the watchpoint is disabled when we startup.
send "disable 3\n"
expect {
-re "disable 3\r\n$prompt $" { }
-re ".*$prompt $" { fail "watchpoint not disabled" ; return 0 }
timeout { fail "watchpoint not disabled (timeout)" ; return 0 }
}
# Run until we get to the first marker function.
send "run\n"
expect {
-re "The program .* has been started already.* \(y or n\) $" {
send "y\n"
exp_continue
}
-re "Starting program.*Breakpoint 1, marker1 .*$prompt $" {}
-re ".*$prompt $" { fail "run until marker1 function hit" ; return }
timeout { fail "run until marker1 function hit (timeout)" ; return }
}
# After reaching the marker function, enable the watchpoint.
send "enable 3\n"
expect {
-re "enable 3\r\n$prompt $" { pass "watchpoint enabled" }
-re ".*$prompt $" { fail "watchpoint not enabled" ; return }
timeout { fail "watchpoint not enabled (timeout)" ; return }
}
# Continue until the first change, from -1 to 0
# Don't check the old value, because on VxWorks the variable value
# will not have been reinitialized.
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*ival3.*Old value = .*New value = 0.*ival3 = count; ival4 = count;.*$prompt $" {
pass "watchpoint hit, first time"
}
-re "Continuing.*Watchpoint.*ival3.*Old value = .*New value = 0.*for .count = 0; count < 4; count\[+)]+ \{.*$prompt $" {
# setup_xfail "m68*-*-sunos*" 1836
fail "missed first watchpoint"
return
}
-re ".*$prompt $" { fail "missed first watchpoint" ; return }
timeout { fail "run to first watchpoint (timeout)" ; return }
}
# Continue until the next change, from 0 to 1.
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*ival3.*Old value = 0.*New value = 1.*ival3 = count; ival4 = count;.*$prompt $" {
pass "watchpoint hit, second time"
}
-re ".*$prompt $" { fail "missed second watchpoint" ; return }
timeout { fail "run to second watchpoint (timeout)" ; return }
}
# Disable the watchpoint but leave breakpoints
send "disable 3\n"
expect {
-re "disable 3\r\n$prompt $" { }
-re ".*$prompt $" { fail "watchpoint not disabled" ; return 0 }
timeout { fail "watchpoint not disabled (timeout)" ; return 0 }
}
# Check watchpoint list, looking for the entry that confirms the
# watchpoint is disabled.
send "info watchpoints\n"
expect {
-re "3\[ \]*.*watchpoint\[ \]*keep\[ \]*n\[ \]*ival3\r\n.*$prompt $" {
pass "watchpoint disabled in table"
}
-re ".*$prompt $" {
fail "disabled watchpoint not found in table"
}
timeout { fail "info watchpoints (timeout)" }
}
# Continue until we hit the finishing marker function.
# Make sure we hit no more watchpoints.
send "cont\n"
expect {
-re "Continuing.*Breakpoint.*marker2 \[)(\]+.*$prompt $" {
pass "disabled watchpoint skipped"
}
-re "Continuing.*Watchpoint.*ival3.*$prompt $" {
fail "hit a disabled watchpoint" ; return
}
-re ".*$prompt $" { fail "marker2 function missed" ; return }
timeout { fail "run to marker2 function (timeout)" ; return }
}
send "cont\n"
expect {
-re "Continuing.*Program exited normally.*$prompt $" { }
-re ".*$prompt $" { fail "watchpoints not removed" ; return }
timeout { fail "looking for process exit (timeout)" }
}
}
# Test stepping and other mundane operations with watchpoints enabled
proc test_stepping {} {
global prompt
if [runto marker1] then {
gdb_test "watch ival2" ".*\[Ww\]atchpoint \[0-9\]*: ival2"
# Well, let's not be too mundane. It should be a *bit* of a challenge
gdb_test "break func2 if 0" "Breakpoint.*at"
gdb_test "p \\\$func2_breakpoint_number = \\\$bpnum" "="
# The HPPA has a problem here.
if [ istarget "hppa*-*-*" ] then {
# Don't actually try doing the call, if we do we can't continue.
setup_xfail "*-*-*"
fail "calling function with watchpoint enabled"
} else {
# The problem is that GDB confuses stepping through the call
# dummy with hitting the breakpoint at the end of the call dummy.
# Will be fixed once all architectures define
# CALL_DUMMY_BREAKPOINT_OFFSET.
setup_xfail "*-*-*"
# This doesn't occur if the call dummy starts with a call,
# because we are out of the dummy by the first time the inferior
# stops.
clear_xfail "m68*-*-*"
clear_xfail "i*86*-*-*"
clear_xfail "vax-*-*"
# The following architectures define CALL_DUMMY_BREAKPOINT_OFFSET.
clear_xfail "alpha-*-*"
clear_xfail "mips*-*-*"
clear_xfail "sparc-*-*"
gdb_test "p func1 ()" "= 73" \
"calling function with watchpoint enabled"
}
#
# "finish" brings us back to main.
# On some targets (e.g. alpha) gdb will stop from the finish in midline
# of the marker1 call. This is due to register restoring code on
# the alpha and might be caused by stack adjustment instructions
# on other targets. In this case we will step once more.
#
send "finish\n"
expect {
-re "Run.*exit from.*marker1.*main.* at" { }
default { fail "finish from marker1" ; return }
}
expect {
-re "marker1 \[)(\]+;.*$prompt $" {
send "step\n"
exp_continue
}
-re "func1 \[)(\]+;.*$prompt $" {
pass "finish from marker1"
}
-re ".*$prompt $" {
fail "finish from marker1"
}
default { fail "finish from marker1" ; return }
}
gdb_test "next" "for \[(\]+count = 0"
# Now test that "until" works. It's a bit tricky to test
# "until", because compilers don't always arrange the code
# exactly the same way, and we might get slightly different
# sequences of statements. But the following should be true
# (if not it is a compiler or a debugger bug): The user who
# does "until" at every statement of a loop should end up
# stepping through the loop once, and the debugger should not
# stop for any of the remaining iterations.
gdb_test "until" "ival1 = count"
gdb_test "until" "ival3 = count"
send "until\n"
expect {
-re "(for \[(\]+count = 0|\}).*$prompt $" {
gdb_test "until" "ival1 = count; /. Outside loop ./"
}
-re "ival1 = count; /. Outside loop ./.*$prompt $" {
pass "until out of loop"
}
-re ".*$prompt $" {
fail "until out of loop"
}
default { fail "until out of loop" ; return }
}
gdb_test "step" "ival2 = count"
}
}
# Test stepping and other mundane operations with watchpoints enabled
proc test_watchpoint_triggered_in_syscall {} {
global prompt
global timeout
set saved_timeout $timeout
# Run until we get to the first marker function.
set x 0
set y 0
set testname "Watch buffer passed to read syscall"
if [runto marker2] then {
gdb_test "watch buf\\\[0\\\]" ".*\[Ww\]atchpoint \[0-9\]*: buf"
gdb_test "watch buf\\\[1\\\]" ".*\[Ww\]atchpoint \[0-9\]*: buf"
gdb_test "watch buf\\\[2\\\]" ".*\[Ww\]atchpoint \[0-9\]*: buf"
gdb_test "watch buf\\\[3\\\]" ".*\[Ww\]atchpoint \[0-9\]*: buf"
gdb_test "watch buf\\\[4\\\]" ".*\[Ww\]atchpoint \[0-9\]*: buf"
gdb_test "break marker4" ".*Breakpoint.*"
send "set doread = 1\n"
expect {
-re ".*$prompt $" { }
timeout { fail "set doread" ; return }
}
# Sometimes our string never gets to GDB?!? dejagnu bug? Whatever
# the cause we'll set a reasonably short timeout and resend our
# string again if we timeout.
set timeout 10
send "continue\n"
send "123\n"
expect {
-re ".*Watchpoint.*buf\\\[0\\\].*Old value = 0.*New value = 49\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
-re ".*Watchpoint.*buf\\\[1\\\].*Old value = 0.*New value = 50\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
-re ".*Watchpoint.*buf\\\[2\\\].*Old value = 0.*New value = 51\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
-re ".*Watchpoint.*buf\\\[3\\\].*Old value = 0.*New value = 10\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
-re ".*$prompt $" { }
timeout {
set timeout $saved_timeout
send "123\n"
exp_continue
}
}
# Restore the timeout value.
set timeout $saved_timeout
# Examine the values in buf to see how many watchpoints we
# should have printed.
send "print buf\[0\]\n"
expect {
-re ".*= 49.*$prompt $" { set y [expr $y+1] }
-re ".*= 0" { }
default { fail "bogus value in buf[0]" }
timeout { fail "retrieving contents of buf variable (timeout) }
}
send "print buf\[1\]\n"
expect {
-re ".*= 50.*$prompt $" { set y [expr $y+1] }
-re ".*= 0" { }
default { fail "bogus value in buf[1]" }
timeout { fail "retrieving contents of buf variable (timeout) }
}
send "print buf\[2\]\n"
expect {
-re ".*= 51.*$prompt $" { set y [expr $y+1] }
-re ".*= 0" { }
default { fail "bogus value in buf[2]" }
timeout { fail "retrieving contents of buf variable (timeout) }
}
send "print buf\[3\]\n"
expect {
-re ".*= 10.*$prompt $" { set y [expr $y+1] }
-re ".*= 0" { }
default { fail "bogus value in buf[3]" }
timeout { fail "retrieving contents of buf variable (timeout) }
}
# Did we find what we were looking for? If not, flunk it.
if [expr $x==$y] then { pass $testname } else { fail "$testname: Only triggered $x watchpoints, expected $y."}
# Continue until we hit the finishing marker function.
# Make sure we hit no more watchpoints.
send "cont\n"
expect {
-re "Continuing.*Breakpoint.*marker4 \[)(\]+.*$prompt $" {
pass "disabled watchpoint skipped"
}
-re "Continuing.*Watchpoint.*$prompt $" {
fail "hit suprious watchpoint" ; return
}
-re ".*$prompt $" { fail "marker4 function missed" ; return }
timeout { fail "run to marker4 function (timeout)" ; return }
}
# Disable everything so we can finish the program at full speed
send "disable\n"
expect {
-re ".*$prompt $" { }
timeout { fail "disabling breakpoints (timeout)" }
}
send "cont\n"
expect {
-re "Continuing.*Program exited normally.*$prompt $" { }
-re ".*$prompt $" { fail "watchpoints not removed" ; return }
timeout { fail "looking for process exit (timeout)" }
}
}
}
# Do a simple test of of watching through a pointer when the pointer
# itself changes. Should add some more complicated stuff here.
proc test_complex_watchpoint {} {
global prompt
set testname "Test complex watchpoint"
if [runto marker4] then {
gdb_test "watch ptr1->val" ".*\[Ww\]atchpoint \[0-9\]*: ptr1->val"
gdb_test "break marker5" ".*Breakpoint.*"
send "cont\n"
expect {
-re "Continuing.*Watchpoint.*ptr1->val.*Old value = 1.*New value = 2.*$prompt $" { pass $testname }
default { fail $testname ; return }
}
# Continue until we hit the marker5 function.
# Make sure we hit no more watchpoints.
send "cont\n"
expect {
-re "Continuing.*Breakpoint.*marker5 \[)(\]+.*$prompt $" {
pass "did not trigger wrong watchpoint"
}
-re "Continuing.*Watchpoint.*$prompt $" {
fail "hit wrong watchpoint" ; return
}
-re ".*$prompt $" { fail "marker5 function missed" ; return }
timeout { fail "run to marker5 function (timeout)" ; return }
}
# Disable everything so we can finish the program at full speed
send "disable\n"
expect {
-re ".*$prompt $" { }
timeout { fail "disabling breakpoints (timeout)" }
}
send "cont\n"
expect {
-re "Continuing.*Program exited normally.*$prompt $" { }
-re ".*$prompt $" { fail "watchpoints not removed" ; return }
timeout { fail "looking for process exit (timeout)" }
}
}
}
# Start with a fresh gdb.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
if [initialize] then {
# Preserve the old timeout, and set a new one that should be
# sufficient to step from marker1 to marker2 with watchpoints
# set anywhere.
set timeoutsave $timeout
set timeout 60
test_simple_watchpoint
# The IDT/sim monitor only has 8 (!) open files, of which it uses
# 4 (!). So we have to make sure one program exits before
# starting another one.
if [istarget "mips-idt-*"] then {
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
initialize
}
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
gdb_load $objdir/$subdir/$binfile
}
test_disabling_watchpoints
# See above.
if [istarget "mips-idt-*"] then {
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
initialize
}
test_stepping
# See above.
if [istarget "mips-idt-*"] then {
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
initialize
}
# This test hasn't been tested on anything but the PA.
if [istarget "hppa*-*-*"] then {
test_watchpoint_triggered_in_syscall
}
# See above.
if [istarget "mips-idt-*"] then {
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile
initialize
}
# This test hasn't been tested on anything but the PA.
if [istarget "hppa*-*-*"] then {
test_complex_watchpoint
}
# Restore the preserved old timeout value.
set timeout $timeoutsave
}
if [istarget "a29k-*-udi"] then {
# FIXME: If PR 2415 is fixed, this is not needed.
gdb_target_udi
}

View File

@ -0,0 +1,15 @@
/* This needs to be kept in sync with whatis.c. If this proves to end up
being hairy, we could use a common header file. */
#if defined (__STDC__) || defined (_AIX)
set signed_keyword_not_used 0
#else
set signed_keyword_not_used 1
#endif
#if defined (__GNUC__)
set gcc_compiled __GNUC__
#else
set gcc_compiled 0
#endif
return 0

View File

@ -0,0 +1,265 @@
/*
* Test file with lots of different types, for testing the
* "whatis" command.
*/
/*
* First the basic C types.
*/
#if !(defined (__STDC__) || defined (_AIX))
#define signed /**/
#endif
char v_char;
signed char v_signed_char;
unsigned char v_unsigned_char;
short v_short;
signed short v_signed_short;
unsigned short v_unsigned_short;
int v_int;
signed int v_signed_int;
unsigned int v_unsigned_int;
long v_long;
signed long v_signed_long;
unsigned long v_unsigned_long;
float v_float;
double v_double;
/*
* Now some derived types, which are arrays, functions-returning,
* pointers, structures, unions, and enumerations.
*/
/**** arrays *******/
char v_char_array[2];
signed char v_signed_char_array[2];
unsigned char v_unsigned_char_array[2];
short v_short_array[2];
signed short v_signed_short_array[2];
unsigned short v_unsigned_short_array[2];
int v_int_array[2];
signed int v_signed_int_array[2];
unsigned int v_unsigned_int_array[2];
long v_long_array[2];
signed long v_signed_long_array[2];
unsigned long v_unsigned_long_array[2];
float v_float_array[2];
double v_double_array[2];
/**** pointers *******/
/* Make sure they still print as pointer to foo even there is a typedef
for that type. Test this not just for char *, which might be
a special case kludge in GDB (Unix system include files like to define
caddr_t), but for a variety of types. */
typedef char *char_addr;
typedef unsigned short *ushort_addr;
typedef signed long *slong_addr;
char *v_char_pointer;
signed char *v_signed_char_pointer;
unsigned char *v_unsigned_char_pointer;
short *v_short_pointer;
signed short *v_signed_short_pointer;
unsigned short *v_unsigned_short_pointer;
int *v_int_pointer;
signed int *v_signed_int_pointer;
unsigned int *v_unsigned_int_pointer;
long *v_long_pointer;
signed long *v_signed_long_pointer;
unsigned long *v_unsigned_long_pointer;
float *v_float_pointer;
double *v_double_pointer;
/**** structs *******/
struct t_struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct1;
struct {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_struct2;
/**** unions *******/
union t_union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union;
union {
char v_char_member;
short v_short_member;
int v_int_member;
long v_long_member;
float v_float_member;
double v_double_member;
} v_union2;
/*** Functions returning type ********/
char v_char_func () { return(0); }
signed char v_signed_char_func () { return (0); }
unsigned char v_unsigned_char_func () { return (0); }
short v_short_func () { return (0); }
signed short v_signed_short_func () { return (0); }
unsigned short v_unsigned_short_func () { return (0); }
int v_int_func () { return (0); }
signed int v_signed_int_func () { return (0); }
unsigned int v_unsigned_int_func () { return (0); }
long v_long_func () { return (0); }
signed long v_signed_long_func () { return (0); }
unsigned long v_unsigned_long_func () { return (0); }
float v_float_func () { return (0.0); }
double v_double_func () { return (0.0); }
/**** Some misc more complicated things *******/
struct link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} *s_link;
union tu_link {
struct link *next;
#ifdef __STDC__
struct link *(*linkfunc) (struct link *this, int flags);
#else
struct link *(*linkfunc) ();
#endif
struct t_struct stuff[1][2][3];
} u_link;
struct outer_struct {
int outer_int;
struct inner_struct {
int inner_int;
long inner_long;
}inner_struct_instance;
union inner_union {
int inner_union_int;
long inner_union_long;
}inner_union_instance;
long outer_long;
} nested_su;
/**** Enumerations *******/
enum colors {red, green, blue} color;
enum cars {chevy, ford, porsche} clunker;
/***********/
main ()
{
/* Some linkers (e.g. on AIX) remove unreferenced variables,
so make sure to reference them. */
v_char = 0;
v_signed_char = 1;
v_unsigned_char = 2;
v_short = 3;
v_signed_short = 4;
v_unsigned_short = 5;
v_int = 6;
v_signed_int = 7;
v_unsigned_int = 8;
v_long = 9;
v_signed_long = 10;
v_unsigned_long = 11;
v_float = 100.0;
v_double = 200.0;
v_char_array[0] = v_char;
v_signed_char_array[0] = v_signed_char;
v_unsigned_char_array[0] = v_unsigned_char;
v_short_array[0] = v_short;
v_signed_short_array[0] = v_signed_short;
v_unsigned_short_array[0] = v_unsigned_short;
v_int_array[0] = v_int;
v_signed_int_array[0] = v_signed_int;
v_unsigned_int_array[0] = v_unsigned_int;
v_long_array[0] = v_long;
v_signed_long_array[0] = v_signed_long;
v_unsigned_long_array[0] = v_unsigned_long;
v_float_array[0] = v_float;
v_double_array[0] = v_double;
v_char_pointer = &v_char;
v_signed_char_pointer = &v_signed_char;
v_unsigned_char_pointer = &v_unsigned_char;
v_short_pointer = &v_short;
v_signed_short_pointer = &v_signed_short;
v_unsigned_short_pointer = &v_unsigned_short;
v_int_pointer = &v_int;
v_signed_int_pointer = &v_signed_int;
v_unsigned_int_pointer = &v_unsigned_int;
v_long_pointer = &v_long;
v_signed_long_pointer = &v_signed_long;
v_unsigned_long_pointer = &v_unsigned_long;
v_float_pointer = &v_float;
v_double_pointer = &v_double;
color = red;
clunker = porsche;
u_link.next = s_link;
v_union2.v_short_member = v_union.v_short_member;
v_struct1.v_char_member = 0;
v_struct2.v_char_member = 0;
nested_su.outer_int = 0;
return 0;
}